[BE-12] 정산·리스크 단계평가 도메인 서비스
작업 내용 (설계 의도)
변경 사항
일 마감 정산과 사다리 승강급 판정을 만든다. 둘 다 거래일·체결 이력을 읽어 판단하므로 한 티켓으로 묶는다.
TradingSettlementDomainService— 장 마감 후 당일 체결을 집계해 거래일 실현손익을 확정하고, 미승인PENDING제안을EXPIRED로 만료시킨다. 시스템 체결 기록과 토스 체결 내역 대조 결과를 남긴다(PRD “마감 점검”).RiskTierPromotionDomainService— 승급·강등 판정. 승급 트리거는 수익률이 아니라 운영 지표다(20거래일 무중단·집행 실패 0건·한도 위반 0건·슬리피지 ±0.3%p 이내). T3만 엣지t > 2를 추가로 요구한다. 총자본 -5% 도달 시 즉시 자동 강등한다.
승급은 판정만 하고 사용자 확인을 기다린다. 강등은 확인 없이 적용한다 — 비대칭이 의도다(PRD FR-38).
의존
- BE-02, BE-03, BE-04, BE-05
다이어그램
처리 흐름
sequenceDiagram participant Sch as 마감 스케줄러 participant Set as TradingSettlementDomainService participant Tier as RiskTierPromotionDomainService participant Policy as AutoTradingPolicy Sch->>Set: settle(tradeDate) Set-->>Sch: 실현손익 확정 + 제안 만료 Sch->>Tier: evaluate() Tier->>Policy: demoteTier() (총자본 -5%)
클래스 의존
flowchart LR Set[TradingSettlementDomainService] --> DayRepo[TradingDayRepository] Set --> FillRepo[TradingFillRepository] Set --> PropRepo[OrderProposalRepository] Tier[RiskTierPromotionDomainService] --> DayRepo Tier --> FillRepo Tier --> PolicyRepo[AutoTradingPolicyRepository]
테스트 케이스
- 마감 시 당일 체결을 집계해 거래일 실현손익이 확정된다.
- 마감 시 미승인
PENDING제안이EXPIRED로 전이한다. - 20거래일 무중단 + 집행 실패 0 + 한도 위반 0 + 슬리피지 이내면 T1→T2 승급 판정을 낸다.
- 집행 실패가 1건이라도 있으면 승급 판정이 나오지 않는다.
- 수익이 났어도 운영 지표가 미달이면 승급하지 않는다(트리거가 수익률이 아님).
- 총자본 -5% 도달 시 사용자 확인 없이 즉시 강등된다.
- T1에서 -5%에 도달하면 강등 대신 MDD 경고만 낸다(최하 단계 경계).
- 승급 판정은 정책을 바꾸지 않고 후보 단계만 반환한다(사용자 확인 대기).