| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- using System.ComponentModel.DataAnnotations;
- namespace Domain.Entities.Stocks;
- /// <summary>
- /// 전자공시(DART) 공시 1건 (OpenDART list.json) — RceptNo(접수번호 14자리) 가 비즈니스 UNIQUE 키.
- /// list.json 이 stock_code(6자리 단축코드)를 이미 포함하므로 corpCode.xml 매핑 없이 종목별 조회가 가능하다.
- /// 비상장(자산운용/신탁 등)은 stock_code 가 "" → null 로 저장. corp_cls 는 시장구분(Y유가/K코스닥/N코넥스/E기타).
- /// 수집은 접수일(rcept_dt) 기준 최근 N일 페이징. 원문(문서 본문)은 저장하지 않고 목록 메타만 담는 read-only 피드.
- /// </summary>
- public class Disclosure
- {
- [Key]
- public long ID { get; private set; }
- /// <summary>접수번호 (rcept_no) — 14자리, 비즈니스 UNIQUE 키. DART 문서 링크 구성에 사용 가능</summary>
- public string RceptNo { get; private set; } = default!;
- /// <summary>고유번호 (corp_code) — 8자리 DART 법인 고유코드</summary>
- public string CorpCode { get; private set; } = default!;
- /// <summary>법인명 (corp_name)</summary>
- public string CorpName { get; private set; } = default!;
- /// <summary>종목코드 (stock_code) — 6자리 단축코드. 비상장이면 null</summary>
- public string? StockCode { get; private set; }
- /// <summary>법인구분 (corp_cls) — Y유가/K코스닥/N코넥스/E기타. 1자리</summary>
- public string CorpCls { get; private set; } = default!;
- /// <summary>보고서명 (report_nm)</summary>
- public string ReportNm { get; private set; } = default!;
- /// <summary>공시 제출인명 (flr_nm)</summary>
- public string FlrNm { get; private set; } = default!;
- /// <summary>접수일자 (rcept_dt, YYYYMMDD)</summary>
- public DateOnly RceptDt { get; private set; }
- /// <summary>비고 (rm) — 정정/첨부정정 등 표시. 없으면 null</summary>
- public string? Rm { get; private set; }
- public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
- private Disclosure() { }
- public static Disclosure Create(
- string rceptNo,
- string corpCode,
- string corpName,
- string? stockCode,
- string corpCls,
- string reportNm,
- string flrNm,
- DateOnly rceptDt,
- string? rm = null
- ) {
- if (string.IsNullOrWhiteSpace(rceptNo))
- {
- throw new ArgumentException("rceptNo required", nameof(rceptNo));
- }
- if (string.IsNullOrWhiteSpace(corpCode))
- {
- throw new ArgumentException("corpCode required", nameof(corpCode));
- }
- if (string.IsNullOrWhiteSpace(reportNm))
- {
- throw new ArgumentException("reportNm required", nameof(reportNm));
- }
- return new Disclosure
- {
- RceptNo = rceptNo.Trim(),
- CorpCode = corpCode.Trim(),
- CorpName = corpName.Trim(),
- StockCode = string.IsNullOrWhiteSpace(stockCode) ? null : stockCode.Trim(),
- CorpCls = corpCls.Trim(),
- ReportNm = reportNm.Trim(),
- FlrNm = flrNm.Trim(),
- RceptDt = rceptDt,
- Rm = string.IsNullOrWhiteSpace(rm) ? null : rm.Trim()
- };
- }
- }
|