SeibroRedIsinParser.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. namespace Infrastructure.StockData;
  2. /// <summary>
  3. /// SEIBro getRedIsinInfo(파생결합증권 상환종목) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
  4. /// 실샘플 래퍼 = &lt;RESULT&gt; **대문자** (readme §1 확정 — 파생결합 5종 중 하나).
  5. /// 응답 필드는 Isin·DerisecExerTpcd·RedQty 3종 — RedDt·SecnKacd 는 배치가 요청(RED_DT/SECN_KACD) 파라미터를 스탬핑.
  6. /// 자연키 ISIN·DERISEC_EXER_TPCD 없으면 스킵(같은 상환일에 만기/조기 두 건 가능하여 행사구분이 자연키 일부).
  7. /// </summary>
  8. public static class SeibroRedIsinParser
  9. {
  10. public sealed record Row(
  11. string Isin,
  12. string DerisecExerTpcd,
  13. decimal? RedQty
  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 exerTpcd = SeibroXml.GetOrNull(fields, "DERISEC_EXER_TPCD")?.Trim();
  22. if (string.IsNullOrEmpty(isin) || string.IsNullOrEmpty(exerTpcd))
  23. {
  24. continue;
  25. }
  26. rows.Add(new Row(
  27. isin,
  28. exerTpcd,
  29. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "RED_QTY"))
  30. ));
  31. }
  32. return rows;
  33. }
  34. }