| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- namespace Infrastructure.StockData;
- /// <summary>
- /// SEIBro getGmeetInfo(총회일정) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
- /// 자연키(ISSUCO_CUSTNO, RGT_STD_DT, GMET_KACD) 중 하나라도 없거나 회사번호 비숫자·기준일 비형식이면 건너뛴다.
- /// 날짜(YYYYMMDD)→DateOnly, Y/N→bool. GMET_TTM 은 HHmm 문자열 그대로.
- /// </summary>
- public static class SeibroGmeetParser
- {
- public sealed record Row(
- int IssucoCustno,
- string? IssuinNo,
- string GmetKacd,
- string? RgtRsnDetailSortCd,
- DateOnly? RostCloseBeginDt,
- DateOnly? RostCloseExpryDt,
- bool? GmetOmeetYn,
- string? GmetPlaceTpcd,
- DateOnly? CouncilDterminPubnDt,
- string? GmetPlace,
- bool? StkBuyreqRlYn,
- DateOnly RgtStdDt,
- DateOnly? GmetDt,
- string? GmetTtm,
- DateOnly? NotcDlineDt,
- bool? DferYn,
- bool? EvoteYn,
- bool? IsElectronicSecurity
- );
- public static IReadOnlyList<Row> Parse(SeibroXml.Envelope envelope)
- {
- var rows = new List<Row>();
- foreach (var fields in envelope.Rows)
- {
- var custno = SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO"));
- var gmetKacd = SeibroXml.GetOrNull(fields, "GMET_KACD")?.Trim();
- var rgtStdDt = SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "RGT_STD_DT"));
- if (custno is null || string.IsNullOrEmpty(gmetKacd) || rgtStdDt is null)
- {
- continue;
- }
- rows.Add(new Row(
- custno.Value,
- SeibroXml.GetOrNull(fields, "ISSUIN_NO")?.Trim(),
- gmetKacd,
- SeibroXml.GetOrNull(fields, "RGT_RSN_DTAIL_SORT_CD")?.Trim(),
- SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "ROST_CLOSE_BEGIN_DT")),
- SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "ROST_CLOSE_EXPRY_DT")),
- SeibroFieldParse.Yn(SeibroXml.GetOrNull(fields, "GMET_OMEET_YN")),
- SeibroXml.GetOrNull(fields, "GMET_PLACE_TPCD")?.Trim(),
- SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "COUNCL_DTERMIN_PUBN_DT")),
- SeibroXml.GetOrNull(fields, "GMET_PLACE")?.Trim(),
- SeibroFieldParse.Yn(SeibroXml.GetOrNull(fields, "STK_BUYREQ_RL_YN")),
- rgtStdDt.Value,
- SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "GMET_DT")),
- SeibroXml.GetOrNull(fields, "GMET_TTM")?.Trim(),
- SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "NOTC_DLINE_DT")),
- SeibroFieldParse.Yn(SeibroXml.GetOrNull(fields, "DFER_YN")),
- SeibroFieldParse.Yn(SeibroXml.GetOrNull(fields, "EVOTE_YN")),
- SeibroFieldParse.Yn(SeibroXml.GetOrNull(fields, "ELTSC_YN"))
- ));
- }
- return rows;
- }
- }
|