SeibroNationFrsecSetlParser.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. namespace Infrastructure.StockData;
  2. /// <summary>
  3. /// SEIBro getNationFrsecSetlInfo(국가별 외화증권 결제현황) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력 (외화증권.md §2).
  4. /// 실샘플 래퍼 = &lt;result&gt; 소문자. 응답 필드는 INTL_BIZ_CACD·SECN_TPCD·SETL_COUNT·FRSEC_SETL_AMT 4종 —
  5. /// SETL_DT·NATION_CD 는 요청 파라미터라 배치가 스탬핑한다. INTL_BIZ_CACD 또는 SECN_TPCD 없는 행은 스킵(둘 다 자연키 일부).
  6. /// </summary>
  7. public static class SeibroNationFrsecSetlParser
  8. {
  9. public sealed record Row(
  10. string IntlBizCacd,
  11. string SecnTpcd,
  12. long? SetlCount,
  13. decimal? FrsecSetlAmt
  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 intlBizCacd = SeibroXml.GetOrNull(fields, "INTL_BIZ_CACD")?.Trim();
  21. var secnTpcd = SeibroXml.GetOrNull(fields, "SECN_TPCD")?.Trim();
  22. if (string.IsNullOrEmpty(intlBizCacd) || string.IsNullOrEmpty(secnTpcd))
  23. {
  24. continue;
  25. }
  26. rows.Add(new Row(
  27. intlBizCacd,
  28. secnTpcd,
  29. SeibroFieldParse.Long(SeibroXml.GetOrNull(fields, "SETL_COUNT")),
  30. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "FRSEC_SETL_AMT"))
  31. ));
  32. }
  33. return rows;
  34. }
  35. }