namespace Infrastructure.StockData;
///
/// SEIBro getFmnmAltInfo(상호변경) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
/// 자연키(ISSUCO_CUSTNO, RGT_STD_DT) 중 하나라도 없거나 비형식이면 건너뛴다.
/// 상호(전/후·국/영)·혼용유통기간·단일유통일 매핑.
///
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 Parse(SeibroXml.Envelope envelope)
{
var rows = new List();
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;
}
}