| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- namespace Infrastructure.StockData;
- /// <summary>
- /// SEIBro getCostPaySchedul(대금지급일정) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
- /// ⚠️ 응답엔 지급구분(PAY_COST_TPCD)·지급일(TH1_PAY_TERM_BEGIN_DT)이 없다 — 요청 파라미터라 수집 배치가 스탬핑한다.
- /// 따라서 Row 는 회사/종목/사유 필드만 담는다. ISSUCO_CUSTNO·ISIN 중 하나라도 없으면 건너뛴다.
- /// </summary>
- public static class SeibroCostPaySchedulParser
- {
- public sealed record Row(
- int IssucoCustno,
- string Isin,
- string? KorSecnNm,
- string? SecnKacd,
- DateOnly? RgtStdDt,
- 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 isin = SeibroXml.GetOrNull(fields, "ISIN")?.Trim();
- if (custno is null || string.IsNullOrEmpty(isin))
- {
- continue;
- }
- rows.Add(new Row(
- custno.Value,
- isin,
- SeibroXml.GetOrNull(fields, "KOR_SECN_NM")?.Trim(),
- SeibroXml.GetOrNull(fields, "SECN_KACD")?.Trim(),
- SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "RGT_STD_DT")),
- SeibroXml.GetOrNull(fields, "RGT_RACD_NM")?.Trim(),
- SeibroXml.GetOrNull(fields, "RGT_RSN_DTAIL_SORT_CD")?.Trim()
- ));
- }
- return rows;
- }
- }
|