{ "schema_version": 1, "diagram_type": "lifecycle", "meta": { "title": "제출물 상태 전이", "output": "docs/diagrams/submission-lifecycle.html", "quality_profile": "showcase", "viewBox": [ 1080, 630 ], "views": [ { "id": "main", "label": "주 단계", "focus": [ "intake", "analyzing", "pending", "decision", "approved" ], "note": "접수에서 승인까지 이어지는 다섯 단계." }, { "id": "recovery", "label": "복구 경로", "focus": [ "analyzing", "failed", "held" ], "note": "끝나지 않고 분석으로 되돌아오는 두 고리." }, { "id": "terminal", "label": "종료 상태", "focus": [ "decision", "approved", "rejected", "retained" ], "note": "되돌아오지 않는 상태와, 판정을 남긴 채 파일만 사라진 상태." } ], "legend": { "mode": "auto", "entries": { "start": { "label": "시작" }, "active": { "label": "진행 중" }, "waiting": { "label": "대기" }, "decision": { "label": "판정" }, "success": { "label": "정상 종료" }, "failure": { "label": "실패 · 종료" } } } }, "lanes": [ { "id": "main", "label": "제출물 단계" }, { "id": "waiting", "label": "대기 · 보강" }, { "id": "exceptions", "label": "복구 경로" }, { "id": "terminal", "label": "종료 상태" } ], "states": [ { "id": "intake", "type": "start", "label": "접수", "sublabel": "폴더 · 업로드", "lane": "main", "col": 0, "step": "01", "tag": "신규" }, { "id": "analyzing", "type": "active", "label": "분석 중", "sublabel": "지문 · 얼굴 · 검색", "lane": "main", "col": 1, "step": "02" }, { "id": "pending", "type": "active", "label": "심사 대기", "sublabel": "점수 · 밴드 산출됨", "lane": "main", "col": 2, "step": "03", "tag": "unreviewed" }, { "id": "decision", "type": "decision", "label": "판정", "sublabel": "운영자 결정", "lane": "main", "col": 3, "step": "04" }, { "id": "approved", "type": "success", "label": "승인", "sublabel": "사용 가능", "lane": "main", "col": 4, "step": "05", "tag": "approved" }, { "id": "held", "type": "waiting", "label": "보류", "sublabel": "추가 확인 필요", "lane": "waiting", "col": 0, "tag": "held" }, { "id": "failed", "type": "failure", "label": "분석 실패", "sublabel": "provider 실패", "lane": "exceptions", "col": 0, "tag": "복구 가능", "yOffset": 78 }, { "id": "rejected", "type": "failure", "label": "반려", "sublabel": "사용 불가", "lane": "terminal", "col": 1, "tag": "rejected" }, { "id": "retained", "type": "failure", "label": "보존", "sublabel": "원본 파일 없음", "lane": "terminal", "col": 2, "tag": "assetMissing" } ], "transitions": [ { "id": "t-intake", "from": "intake", "to": "analyzing", "variant": "emphasis" }, { "id": "t-analyzed", "from": "analyzing", "to": "pending", "variant": "emphasis", "route": "straight" }, { "id": "t-review", "from": "pending", "to": "decision", "variant": "emphasis" }, { "id": "t-approve", "from": "decision", "to": "approved", "label": "승인", "variant": "emphasis" }, { "id": "t-hold", "from": "pending", "to": "held", "label": "추가 확인 필요", "labelDy": 24 }, { "id": "t-fail", "from": "analyzing", "to": "failed", "label": "provider 실패", "variant": "security", "labelDy": -24 }, { "id": "t-retry", "from": "failed", "to": "analyzing", "label": "재시도", "variant": "emphasis", "labelDy": 6, "channelX": 240, "toSide": "bottom" }, { "id": "t-reject", "from": "decision", "to": "rejected", "label": "반려", "variant": "security", "labelDy": 24 }, { "id": "t-retain", "from": "rejected", "to": "retained", "label": "원본 파일 소실", "variant": "dashed", "labelDy": 60 }, { "id": "t-rerun", "from": "held", "to": "analyzing", "label": "재분석 요청", "variant": "emphasis", "channelX": 170, "toSide": "left" } ], "cards": [ { "dot": "emerald", "title": "주 단계", "items": [ "접수된 제출물은 분석을 거쳐 심사 대기 상태에서 점수와 밴드를 갖는다", "판정은 운영자만 내린다 — 자동 분석은 밴드까지만 만든다" ] }, { "dot": "rose", "title": "되돌아오는 상태", "items": [ "분석 실패와 재분석 요청은 종료가 아니라 분석 중으로 돌아온다", "보류는 운영자가 증거를 보강하려는 상태다 — 재분석은 기존 증거를 지우지 않는다" ] }, { "dot": "amber", "title": "보존", "items": [ "판정을 남긴 케이스는 원본 파일이 사라져도 지워지지 않는다", "파일이 돌아오면 보존 표시는 해제되고 감사에 남는다" ] } ] }