| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using System.ComponentModel.DataAnnotations;
- namespace Domain.Entities.Stocks;
- /// <summary>
- /// SEIBro 의무보호예수/반환 정보 (getSafeDpDutyDepoStatus, 락업) — 예수/반환 일정·수량·사유 (Wave 2 ★P1).
- /// 자연키 UNIQUE (IssucoCustno, ShotnIsin, SafedpDt, OccrSeq, DutySafedpRacd) — 한 종목·예수일에 사유가 여럿일 수 있어 사유코드까지 포함.
- /// 수집은 조회기준일(BEGIN_DT) 날짜 스윕 후 window(스윕 창) delete+insert 로 반영한다.
- /// ⚠️ 실응답의 SECN_KACD 는 코드(0101)가 아니라 종목종류명(보통주) 문자열이다(fixture 확인) — 문자열로 저장.
- /// DUTY_SAFEDP_RACD 는 코드표가 크므로 코드 원문(문자열)으로 저장한다.
- /// </summary>
- public class LockupEvent
- {
- [Key]
- public int ID { get; private set; }
- /// <summary>발행회사 고객번호 (ISSUCO_CUSTNO)</summary>
- public int IssucoCustno { get; private set; }
- /// <summary>한글종목명 (KOR_SECN_NM)</summary>
- public string KorSecnNm { get; private set; } = default!;
- /// <summary>종목종류 (SECN_KACD — 실응답은 보통주/우선주… 명칭 문자열)</summary>
- public string? SecnKacd { get; private set; }
- /// <summary>단축코드 (SHOTN_ISIN)</summary>
- public string ShotnIsin { get; private set; } = default!;
- /// <summary>시장구분 (MART_TPCD)</summary>
- public string? MartTpcd { get; private set; }
- /// <summary>업무구분 (OCCR_SEQ) — 1예수 2반환</summary>
- public string OccrSeq { get; private set; } = default!;
- /// <summary>의무보호예수일 (SAFEDP_DT)</summary>
- public DateOnly SafedpDt { get; private set; }
- /// <summary>예수주식수 (SAFEDP_QTY)</summary>
- public long? SafedpQty { get; private set; }
- /// <summary>보호예수사유코드 (DUTY_SAFEDP_RACD) — 코드 원문 문자열 (코드표 큼)</summary>
- public string DutySafedpRacd { get; private set; } = default!;
- /// <summary>반환일 (RETURN_DT)</summary>
- public DateOnly? ReturnDt { get; private set; }
- /// <summary>반환주식수 (RETURN_QTY)</summary>
- public long? ReturnQty { get; private set; }
- /// <summary>총발행주식수 (TOTAL_STK_CNT)</summary>
- public long? TotalStkCnt { get; private set; }
- public DateTime UpdatedAt { get; private set; } = DateTime.UtcNow;
- private LockupEvent() { }
- public static LockupEvent Create(
- int issucoCustno,
- string korSecnNm,
- string? secnKacd,
- string shotnIsin,
- string? martTpcd,
- string occrSeq,
- DateOnly safedpDt,
- long? safedpQty,
- string dutySafedpRacd,
- DateOnly? returnDt,
- long? returnQty,
- long? totalStkCnt)
- {
- if (string.IsNullOrWhiteSpace(korSecnNm))
- {
- throw new ArgumentException("korSecnNm required", nameof(korSecnNm));
- }
- if (string.IsNullOrWhiteSpace(shotnIsin))
- {
- throw new ArgumentException("shotnIsin required", nameof(shotnIsin));
- }
- if (string.IsNullOrWhiteSpace(occrSeq))
- {
- throw new ArgumentException("occrSeq required", nameof(occrSeq));
- }
- if (string.IsNullOrWhiteSpace(dutySafedpRacd))
- {
- throw new ArgumentException("dutySafedpRacd required", nameof(dutySafedpRacd));
- }
- return new LockupEvent
- {
- IssucoCustno = issucoCustno,
- KorSecnNm = korSecnNm.Trim(),
- SecnKacd = string.IsNullOrWhiteSpace(secnKacd) ? null : secnKacd.Trim(),
- ShotnIsin = shotnIsin.Trim(),
- MartTpcd = string.IsNullOrWhiteSpace(martTpcd) ? null : martTpcd.Trim(),
- OccrSeq = occrSeq.Trim(),
- SafedpDt = safedpDt,
- SafedpQty = safedpQty,
- DutySafedpRacd = dutySafedpRacd.Trim(),
- ReturnDt = returnDt,
- ReturnQty = returnQty,
- TotalStkCnt = totalStkCnt
- };
- }
- }
|