namespace Infrastructure.StockData;
///
/// SEIBro getRedIsinInfo(파생결합증권 상환종목) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
/// 실샘플 래퍼 = <RESULT> **대문자** (readme §1 확정 — 파생결합 5종 중 하나).
/// 응답 필드는 Isin·DerisecExerTpcd·RedQty 3종 — RedDt·SecnKacd 는 배치가 요청(RED_DT/SECN_KACD) 파라미터를 스탬핑.
/// 자연키 ISIN·DERISEC_EXER_TPCD 없으면 스킵(같은 상환일에 만기/조기 두 건 가능하여 행사구분이 자연키 일부).
///
public static class SeibroRedIsinParser
{
public sealed record Row(
string Isin,
string DerisecExerTpcd,
decimal? RedQty
);
public static IReadOnlyList Parse(SeibroXml.Envelope envelope)
{
var rows = new List();
foreach (var fields in envelope.Rows)
{
var isin = SeibroXml.GetOrNull(fields, "ISIN")?.Trim();
var exerTpcd = SeibroXml.GetOrNull(fields, "DERISEC_EXER_TPCD")?.Trim();
if (string.IsNullOrEmpty(isin) || string.IsNullOrEmpty(exerTpcd))
{
continue;
}
rows.Add(new Row(
isin,
exerTpcd,
SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "RED_QTY"))
));
}
return rows;
}
}