SeibroSecnFrsecCusParser.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. namespace Infrastructure.StockData;
  2. /// <summary>
  3. /// SEIBro getSecnFrsecCusInfo(종목별 외화증권 보관현황) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력 (외화증권.md §3).
  4. /// 실샘플 래퍼 = &lt;result&gt; 소문자. 응답 필드는 NATION_CD·SECN_TPCD·FRSEC_TOT_HOLD_AMT·FRSEC_TOT_HOLD_QTY 4종 —
  5. /// STD_DT·ISIN 은 요청 파라미터라 배치가 스탬핑한다. 실샘플은 종목당 국가별 다수 행(예 DE·US) — 자연키 (StdDt,Isin,NationCd,SecnTpcd)로 전 행 반영(리뷰 결함 #3).
  6. /// </summary>
  7. public static class SeibroSecnFrsecCusParser
  8. {
  9. public sealed record Row(
  10. string? NationCd,
  11. string? SecnTpcd,
  12. decimal? FrsecTotHoldAmt,
  13. decimal? FrsecTotHoldQty
  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. rows.Add(new Row(
  21. SeibroXml.GetOrNull(fields, "NATION_CD")?.Trim(),
  22. SeibroXml.GetOrNull(fields, "SECN_TPCD")?.Trim(),
  23. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "FRSEC_TOT_HOLD_AMT")),
  24. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "FRSEC_TOT_HOLD_QTY"))
  25. ));
  26. }
  27. return rows;
  28. }
  29. }