| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- using System.ComponentModel.DataAnnotations;
- namespace Domain.Entities.Stocks;
- /// <summary>
- /// SEIBro 단주대금 정보 (getOddLotInfo) — 단주대금 사유·산정기준·권리락일 (Wave 3).
- /// 자연키 UNIQUE (IssucoCustno, PayDate, RgtStdDt) — 회사·지급일·권리기준일당 1행.
- /// 이벤트 구동: PaymentSchedule 중 PAY_COST_TPCD=3(단주) 인 (회사번호, 지급일)을 트리거로 수집한다.
- /// ⚠️ 응답엔 ISSUCO_CUSTNO·지급일(TH1_PAY_TERM_BEGIN_DT)이 없어 요청값을 스탬핑한다.
- /// </summary>
- public class OddLotPayment
- {
- [Key]
- public int ID { get; private set; }
- /// <summary>발행회사 고객번호 (ISSUCO_CUSTNO, 요청 스탬핑)</summary>
- public int IssucoCustno { get; private set; }
- /// <summary>대금지급일 (TH1_PAY_TERM_BEGIN_DT, 요청 스탬핑)</summary>
- public DateOnly PayDate { get; private set; }
- /// <summary>권리기준일자 (RGT_STD_DT)</summary>
- public DateOnly RgtStdDt { get; private set; }
- /// <summary>권리사유코드 (RGT_RACD)</summary>
- public string? RgtRacd { get; private set; }
- /// <summary>권리사유명 (RGT_RACD_NM) — 예 무상증자</summary>
- public string? RgtRacdNm { get; private set; }
- /// <summary>권리사유세부유형코드 (RGT_RSN_DTAIL_SORT_CD)</summary>
- public string? RgtRsnDetailSortCd { get; private set; }
- /// <summary>산정기준구분코드 (ESTM_STD_TPCD) — 04상장일종가 10액면가 …</summary>
- public string? EstmStdTpcd { get; private set; }
- /// <summary>산정기준일자 (ESTM_STD_DT)</summary>
- public DateOnly? EstmStdDt { get; private set; }
- /// <summary>산정기준가 (ESTM_STDPRC)</summary>
- public decimal? EstmStdprc { get; private set; }
- /// <summary>명부폐쇄시작일자 (ROST_CLOSE_BEGIN_DT)</summary>
- public DateOnly? RostCloseBeginDt { get; private set; }
- /// <summary>명부폐쇄종료일자 (ROST_CLOSE_EXPRY_DT)</summary>
- public DateOnly? RostCloseExpryDt { get; private set; }
- /// <summary>권리락일자 (XRGT_DT)</summary>
- public DateOnly? XrgtDt { get; private set; }
- public DateTime UpdatedAt { get; private set; } = DateTime.UtcNow;
- private OddLotPayment() { }
- public static OddLotPayment Create(
- int issucoCustno,
- DateOnly payDate,
- DateOnly rgtStdDt,
- string? rgtRacd,
- string? rgtRacdNm,
- string? rgtRsnDetailSortCd,
- string? estmStdTpcd,
- DateOnly? estmStdDt,
- decimal? estmStdprc,
- DateOnly? rostCloseBeginDt,
- DateOnly? rostCloseExpryDt,
- DateOnly? xrgtDt)
- {
- return new OddLotPayment
- {
- IssucoCustno = issucoCustno,
- PayDate = payDate,
- RgtStdDt = rgtStdDt,
- RgtRacd = Trimmed(rgtRacd),
- RgtRacdNm = Trimmed(rgtRacdNm),
- RgtRsnDetailSortCd = Trimmed(rgtRsnDetailSortCd),
- EstmStdTpcd = Trimmed(estmStdTpcd),
- EstmStdDt = estmStdDt,
- EstmStdprc = estmStdprc,
- RostCloseBeginDt = rostCloseBeginDt,
- RostCloseExpryDt = rostCloseExpryDt,
- XrgtDt = xrgtDt
- };
- }
- /// <summary>재수집 반영 — 변경 필드가 있을 때만 UpdatedAt 갱신 (자연키는 불변)</summary>
- public void Update(
- string? rgtRacd,
- string? rgtRacdNm,
- string? rgtRsnDetailSortCd,
- string? estmStdTpcd,
- DateOnly? estmStdDt,
- decimal? estmStdprc,
- DateOnly? rostCloseBeginDt,
- DateOnly? rostCloseExpryDt,
- DateOnly? xrgtDt)
- {
- var changed = false;
- changed |= Set(Trimmed(rgtRacd), RgtRacd, v => RgtRacd = v);
- changed |= Set(Trimmed(rgtRacdNm), RgtRacdNm, v => RgtRacdNm = v);
- changed |= Set(Trimmed(rgtRsnDetailSortCd), RgtRsnDetailSortCd, v => RgtRsnDetailSortCd = v);
- changed |= Set(Trimmed(estmStdTpcd), EstmStdTpcd, v => EstmStdTpcd = v);
- changed |= Set(estmStdDt, EstmStdDt, v => EstmStdDt = v);
- changed |= Set(estmStdprc, EstmStdprc, v => EstmStdprc = v);
- changed |= Set(rostCloseBeginDt, RostCloseBeginDt, v => RostCloseBeginDt = v);
- changed |= Set(rostCloseExpryDt, RostCloseExpryDt, v => RostCloseExpryDt = v);
- changed |= Set(xrgtDt, XrgtDt, v => XrgtDt = 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;
- }
- }
|