using System.Globalization; namespace Infrastructure.StockData; /// /// SEIBro getShotnByMart(시장별 단축코드 조회) 응답 파서 — 순수 C#. "SEIBro 발행회사번호 부트스트랩" (Wave 0). /// 입력: 공용 SeibroXml envelope. 행 필드: SHOTN_ISIN(단축코드) / KOR_SECN_NM(종목명) / ISSUCO_CUSTNO(발행회사번호). /// 세 필드 중 하나라도 없거나 회사번호가 비숫자인 행은 건너뛴다 (매핑 불가 행 — upsert 자연키가 성립하지 않음). /// public static class SeibroShotnByMartParser { /// 시장별 단축코드 1행 public sealed record Row(string ShortCode, string Name, int IssucoCustno); public static IReadOnlyList Parse(SeibroXml.Envelope envelope) { var rows = new List(); foreach (var fields in envelope.Rows) { var shortCode = SeibroXml.GetOrNull(fields, "SHOTN_ISIN")?.Trim(); var name = SeibroXml.GetOrNull(fields, "KOR_SECN_NM")?.Trim(); var custnoRaw = SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO"); if (string.IsNullOrEmpty(shortCode) || string.IsNullOrEmpty(name) || !int.TryParse(custnoRaw, NumberStyles.Integer, CultureInfo.InvariantCulture, out var custno)) { continue; } rows.Add(new Row(shortCode, name, custno)); } return rows; } }