SeibroFmnmAltParser.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. namespace Infrastructure.StockData;
  2. /// <summary>
  3. /// SEIBro getFmnmAltInfo(상호변경) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
  4. /// 자연키(ISSUCO_CUSTNO, RGT_STD_DT) 중 하나라도 없거나 비형식이면 건너뛴다.
  5. /// 상호(전/후·국/영)·혼용유통기간·단일유통일 매핑.
  6. /// </summary>
  7. public static class SeibroFmnmAltParser
  8. {
  9. public sealed record Row(
  10. int IssucoCustno,
  11. DateOnly RgtStdDt,
  12. string? FmnmBfaltKorNm,
  13. string? FmnmBfaltEngNm,
  14. string? FmnmAltKorNm,
  15. string? FmnmAltEngNm,
  16. DateOnly? MixusCirclBeginDt,
  17. DateOnly? MixusCirclExpryDt,
  18. DateOnly? UniCirclDt
  19. );
  20. public static IReadOnlyList<Row> Parse(SeibroXml.Envelope envelope)
  21. {
  22. var rows = new List<Row>();
  23. foreach (var fields in envelope.Rows)
  24. {
  25. var custno = SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO"));
  26. var rgtStdDt = SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "RGT_STD_DT"));
  27. if (custno is null || rgtStdDt is null)
  28. {
  29. continue;
  30. }
  31. rows.Add(new Row(
  32. custno.Value,
  33. rgtStdDt.Value,
  34. SeibroXml.GetOrNull(fields, "FMNM_BFALT_KOR_NM")?.Trim(),
  35. SeibroXml.GetOrNull(fields, "FMNM_BFALT_ENG_NM")?.Trim(),
  36. SeibroXml.GetOrNull(fields, "FMNM_ALT_KOR_NM")?.Trim(),
  37. SeibroXml.GetOrNull(fields, "FMNM_ALT_ENG_NM")?.Trim(),
  38. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "MIXUS_CIRCL_BEGIN_DT")),
  39. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "MIXUS_CIRCL_EXPRY_DT")),
  40. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "UNI_CIRCL_DT"))
  41. ));
  42. }
  43. return rows;
  44. }
  45. }