SeibroSecnFrsecSetlParser.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. namespace Infrastructure.StockData;
  2. /// <summary>
  3. /// SEIBro getSecnFrsecSetlInfo(종목별 외화증권 결제현황) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력 (외화증권.md §4).
  4. /// 실샘플 래퍼 = &lt;result&gt; 소문자. 응답 필드는 NATION_CD·SECN_TPCD·INTL_BIZ_CACD·SETL_ASK_QTY·SETL_AMT 5종 —
  5. /// PROC_DT·ISIN 은 요청 파라미터라 배치가 스탬핑한다. INTL_BIZ_CACD 없는 행은 스킵(자연키 (ProcDt,Isin,IntlBizCacd) 일부).
  6. /// </summary>
  7. public static class SeibroSecnFrsecSetlParser
  8. {
  9. public sealed record Row(
  10. string IntlBizCacd,
  11. string? NationCd,
  12. string? SecnTpcd,
  13. decimal? SetlAskQty,
  14. decimal? SetlAmt
  15. );
  16. public static IReadOnlyList<Row> Parse(SeibroXml.Envelope envelope)
  17. {
  18. var rows = new List<Row>();
  19. foreach (var fields in envelope.Rows)
  20. {
  21. var intlBizCacd = SeibroXml.GetOrNull(fields, "INTL_BIZ_CACD")?.Trim();
  22. if (string.IsNullOrEmpty(intlBizCacd))
  23. {
  24. continue;
  25. }
  26. rows.Add(new Row(
  27. intlBizCacd,
  28. SeibroXml.GetOrNull(fields, "NATION_CD")?.Trim(),
  29. SeibroXml.GetOrNull(fields, "SECN_TPCD")?.Trim(),
  30. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "SETL_ASK_QTY")),
  31. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "SETL_AMT"))
  32. ));
  33. }
  34. return rows;
  35. }
  36. }