| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- using System.ComponentModel.DataAnnotations;
- namespace Domain.Entities.Stocks;
- /// <summary>
- /// SEIBro CD 종목 정보 (getCDInfo) — 발행금액·할인율·이자지급방식·만기 (Wave 4). PK Isin.
- /// ⚠️ 실샘플 fixture 가 result="0"(빈) 이라 필드 매핑은 채권.md 스펙 기준 — 운영 첫 수집 시 로그로 확인.
- /// rolling per-ISIN 대상 = ShortTermIssuance 발견분 중 SECN_TPCD=13(CD).
- /// </summary>
- public class CdMaster
- {
- /// <summary>종목코드 (ISIN) — PK</summary>
- [Key]
- [MaxLength(12)]
- public string Isin { get; private set; } = default!;
- /// <summary>발행사 번호 (ISSUCO_CUSTNO)</summary>
- public int? IssucoCustno { get; private set; }
- /// <summary>한글종목명 (KOR_SECN_NM)</summary>
- public string? KorSecnNm { get; private set; }
- /// <summary>발행통화코드 (ISSU_CUR_CD) — KRW</summary>
- public string? IssuCurCd { get; private set; }
- /// <summary>최초발행금액 (FIRST_ISSU_AMT)</summary>
- public decimal? FirstIssuAmt { get; private set; }
- /// <summary>발행방법코드 (ISSU_WHCD)</summary>
- public string? IssuWhcd { get; private set; }
- /// <summary>액면금액 (FACE_AMT)</summary>
- public decimal? FaceAmt { get; private set; }
- /// <summary>매출금액 (SALE_AMT)</summary>
- public decimal? SaleAmt { get; private set; }
- /// <summary>할인율 (DISCN_RATE)</summary>
- public decimal? DiscnRate { get; private set; }
- /// <summary>이자지급방식구분코드 (INT_PAY_MANN_TPCD) — 1할인식 2부리식</summary>
- public string? IntPayMannTpcd { get; private set; }
- /// <summary>발행일자 (ISSU_DT)</summary>
- public DateOnly? IssuDt { get; private set; }
- /// <summary>만기일자 (XPIR_DT) — CD 상환일</summary>
- public DateOnly? XpirDt { get; private set; }
- /// <summary>전자증권 여부 (ELTSC_YN)</summary>
- public bool? EltscYn { get; private set; }
- public DateTime UpdatedAt { get; private set; } = DateTime.UtcNow;
- private CdMaster() { }
- public static CdMaster Create(
- string isin,
- int? issucoCustno,
- string? korSecnNm,
- string? issuCurCd,
- decimal? firstIssuAmt,
- string? issuWhcd,
- decimal? faceAmt,
- decimal? saleAmt,
- decimal? discnRate,
- string? intPayMannTpcd,
- DateOnly? issuDt,
- DateOnly? xpirDt,
- bool? eltscYn)
- {
- if (string.IsNullOrWhiteSpace(isin))
- {
- throw new ArgumentException("isin required", nameof(isin));
- }
- var entity = new CdMaster { Isin = isin.Trim() };
- entity.Apply(issucoCustno, korSecnNm, issuCurCd, firstIssuAmt, issuWhcd, faceAmt, saleAmt, discnRate, intPayMannTpcd, issuDt, xpirDt, eltscYn);
- return entity;
- }
- /// <summary>재수집 반영 (PK Isin 은 불변) — 변경 시에만 UpdatedAt</summary>
- public void Update(
- int? issucoCustno,
- string? korSecnNm,
- string? issuCurCd,
- decimal? firstIssuAmt,
- string? issuWhcd,
- decimal? faceAmt,
- decimal? saleAmt,
- decimal? discnRate,
- string? intPayMannTpcd,
- DateOnly? issuDt,
- DateOnly? xpirDt,
- bool? eltscYn)
- {
- Apply(issucoCustno, korSecnNm, issuCurCd, firstIssuAmt, issuWhcd, faceAmt, saleAmt, discnRate, intPayMannTpcd, issuDt, xpirDt, eltscYn);
- }
- private void Apply(
- int? issucoCustno,
- string? korSecnNm,
- string? issuCurCd,
- decimal? firstIssuAmt,
- string? issuWhcd,
- decimal? faceAmt,
- decimal? saleAmt,
- decimal? discnRate,
- string? intPayMannTpcd,
- DateOnly? issuDt,
- DateOnly? xpirDt,
- bool? eltscYn)
- {
- var changed = false;
- changed |= Set(issucoCustno, IssucoCustno, v => IssucoCustno = v);
- changed |= Set(Trimmed(korSecnNm), KorSecnNm, v => KorSecnNm = v);
- changed |= Set(Trimmed(issuCurCd), IssuCurCd, v => IssuCurCd = v);
- changed |= Set(firstIssuAmt, FirstIssuAmt, v => FirstIssuAmt = v);
- changed |= Set(Trimmed(issuWhcd), IssuWhcd, v => IssuWhcd = v);
- changed |= Set(faceAmt, FaceAmt, v => FaceAmt = v);
- changed |= Set(saleAmt, SaleAmt, v => SaleAmt = v);
- changed |= Set(discnRate, DiscnRate, v => DiscnRate = v);
- changed |= Set(Trimmed(intPayMannTpcd), IntPayMannTpcd, v => IntPayMannTpcd = v);
- changed |= Set(issuDt, IssuDt, v => IssuDt = v);
- changed |= Set(xpirDt, XpirDt, v => XpirDt = v);
- changed |= Set(eltscYn, EltscYn, v => EltscYn = v);
- if (changed)
- {
- UpdatedAt = DateTime.UtcNow;
- }
- }
- private static string? Trimmed(string? value)
- {
- return string.IsNullOrWhiteSpace(value) ? null : value.Trim();
- }
- private static bool Set<T>(T incoming, T current, Action<T> assign)
- {
- if (EqualityComparer<T>.Default.Equals(incoming, current))
- {
- return false;
- }
- assign(incoming);
- return true;
- }
- }
|