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