[BE-15] 체결동기화·정산·단계평가 UseCase

작업 내용 (설계 의도)

변경 사항

스케줄러가 호출하는 배치 UseCase 3종을 만든다. UseCase 1개 = 파일 1개.

  • SyncPositionFillsUseCase — 토스 체결 내역을 조회해 포지션·체결 기록을 동기화한다. 1차는 폴링이며, 실시간 WebSocket(personal:order)은 PRD FR-28(P1)로 미룬다. 프로세스 재기동 후 상태 복구도 이 경로가 담당한다.
  • SettleTradingDayUseCase — 장 마감 후 정산. 실현손익 확정 + PENDING 제안 만료 + 체결 대조.
  • EvaluateRiskTierUseCase — 일 1회 사다리 승강급 판정. 강등은 즉시 적용, 승급은 알림만.

ORDER_INFO 레이트리밋이 초당 6회이고 09:00~09:10에는 초당 3회로 낮아지므로, 개장 10분간 조회 주기를 늘려 피크 한도를 준수한다.

의존

  • BE-12 (정산·단계평가 도메인 서비스)

다이어그램

처리 흐름

sequenceDiagram
    participant Sch as 스케줄러
    participant Sync as SyncPositionFillsUseCase
    participant Order as OrderGateway
    participant Pos as TradingPosition
    Sch->>Sync: execute()
    Sync->>Order: 체결 내역 조회
    Order-->>Sync: 체결 목록
    Sync->>Pos: applyBuyFill / applySellFill

클래스 의존

flowchart LR
    Sync[SyncPositionFillsUseCase] --> Svc[AutoTradingDomainService]
    Settle[SettleTradingDayUseCase] --> SetSvc[TradingSettlementDomainService]
    Eval[EvaluateRiskTierUseCase] --> TierSvc[RiskTierPromotionDomainService]

테스트 케이스

  • 토스 체결 내역이 포지션 수량·평단에 반영된다.
  • 이미 반영된 체결을 다시 동기화해도 중복 반영되지 않는다(멱등).
  • 개장 10분간 조회 주기가 늘어나 초당 3회를 넘지 않는다.
  • 마감 정산 후 당일 실현손익이 확정되고 PENDING 제안이 만료된다.
  • 단계평가에서 강등 조건 충족 시 정책이 즉시 갱신된다.
  • 단계평가에서 승급 조건 충족 시 정책을 바꾸지 않고 알림만 보낸다.