| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- namespace Infrastructure.StockData;
- /// <summary>
- /// SEIBro getFmnmAltInfo(상호변경) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
- /// 자연키(ISSUCO_CUSTNO, RGT_STD_DT) 중 하나라도 없거나 비형식이면 건너뛴다.
- /// 상호(전/후·국/영)·혼용유통기간·단일유통일 매핑.
- /// </summary>
- public static class SeibroFmnmAltParser
- {
- public sealed record Row(
- int IssucoCustno,
- DateOnly RgtStdDt,
- string? FmnmBfaltKorNm,
- string? FmnmBfaltEngNm,
- string? FmnmAltKorNm,
- string? FmnmAltEngNm,
- DateOnly? MixusCirclBeginDt,
- DateOnly? MixusCirclExpryDt,
- DateOnly? UniCirclDt
- );
- public static IReadOnlyList<Row> Parse(SeibroXml.Envelope envelope)
- {
- var rows = new List<Row>();
- foreach (var fields in envelope.Rows)
- {
- var custno = SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO"));
- var rgtStdDt = SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "RGT_STD_DT"));
- if (custno is null || rgtStdDt is null)
- {
- continue;
- }
- rows.Add(new Row(
- custno.Value,
- rgtStdDt.Value,
- SeibroXml.GetOrNull(fields, "FMNM_BFALT_KOR_NM")?.Trim(),
- SeibroXml.GetOrNull(fields, "FMNM_BFALT_ENG_NM")?.Trim(),
- SeibroXml.GetOrNull(fields, "FMNM_ALT_KOR_NM")?.Trim(),
- SeibroXml.GetOrNull(fields, "FMNM_ALT_ENG_NM")?.Trim(),
- SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "MIXUS_CIRCL_BEGIN_DT")),
- SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "MIXUS_CIRCL_EXPRY_DT")),
- SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "UNI_CIRCL_DT"))
- ));
- }
- return rows;
- }
- }
|