| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- using System.ComponentModel.DataAnnotations;
- namespace Domain.Entities.Stocks;
- /// <summary>
- /// SEIBro 전자단기사채 종목 정보 (getESTBInfo) — 발행·만기·일물·모집방법·신용등급 4사 (Wave 4). PK Isin.
- /// 신용등급 코드는 원문 문자열 저장(채권.md 공통표). rolling per-ISIN 대상 = ShortTermIssuance 발견분 중 SECN_TPCD=14(전단채).
- /// </summary>
- public class EstbMaster
- {
- /// <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>전자단기사채종류코드 (ESTB_KACD) — 1일반 2AB 3PF AB 4특수</summary>
- public string? EstbKacd { get; private set; }
- /// <summary>한글종목명 (KOR_SECN_NM)</summary>
- public string? KorSecnNm { get; private set; }
- /// <summary>발행통화코드 (ISSU_CUR_CD)</summary>
- public string? IssuCurCd { get; private set; }
- /// <summary>발행금액 (ISSU_AMT)</summary>
- public decimal? IssuAmt { get; private set; }
- /// <summary>모집방법코드 (RECU_WHCD) — 11공모 21사모 22CBO기초사모 23전문투자형사모 26경영참여형사모 99면제</summary>
- public string? RecuWhcd { get; private set; }
- /// <summary>발행일자 (ISSU_DT)</summary>
- public DateOnly? IssuDt { get; private set; }
- /// <summary>만기일자 (XPIR_DT)</summary>
- public DateOnly? XpirDt { get; private set; }
- /// <summary>일물 (DAYOBJ) — 만기일-발행일</summary>
- public string? Dayobj { get; private set; }
- /// <summary>원천징수여부 (WHOLD_YN) — Y징수 N면제</summary>
- public bool? WholdYn { get; private set; }
- /// <summary>보증여부 (GRORG_YN, Y/N)</summary>
- public bool? GrorgYn { get; private set; }
- /// <summary>KIS평가등급코드 (KIS_VALAT_GRD_CD) — 신용등급코드표 원문</summary>
- public string? KisValatGrdCd { get; private set; }
- /// <summary>NICE평가등급코드 (NICE_VALAT_GRD_CD) — 신용등급코드표 원문</summary>
- public string? NiceValatGrdCd { get; private set; }
- /// <summary>서울신용평가등급코드 (SCI_VALAT_GRD_CD) — 신용등급코드표 원문</summary>
- public string? SciValatGrdCd { get; private set; }
- /// <summary>한국기업평가등급코드 (KR_VALAT_GRD_CD) — 신용등급코드표 원문</summary>
- public string? KrValatGrdCd { get; private set; }
- public DateTime UpdatedAt { get; private set; } = DateTime.UtcNow;
- private EstbMaster() { }
- public static EstbMaster Create(string isin, EstbMasterFields f)
- {
- if (string.IsNullOrWhiteSpace(isin))
- {
- throw new ArgumentException("isin required", nameof(isin));
- }
- var entity = new EstbMaster { Isin = isin.Trim() };
- entity.Apply(f);
- return entity;
- }
- /// <summary>재수집 반영 (PK Isin 은 불변) — 변경 시에만 UpdatedAt</summary>
- public void Update(EstbMasterFields f)
- {
- Apply(f);
- }
- private void Apply(EstbMasterFields f)
- {
- var changed = false;
- changed |= Set(f.IssucoCustno, IssucoCustno, v => IssucoCustno = v);
- changed |= Set(Trimmed(f.EstbKacd), EstbKacd, v => EstbKacd = v);
- changed |= Set(Trimmed(f.KorSecnNm), KorSecnNm, v => KorSecnNm = v);
- changed |= Set(Trimmed(f.IssuCurCd), IssuCurCd, v => IssuCurCd = v);
- changed |= Set(f.IssuAmt, IssuAmt, v => IssuAmt = v);
- changed |= Set(Trimmed(f.RecuWhcd), RecuWhcd, v => RecuWhcd = v);
- changed |= Set(f.IssuDt, IssuDt, v => IssuDt = v);
- changed |= Set(f.XpirDt, XpirDt, v => XpirDt = v);
- changed |= Set(Trimmed(f.Dayobj), Dayobj, v => Dayobj = v);
- changed |= Set(f.WholdYn, WholdYn, v => WholdYn = v);
- changed |= Set(f.GrorgYn, GrorgYn, v => GrorgYn = v);
- changed |= Set(Trimmed(f.KisValatGrdCd), KisValatGrdCd, v => KisValatGrdCd = v);
- changed |= Set(Trimmed(f.NiceValatGrdCd), NiceValatGrdCd, v => NiceValatGrdCd = v);
- changed |= Set(Trimmed(f.SciValatGrdCd), SciValatGrdCd, v => SciValatGrdCd = v);
- changed |= Set(Trimmed(f.KrValatGrdCd), KrValatGrdCd, v => KrValatGrdCd = 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;
- }
- }
- /// <summary>EstbMaster 필드 묶음 (getESTBInfo)</summary>
- public sealed record EstbMasterFields(
- int? IssucoCustno,
- string? EstbKacd,
- string? KorSecnNm,
- string? IssuCurCd,
- decimal? IssuAmt,
- string? RecuWhcd,
- DateOnly? IssuDt,
- DateOnly? XpirDt,
- string? Dayobj,
- bool? WholdYn,
- bool? GrorgYn,
- string? KisValatGrdCd,
- string? NiceValatGrdCd,
- string? SciValatGrdCd,
- string? KrValatGrdCd
- );
|