상태 머신 — 데이터 플로우 · 무효화 · 상태값¶
콘텐츠가 수신부터 노출·무효화까지 거치는 상태와 전이를 정의한다. 전체 구조는 ../context.md, Sync 채널 계약은 ../contracts/sync-protocol.md.
데이터 플로우¶
- Vendor Cloud Data Pipeline이 뉴스/공시/시세/수급 데이터를 수집한다.
- Common Analysis Engine이 가격 변동 이벤트를 생성한다.
- AI 설명 후보와 근거 데이터를 생성한다.
- Cloud Event Store에 비개인화 이벤트와 설명 후보를 저장한다.
- Event Bundle을 생성한다.
- On-Premise Sync Agent(DMZ)가 Tenant Sync API를 Pull·무결성 검증한다.
- Intake(내부망)가 검증된 Event Bundle을 넘겨받아 Raw Event Store에 저장한다 (단일 모듈 옵션에서는 Sync Agent가 저장까지 — ADR-0036).
- Screening Worker가 v1에는 증권사 정책(점검)을 적용하고, v2는 관리자 승인 없이 자동 게시한다.
- 결과에 따라 상태를 분기한다.
상태 분기:
| 분기 | analysis_item.status | 후속 처리 |
|---|---|---|
| v2 가격변동 설명 수신 | AUTO_PUBLISHED | 검수 정책 없이 게시. 근거·게시 상태 이력 보존 |
| 정책 통과(청정 + 자동 제공 기준 충족 — 확신도 게이트 포함, ADR-0046) | AUTO_PUBLISHED | Published Store 저장 → Publication Cache 반영 → MTS/HTS 조회 가능 |
| 검수 필요 | REVIEW_REQUIRED | Review Queue 표시, 고객 화면 비노출 |
| 차단 | BLOCKED | 고객 화면 비노출 |
| 검수 승인 | APPROVED | Published Store 저장 → Publication Cache 반영 → 조회 가능 |
| 반려 | REJECTED | 고객 화면 비노출 |
| 무효화 | INVALIDATED | Publication Cache 제거 + publication.status → INVALIDATED 전이, 즉시 비노출 |
컴플라이언스 플로우 — 무효화 처리 (확정 결정)¶
원칙: 고객 노출 문구는 활성 점검 정책(policy_version·screening_rule)을 통과한 것만 나가고, 오류가 발견된 설명은 고치지 않고 내린다.
- 무효화(INVALIDATED): 노출 "제거"는 점검·검수 불요. 온프렘이 무효화 이벤트 수신 즉시 Publication Cache에서 제거하고 상태 전이. (제거는 보수적 방향이므로 자동 허용. Publication Cache는 내부망 자원이므로 처리 주체는 Intake·온프렘 내부 흐름이지 DMZ의 Sync Agent가 아니다.)
- 무효화의 단위는 특정 설명(리비전)이다 — (종목, 거래일) 슬롯을 봉인하지 않는다. 무효화 이후 같은 종목에 새 설명(NEW)을 발번할 수 있는지는 발번 정책 소관(현행 게이트는 발화(route) 축 — ALPHA-710, 무효화로 게시본이 사라진 발화는 재실행 시 재게시)이다 (ADR-0044).
- 정정(CORRECTION) 전달은 폐지됐다 (2026-08-01, ADR-0044 — 구 리비전 분리 모델·정정 재점검(ADR-0041)·
supersedes_item_id체인 일괄 제거). 설명은 당일 소멸성 콘텐츠라 정정 재게시의 실익이 없고, 오류 발견 시 비노출이 더 보수적이다. Cloud 콘솔 통제는 무효화 단독이다(ALPHA-737 — 구 정정/제외/복원 오버레이는 은퇴, 기록은 admin_activity_log 에 이력으로 보존).
ERD 방향 및 상태값¶
핵심 도메인 추상화 (기능 확장을 막지 않되 MVP UI는 가격 변동 설명에 집중):
event / evidence / analysis_item / screening_check / review_task / publication (구 exposure_log 는 ADR-0053 으로 은퇴)
analysis_item.analysis_type: 현재 PRICE_MOVEMENT만 사용. 향후 MARKET_BRIEFING, DISCLOSURE_SUMMARY 확장 가능하나 MVP UI 비노출.- 감사 재현은
analysis_item_status_history(append-only)와 게시·정정 이력(publication·console_action_log)·정책 이력으로 "어느 시점에 어떤 게시 상태였는지"를 복원한다 — 고객 단위 노출 재현(exposure log)은 폐지됐다(ADR-0053). (구 정정 리비전 체인은 폐지 — 과거 이력의 CORRECTED 어휘는 상태 이력 원장에만 남는다, ADR-0044.)
상태값:
| 엔티티 | 상태 |
|---|---|
| analysis_item.status | RECEIVED, AUTO_PUBLISHED, REVIEW_REQUIRED, APPROVED, REJECTED, BLOCKED, UNPUBLISHED, INVALIDATED |
| review_task.status | PENDING, APPROVED, EDITED_APPROVED, REJECTED, CANCELLED |
| publication.status | PUBLISHED, UNPUBLISHED, INVALIDATED |