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; } }