namespace Infrastructure.StockData;
///
/// SEIBro getAssetXrcInfo(파생결합증권 기초자산 행사정보) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
/// 실샘플 래퍼 = <RESULT> **대문자** (readme §1 확정 — 파생결합 5종 중 하나).
/// ⚠️ 응답에 ISIN 이 없어(요청 파라미터로만 받음) 배치가 요청 ISIN 을 스탬핑 — 여기선 (AssetSeq, XrcStdSeq, 값) 반환.
/// 자연키 ASSET_SEQ·XRC_STD_SEQ 없으면 스킵.
///
public static class SeibroAssetXrcParser
{
public sealed record Row(
int AssetSeq,
int XrcStdSeq,
decimal? XrcStdRatio,
decimal? XrcPrice
);
public static IReadOnlyList Parse(SeibroXml.Envelope envelope)
{
var rows = new List();
foreach (var fields in envelope.Rows)
{
var assetSeq = SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "ASSET_SEQ"));
var xrcStdSeq = SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "XRC_STD_SEQ"));
if (assetSeq is null || xrcStdSeq is null)
{
continue;
}
rows.Add(new Row(
assetSeq.Value,
xrcStdSeq.Value,
SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "XRC_STD_RATIO")),
SeibroFieldParse.Decimal(SeibroXml.GetOrNull(fields, "XRC_PRICE"))
));
}
return rows;
}
}