SeibroBondIssuParser.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. namespace Infrastructure.StockData;
  2. /// <summary>
  3. /// SEIBro getBondIssuInfo(채권 발행내역) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
  4. /// 자연키 ISIN 없으면 건너뛴다. ISSU_DT(YYYYMMDD)→DateOnly (없으면 발행일 스윕값을 배치가 스탬핑 못 하므로 스킵).
  5. /// </summary>
  6. public static class SeibroBondIssuParser
  7. {
  8. public sealed record Row(
  9. DateOnly IssuDt,
  10. int? IssucoCustno,
  11. string? IssucoCustNm,
  12. string Isin,
  13. string? KorSecnNm
  14. );
  15. public static IReadOnlyList<Row> Parse(SeibroXml.Envelope envelope)
  16. {
  17. var rows = new List<Row>();
  18. foreach (var fields in envelope.Rows)
  19. {
  20. var isin = SeibroXml.GetOrNull(fields, "ISIN")?.Trim();
  21. var issuDt = SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "ISSU_DT"));
  22. if (string.IsNullOrEmpty(isin) || issuDt is null)
  23. {
  24. continue;
  25. }
  26. rows.Add(new Row(
  27. issuDt.Value,
  28. SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO")),
  29. SeibroXml.GetOrNull(fields, "ISSUCO_CUST_NM")?.Trim(),
  30. isin,
  31. SeibroXml.GetOrNull(fields, "KOR_SECN_NM")?.Trim()
  32. ));
  33. }
  34. return rows;
  35. }
  36. }