SeibroDerivCombiIsinParser.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using Domain.Entities.Stocks;
  2. namespace Infrastructure.StockData;
  3. /// <summary>
  4. /// SEIBro getDerivCombiIsinInfo(파생결합증권 종목 정보) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
  5. /// 실샘플 래퍼 = &lt;RESULT&gt; **대문자** (readme §1 확정 — 파생결합 5종 중 하나).
  6. /// ⚠️ 응답에 ISIN 필드가 없다(요청 파라미터로만 받음, 실샘플 확인) — Isin 은 배치가 요청값을 스탬핑하므로 여기선 필드 묶음만 반환.
  7. /// 종목당 1행이라 첫 행만 의미가 있으나 방어적으로 전 행 반환. Y/N→bool, 날짜→DateOnly, 소수→decimal, BASSET_CNT→int.
  8. /// </summary>
  9. public static class SeibroDerivCombiIsinParser
  10. {
  11. public static IReadOnlyList<DerivMasterFields> Parse(SeibroXml.Envelope envelope)
  12. {
  13. var rows = new List<DerivMasterFields>();
  14. foreach (var fields in envelope.Rows)
  15. {
  16. rows.Add(new DerivMasterFields(
  17. SeibroXml.GetOrNull(fields, "KOR_SECN_NM")?.Trim(),
  18. SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO")),
  19. SeibroXml.GetOrNull(fields, "SECN_KANM")?.Trim(),
  20. SeibroXml.GetOrNull(fields, "ISSU_CUR_CD")?.Trim(),
  21. SeibroXml.GetOrNull(fields, "RECU_WHCD")?.Trim(),
  22. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "FIRST_ISSU_QTY")),
  23. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "ISSU_REMQ")),
  24. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "PAYIN_AMT_RATIO")),
  25. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "PAYIN_AMT")),
  26. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "ISSU_DT")),
  27. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "CONT_DT")),
  28. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "XPIR_DT")),
  29. SeibroFieldParse.Yn(SeibroXml.GetOrNull(fields, "MIDRED_POSS_YN")),
  30. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "RED_DT")),
  31. SeibroXml.GetOrNull(fields, "DERISEC_EXER_TPCD")?.Trim(),
  32. SeibroXml.GetOrNull(fields, "PRCP_PRSV_TPCD")?.Trim(),
  33. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "PRCP_PRSV_RATE")),
  34. SeibroXml.GetOrNull(fields, "COLAT_SETUP_TPCD")?.Trim(),
  35. SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "BASSET_CNT")),
  36. SeibroFieldParse.Yn(SeibroXml.GetOrNull(fields, "MM_PAY_YN"))
  37. ));
  38. }
  39. return rows;
  40. }
  41. }