SeibroCPParser.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using Domain.Entities.Stocks;
  2. namespace Infrastructure.StockData;
  3. /// <summary>
  4. /// SEIBro getCPInfo(CP 종목 정보) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
  5. /// ⚠️ 응답에 ISIN 필드가 없다(요청 파라미터로만 받음, 실샘플 확인) — Isin 은 배치가 요청값을 스탬핑하므로 여기선 필드 묶음만 반환.
  6. /// 신용등급 4사 코드는 원문 문자열, 날짜→DateOnly, 콤마 숫자→decimal/int. 종목당 1행이나 방어적으로 전 행 반환.
  7. /// </summary>
  8. public static class SeibroCPParser
  9. {
  10. public static IReadOnlyList<CpMasterFields> Parse(SeibroXml.Envelope envelope)
  11. {
  12. var rows = new List<CpMasterFields>();
  13. foreach (var fields in envelope.Rows)
  14. {
  15. rows.Add(new CpMasterFields(
  16. SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO")),
  17. SeibroXml.GetOrNull(fields, "KOR_SECN_NM")?.Trim(),
  18. SeibroXml.GetOrNull(fields, "ISSU_CUR_CD")?.Trim(),
  19. SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "ISSU_AMT")),
  20. SeibroXml.GetOrNull(fields, "SECN_KACD")?.Trim(),
  21. SeibroXml.GetOrNull(fields, "BILL_CACD")?.Trim(),
  22. SeibroXml.GetOrNull(fields, "ISSU_WHCD")?.Trim(),
  23. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "SALE_DT")),
  24. SeibroXml.GetOrNull(fields, "INT_PAY_MANN_TPCD")?.Trim(),
  25. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "ISSU_DT")),
  26. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "XPIR_DT")),
  27. SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "DISCN_ORG_CUSTNO")),
  28. SeibroXml.GetOrNull(fields, "DISCN_ORD_NM")?.Trim(),
  29. SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "PAY_BANK_BRONO")),
  30. SeibroXml.GetOrNull(fields, "BANK_NM")?.Trim(),
  31. SeibroXml.GetOrNull(fields, "WHOLD_TPCD")?.Trim(),
  32. SeibroXml.GetOrNull(fields, "KIS_VALAT_GRD_CD")?.Trim(),
  33. SeibroXml.GetOrNull(fields, "NICE_VALAT_GRD_CD")?.Trim(),
  34. SeibroXml.GetOrNull(fields, "SCI_VALAT_GRD_CD")?.Trim(),
  35. SeibroXml.GetOrNull(fields, "KR_VALAT_GRD_CD")?.Trim()
  36. ));
  37. }
  38. return rows;
  39. }
  40. }