| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- namespace Infrastructure.StockData;
- /// <summary>
- /// SEIBro getStddtInfo(기준일 정보) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
- /// 자연키(ISSUCO_CUSTNO, RGT_STD_DT, RGT_RACD, RGT_RSN_DTAIL_SORT_CD) 중 하나라도 없거나 회사번호 비숫자·기준일 비형식이면 건너뛴다.
- /// Wave 3 기업행위(총회·상호변경 등) 이벤트 발견 소스로 RGT_RACD 를 그대로 저장한다.
- /// </summary>
- public static class SeibroStddtParser
- {
- public sealed record Row(
- int IssucoCustno,
- string RepSecnNm,
- DateOnly RgtStdDt,
- string RgtRacd,
- string? RgtRacdNm,
- string RgtRsnDetailSortCd
- );
- 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 repSecnNm = SeibroXml.GetOrNull(fields, "REP_SECN_NM")?.Trim();
- var rgtStdDt = SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "RGT_STD_DT"));
- var rgtRacd = SeibroXml.GetOrNull(fields, "RGT_RACD")?.Trim();
- var sortCd = SeibroXml.GetOrNull(fields, "RGT_RSN_DTAIL_SORT_CD")?.Trim();
- if (custno is null || string.IsNullOrEmpty(repSecnNm) || rgtStdDt is null || string.IsNullOrEmpty(rgtRacd) || string.IsNullOrEmpty(sortCd))
- {
- continue;
- }
- rows.Add(new Row(
- custno.Value,
- repSecnNm,
- rgtStdDt.Value,
- rgtRacd,
- SeibroXml.GetOrNull(fields, "RGT_RACD_NM")?.Trim(),
- sortCd
- ));
- }
- return rows;
- }
- }
|