{
  "components": {
    "schemas": {
      "ActionCard": {
        "additionalProperties": false,
        "properties": {
          "card_id": {
            "title": "Card Id",
            "type": "string"
          },
          "cas_number": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cas Number"
          },
          "category": {
            "enum": [
              "확인",
              "대응 참고",
              "보류",
              "인계"
            ],
            "title": "Category",
            "type": "string"
          },
          "confirmation_status": {
            "enum": [
              "UNCONFIRMED",
              "CONFIRMED_INPUT",
              "NOT_APPLICABLE"
            ],
            "title": "Confirmation Status",
            "type": "string"
          },
          "message": {
            "maxLength": 240,
            "title": "Message",
            "type": "string"
          },
          "phrase_id": {
            "title": "Phrase Id",
            "type": "string"
          },
          "phrase_version": {
            "title": "Phrase Version",
            "type": "string"
          },
          "priority": {
            "description": "표시 순서이며 위험등급이 아닙니다. 1부터 먼저 표시합니다.",
            "maximum": 4.0,
            "minimum": 1.0,
            "title": "Priority",
            "type": "integer"
          },
          "reason": {
            "maxLength": 400,
            "title": "Reason",
            "type": "string"
          },
          "required_conditions": {
            "items": {
              "type": "string"
            },
            "title": "Required Conditions",
            "type": "array"
          },
          "review_status": {
            "const": "DRAFT_NOT_EXPERT_REVIEWED",
            "default": "DRAFT_NOT_EXPERT_REVIEWED",
            "title": "Review Status",
            "type": "string"
          },
          "role": {
            "default": "UNKNOWN",
            "enum": [
              "INCIDENT",
              "FACILITY",
              "UNKNOWN"
            ],
            "title": "Role",
            "type": "string"
          },
          "source_ids": {
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "title": "Source Ids",
            "type": "array"
          },
          "state_fingerprint": {
            "title": "State Fingerprint",
            "type": "string"
          },
          "tactical_authorization": {
            "const": false,
            "default": false,
            "title": "Tactical Authorization",
            "type": "boolean"
          },
          "target_label": {
            "description": "화면 표시용 사고물질/시설물질/전체 안내 구분",
            "title": "Target Label",
            "type": "string"
          },
          "title": {
            "maxLength": 80,
            "title": "Title",
            "type": "string"
          },
          "unmet_conditions": {
            "items": {
              "type": "string"
            },
            "title": "Unmet Conditions",
            "type": "array"
          }
        },
        "required": [
          "card_id",
          "phrase_id",
          "phrase_version",
          "category",
          "priority",
          "title",
          "message",
          "reason",
          "target_label",
          "confirmation_status",
          "required_conditions",
          "unmet_conditions",
          "source_ids",
          "state_fingerprint"
        ],
        "title": "ActionCard",
        "type": "object"
      },
      "AgentLoopEvent": {
        "additionalProperties": false,
        "properties": {
          "decision_code": {
            "maxLength": 120,
            "minLength": 1,
            "title": "Decision Code",
            "type": "string"
          },
          "occurred_at": {
            "format": "date-time",
            "title": "Occurred At",
            "type": "string"
          },
          "output_reference": {
            "anyOf": [
              {
                "maxLength": 160,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Output Reference"
          },
          "phase": {
            "enum": [
              "PLAN",
              "ACT",
              "OBSERVE",
              "REPLAN"
            ],
            "title": "Phase",
            "type": "string"
          },
          "sequence": {
            "maximum": 128.0,
            "minimum": 1.0,
            "title": "Sequence",
            "type": "integer"
          },
          "status": {
            "enum": [
              "PLANNED",
              "COMPLETED",
              "WAITING",
              "FAILED"
            ],
            "title": "Status",
            "type": "string"
          },
          "summary": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Summary",
            "type": "string"
          },
          "tool_id": {
            "anyOf": [
              {
                "enum": [
                  "RUN_INCIDENT_ANALYSIS",
                  "REQUEST_INCIDENT_CONFIRMATION",
                  "REQUEST_FACILITY_CONFIRMATION",
                  "VERIFY_SAFETY_CONTRACT",
                  "REQUEST_OFFICIAL_EVIDENCE_REVIEW",
                  "PRESENT_DECISION_SUPPORT"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tool Id"
          }
        },
        "required": [
          "sequence",
          "phase",
          "status",
          "decision_code",
          "summary",
          "occurred_at"
        ],
        "title": "AgentLoopEvent",
        "type": "object"
      },
      "AgentMapContext": {
        "additionalProperties": false,
        "properties": {
          "coverage_scope": {
            "const": "NATIONWIDE_KOREA",
            "default": "NATIONWIDE_KOREA",
            "title": "Coverage Scope",
            "type": "string"
          },
          "hazard_overlay_status": {
            "const": "NOT_COMPUTED_NO_VALIDATED_DISPERSION_MODEL",
            "default": "NOT_COMPUTED_NO_VALIDATED_DISPERSION_MODEL",
            "title": "Hazard Overlay Status",
            "type": "string"
          },
          "incident_position": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AgentMapPoint"
              },
              {
                "type": "null"
              }
            ]
          },
          "rendering": {
            "$ref": "#/components/schemas/AgentMapRenderingContract"
          },
          "responder_position": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AgentMapPoint"
              },
              {
                "type": "null"
              }
            ]
          },
          "route": {
            "$ref": "#/components/schemas/AgentRouteState"
          }
        },
        "required": [
          "route"
        ],
        "title": "AgentMapContext",
        "type": "object"
      },
      "AgentMapPoint": {
        "additionalProperties": false,
        "properties": {
          "accuracy_m": {
            "anyOf": [
              {
                "maximum": 5000.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accuracy M"
          },
          "is_simulation": {
            "default": false,
            "title": "Is Simulation",
            "type": "boolean"
          },
          "label": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Label",
            "type": "string"
          },
          "latitude": {
            "maximum": 90.0,
            "minimum": -90.0,
            "title": "Latitude",
            "type": "number"
          },
          "longitude": {
            "maximum": 180.0,
            "minimum": -180.0,
            "title": "Longitude",
            "type": "number"
          },
          "observed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Observed At"
          },
          "source": {
            "maxLength": 80,
            "minLength": 1,
            "title": "Source",
            "type": "string"
          }
        },
        "required": [
          "latitude",
          "longitude",
          "label",
          "source"
        ],
        "title": "AgentMapPoint",
        "type": "object"
      },
      "AgentMapRenderingContract": {
        "additionalProperties": false,
        "properties": {
          "attribution_required": {
            "const": true,
            "default": true,
            "title": "Attribution Required",
            "type": "boolean"
          },
          "geometry_format": {
            "const": "GEOJSON_RFC7946",
            "default": "GEOJSON_RFC7946",
            "title": "Geometry Format",
            "type": "string"
          },
          "public_osm_standard_tiles_for_production": {
            "const": false,
            "default": false,
            "title": "Public Osm Standard Tiles For Production",
            "type": "boolean"
          },
          "recommended_renderer": {
            "const": "MAPLIBRE_GL_JS",
            "default": "MAPLIBRE_GL_JS",
            "title": "Recommended Renderer",
            "type": "string"
          },
          "route_animation_supported": {
            "const": true,
            "default": true,
            "title": "Route Animation Supported",
            "type": "boolean"
          },
          "tile_provider_required": {
            "const": true,
            "default": true,
            "title": "Tile Provider Required",
            "type": "boolean"
          }
        },
        "title": "AgentMapRenderingContract",
        "type": "object"
      },
      "AgentMemoryEvent": {
        "additionalProperties": false,
        "properties": {
          "observation_code": {
            "maxLength": 120,
            "minLength": 1,
            "title": "Observation Code",
            "type": "string"
          },
          "occurred_at": {
            "format": "date-time",
            "title": "Occurred At",
            "type": "string"
          },
          "outcome": {
            "enum": [
              "COMPLETED",
              "WAITING",
              "FAILED"
            ],
            "title": "Outcome",
            "type": "string"
          },
          "revision": {
            "minimum": 1.0,
            "title": "Revision",
            "type": "integer"
          },
          "run_id": {
            "maxLength": 80,
            "minLength": 1,
            "title": "Run Id",
            "type": "string"
          },
          "tool_id": {
            "enum": [
              "RUN_INCIDENT_ANALYSIS",
              "REQUEST_INCIDENT_CONFIRMATION",
              "REQUEST_FACILITY_CONFIRMATION",
              "VERIFY_SAFETY_CONTRACT",
              "REQUEST_OFFICIAL_EVIDENCE_REVIEW",
              "PRESENT_DECISION_SUPPORT"
            ],
            "title": "Tool Id",
            "type": "string"
          }
        },
        "required": [
          "revision",
          "run_id",
          "tool_id",
          "outcome",
          "observation_code",
          "occurred_at"
        ],
        "title": "AgentMemoryEvent",
        "type": "object"
      },
      "AgentRouteState": {
        "additionalProperties": false,
        "properties": {
          "attribution": {
            "anyOf": [
              {
                "maxLength": 300,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attribution"
          },
          "eta_seconds": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Eta Seconds"
          },
          "generated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generated At"
          },
          "geometry": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RouteGeometry"
              },
              {
                "type": "null"
              }
            ]
          },
          "message": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Message",
            "type": "string"
          },
          "progress_ratio": {
            "anyOf": [
              {
                "maximum": 1.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Progress Ratio"
          },
          "progress_ratio_is_probability": {
            "const": false,
            "default": false,
            "title": "Progress Ratio Is Probability",
            "type": "boolean"
          },
          "provider": {
            "anyOf": [
              {
                "maxLength": 80,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider"
          },
          "provider_mode": {
            "anyOf": [
              {
                "enum": [
                  "LIVE_API",
                  "CACHED_API",
                  "DEMO_SIMULATION"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider Mode"
          },
          "remaining_distance_m": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Remaining Distance M"
          },
          "route_id": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Route Id"
          },
          "status": {
            "enum": [
              "AVAILABLE",
              "DEMO_SIMULATION",
              "ROUTE_UNAVAILABLE",
              "INCIDENT_LOCATION_REQUIRED",
              "RESPONDER_POSITION_REQUIRED",
              "POSITION_STALE",
              "ROUTE_ENDPOINT_MISMATCH",
              "ARRIVED"
            ],
            "title": "Status",
            "type": "string"
          },
          "total_distance_m": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Distance M"
          },
          "traffic_applied": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Traffic Applied"
          }
        },
        "required": [
          "status",
          "message"
        ],
        "title": "AgentRouteState",
        "type": "object"
      },
      "AgentToolExecution": {
        "additionalProperties": false,
        "properties": {
          "output_reference": {
            "maxLength": 160,
            "minLength": 1,
            "title": "Output Reference",
            "type": "string"
          },
          "status": {
            "enum": [
              "COMPLETED",
              "WAITING",
              "BLOCKED",
              "FALLBACK",
              "NOT_RUN",
              "UNAVAILABLE"
            ],
            "title": "Status",
            "type": "string"
          },
          "summary": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Summary",
            "type": "string"
          },
          "tool_id": {
            "enum": [
              "RULE_PARSER",
              "SUBSTANCE_RESOLVER",
              "FACILITY_HISTORY_SEARCH",
              "HYBRID_EVIDENCE_RETRIEVER",
              "CONFIRMATION_GATE",
              "CAMEO_RULE_ENGINE",
              "GROUNDED_RAG",
              "SERVER_ROUTE_PROVIDER"
            ],
            "title": "Tool Id",
            "type": "string"
          }
        },
        "required": [
          "tool_id",
          "status",
          "output_reference",
          "summary"
        ],
        "title": "AgentToolExecution",
        "type": "object"
      },
      "AgentWorkflowStep": {
        "additionalProperties": false,
        "properties": {
          "detail": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Detail",
            "type": "string"
          },
          "label": {
            "maxLength": 120,
            "minLength": 1,
            "title": "Label",
            "type": "string"
          },
          "status": {
            "enum": [
              "COMPLETED",
              "IN_PROGRESS",
              "WAITING",
              "BLOCKED",
              "NOT_APPLICABLE"
            ],
            "title": "Status",
            "type": "string"
          },
          "step_id": {
            "enum": [
              "INCIDENT_INGESTION",
              "INCIDENT_PARSING",
              "INCIDENT_LOCATION",
              "SUBSTANCE_RESOLUTION",
              "FACILITY_HISTORY",
              "EVIDENCE_RETRIEVAL",
              "ON_SITE_CONFIRMATION",
              "CONFLICT_SCREENING",
              "GROUNDED_EXPLANATION",
              "RESPONSE_RECORD"
            ],
            "title": "Step Id",
            "type": "string"
          }
        },
        "required": [
          "step_id",
          "label",
          "status",
          "detail"
        ],
        "title": "AgentWorkflowStep",
        "type": "object"
      },
      "AnalysisResponse": {
        "additionalProperties": false,
        "properties": {
          "agent": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OperationsAgentSnapshot"
              },
              {
                "type": "null"
              }
            ]
          },
          "analysis_id": {
            "title": "Analysis Id",
            "type": "string"
          },
          "confirmation_gate": {
            "$ref": "#/components/schemas/ConfirmationGateState"
          },
          "conflict_review": {
            "discriminator": {
              "mapping": {
                "False": "#/components/schemas/UnconfirmedConflictReview",
                "True": "#/components/schemas/ExecutedConflictReview"
              },
              "propertyName": "executed"
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/UnconfirmedConflictReview"
              },
              {
                "$ref": "#/components/schemas/ExecutedConflictReview"
              }
            ],
            "title": "Conflict Review"
          },
          "evidence": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Evidence",
            "type": "array"
          },
          "grounded_rag": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/GroundedRagAnswer"
              },
              {
                "type": "null"
              }
            ]
          },
          "incident_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Incident Id"
          },
          "input_fingerprint": {
            "title": "Input Fingerprint",
            "type": "string"
          },
          "model_outputs": {
            "additionalProperties": true,
            "title": "Model Outputs",
            "type": "object"
          },
          "provenance": {
            "additionalProperties": true,
            "title": "Provenance",
            "type": "object"
          },
          "request_id": {
            "title": "Request Id",
            "type": "string"
          },
          "required_next_steps": {
            "items": {
              "type": "string"
            },
            "title": "Required Next Steps",
            "type": "array"
          },
          "safety_notice": {
            "title": "Safety Notice",
            "type": "string"
          },
          "schema_version": {
            "const": "chemiguard119-api-v1",
            "default": "chemiguard119-api-v1",
            "title": "Schema Version",
            "type": "string"
          },
          "state": {
            "enum": [
              "AWAITING_SUBSTANCE_CONFIRMATION",
              "AWAITING_INCIDENT_CONFIRMATION",
              "AWAITING_FACILITY_CONFIRMATION",
              "COMPLETED",
              "SCREENING_COMPLETED",
              "VERIFY_REQUIRED",
              "UNCLASSIFIED",
              "CAMEO_GROUP_SCREENING_ONLY"
            ],
            "title": "State",
            "type": "string"
          }
        },
        "required": [
          "analysis_id",
          "request_id",
          "state",
          "input_fingerprint",
          "model_outputs",
          "evidence",
          "conflict_review",
          "confirmation_gate",
          "required_next_steps",
          "provenance",
          "safety_notice"
        ],
        "title": "AnalysisResponse",
        "type": "object"
      },
      "BriefRequest": {
        "additionalProperties": false,
        "properties": {
          "analysis": {
            "$ref": "#/components/schemas/IncidentAnalyzeRequest",
            "description": "기존 분석 요청. 전사 원문은 수정하지 않습니다."
          },
          "invalidated_confirmation_ids": {
            "description": "이번 입력에서 취소된 확인 ID. 해당 역할의 확인을 제거합니다.",
            "items": {
              "type": "string"
            },
            "maxItems": 2,
            "title": "Invalidated Confirmation Ids",
            "type": "array"
          },
          "reported_evidence_conflict": {
            "default": false,
            "description": "새 근거 상충을 보고하면 양쪽 확인을 보류합니다. false는 상충 없음의 증명이 아닙니다.",
            "title": "Reported Evidence Conflict",
            "type": "boolean"
          },
          "revision": {
            "description": "Backend가 관리하는 사고 revision. 모델 서버가 최신 여부를 보증하지 않습니다.",
            "minimum": 0.0,
            "title": "Revision",
            "type": "integer"
          }
        },
        "required": [
          "analysis",
          "revision"
        ],
        "title": "BriefRequest",
        "type": "object"
      },
      "BriefResponse": {
        "additionalProperties": false,
        "properties": {
          "cards": {
            "items": {
              "$ref": "#/components/schemas/ActionCard"
            },
            "title": "Cards",
            "type": "array"
          },
          "confirmation_state": {
            "additionalProperties": {
              "type": "boolean"
            },
            "title": "Confirmation State",
            "type": "object"
          },
          "discovery": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "이름 후보가 없을 때만 실행하는 보조 Discovery. 현장 확인·Rule 실행 권한이 없습니다.",
            "title": "Discovery"
          },
          "facts": {
            "additionalProperties": true,
            "description": "Parser의 원문 span·부정·추정 그대로. 사실 검증 결과가 아닙니다.",
            "title": "Facts",
            "type": "object"
          },
          "handoff": {
            "additionalProperties": true,
            "description": "확인 기록과 신고 표현·미확인 사항을 분리한 인계용 구조입니다.",
            "title": "Handoff",
            "type": "object"
          },
          "incident_id": {
            "title": "Incident Id",
            "type": "string"
          },
          "input_provenance": {
            "additionalProperties": true,
            "description": "입력 전사문 hash·문자 수. STT 시간은 분석 지연시간에서 제외합니다.",
            "title": "Input Provenance",
            "type": "object"
          },
          "limitations": {
            "items": {
              "type": "string"
            },
            "title": "Limitations",
            "type": "array"
          },
          "missing_information": {
            "items": {
              "type": "string"
            },
            "title": "Missing Information",
            "type": "array"
          },
          "phase": {
            "description": "initial은 빠른 확인 안내, final은 현재 요청의 최종 snapshot입니다.",
            "enum": [
              "initial",
              "final"
            ],
            "title": "Phase",
            "type": "string"
          },
          "processing": {
            "additionalProperties": true,
            "title": "Processing",
            "type": "object"
          },
          "request_id": {
            "title": "Request Id",
            "type": "string"
          },
          "revision": {
            "title": "Revision",
            "type": "integer"
          },
          "rule_review": {
            "additionalProperties": true,
            "description": "원 Rule 결과의 제한된 필드. 서수 결과이며 전술 승인이나 확률이 아닙니다.",
            "title": "Rule Review",
            "type": "object"
          },
          "schema_version": {
            "const": "action-brief-v1",
            "default": "action-brief-v1",
            "title": "Schema Version",
            "type": "string"
          },
          "sources": {
            "items": {
              "$ref": "#/components/schemas/BriefSource"
            },
            "title": "Sources",
            "type": "array"
          },
          "state_fingerprint": {
            "description": "입력·버전 비교용 hash. 인증·승인·최신 revision 증명이 아닙니다.",
            "title": "State Fingerprint",
            "type": "string"
          },
          "status": {
            "description": "PENDING 분석 중 / COMPLETED 분석 완료(현장 승인 아님) / NEEDS_CONFIRMATION 추가 확인 / HELD 근거·조건 부족 / TIMEOUT 제한시간 초과",
            "enum": [
              "PENDING",
              "COMPLETED",
              "NEEDS_CONFIRMATION",
              "HELD",
              "TIMEOUT"
            ],
            "title": "Status",
            "type": "string"
          },
          "substance_candidates": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Substance Candidates",
            "type": "array"
          },
          "summary": {
            "maxLength": 300,
            "title": "Summary",
            "type": "string"
          },
          "versions": {
            "additionalProperties": true,
            "description": "모델·카탈로그·정책·계획 방식. LLM 사용 여부를 구분합니다.",
            "title": "Versions",
            "type": "object"
          }
        },
        "required": [
          "request_id",
          "incident_id",
          "revision",
          "state_fingerprint",
          "phase",
          "status",
          "summary",
          "cards",
          "missing_information",
          "sources",
          "confirmation_state",
          "versions"
        ],
        "title": "BriefResponse",
        "type": "object"
      },
      "BriefSource": {
        "additionalProperties": false,
        "properties": {
          "cas_number": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cas Number"
          },
          "content_sha256": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "검색 반환 내용의 hash. 전체 원문 hash가 아닙니다.",
            "title": "Content Sha256"
          },
          "document_id": {
            "description": "인덱스 원문 문서/항목 식별자",
            "title": "Document Id",
            "type": "string"
          },
          "document_version": {
            "title": "Document Version",
            "type": "string"
          },
          "freshness_status": {
            "enum": [
              "INDEX_VERSION_ONLY",
              "VERSIONED_POLICY"
            ],
            "title": "Freshness Status",
            "type": "string"
          },
          "license_status": {
            "enum": [
              "LINK_ONLY_TERMS_REVIEW_REQUIRED",
              "PROJECT_AUTHORED"
            ],
            "title": "License Status",
            "type": "string"
          },
          "role": {
            "default": "UNKNOWN",
            "enum": [
              "INCIDENT",
              "FACILITY",
              "UNKNOWN"
            ],
            "title": "Role",
            "type": "string"
          },
          "section": {
            "description": "인덱스 항목 제목 또는 내부 정책 항목. SDS section 정답 검수는 별도입니다.",
            "title": "Section",
            "type": "string"
          },
          "selection_method": {
            "default": "BASELINE_RETRIEVAL",
            "title": "Selection Method",
            "type": "string"
          },
          "source_id": {
            "title": "Source Id",
            "type": "string"
          },
          "source_type": {
            "enum": [
              "KOSHA",
              "CAMEO",
              "INTERNAL_POLICY"
            ],
            "title": "Source Type",
            "type": "string"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "source_id",
          "document_id",
          "source_type",
          "url",
          "section",
          "document_version",
          "license_status",
          "freshness_status"
        ],
        "title": "BriefSource",
        "type": "object"
      },
      "ConfirmationBasis": {
        "enum": [
          "CONTAINER_LABEL",
          "SITE_MSDS",
          "SHIPPING_DOCUMENT",
          "INSTRUMENT_READING",
          "RESPONDER_OBSERVATION",
          "OTHER_VERIFIED_SOURCE"
        ],
        "title": "ConfirmationBasis",
        "type": "string"
      },
      "ConfirmationGateState": {
        "additionalProperties": false,
        "properties": {
          "all_required_confirmed": {
            "title": "All Required Confirmed",
            "type": "boolean"
          },
          "facility_confirmed": {
            "title": "Facility Confirmed",
            "type": "boolean"
          },
          "incident_confirmed": {
            "title": "Incident Confirmed",
            "type": "boolean"
          },
          "policy": {
            "const": "TWO_AUTHENTICATED_ON_SITE_CONFIRMATIONS_REQUIRED",
            "default": "TWO_AUTHENTICATED_ON_SITE_CONFIRMATIONS_REQUIRED",
            "title": "Policy",
            "type": "string"
          },
          "rule_execution_allowed": {
            "title": "Rule Execution Allowed",
            "type": "boolean"
          }
        },
        "required": [
          "incident_confirmed",
          "facility_confirmed",
          "all_required_confirmed",
          "rule_execution_allowed"
        ],
        "title": "ConfirmationGateState",
        "type": "object"
      },
      "ConfirmedSubstanceInput": {
        "additionalProperties": false,
        "description": "백엔드가 인증된 대원 확인 레코드에서 전달하는 물질.\n\n``confirmation_id``는 사용자 자유입력 ID가 아니라 인증된 백엔드가 보관한\n현장 확인 레코드 식별자여야 한다. 모델 API는 이 레코드 참조와 확인 시각을\n필수로 받으며, 인증되지 않은 후보 입력과 타입 수준에서 분리한다.",
        "properties": {
          "cas_number": {
            "maxLength": 12,
            "minLength": 5,
            "title": "Cas Number",
            "type": "string"
          },
          "confirmation_basis": {
            "$ref": "#/components/schemas/ConfirmationBasis"
          },
          "confirmation_id": {
            "maxLength": 128,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_.:-]+$",
            "title": "Confirmation Id",
            "type": "string"
          },
          "display_name": {
            "anyOf": [
              {
                "maxLength": 160,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Display Name"
          },
          "observed_at": {
            "format": "date-time",
            "title": "Observed At",
            "type": "string"
          },
          "presence_status": {
            "const": "CONFIRMED_PRESENT",
            "title": "Presence Status",
            "type": "string"
          },
          "role": {
            "enum": [
              "INCIDENT",
              "FACILITY"
            ],
            "title": "Role",
            "type": "string"
          }
        },
        "required": [
          "confirmation_id",
          "cas_number",
          "role",
          "presence_status",
          "confirmation_basis",
          "observed_at"
        ],
        "title": "ConfirmedSubstanceInput",
        "type": "object"
      },
      "ConflictReviewRequest": {
        "additionalProperties": false,
        "properties": {
          "facility": {
            "$ref": "#/components/schemas/ConfirmedSubstanceInput"
          },
          "incident": {
            "$ref": "#/components/schemas/ConfirmedSubstanceInput"
          },
          "planned_actions": {
            "items": {
              "$ref": "#/components/schemas/PlannedActionInput"
            },
            "maxItems": 20,
            "title": "Planned Actions",
            "type": "array"
          }
        },
        "required": [
          "incident",
          "facility"
        ],
        "title": "ConflictReviewRequest",
        "type": "object"
      },
      "ErrorDetail": {
        "additionalProperties": false,
        "properties": {
          "code": {
            "title": "Code",
            "type": "string"
          },
          "fields": {
            "items": {
              "type": "string"
            },
            "title": "Fields",
            "type": "array"
          },
          "message": {
            "title": "Message",
            "type": "string"
          },
          "retryable": {
            "title": "Retryable",
            "type": "boolean"
          }
        },
        "required": [
          "code",
          "message",
          "retryable"
        ],
        "title": "ErrorDetail",
        "type": "object"
      },
      "ErrorResponse": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ErrorDetail"
          },
          "occurred_at_utc": {
            "format": "date-time",
            "title": "Occurred At Utc",
            "type": "string"
          },
          "request_id": {
            "title": "Request Id",
            "type": "string"
          },
          "schema_version": {
            "const": "chemiguard119-api-v1",
            "default": "chemiguard119-api-v1",
            "title": "Schema Version",
            "type": "string"
          },
          "service_name": {
            "const": "케미체크119",
            "default": "케미체크119",
            "title": "Service Name",
            "type": "string"
          }
        },
        "required": [
          "error",
          "request_id",
          "occurred_at_utc"
        ],
        "title": "ErrorResponse",
        "type": "object"
      },
      "EvidenceSearchRequest": {
        "additionalProperties": false,
        "properties": {
          "cas_hint": {
            "anyOf": [
              {
                "maxLength": 12,
                "minLength": 5,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cas Hint"
          },
          "cas_hint_status": {
            "anyOf": [
              {
                "enum": [
                  "RESPONDER_CONFIRMED",
                  "RESOLVER_CANDIDATE"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cas Hint Status"
          },
          "query": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Query",
            "type": "string"
          },
          "top_k": {
            "default": 5,
            "maximum": 10.0,
            "minimum": 1.0,
            "title": "Top K",
            "type": "integer"
          }
        },
        "required": [
          "query"
        ],
        "title": "EvidenceSearchRequest",
        "type": "object"
      },
      "ExecutedConflictReview": {
        "additionalProperties": false,
        "description": "두 CAS 확인 후 실행된 Rule 결과 wrapper.",
        "properties": {
          "executed": {
            "const": true,
            "title": "Executed",
            "type": "boolean"
          },
          "gate": {
            "const": "BOTH_CAS_RESPONDER_CONFIRMED",
            "title": "Gate",
            "type": "string"
          },
          "policy_mode": {
            "enum": [
              "APPROVED_ONLY",
              "PUBLIC_SOURCE_PILOT_V1"
            ],
            "title": "Policy Mode",
            "type": "string"
          },
          "result": {
            "additionalProperties": true,
            "title": "Result",
            "type": "object"
          },
          "status": {
            "anyOf": [
              {
                "enum": [
                  "COMPLETED",
                  "SCREENING_COMPLETED"
                ],
                "type": "string"
              },
              {
                "enum": [
                  "VERIFY_REQUIRED",
                  "UNCLASSIFIED",
                  "CAMEO_GROUP_SCREENING_ONLY"
                ],
                "type": "string"
              }
            ],
            "title": "Status"
          }
        },
        "required": [
          "executed",
          "status",
          "gate",
          "policy_mode",
          "result"
        ],
        "title": "ExecutedConflictReview",
        "type": "object"
      },
      "FacilityHistorySearchRequest": {
        "additionalProperties": false,
        "properties": {
          "province": {
            "anyOf": [
              {
                "maxLength": 80,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Province"
          },
          "query": {
            "maxLength": 300,
            "minLength": 2,
            "title": "Query",
            "type": "string"
          },
          "top_k": {
            "default": 10,
            "maximum": 50.0,
            "minimum": 1.0,
            "title": "Top K",
            "type": "integer"
          }
        },
        "required": [
          "query"
        ],
        "title": "FacilityHistorySearchRequest",
        "type": "object"
      },
      "GroundedRagAnswer": {
        "additionalProperties": false,
        "description": "위험 판단과 분리된, 인용 ID 검증형 RAG 설명 계약.",
        "properties": {
          "citation_validation": {
            "$ref": "#/components/schemas/GroundedRagCitationValidation"
          },
          "citations": {
            "items": {
              "$ref": "#/components/schemas/GroundedRagCitation"
            },
            "maxItems": 7,
            "title": "Citations",
            "type": "array"
          },
          "fallback_reason": {
            "anyOf": [
              {
                "maxLength": 120,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fallback Reason"
          },
          "latency_ms": {
            "minimum": 0.0,
            "title": "Latency Ms",
            "type": "number"
          },
          "limitations": {
            "items": {
              "type": "string"
            },
            "maxItems": 5,
            "minItems": 1,
            "title": "Limitations",
            "type": "array"
          },
          "mode": {
            "enum": [
              "off",
              "extractive",
              "llm"
            ],
            "title": "Mode",
            "type": "string"
          },
          "model": {
            "anyOf": [
              {
                "maxLength": 300,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Model"
          },
          "risk_decision_source": {
            "const": "DETERMINISTIC_CAMEO_RULE_ENGINE",
            "title": "Risk Decision Source",
            "type": "string"
          },
          "schema_version": {
            "const": "chemicheck119-grounded-rag-v1",
            "title": "Schema Version",
            "type": "string"
          },
          "semantic_grounding_verified": {
            "const": false,
            "title": "Semantic Grounding Verified",
            "type": "boolean"
          },
          "statements": {
            "items": {
              "$ref": "#/components/schemas/GroundedRagStatement"
            },
            "maxItems": 5,
            "title": "Statements",
            "type": "array"
          },
          "status": {
            "enum": [
              "COMPLETED",
              "FALLBACK_EXTRACTIVE",
              "DISABLED",
              "NO_GROUNDED_EVIDENCE",
              "NOT_RUN_REQUIRES_CONFIRMED_PAIR",
              "NOT_RUN_RULE_NOT_COMPLETED"
            ],
            "title": "Status",
            "type": "string"
          },
          "used_llm": {
            "title": "Used Llm",
            "type": "boolean"
          }
        },
        "required": [
          "schema_version",
          "status",
          "mode",
          "used_llm",
          "citation_validation",
          "risk_decision_source",
          "semantic_grounding_verified",
          "latency_ms",
          "limitations"
        ],
        "title": "GroundedRagAnswer",
        "type": "object"
      },
      "GroundedRagCitation": {
        "additionalProperties": false,
        "properties": {
          "cas_number": {
            "anyOf": [
              {
                "maxLength": 12,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cas Number"
          },
          "source_id": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Source Id",
            "type": "string"
          },
          "source_type": {
            "enum": [
              "KOSHA",
              "CAMEO",
              "CAMEO_RULE_ENGINE"
            ],
            "title": "Source Type",
            "type": "string"
          },
          "source_urls": {
            "items": {
              "type": "string"
            },
            "maxItems": 5,
            "minItems": 1,
            "title": "Source Urls",
            "type": "array"
          },
          "title": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "source_id",
          "source_type",
          "title",
          "source_urls"
        ],
        "title": "GroundedRagCitation",
        "type": "object"
      },
      "GroundedRagCitationValidation": {
        "additionalProperties": false,
        "properties": {
          "passed": {
            "const": true,
            "title": "Passed",
            "type": "boolean"
          },
          "unknown_source_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 0,
            "title": "Unknown Source Ids",
            "type": "array"
          }
        },
        "required": [
          "passed"
        ],
        "title": "GroundedRagCitationValidation",
        "type": "object"
      },
      "GroundedRagStatement": {
        "additionalProperties": false,
        "properties": {
          "source_ids": {
            "items": {
              "type": "string"
            },
            "maxItems": 3,
            "minItems": 1,
            "title": "Source Ids",
            "type": "array"
          },
          "text": {
            "maxLength": 600,
            "minLength": 1,
            "title": "Text",
            "type": "string"
          }
        },
        "required": [
          "text",
          "source_ids"
        ],
        "title": "GroundedRagStatement",
        "type": "object"
      },
      "IncidentAgentMemory": {
        "additionalProperties": false,
        "properties": {
          "history": {
            "items": {
              "$ref": "#/components/schemas/AgentMemoryEvent"
            },
            "maxItems": 64,
            "title": "History",
            "type": "array"
          },
          "incident_id": {
            "maxLength": 128,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_.:-]+$",
            "title": "Incident Id",
            "type": "string"
          },
          "last_analysis_id": {
            "anyOf": [
              {
                "maxLength": 128,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Analysis Id"
          },
          "last_analysis_state": {
            "anyOf": [
              {
                "maxLength": 80,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Analysis State"
          },
          "last_run_id": {
            "maxLength": 80,
            "minLength": 1,
            "title": "Last Run Id",
            "type": "string"
          },
          "memory_can_trigger_rule": {
            "const": false,
            "default": false,
            "title": "Memory Can Trigger Rule",
            "type": "boolean"
          },
          "memory_sha256": {
            "pattern": "^[0-9a-f]{64}$",
            "title": "Memory Sha256",
            "type": "string"
          },
          "memory_trust_scope": {
            "const": "ORCHESTRATION_ONLY",
            "default": "ORCHESTRATION_ONLY",
            "title": "Memory Trust Scope",
            "type": "string"
          },
          "parent_memory_sha256": {
            "anyOf": [
              {
                "pattern": "^[0-9a-f]{64}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Memory Sha256"
          },
          "pending_inputs": {
            "items": {
              "enum": [
                "INCIDENT_SUBSTANCE_CONFIRMATION",
                "FACILITY_SUBSTANCE_CONFIRMATION",
                "OFFICIAL_EVIDENCE_REVIEW"
              ],
              "type": "string"
            },
            "maxItems": 3,
            "title": "Pending Inputs",
            "type": "array"
          },
          "request_state_fingerprint": {
            "pattern": "^[0-9a-f]{64}$",
            "title": "Request State Fingerprint",
            "type": "string"
          },
          "revision": {
            "maximum": 1000000.0,
            "minimum": 0.0,
            "title": "Revision",
            "type": "integer"
          },
          "runtime_state_fingerprint": {
            "pattern": "^[0-9a-f]{64}$",
            "title": "Runtime State Fingerprint",
            "type": "string"
          },
          "schema_version": {
            "const": "chemicheck119-incident-agent-memory-v1",
            "default": "chemicheck119-incident-agent-memory-v1",
            "title": "Schema Version",
            "type": "string"
          },
          "status": {
            "enum": [
              "GOAL_COMPLETED",
              "WAITING_FOR_HUMAN",
              "PARTIAL_MAX_ACTIONS",
              "FAILED_RETRYABLE",
              "FAILED_SAFETY"
            ],
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "incident_id",
          "revision",
          "request_state_fingerprint",
          "runtime_state_fingerprint",
          "status",
          "last_run_id",
          "memory_sha256"
        ],
        "title": "IncidentAgentMemory",
        "type": "object"
      },
      "IncidentAgentStepRequest": {
        "additionalProperties": false,
        "example": {
          "analysis": {
            "evidence_top_k": 5,
            "incident_id": "INC-AGENT-0001",
            "input": {
              "text": "차아염소산나트륨 저장탱크 누출 신고",
              "type": "DISPATCH_TEXT"
            },
            "location": {
              "facility_name": "OO전자 공장",
              "province": "경기도"
            },
            "request_id": "REQ-AGENT-0001"
          },
          "max_actions": 6
        },
        "properties": {
          "analysis": {
            "$ref": "#/components/schemas/IncidentAnalyzeRequest"
          },
          "max_actions": {
            "default": 6,
            "maximum": 8.0,
            "minimum": 4.0,
            "title": "Max Actions",
            "type": "integer"
          },
          "memory": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IncidentAgentMemory"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "analysis"
        ],
        "title": "IncidentAgentStepRequest",
        "type": "object"
      },
      "IncidentAgentStepResponse": {
        "additionalProperties": false,
        "properties": {
          "analysis": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnalysisResponse"
              },
              {
                "type": "null"
              }
            ]
          },
          "autonomous_risk_decision_allowed": {
            "const": false,
            "default": false,
            "title": "Autonomous Risk Decision Allowed",
            "type": "boolean"
          },
          "decision_support_only": {
            "const": true,
            "default": true,
            "title": "Decision Support Only",
            "type": "boolean"
          },
          "events": {
            "items": {
              "$ref": "#/components/schemas/AgentLoopEvent"
            },
            "maxItems": 40,
            "minItems": 1,
            "title": "Events",
            "type": "array"
          },
          "final_decision_authority": {
            "const": "현장 지휘관",
            "default": "현장 지휘관",
            "title": "Final Decision Authority",
            "type": "string"
          },
          "incident_id": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Incident Id",
            "type": "string"
          },
          "memory": {
            "$ref": "#/components/schemas/IncidentAgentMemory"
          },
          "memory_can_trigger_rule": {
            "const": false,
            "default": false,
            "title": "Memory Can Trigger Rule",
            "type": "boolean"
          },
          "memory_mode": {
            "const": "BE_PERSISTED_EXTERNAL_MEMORY",
            "default": "BE_PERSISTED_EXTERNAL_MEMORY",
            "title": "Memory Mode",
            "type": "string"
          },
          "next_actions": {
            "items": {
              "type": "string"
            },
            "maxItems": 8,
            "minItems": 1,
            "title": "Next Actions",
            "type": "array"
          },
          "objective": {
            "const": "공식근거 기반 화학사고 충돌 검토 준비",
            "default": "공식근거 기반 화학사고 충돌 검토 준비",
            "title": "Objective",
            "type": "string"
          },
          "pending_inputs": {
            "items": {
              "enum": [
                "INCIDENT_SUBSTANCE_CONFIRMATION",
                "FACILITY_SUBSTANCE_CONFIRMATION",
                "OFFICIAL_EVIDENCE_REVIEW"
              ],
              "type": "string"
            },
            "maxItems": 3,
            "title": "Pending Inputs",
            "type": "array"
          },
          "planning_mode": {
            "const": "DETERMINISTIC_POLICY_PLANNER",
            "default": "DETERMINISTIC_POLICY_PLANNER",
            "title": "Planning Mode",
            "type": "string"
          },
          "request_id": {
            "maxLength": 128,
            "minLength": 1,
            "title": "Request Id",
            "type": "string"
          },
          "retryable": {
            "title": "Retryable",
            "type": "boolean"
          },
          "run_id": {
            "maxLength": 80,
            "minLength": 1,
            "title": "Run Id",
            "type": "string"
          },
          "schema_version": {
            "const": "chemicheck119-incident-agent-v1",
            "default": "chemicheck119-incident-agent-v1",
            "title": "Schema Version",
            "type": "string"
          },
          "selected_tool_count": {
            "maximum": 8.0,
            "minimum": 0.0,
            "title": "Selected Tool Count",
            "type": "integer"
          },
          "status": {
            "enum": [
              "GOAL_COMPLETED",
              "WAITING_FOR_HUMAN",
              "PARTIAL_MAX_ACTIONS",
              "FAILED_RETRYABLE",
              "FAILED_SAFETY"
            ],
            "title": "Status",
            "type": "string"
          },
          "tool_registry": {
            "items": {
              "enum": [
                "RUN_INCIDENT_ANALYSIS",
                "REQUEST_INCIDENT_CONFIRMATION",
                "REQUEST_FACILITY_CONFIRMATION",
                "VERIFY_SAFETY_CONTRACT",
                "REQUEST_OFFICIAL_EVIDENCE_REVIEW",
                "PRESENT_DECISION_SUPPORT"
              ],
              "type": "string"
            },
            "maxItems": 6,
            "minItems": 6,
            "title": "Tool Registry",
            "type": "array"
          },
          "trace_is_chain_of_thought": {
            "const": false,
            "default": false,
            "title": "Trace Is Chain Of Thought",
            "type": "boolean"
          }
        },
        "required": [
          "run_id",
          "request_id",
          "incident_id",
          "status",
          "selected_tool_count",
          "events",
          "memory",
          "next_actions",
          "retryable",
          "tool_registry"
        ],
        "title": "IncidentAgentStepResponse",
        "type": "object"
      },
      "IncidentAnalyzeRequest": {
        "additionalProperties": false,
        "examples": [
          {
            "evidence_top_k": 5,
            "incident_id": "INC-20260721-0001",
            "input": {
              "occurred_at": "2026-07-21T19:20:00+09:00",
              "text": "차아염소산나트륨 탱크가 누출됐고 옆 저장고에는 염산이 있습니다.",
              "type": "VOICE_TRANSCRIPT"
            },
            "location": {
              "address": "경기 화성시 팔탄면",
              "coordinate_source": "DISPATCH_SYSTEM",
              "facility_name": "OO전자 공장",
              "latitude": 37.2181,
              "longitude": 126.9417,
              "province": "경기도",
              "resolved_at": "2026-07-21T19:20:00+09:00"
            },
            "operations_context": {
              "dispatch_station_name": "화성소방서",
              "journey_state": "EN_ROUTE",
              "responder_position": {
                "accuracy_m": 12.0,
                "latitude": 37.2065,
                "longitude": 126.8311,
                "observed_at": "2026-07-21T19:22:00+09:00",
                "source": "MDT_DEVICE_GPS"
              }
            },
            "planned_actions": [
              {
                "raw_text": "누출구역 통제"
              }
            ],
            "request_id": "REQ-20260721-0001"
          }
        ],
        "properties": {
          "confirmed_facility_substance": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ConfirmedSubstanceInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "confirmed_incident_substance": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ConfirmedSubstanceInput"
              },
              {
                "type": "null"
              }
            ]
          },
          "evidence_top_k": {
            "default": 5,
            "maximum": 10.0,
            "minimum": 1.0,
            "title": "Evidence Top K",
            "type": "integer"
          },
          "incident_id": {
            "anyOf": [
              {
                "maxLength": 128,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_.:-]+$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Incident Id"
          },
          "input": {
            "$ref": "#/components/schemas/IncidentInput"
          },
          "location": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/IncidentLocation"
              },
              {
                "type": "null"
              }
            ]
          },
          "operations_context": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OperationsContext"
              },
              {
                "type": "null"
              }
            ]
          },
          "planned_actions": {
            "items": {
              "$ref": "#/components/schemas/PlannedActionInput"
            },
            "maxItems": 20,
            "title": "Planned Actions",
            "type": "array"
          },
          "request_id": {
            "anyOf": [
              {
                "maxLength": 128,
                "minLength": 1,
                "pattern": "^[A-Za-z0-9_.:-]+$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Request Id"
          }
        },
        "required": [
          "input"
        ],
        "title": "IncidentAnalyzeRequest",
        "type": "object"
      },
      "IncidentInput": {
        "additionalProperties": false,
        "properties": {
          "occurred_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Occurred At"
          },
          "text": {
            "maxLength": 4000,
            "minLength": 1,
            "title": "Text",
            "type": "string"
          },
          "type": {
            "$ref": "#/components/schemas/IncidentInputType",
            "default": "MANUAL_TEXT"
          }
        },
        "required": [
          "text"
        ],
        "title": "IncidentInput",
        "type": "object"
      },
      "IncidentInputType": {
        "enum": [
          "MANUAL_TEXT",
          "DISPATCH_TEXT",
          "VOICE_TRANSCRIPT",
          "STRUCTURED_FORM"
        ],
        "title": "IncidentInputType",
        "type": "string"
      },
      "IncidentLocation": {
        "additionalProperties": false,
        "properties": {
          "address": {
            "anyOf": [
              {
                "maxLength": 300,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Address"
          },
          "coordinate_source": {
            "anyOf": [
              {
                "enum": [
                  "DISPATCH_SYSTEM",
                  "GEOCODING_PROVIDER",
                  "RESPONDER_OBSERVATION",
                  "MANUAL_ENTRY",
                  "DEMO_FIXTURE"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Coordinate Source"
          },
          "facility_name": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Facility Name"
          },
          "geocoding_provider": {
            "anyOf": [
              {
                "maxLength": 80,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Geocoding Provider"
          },
          "latitude": {
            "anyOf": [
              {
                "maximum": 90.0,
                "minimum": -90.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latitude"
          },
          "longitude": {
            "anyOf": [
              {
                "maximum": 180.0,
                "minimum": -180.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Longitude"
          },
          "province": {
            "anyOf": [
              {
                "maxLength": 80,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Province"
          },
          "resolved_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resolved At"
          }
        },
        "title": "IncidentLocation",
        "type": "object"
      },
      "MatchedProperty": {
        "additionalProperties": false,
        "properties": {
          "field": {
            "enum": [
              "physical_state",
              "color",
              "odor",
              "use_description"
            ],
            "title": "Field",
            "type": "string"
          },
          "label": {
            "maxLength": 40,
            "minLength": 1,
            "title": "Label",
            "type": "string"
          },
          "value": {
            "maxLength": 2000,
            "minLength": 1,
            "title": "Value",
            "type": "string"
          }
        },
        "required": [
          "field",
          "label",
          "value"
        ],
        "title": "MatchedProperty",
        "type": "object"
      },
      "NextBestCheck": {
        "additionalProperties": false,
        "properties": {
          "candidate_values": {
            "items": {
              "$ref": "#/components/schemas/NextBestCheckCandidateValue"
            },
            "maxItems": 5,
            "title": "Candidate Values",
            "type": "array"
          },
          "check_id": {
            "maxLength": 120,
            "minLength": 1,
            "title": "Check Id",
            "type": "string"
          },
          "discrimination_score": {
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Discrimination Score",
            "type": "number"
          },
          "field": {
            "anyOf": [
              {
                "enum": [
                  "physical_state",
                  "color",
                  "odor",
                  "use_description"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Field"
          },
          "priority": {
            "maximum": 4.0,
            "minimum": 1.0,
            "title": "Priority",
            "type": "integer"
          },
          "prompt": {
            "maxLength": 1000,
            "minLength": 1,
            "title": "Prompt",
            "type": "string"
          },
          "reason": {
            "maxLength": 1000,
            "minLength": 1,
            "title": "Reason",
            "type": "string"
          },
          "score_is_probability": {
            "const": false,
            "title": "Score Is Probability",
            "type": "boolean"
          }
        },
        "required": [
          "priority",
          "check_id",
          "field",
          "prompt",
          "reason",
          "discrimination_score",
          "score_is_probability"
        ],
        "title": "NextBestCheck",
        "type": "object"
      },
      "NextBestCheckCandidateValue": {
        "additionalProperties": false,
        "properties": {
          "cas_number": {
            "maxLength": 12,
            "minLength": 5,
            "title": "Cas Number",
            "type": "string"
          },
          "display_name": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Display Name",
            "type": "string"
          },
          "value": {
            "maxLength": 8000,
            "minLength": 1,
            "title": "Value",
            "type": "string"
          }
        },
        "required": [
          "cas_number",
          "display_name",
          "value"
        ],
        "title": "NextBestCheckCandidateValue",
        "type": "object"
      },
      "OperationsAgentSnapshot": {
        "additionalProperties": false,
        "properties": {
          "agent_type": {
            "const": "DETERMINISTIC_FIELD_RESPONSE_ORCHESTRATOR",
            "default": "DETERMINISTIC_FIELD_RESPONSE_ORCHESTRATOR",
            "title": "Agent Type",
            "type": "string"
          },
          "autonomous_risk_decision_allowed": {
            "const": false,
            "default": false,
            "title": "Autonomous Risk Decision Allowed",
            "type": "boolean"
          },
          "current_objective": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Current Objective",
            "type": "string"
          },
          "final_decision_authority": {
            "const": "현장 지휘관",
            "default": "현장 지휘관",
            "title": "Final Decision Authority",
            "type": "string"
          },
          "map_context": {
            "$ref": "#/components/schemas/AgentMapContext"
          },
          "next_actions": {
            "items": {
              "type": "string"
            },
            "maxItems": 8,
            "minItems": 1,
            "title": "Next Actions",
            "type": "array"
          },
          "phase": {
            "enum": [
              "INCIDENT_INTAKE",
              "EN_ROUTE_TRIAGE",
              "ON_SCENE_CONFIRMATION",
              "CONFLICT_SCREENING_COMPLETE",
              "EVIDENCE_REVIEW_REQUIRED"
            ],
            "title": "Phase",
            "type": "string"
          },
          "schema_version": {
            "const": "chemicheck119-operations-agent-v1",
            "default": "chemicheck119-operations-agent-v1",
            "title": "Schema Version",
            "type": "string"
          },
          "tool_executions": {
            "items": {
              "$ref": "#/components/schemas/AgentToolExecution"
            },
            "maxItems": 8,
            "minItems": 8,
            "title": "Tool Executions",
            "type": "array"
          },
          "trace_is_chain_of_thought": {
            "const": false,
            "default": false,
            "title": "Trace Is Chain Of Thought",
            "type": "boolean"
          },
          "workflow": {
            "items": {
              "$ref": "#/components/schemas/AgentWorkflowStep"
            },
            "maxItems": 10,
            "minItems": 10,
            "title": "Workflow",
            "type": "array"
          }
        },
        "required": [
          "phase",
          "current_objective",
          "next_actions",
          "workflow",
          "tool_executions",
          "map_context"
        ],
        "title": "OperationsAgentSnapshot",
        "type": "object"
      },
      "OperationsContext": {
        "additionalProperties": false,
        "properties": {
          "dispatch_station_name": {
            "anyOf": [
              {
                "maxLength": 160,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dispatch Station Name"
          },
          "journey_state": {
            "default": "DISPATCHED",
            "enum": [
              "DISPATCHED",
              "EN_ROUTE",
              "ARRIVED",
              "ON_SCENE"
            ],
            "title": "Journey State",
            "type": "string"
          },
          "responder_position": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ResponderPosition"
              },
              {
                "type": "null"
              }
            ]
          },
          "route": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ServerRoute"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "title": "OperationsContext",
        "type": "object"
      },
      "PlannedActionInput": {
        "additionalProperties": false,
        "properties": {
          "raw_text": {
            "maxLength": 120,
            "minLength": 1,
            "title": "Raw Text",
            "type": "string"
          }
        },
        "required": [
          "raw_text"
        ],
        "title": "PlannedActionInput",
        "type": "object"
      },
      "ResolveRequest": {
        "additionalProperties": false,
        "properties": {
          "query": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Query",
            "type": "string"
          },
          "top_k": {
            "default": 3,
            "maximum": 10.0,
            "minimum": 1.0,
            "title": "Top K",
            "type": "integer"
          }
        },
        "required": [
          "query"
        ],
        "title": "ResolveRequest",
        "type": "object"
      },
      "ResponderPosition": {
        "additionalProperties": false,
        "properties": {
          "accuracy_m": {
            "anyOf": [
              {
                "maximum": 5000.0,
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accuracy M"
          },
          "latitude": {
            "maximum": 90.0,
            "minimum": -90.0,
            "title": "Latitude",
            "type": "number"
          },
          "longitude": {
            "maximum": 180.0,
            "minimum": -180.0,
            "title": "Longitude",
            "type": "number"
          },
          "observed_at": {
            "format": "date-time",
            "title": "Observed At",
            "type": "string"
          },
          "source": {
            "enum": [
              "VEHICLE_GPS",
              "MDT_DEVICE_GPS",
              "MANUAL_DISPATCH",
              "DEMO_SIMULATION"
            ],
            "title": "Source",
            "type": "string"
          }
        },
        "required": [
          "latitude",
          "longitude",
          "observed_at",
          "source"
        ],
        "title": "ResponderPosition",
        "type": "object"
      },
      "RouteGeometry": {
        "additionalProperties": false,
        "properties": {
          "coordinates": {
            "items": {
              "maxItems": 2,
              "minItems": 2,
              "prefixItems": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "type": "array"
            },
            "maxItems": 10000,
            "minItems": 2,
            "title": "Coordinates",
            "type": "array"
          },
          "type": {
            "const": "LineString",
            "default": "LineString",
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "coordinates"
        ],
        "title": "RouteGeometry",
        "type": "object"
      },
      "ServerRoute": {
        "additionalProperties": false,
        "description": "BE가 비밀키로 호출한 길찾기 사업자의 결과.\n\n모델 API는 이 값을 재계산하거나 보정하지 않는다. 데모 경로는 반드시\n``DEMO_SIMULATION``으로 표시해 실제 길찾기 결과와 혼동되지 않게 한다.",
        "properties": {
          "attribution": {
            "maxLength": 300,
            "minLength": 1,
            "title": "Attribution",
            "type": "string"
          },
          "distance_m": {
            "exclusiveMinimum": 0.0,
            "maximum": 5000000.0,
            "title": "Distance M",
            "type": "integer"
          },
          "duration_seconds": {
            "exclusiveMinimum": 0.0,
            "maximum": 604800.0,
            "title": "Duration Seconds",
            "type": "integer"
          },
          "generated_at": {
            "format": "date-time",
            "title": "Generated At",
            "type": "string"
          },
          "geometry": {
            "$ref": "#/components/schemas/RouteGeometry"
          },
          "mode": {
            "enum": [
              "LIVE_API",
              "CACHED_API",
              "DEMO_SIMULATION"
            ],
            "title": "Mode",
            "type": "string"
          },
          "provider": {
            "maxLength": 80,
            "minLength": 1,
            "title": "Provider",
            "type": "string"
          },
          "provider_reference": {
            "anyOf": [
              {
                "format": "uri",
                "maxLength": 2083,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider Reference"
          },
          "remaining_distance_m": {
            "maximum": 5000000.0,
            "minimum": 0.0,
            "title": "Remaining Distance M",
            "type": "integer"
          },
          "remaining_duration_seconds": {
            "maximum": 604800.0,
            "minimum": 0.0,
            "title": "Remaining Duration Seconds",
            "type": "integer"
          },
          "route_id": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Route Id",
            "type": "string"
          },
          "traffic_applied": {
            "title": "Traffic Applied",
            "type": "boolean"
          }
        },
        "required": [
          "provider",
          "mode",
          "route_id",
          "geometry",
          "distance_m",
          "duration_seconds",
          "remaining_distance_m",
          "remaining_duration_seconds",
          "generated_at",
          "traffic_applied",
          "attribution"
        ],
        "title": "ServerRoute",
        "type": "object"
      },
      "SubstanceDiscoveryCandidate": {
        "additionalProperties": false,
        "properties": {
          "cas_link_warning": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cas Link Warning"
          },
          "cas_number": {
            "maxLength": 12,
            "minLength": 5,
            "title": "Cas Number",
            "type": "string"
          },
          "display_name": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Display Name",
            "type": "string"
          },
          "evidence": {
            "items": {
              "$ref": "#/components/schemas/SubstanceEvidenceCard"
            },
            "maxItems": 5,
            "title": "Evidence",
            "type": "array"
          },
          "evidence_notice": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evidence Notice"
          },
          "evidence_status": {
            "maxLength": 120,
            "minLength": 1,
            "title": "Evidence Status",
            "type": "string"
          },
          "evidence_warning": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Evidence Warning"
          },
          "match_basis": {
            "enum": [
              "IDENTITY_EXPRESSION",
              "PUBLIC_PROPERTY_PROFILE",
              "IDENTITY_AND_PUBLIC_PROPERTY_PROFILE"
            ],
            "title": "Match Basis",
            "type": "string"
          },
          "matched_expression": {
            "anyOf": [
              {
                "maxLength": 500,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Matched Expression"
          },
          "matched_properties": {
            "items": {
              "$ref": "#/components/schemas/MatchedProperty"
            },
            "title": "Matched Properties",
            "type": "array"
          },
          "property_profile": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SubstancePropertyProfile"
              },
              {
                "type": "null"
              }
            ]
          },
          "rank": {
            "maximum": 5.0,
            "minimum": 1.0,
            "title": "Rank",
            "type": "integer"
          },
          "ranking_features": {
            "items": {
              "$ref": "#/components/schemas/SubstanceRankingFeature"
            },
            "maxItems": 6,
            "minItems": 6,
            "title": "Ranking Features",
            "type": "array"
          },
          "ranking_score": {
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Ranking Score",
            "type": "number"
          },
          "ranking_score_is_probability": {
            "const": false,
            "title": "Ranking Score Is Probability",
            "type": "boolean"
          },
          "requires_responder_confirmation": {
            "const": true,
            "title": "Requires Responder Confirmation",
            "type": "boolean"
          },
          "risk_determination_allowed": {
            "const": false,
            "title": "Risk Determination Allowed",
            "type": "boolean"
          },
          "rule_eligible": {
            "const": false,
            "title": "Rule Eligible",
            "type": "boolean"
          }
        },
        "required": [
          "rank",
          "cas_number",
          "display_name",
          "match_basis",
          "evidence_status",
          "ranking_score",
          "ranking_score_is_probability",
          "ranking_features",
          "requires_responder_confirmation",
          "rule_eligible",
          "risk_determination_allowed"
        ],
        "title": "SubstanceDiscoveryCandidate",
        "type": "object"
      },
      "SubstanceDiscoveryRequest": {
        "additionalProperties": false,
        "description": "물질명·CAS·관찰 정보를 후보와 공식 근거 카드로 변환하는 요청.",
        "properties": {
          "evidence_top_k": {
            "default": 3,
            "maximum": 5.0,
            "minimum": 1.0,
            "title": "Evidence Top K",
            "type": "integer"
          },
          "query": {
            "maxLength": 500,
            "minLength": 2,
            "title": "Query",
            "type": "string"
          },
          "top_k": {
            "default": 5,
            "maximum": 5.0,
            "minimum": 1.0,
            "title": "Top K",
            "type": "integer"
          }
        },
        "required": [
          "query"
        ],
        "title": "SubstanceDiscoveryRequest",
        "type": "object"
      },
      "SubstanceDiscoveryResponse": {
        "additionalProperties": false,
        "properties": {
          "candidate_score_is_probability": {
            "const": false,
            "title": "Candidate Score Is Probability",
            "type": "boolean"
          },
          "candidates": {
            "items": {
              "$ref": "#/components/schemas/SubstanceDiscoveryCandidate"
            },
            "maxItems": 5,
            "title": "Candidates",
            "type": "array"
          },
          "method": {
            "maxLength": 1000,
            "minLength": 1,
            "title": "Method",
            "type": "string"
          },
          "next_best_checks": {
            "items": {
              "$ref": "#/components/schemas/NextBestCheck"
            },
            "maxItems": 4,
            "minItems": 1,
            "title": "Next Best Checks",
            "type": "array"
          },
          "notice": {
            "maxLength": 2000,
            "minLength": 1,
            "title": "Notice",
            "type": "string"
          },
          "profile_index_available": {
            "title": "Profile Index Available",
            "type": "boolean"
          },
          "query": {
            "maxLength": 500,
            "minLength": 2,
            "title": "Query",
            "type": "string"
          },
          "ranking_model": {
            "$ref": "#/components/schemas/SubstanceRankingModel"
          },
          "requires_responder_confirmation": {
            "const": true,
            "title": "Requires Responder Confirmation",
            "type": "boolean"
          },
          "risk_determination_allowed": {
            "const": false,
            "title": "Risk Determination Allowed",
            "type": "boolean"
          },
          "rule_eligible": {
            "const": false,
            "title": "Rule Eligible",
            "type": "boolean"
          },
          "safety_notice": {
            "maxLength": 2000,
            "minLength": 1,
            "title": "Safety Notice",
            "type": "string"
          },
          "schema_version": {
            "const": "chemiguard119-api-v1",
            "default": "chemiguard119-api-v1",
            "title": "Schema Version",
            "type": "string"
          },
          "search_mode": {
            "enum": [
              "IDENTITY_AND_PROPERTY_RETRIEVAL",
              "IDENTITY_RETRIEVAL",
              "PROPERTY_PROFILE_RETRIEVAL",
              "ABSTAINED"
            ],
            "title": "Search Mode",
            "type": "string"
          },
          "status": {
            "enum": [
              "CANDIDATES_FOUND",
              "NO_RELIABLE_CANDIDATE",
              "PROFILE_INDEX_NOT_AVAILABLE"
            ],
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "query",
          "status",
          "search_mode",
          "method",
          "profile_index_available",
          "requires_responder_confirmation",
          "rule_eligible",
          "risk_determination_allowed",
          "candidate_score_is_probability",
          "ranking_model",
          "next_best_checks",
          "notice",
          "safety_notice"
        ],
        "title": "SubstanceDiscoveryResponse",
        "type": "object"
      },
      "SubstanceEvidenceCard": {
        "additionalProperties": false,
        "properties": {
          "body_preview": {
            "maxLength": 2000,
            "title": "Body Preview",
            "type": "string"
          },
          "cas_link_status": {
            "anyOf": [
              {
                "maxLength": 120,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Cas Link Status"
          },
          "cas_number": {
            "maxLength": 12,
            "minLength": 5,
            "title": "Cas Number",
            "type": "string"
          },
          "document_version": {
            "maxLength": 500,
            "title": "Document Version",
            "type": "string"
          },
          "evidence_id": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Evidence Id",
            "type": "string"
          },
          "source": {
            "enum": [
              "KOSHA",
              "CAMEO"
            ],
            "title": "Source",
            "type": "string"
          },
          "source_url": {
            "maxLength": 2000,
            "minLength": 1,
            "title": "Source Url",
            "type": "string"
          },
          "title": {
            "maxLength": 2000,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          }
        },
        "required": [
          "evidence_id",
          "cas_number",
          "source",
          "title",
          "body_preview",
          "source_url",
          "document_version"
        ],
        "title": "SubstanceEvidenceCard",
        "type": "object"
      },
      "SubstancePropertyProfile": {
        "additionalProperties": false,
        "properties": {
          "color": {
            "maxLength": 2000,
            "title": "Color",
            "type": "string"
          },
          "document_version": {
            "maxLength": 500,
            "title": "Document Version",
            "type": "string"
          },
          "odor": {
            "maxLength": 2000,
            "title": "Odor",
            "type": "string"
          },
          "physical_state": {
            "maxLength": 2000,
            "title": "Physical State",
            "type": "string"
          },
          "source_id": {
            "const": "NFA_ULSAN_CHEMICAL_INFORMATION",
            "title": "Source Id",
            "type": "string"
          },
          "source_url": {
            "maxLength": 2000,
            "minLength": 1,
            "title": "Source Url",
            "type": "string"
          },
          "use_description": {
            "maxLength": 8000,
            "title": "Use Description",
            "type": "string"
          }
        },
        "required": [
          "physical_state",
          "color",
          "odor",
          "use_description",
          "source_id",
          "source_url",
          "document_version"
        ],
        "title": "SubstancePropertyProfile",
        "type": "object"
      },
      "SubstanceRankingFeature": {
        "additionalProperties": false,
        "properties": {
          "contribution": {
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Contribution",
            "type": "number"
          },
          "evidence": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Evidence",
            "type": "string"
          },
          "name": {
            "enum": [
              "retrieval_prior",
              "identity_similarity",
              "exact_identity",
              "source_authority",
              "property_coverage",
              "official_evidence_available"
            ],
            "title": "Name",
            "type": "string"
          },
          "value": {
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Value",
            "type": "number"
          },
          "weight": {
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Weight",
            "type": "number"
          }
        },
        "required": [
          "name",
          "value",
          "weight",
          "contribution",
          "evidence"
        ],
        "title": "SubstanceRankingFeature",
        "type": "object"
      },
      "SubstanceRankingModel": {
        "additionalProperties": false,
        "properties": {
          "check_policy_version": {
            "const": "material-next-best-check-v1",
            "title": "Check Policy Version",
            "type": "string"
          },
          "fallback": {
            "const": "PRESERVE_RETRIEVAL_ORDER_ON_EQUAL_SCORE",
            "title": "Fallback",
            "type": "string"
          },
          "feature_weights": {
            "additionalProperties": {
              "type": "number"
            },
            "propertyNames": {
              "enum": [
                "retrieval_prior",
                "identity_similarity",
                "exact_identity",
                "source_authority",
                "property_coverage",
                "official_evidence_available"
              ]
            },
            "title": "Feature Weights",
            "type": "object"
          },
          "model_type": {
            "const": "EXPLAINABLE_EVIDENCE_WEIGHTED_RANKER",
            "title": "Model Type",
            "type": "string"
          },
          "model_version": {
            "const": "material-evidence-ranker-v1",
            "title": "Model Version",
            "type": "string"
          },
          "score_is_probability": {
            "const": false,
            "title": "Score Is Probability",
            "type": "boolean"
          },
          "score_semantics": {
            "const": "CANDIDATE_ORDERING_NOT_PROBABILITY",
            "title": "Score Semantics",
            "type": "string"
          },
          "training_status": {
            "const": "NOT_SUPERVISED_INSUFFICIENT_REVIEWED_LABELS",
            "title": "Training Status",
            "type": "string"
          }
        },
        "required": [
          "model_version",
          "model_type",
          "training_status",
          "score_semantics",
          "score_is_probability",
          "feature_weights",
          "check_policy_version",
          "fallback"
        ],
        "title": "SubstanceRankingModel",
        "type": "object"
      },
      "UnconfirmedConflictReview": {
        "additionalProperties": false,
        "description": "두 현장 확인 전 공개할 수 있는 충돌 검토 보류 상태의 전부.",
        "properties": {
          "executed": {
            "const": false,
            "title": "Executed",
            "type": "boolean"
          },
          "gate": {
            "const": "BOTH_CAS_RESPONDER_CONFIRMED",
            "title": "Gate",
            "type": "string"
          },
          "missing_confirmations": {
            "items": {
              "enum": [
                "incident_cas",
                "facility_cas"
              ],
              "type": "string"
            },
            "maxItems": 2,
            "minItems": 1,
            "title": "Missing Confirmations",
            "type": "array"
          },
          "reason": {
            "maxLength": 500,
            "minLength": 1,
            "title": "Reason",
            "type": "string"
          },
          "status": {
            "const": "NOT_RUN_REQUIRES_TWO_CONFIRMED_CAS",
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "executed",
          "status",
          "gate",
          "missing_confirmations",
          "reason"
        ],
        "title": "UnconfirmedConflictReview",
        "type": "object"
      }
    },
    "securitySchemes": {
      "APIKeyHeader": {
        "description": "Backend 전용 API 키. 로컬 데모 키를 운영에 사용하지 마세요.",
        "in": "header",
        "name": "X-API-Key",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "description": "화학사고 신고 구조화, 물질 후보 검색, 공식 근거 검색, 근거 제한형 RAG와 공개근거 CAMEO 스크리닝 또는 승인 Rule 조회를 제공하는 의사결정 지원 API입니다. 모델 출력은 현장 명령이 아닙니다.",
    "title": "케미체크119 모델 API",
    "version": "0.4.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/api/v1/agents/incidents/brief": {
      "post": {
        "description": "입력 revision별 stateless 분석입니다. 미확인 물질의 전술 지시를 생성하지 않습니다. timeout은 HTTP 200의 TIMEOUT 보류 응답, 슬롯 포화는 503입니다.",
        "operationId": "incident_brief_api_v1_agents_incidents_brief_post",
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "both_confirmed": {
                  "summary": "합성 예시: 두 역할 확인",
                  "value": {
                    "analysis": {
                      "confirmed_facility_substance": {
                        "cas_number": "7647-01-0",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-FACILITY",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "FACILITY"
                      },
                      "confirmed_incident_substance": {
                        "cas_number": "7681-52-9",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "revision": 3
                  }
                },
                "cancelled": {
                  "summary": "합성 예시: 확인 취소 후 재분석",
                  "value": {
                    "analysis": {
                      "confirmed_facility_substance": {
                        "cas_number": "7647-01-0",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-FACILITY",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "FACILITY"
                      },
                      "confirmed_incident_substance": {
                        "cas_number": "7681-52-9",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "invalidated_confirmation_ids": [
                      "CNF-DEMO-INCIDENT"
                    ],
                    "revision": 4
                  }
                },
                "conflict": {
                  "summary": "합성 예시: 새 근거 상충 보고",
                  "value": {
                    "analysis": {
                      "confirmed_facility_substance": {
                        "cas_number": "7647-01-0",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-FACILITY",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "FACILITY"
                      },
                      "confirmed_incident_substance": {
                        "cas_number": "7681-52-9",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "reported_evidence_conflict": true,
                    "revision": 4
                  }
                },
                "invalid_cas": {
                  "summary": "오류 예시: CAS checksum 오류(422)",
                  "value": {
                    "analysis": {
                      "confirmed_incident_substance": {
                        "cas_number": "7681-52-0",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "revision": 2
                  }
                },
                "no_evidence": {
                  "summary": "합성 예시: 인덱스의 해당 CAS 근거가 없을 수 있음",
                  "value": {
                    "analysis": {
                      "confirmed_incident_substance": {
                        "cas_number": "7732-18-5",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "미상 제품의 정보 확인 요청",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "revision": 1
                  }
                },
                "one_confirmed": {
                  "summary": "합성 예시: 사고물질만 확인",
                  "value": {
                    "analysis": {
                      "confirmed_incident_substance": {
                        "cas_number": "7681-52-9",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "revision": 2
                  }
                },
                "unconfirmed": {
                  "summary": "합성 예시: 미확인",
                  "value": {
                    "analysis": {
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "revision": 1
                  }
                }
              },
              "schema": {
                "$ref": "#/components/schemas/BriefRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "both_confirmed": {
                    "summary": "실제 artifact + 합성 입력: both_confirmed",
                    "value": {
                      "cards": [
                        {
                          "card_id": "VERIFY_LOCATION:UNKNOWN",
                          "category": "확인",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "접수 시스템의 위치 정보를 확인해 주세요. 삐 처리된 주소는 복원하지 않습니다.",
                          "phrase_id": "VERIFY_LOCATION",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "음성에서 가려진 주소를 모델이 추측하지 않습니다.",
                          "required_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "2c66cf74daac517364632a274afbdce4f961abb5707f141f81af89cdb9eafc67",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "위치를 별도로 확인해 주세요",
                          "unmet_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ]
                        },
                        {
                          "card_id": "REFERENCE_AVAILABLE:FACILITY",
                          "cas_number": "7647-01-0",
                          "category": "대응 참고",
                          "confirmation_status": "CONFIRMED_INPUT",
                          "message": "연결된 공식 자료 항목을 확인해 주세요. 제품·농도·상태와 기관 절차가 맞는지는 별도 확인이 필요합니다.",
                          "phrase_id": "REFERENCE_AVAILABLE",
                          "phrase_version": "action-catalog-v1",
                          "priority": 2,
                          "reason": "이 카드는 자료 조회 안내입니다. 자료 내용의 현장 적용이나 특정 전술을 승인하지 않습니다.",
                          "required_conditions": [
                            "역할별 CAS 확인",
                            "같은 CAS의 공식 출처",
                            "상충 보고 없음"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "FACILITY",
                          "source_ids": [
                            "FACILITY:CAMEO:3598"
                          ],
                          "state_fingerprint": "2c66cf74daac517364632a274afbdce4f961abb5707f141f81af89cdb9eafc67",
                          "tactical_authorization": false,
                          "target_label": "시설물질",
                          "title": "확인 물질의 근거를 찾았습니다",
                          "unmet_conditions": []
                        },
                        {
                          "card_id": "REFERENCE_AVAILABLE:INCIDENT",
                          "cas_number": "7681-52-9",
                          "category": "대응 참고",
                          "confirmation_status": "CONFIRMED_INPUT",
                          "message": "연결된 공식 자료 항목을 확인해 주세요. 제품·농도·상태와 기관 절차가 맞는지는 별도 확인이 필요합니다.",
                          "phrase_id": "REFERENCE_AVAILABLE",
                          "phrase_version": "action-catalog-v1",
                          "priority": 2,
                          "reason": "이 카드는 자료 조회 안내입니다. 자료 내용의 현장 적용이나 특정 전술을 승인하지 않습니다.",
                          "required_conditions": [
                            "역할별 CAS 확인",
                            "같은 CAS의 공식 출처",
                            "상충 보고 없음"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "INCIDENT",
                          "source_ids": [
                            "INCIDENT:CAMEO:4503"
                          ],
                          "state_fingerprint": "2c66cf74daac517364632a274afbdce4f961abb5707f141f81af89cdb9eafc67",
                          "tactical_authorization": false,
                          "target_label": "사고물질",
                          "title": "확인 물질의 근거를 찾았습니다",
                          "unmet_conditions": []
                        },
                        {
                          "card_id": "RULE_REFERENCE:UNKNOWN",
                          "category": "보류",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "조합 규칙 상태를 별도 필드에서 확인해 주세요. 미지원 조합은 보류하며 현장 지휘 판단을 대신하지 않습니다.",
                          "phrase_id": "RULE_REFERENCE",
                          "phrase_version": "action-catalog-v1",
                          "priority": 3,
                          "reason": "공개 CAMEO 규칙의 제한된 서수 결과이며 안전 확률이 아닙니다.",
                          "required_conditions": [
                            "제품·농도·상태·사고 조건",
                            "기관 SOP 적용 확인",
                            "전문 검수"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "2c66cf74daac517364632a274afbdce4f961abb5707f141f81af89cdb9eafc67",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "조합 규칙 조회와 전술 결정은 다릅니다",
                          "unmet_conditions": [
                            "제품·농도·상태·사고 조건",
                            "기관 SOP 적용 확인",
                            "전문 검수"
                          ]
                        },
                        {
                          "card_id": "HANDOFF:UNKNOWN",
                          "category": "인계",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "확인 상태·물질 후보·근거 링크·미확인 항목을 구분해서 전달해 주세요.",
                          "phrase_id": "HANDOFF",
                          "phrase_version": "action-catalog-v1",
                          "priority": 4,
                          "reason": "후보나 확인 대기 정보를 확정 사실로 인계하지 않습니다.",
                          "required_conditions": [
                            "현재 revision의 결과"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "2c66cf74daac517364632a274afbdce4f961abb5707f141f81af89cdb9eafc67",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "확인 내용과 남은 질문을 함께 인계하세요",
                          "unmet_conditions": []
                        }
                      ],
                      "confirmation_state": {
                        "FACILITY": true,
                        "INCIDENT": true
                      },
                      "facts": {
                        "backend": "DETERMINISTIC_BASELINE",
                        "fire_status": "UNKNOWN",
                        "incident_types": [
                          "LEAK"
                        ],
                        "missing_fields": [],
                        "needs_substance_confirmation": true,
                        "planned_actions": [],
                        "substance_mentions": [
                          {
                            "assertion": "AFFIRMED",
                            "resolver": {
                              "candidates": [
                                {
                                  "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                                  "cas_number": "7681-52-9",
                                  "catalog_candidate_only": false,
                                  "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                                  "current_inventory_confirmed": false,
                                  "has_kosha_detail": true,
                                  "match_type": "UNIQUE_ALIAS_EXACT",
                                  "matched_alias": "차아염소산 나트륨",
                                  "matched_alias_class": "AUTHORITATIVE_NAME",
                                  "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                                  "matched_alias_type": "kosha_name",
                                  "matched_alias_verification_status": "SOURCE_EXACT",
                                  "rule_eligible": false,
                                  "score": 1
                                }
                              ],
                              "confirmation_reason": "NAME_MATCH_REQUIRES_IDENTITY_AND_PRESENCE_CONFIRMATION",
                              "current_inventory_confirmed": false,
                              "input_class": "AUTHORITATIVE_ALIAS",
                              "normalized_query": "차아염소산나트륨",
                              "query": "차아염소산나트륨",
                              "requires_responder_confirmation": true,
                              "rule_input_eligible": false,
                              "status": "EXACT_ALIAS_CANDIDATE"
                            },
                            "role": "INCIDENT",
                            "surface_text": "차아염소산나트륨"
                          },
                          {
                            "assertion": "AFFIRMED",
                            "resolver": {
                              "candidates": [
                                {
                                  "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                                  "cas_number": "7647-01-0",
                                  "catalog_candidate_only": false,
                                  "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                                  "current_inventory_confirmed": false,
                                  "has_kosha_detail": true,
                                  "match_type": "UNIQUE_ALIAS_EXACT",
                                  "matched_alias": "염산",
                                  "matched_alias_class": "AUTHORITATIVE_NAME",
                                  "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                                  "matched_alias_type": "search_name",
                                  "matched_alias_verification_status": "SOURCE_EXACT",
                                  "rule_eligible": false,
                                  "score": 1
                                }
                              ],
                              "confirmation_reason": "NAME_MATCH_REQUIRES_IDENTITY_AND_PRESENCE_CONFIRMATION",
                              "current_inventory_confirmed": false,
                              "input_class": "AUTHORITATIVE_ALIAS",
                              "normalized_query": "염산",
                              "query": "염산",
                              "requires_responder_confirmation": true,
                              "rule_input_eligible": false,
                              "status": "EXACT_ALIAS_CANDIDATE"
                            },
                            "role": "FACILITY",
                            "surface_text": "염산"
                          }
                        ],
                        "warning": "결정적 기준선도 대원 확인 전 물질을 확정하지 않습니다."
                      },
                      "handoff": {
                        "analysis_complete": true,
                        "received_confirmation_records": [
                          {
                            "cas_number": "7681-52-9",
                            "confirmation_basis": "CONTAINER_LABEL",
                            "confirmation_id": "CNF-DEMO-INCIDENT",
                            "model_verified_human_confirmation": false,
                            "role": "INCIDENT"
                          },
                          {
                            "cas_number": "7647-01-0",
                            "confirmation_basis": "CONTAINER_LABEL",
                            "confirmation_id": "CNF-DEMO-FACILITY",
                            "model_verified_human_confirmation": false,
                            "role": "FACILITY"
                          }
                        ],
                        "reported_incident_types": [
                          "LEAK"
                        ],
                        "reported_mentions_not_confirmed_facts": [
                          {
                            "assertion": "AFFIRMED",
                            "role": "INCIDENT",
                            "surface_text": "차아염소산나트륨"
                          },
                          {
                            "assertion": "AFFIRMED",
                            "role": "FACILITY",
                            "surface_text": "염산"
                          }
                        ],
                        "rule_status": "SCREENING_COMPLETED",
                        "source_ids": [
                          "INCIDENT:CAMEO:4503",
                          "FACILITY:CAMEO:3598"
                        ],
                        "unconfirmed_items": [
                          "접수 시스템에서 확인한 위치"
                        ]
                      },
                      "incident_id": "INC-SYNTHETIC-1",
                      "input_provenance": {
                        "characters": 38,
                        "stt_included": false,
                        "text_sha256": "81bc382ed0b9466de97396f4a1c2264b8a11810dd6f83433095e205c329b0ff2",
                        "transcript_rewritten": false,
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "limitations": [
                        "개발용 의사결정 지원 API입니다. 현장 적용·전술 문구 전문 검수는 완료되지 않았습니다.",
                        "확인 상태는 Backend가 전달한 기록입니다. 모델 API는 실제 대원 확인이나 최신 revision을 인증하지 않습니다.",
                        "주소 비식별 부분 복원·ASR 오인식 정답 복구·근거의 의미 상충 완전 탐지는 지원하지 않습니다.",
                        "공식 자료의 존재와 CAS 일치는 제품·농도·상태·기관 SOP의 현장 적용 승인이 아닙니다."
                      ],
                      "missing_information": [
                        "접수 시스템에서 확인한 위치"
                      ],
                      "phase": "final",
                      "processing": {
                        "analysis_latency_ms": 107.599,
                        "cancel_mode": "COOPERATIVE_BOUNDED_INFLIGHT",
                        "deadline_seconds": 15,
                        "initial_build_ms": 0.142,
                        "llm": "SKIPPED_BY_POLICY",
                        "retries": 0,
                        "stt_included": false,
                        "tasks": [
                          {
                            "coordinator_slots": 2,
                            "event": "configured",
                            "max_cas_link_fallbacks": 2,
                            "max_discovery_calls": 1,
                            "max_discovery_internal_searches": 3,
                            "max_facility_history_calls": 1,
                            "max_role_retrievals": 2,
                            "max_rule_calls": 1,
                            "parallel": false,
                            "retries": 0,
                            "role": "결정적 정책",
                            "tool": "EXECUTION_LIMITS",
                            "tool_slots": 6
                          },
                          {
                            "event": "started",
                            "input_characters": 38,
                            "role": "상황정리·물질식별",
                            "tool": "PARSER_RESOLVER"
                          },
                          {
                            "candidate_promotion": false,
                            "event": "completed",
                            "role": "상황정리·물질식별",
                            "tool": "PARSER_RESOLVER"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7681-52-9",
                              "role": "INCIDENT",
                              "top_k": 5
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 17.426,
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7681-52-9",
                              "section_relevance_verified": false,
                              "top_k": 1
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_CAS_LINK_FALLBACK"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 0.011,
                            "role": "대응근거",
                            "tool": "OFFICIAL_CAS_LINK_FALLBACK"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7647-01-0",
                              "role": "FACILITY",
                              "top_k": 5
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 17.032,
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7647-01-0",
                              "section_relevance_verified": false,
                              "top_k": 1
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_CAS_LINK_FALLBACK"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 0.02,
                            "role": "대응근거",
                            "tool": "OFFICIAL_CAS_LINK_FALLBACK"
                          },
                          {
                            "event": "completed",
                            "executed": true,
                            "role": "결정적 정책",
                            "tool": "RULE_GATE"
                          }
                        ]
                      },
                      "request_id": "REQ-EVAL-both_confirmed",
                      "revision": 3,
                      "rule_review": {
                        "chemical_form_concentration_and_sop_verified": false,
                        "executed": true,
                        "gas_products": [
                          "Acid Fumes",
                          "BR2",
                          "Cl2",
                          "ClO2",
                          "HX",
                          "NOx",
                          "O2",
                          "X2",
                          "X2O"
                        ],
                        "hazard_codes": [
                          "C",
                          "E",
                          "F",
                          "G",
                          "NR",
                          "R1",
                          "R3",
                          "T"
                        ],
                        "is_probability": false,
                        "risk_level": "HIGH",
                        "risk_level_ko": "높음",
                        "scope": "LIMITED_PUBLIC_RULE_ORDINAL_NOT_FIELD_PROBABILITY",
                        "severity": "HIGH_RISK",
                        "source_urls": [
                          "https://cameochemicals.noaa.gov/chemical/4503",
                          "https://cameochemicals.noaa.gov/chemical/3598",
                          "https://cameochemicals.noaa.gov/reactivity"
                        ],
                        "status": "SCREENING_COMPLETED",
                        "tactical_authorization": false
                      },
                      "schema_version": "action-brief-v1",
                      "sources": [
                        {
                          "content_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                          "document_id": "docs/ACTION_BRIEF.md",
                          "document_version": "action-policy-v1",
                          "freshness_status": "VERSIONED_POLICY",
                          "license_status": "PROJECT_AUTHORED",
                          "role": "UNKNOWN",
                          "section": "확인 Gate와 카드 정책",
                          "selection_method": "BASELINE_RETRIEVAL",
                          "source_id": "POLICY",
                          "source_type": "INTERNAL_POLICY",
                          "url": "docs/ACTION_BRIEF.md"
                        },
                        {
                          "cas_number": "7681-52-9",
                          "content_sha256": "abc24aedb263159e9259dc96f22c1fed70b0202dbe0ceb342d6ef1320c691d0c",
                          "document_id": "4503",
                          "document_version": "3.1.0",
                          "freshness_status": "INDEX_VERSION_ONLY",
                          "license_status": "LINK_ONLY_TERMS_REVIEW_REQUIRED",
                          "role": "INCIDENT",
                          "section": "차아염소산나트륨 | NaOCl | SODIUM HYPOCHLORITE — CAMEO 반응성",
                          "selection_method": "EXACT_CAS_LINK_FALLBACK_NOT_SECTION_RELEVANCE",
                          "source_id": "INCIDENT:CAMEO:4503",
                          "source_type": "CAMEO",
                          "url": "https://cameochemicals.noaa.gov/chemical/4503"
                        },
                        {
                          "cas_number": "7647-01-0",
                          "content_sha256": "9d14f32dea73abc1743c9ffdf2f0939f936df7a4a62cab0ad1f089582cb57411",
                          "document_id": "3598",
                          "document_version": "3.1.0",
                          "freshness_status": "INDEX_VERSION_ONLY",
                          "license_status": "LINK_ONLY_TERMS_REVIEW_REQUIRED",
                          "role": "FACILITY",
                          "section": "염화수소 | HCl | HYDROCHLORIC ACID, SOLUTION — CAMEO 반응성",
                          "selection_method": "EXACT_CAS_LINK_FALLBACK_NOT_SECTION_RELEVANCE",
                          "source_id": "FACILITY:CAMEO:3598",
                          "source_type": "CAMEO",
                          "url": "https://cameochemicals.noaa.gov/chemical/3598"
                        }
                      ],
                      "state_fingerprint": "2c66cf74daac517364632a274afbdce4f961abb5707f141f81af89cdb9eafc67",
                      "status": "COMPLETED",
                      "substance_candidates": [
                        {
                          "assertion": "AFFIRMED",
                          "candidates": [
                            {
                              "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                              "cas_number": "7681-52-9",
                              "catalog_candidate_only": false,
                              "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                              "current_inventory_confirmed": false,
                              "has_kosha_detail": true,
                              "match_type": "UNIQUE_ALIAS_EXACT",
                              "matched_alias": "차아염소산 나트륨",
                              "matched_alias_class": "AUTHORITATIVE_NAME",
                              "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                              "matched_alias_type": "kosha_name",
                              "matched_alias_verification_status": "SOURCE_EXACT",
                              "rule_eligible": false,
                              "score": 1
                            }
                          ],
                          "evidence_cas_hint": "7681-52-9",
                          "matches_confirmed_cas": true,
                          "requires_responder_confirmation": true,
                          "resolver_input_class": "AUTHORITATIVE_ALIAS",
                          "resolver_status": "EXACT_ALIAS_CANDIDATE",
                          "role": "INCIDENT",
                          "surface_text": "차아염소산나트륨"
                        },
                        {
                          "assertion": "AFFIRMED",
                          "candidates": [
                            {
                              "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                              "cas_number": "7647-01-0",
                              "catalog_candidate_only": false,
                              "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                              "current_inventory_confirmed": false,
                              "has_kosha_detail": true,
                              "match_type": "UNIQUE_ALIAS_EXACT",
                              "matched_alias": "염산",
                              "matched_alias_class": "AUTHORITATIVE_NAME",
                              "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                              "matched_alias_type": "search_name",
                              "matched_alias_verification_status": "SOURCE_EXACT",
                              "rule_eligible": false,
                              "score": 1
                            }
                          ],
                          "evidence_cas_hint": "7647-01-0",
                          "matches_confirmed_cas": true,
                          "requires_responder_confirmation": true,
                          "resolver_input_class": "AUTHORITATIVE_ALIAS",
                          "resolver_status": "EXACT_ALIAS_CANDIDATE",
                          "role": "FACILITY",
                          "surface_text": "염산"
                        }
                      ],
                      "summary": "신고 표현: 누출. 확인 기록 2/2개 · 미확인 항목 1개. 후보와 확인 기록을 구분해 인계하세요. 현장 명령이 아닌 검수 전 보조 안내입니다.",
                      "versions": {
                        "catalog": "action-catalog-v1",
                        "catalog_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                        "llm": "NOT_USED",
                        "phrase_review": "DRAFT_NOT_EXPERT_REVIEWED",
                        "planning_mode": "DETERMINISTIC_POLICY_PLANNER",
                        "policy": "action-policy-v1",
                        "resolver": "resolver-char-tfidf-v4-incident-catalog-expanded",
                        "retriever": "evidence-hybrid-tfidf-v2",
                        "rule_policy": "PUBLIC_SOURCE_PILOT_V1",
                        "service": "0.4.0"
                      }
                    }
                  },
                  "cancelled": {
                    "summary": "실제 artifact + 합성 입력: cancelled",
                    "value": {
                      "cards": [
                        {
                          "card_id": "HOLD_CONFLICT:UNKNOWN",
                          "category": "보류",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "기존 확인과 새 정보가 충돌하거나 확인이 취소되었습니다. 기존 카드 대신 재확인이 필요합니다.",
                          "phrase_id": "HOLD_CONFLICT",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "새 증거의 의미를 완전 자동 검증하지 않습니다. Backend에서 확인 기록과 revision을 갱신해야 합니다.",
                          "required_conditions": [
                            "상충 해소",
                            "갱신된 현장 확인 기록"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "0378a2d0fdfbb378a2062d7a9aa246afa0600c6340ca5aa0337ca76940d416b1",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "새 근거를 확인한 뒤 다시 확인해 주세요",
                          "unmet_conditions": [
                            "상충 해소",
                            "갱신된 현장 확인 기록"
                          ]
                        },
                        {
                          "card_id": "VERIFY_LOCATION:UNKNOWN",
                          "category": "확인",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "접수 시스템의 위치 정보를 확인해 주세요. 삐 처리된 주소는 복원하지 않습니다.",
                          "phrase_id": "VERIFY_LOCATION",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "음성에서 가려진 주소를 모델이 추측하지 않습니다.",
                          "required_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "0378a2d0fdfbb378a2062d7a9aa246afa0600c6340ca5aa0337ca76940d416b1",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "위치를 별도로 확인해 주세요",
                          "unmet_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ]
                        },
                        {
                          "card_id": "VERIFY_MATERIAL:INCIDENT",
                          "category": "확인",
                          "confirmation_status": "UNCONFIRMED",
                          "message": "용기 라벨이나 제품 SDS에서 물질명과 CAS를 확인해 주세요.",
                          "phrase_id": "VERIFY_MATERIAL",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "신고 표현과 검색 후보는 현장 물질 확인을 대신하지 않습니다.",
                          "required_conditions": [
                            "역할별 현장 확인 기록"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "INCIDENT",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "0378a2d0fdfbb378a2062d7a9aa246afa0600c6340ca5aa0337ca76940d416b1",
                          "tactical_authorization": false,
                          "target_label": "사고물질",
                          "title": "물질을 확인해 주세요",
                          "unmet_conditions": [
                            "역할별 현장 확인 기록"
                          ]
                        },
                        {
                          "card_id": "HOLD_PAIR:UNKNOWN",
                          "category": "보류",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "사고물질과 시설물질의 CAS를 각각 확인해야 조합 규칙을 조회할 수 있습니다.",
                          "phrase_id": "HOLD_PAIR",
                          "phrase_version": "action-catalog-v1",
                          "priority": 2,
                          "reason": "두 CAS 확인은 규칙 실행 조건이며 진입·방수·대피 승인 조건이 아닙니다.",
                          "required_conditions": [
                            "사고물질 확인",
                            "시설물질 확인"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "0378a2d0fdfbb378a2062d7a9aa246afa0600c6340ca5aa0337ca76940d416b1",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "물질 조합 검토는 아직 보류입니다",
                          "unmet_conditions": [
                            "사고물질 확인"
                          ]
                        },
                        {
                          "card_id": "REFERENCE_AVAILABLE:FACILITY",
                          "cas_number": "7647-01-0",
                          "category": "대응 참고",
                          "confirmation_status": "CONFIRMED_INPUT",
                          "message": "연결된 공식 자료 항목을 확인해 주세요. 제품·농도·상태와 기관 절차가 맞는지는 별도 확인이 필요합니다.",
                          "phrase_id": "REFERENCE_AVAILABLE",
                          "phrase_version": "action-catalog-v1",
                          "priority": 2,
                          "reason": "이 카드는 자료 조회 안내입니다. 자료 내용의 현장 적용이나 특정 전술을 승인하지 않습니다.",
                          "required_conditions": [
                            "역할별 CAS 확인",
                            "같은 CAS의 공식 출처",
                            "상충 보고 없음"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "FACILITY",
                          "source_ids": [
                            "FACILITY:CAMEO:3598"
                          ],
                          "state_fingerprint": "0378a2d0fdfbb378a2062d7a9aa246afa0600c6340ca5aa0337ca76940d416b1",
                          "tactical_authorization": false,
                          "target_label": "시설물질",
                          "title": "확인 물질의 근거를 찾았습니다",
                          "unmet_conditions": []
                        },
                        {
                          "card_id": "HANDOFF:UNKNOWN",
                          "category": "인계",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "확인 상태·물질 후보·근거 링크·미확인 항목을 구분해서 전달해 주세요.",
                          "phrase_id": "HANDOFF",
                          "phrase_version": "action-catalog-v1",
                          "priority": 4,
                          "reason": "후보나 확인 대기 정보를 확정 사실로 인계하지 않습니다.",
                          "required_conditions": [
                            "현재 revision의 결과"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "0378a2d0fdfbb378a2062d7a9aa246afa0600c6340ca5aa0337ca76940d416b1",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "확인 내용과 남은 질문을 함께 인계하세요",
                          "unmet_conditions": []
                        }
                      ],
                      "confirmation_state": {
                        "FACILITY": true,
                        "INCIDENT": false
                      },
                      "facts": {
                        "backend": "DETERMINISTIC_BASELINE",
                        "fire_status": "UNKNOWN",
                        "incident_types": [
                          "LEAK"
                        ],
                        "missing_fields": [],
                        "needs_substance_confirmation": true,
                        "planned_actions": [],
                        "substance_mentions": [
                          {
                            "assertion": "AFFIRMED",
                            "resolver": {
                              "candidates": [
                                {
                                  "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                                  "cas_number": "7681-52-9",
                                  "catalog_candidate_only": false,
                                  "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                                  "current_inventory_confirmed": false,
                                  "has_kosha_detail": true,
                                  "match_type": "UNIQUE_ALIAS_EXACT",
                                  "matched_alias": "차아염소산 나트륨",
                                  "matched_alias_class": "AUTHORITATIVE_NAME",
                                  "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                                  "matched_alias_type": "kosha_name",
                                  "matched_alias_verification_status": "SOURCE_EXACT",
                                  "rule_eligible": false,
                                  "score": 1
                                }
                              ],
                              "confirmation_reason": "NAME_MATCH_REQUIRES_IDENTITY_AND_PRESENCE_CONFIRMATION",
                              "current_inventory_confirmed": false,
                              "input_class": "AUTHORITATIVE_ALIAS",
                              "normalized_query": "차아염소산나트륨",
                              "query": "차아염소산나트륨",
                              "requires_responder_confirmation": true,
                              "rule_input_eligible": false,
                              "status": "EXACT_ALIAS_CANDIDATE"
                            },
                            "role": "INCIDENT",
                            "surface_text": "차아염소산나트륨"
                          },
                          {
                            "assertion": "AFFIRMED",
                            "resolver": {
                              "candidates": [
                                {
                                  "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                                  "cas_number": "7647-01-0",
                                  "catalog_candidate_only": false,
                                  "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                                  "current_inventory_confirmed": false,
                                  "has_kosha_detail": true,
                                  "match_type": "UNIQUE_ALIAS_EXACT",
                                  "matched_alias": "염산",
                                  "matched_alias_class": "AUTHORITATIVE_NAME",
                                  "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                                  "matched_alias_type": "search_name",
                                  "matched_alias_verification_status": "SOURCE_EXACT",
                                  "rule_eligible": false,
                                  "score": 1
                                }
                              ],
                              "confirmation_reason": "NAME_MATCH_REQUIRES_IDENTITY_AND_PRESENCE_CONFIRMATION",
                              "current_inventory_confirmed": false,
                              "input_class": "AUTHORITATIVE_ALIAS",
                              "normalized_query": "염산",
                              "query": "염산",
                              "requires_responder_confirmation": true,
                              "rule_input_eligible": false,
                              "status": "EXACT_ALIAS_CANDIDATE"
                            },
                            "role": "FACILITY",
                            "surface_text": "염산"
                          }
                        ],
                        "warning": "결정적 기준선도 대원 확인 전 물질을 확정하지 않습니다."
                      },
                      "handoff": {
                        "analysis_complete": true,
                        "received_confirmation_records": [
                          {
                            "cas_number": "7647-01-0",
                            "confirmation_basis": "CONTAINER_LABEL",
                            "confirmation_id": "CNF-DEMO-FACILITY",
                            "model_verified_human_confirmation": false,
                            "role": "FACILITY"
                          }
                        ],
                        "reported_incident_types": [
                          "LEAK"
                        ],
                        "reported_mentions_not_confirmed_facts": [
                          {
                            "assertion": "AFFIRMED",
                            "role": "INCIDENT",
                            "surface_text": "차아염소산나트륨"
                          },
                          {
                            "assertion": "AFFIRMED",
                            "role": "FACILITY",
                            "surface_text": "염산"
                          }
                        ],
                        "rule_status": "NOT_RUN_REQUIRES_TWO_CONFIRMED_CAS",
                        "source_ids": [
                          "FACILITY:CAMEO:3598"
                        ],
                        "unconfirmed_items": [
                          "사고물질의 현장 확인 기록",
                          "접수 시스템에서 확인한 위치"
                        ]
                      },
                      "incident_id": "INC-SYNTHETIC-1",
                      "input_provenance": {
                        "characters": 38,
                        "stt_included": false,
                        "text_sha256": "81bc382ed0b9466de97396f4a1c2264b8a11810dd6f83433095e205c329b0ff2",
                        "transcript_rewritten": false,
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "limitations": [
                        "개발용 의사결정 지원 API입니다. 현장 적용·전술 문구 전문 검수는 완료되지 않았습니다.",
                        "확인 상태는 Backend가 전달한 기록입니다. 모델 API는 실제 대원 확인이나 최신 revision을 인증하지 않습니다.",
                        "주소 비식별 부분 복원·ASR 오인식 정답 복구·근거의 의미 상충 완전 탐지는 지원하지 않습니다.",
                        "공식 자료의 존재와 CAS 일치는 제품·농도·상태·기관 SOP의 현장 적용 승인이 아닙니다."
                      ],
                      "missing_information": [
                        "사고물질의 현장 확인 기록",
                        "접수 시스템에서 확인한 위치"
                      ],
                      "phase": "final",
                      "processing": {
                        "analysis_latency_ms": 107.119,
                        "cancel_mode": "COOPERATIVE_BOUNDED_INFLIGHT",
                        "deadline_seconds": 15,
                        "initial_build_ms": 0.208,
                        "llm": "SKIPPED_BY_POLICY",
                        "retries": 0,
                        "stt_included": false,
                        "tasks": [
                          {
                            "coordinator_slots": 2,
                            "event": "configured",
                            "max_cas_link_fallbacks": 2,
                            "max_discovery_calls": 1,
                            "max_discovery_internal_searches": 3,
                            "max_facility_history_calls": 1,
                            "max_role_retrievals": 2,
                            "max_rule_calls": 1,
                            "parallel": false,
                            "retries": 0,
                            "role": "결정적 정책",
                            "tool": "EXECUTION_LIMITS",
                            "tool_slots": 6
                          },
                          {
                            "event": "started",
                            "input_characters": 38,
                            "role": "상황정리·물질식별",
                            "tool": "PARSER_RESOLVER"
                          },
                          {
                            "candidate_promotion": false,
                            "event": "completed",
                            "role": "상황정리·물질식별",
                            "tool": "PARSER_RESOLVER"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7681-52-9",
                              "role": "INCIDENT",
                              "top_k": 5
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 17.597,
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7647-01-0",
                              "role": "FACILITY",
                              "top_k": 5
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 17.139,
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7647-01-0",
                              "section_relevance_verified": false,
                              "top_k": 1
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_CAS_LINK_FALLBACK"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 0.01,
                            "role": "대응근거",
                            "tool": "OFFICIAL_CAS_LINK_FALLBACK"
                          },
                          {
                            "event": "completed",
                            "executed": false,
                            "role": "결정적 정책",
                            "tool": "RULE_GATE"
                          }
                        ]
                      },
                      "request_id": "REQ-EVAL-cancelled",
                      "revision": 4,
                      "rule_review": {
                        "executed": false,
                        "is_probability": false,
                        "status": "NOT_RUN_REQUIRES_TWO_CONFIRMED_CAS",
                        "tactical_authorization": false
                      },
                      "schema_version": "action-brief-v1",
                      "sources": [
                        {
                          "content_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                          "document_id": "docs/ACTION_BRIEF.md",
                          "document_version": "action-policy-v1",
                          "freshness_status": "VERSIONED_POLICY",
                          "license_status": "PROJECT_AUTHORED",
                          "role": "UNKNOWN",
                          "section": "확인 Gate와 카드 정책",
                          "selection_method": "BASELINE_RETRIEVAL",
                          "source_id": "POLICY",
                          "source_type": "INTERNAL_POLICY",
                          "url": "docs/ACTION_BRIEF.md"
                        },
                        {
                          "cas_number": "7647-01-0",
                          "content_sha256": "9d14f32dea73abc1743c9ffdf2f0939f936df7a4a62cab0ad1f089582cb57411",
                          "document_id": "3598",
                          "document_version": "3.1.0",
                          "freshness_status": "INDEX_VERSION_ONLY",
                          "license_status": "LINK_ONLY_TERMS_REVIEW_REQUIRED",
                          "role": "FACILITY",
                          "section": "염화수소 | HCl | HYDROCHLORIC ACID, SOLUTION — CAMEO 반응성",
                          "selection_method": "EXACT_CAS_LINK_FALLBACK_NOT_SECTION_RELEVANCE",
                          "source_id": "FACILITY:CAMEO:3598",
                          "source_type": "CAMEO",
                          "url": "https://cameochemicals.noaa.gov/chemical/3598"
                        }
                      ],
                      "state_fingerprint": "0378a2d0fdfbb378a2062d7a9aa246afa0600c6340ca5aa0337ca76940d416b1",
                      "status": "NEEDS_CONFIRMATION",
                      "substance_candidates": [
                        {
                          "assertion": "AFFIRMED",
                          "candidates": [
                            {
                              "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                              "cas_number": "7681-52-9",
                              "catalog_candidate_only": false,
                              "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                              "current_inventory_confirmed": false,
                              "has_kosha_detail": true,
                              "match_type": "UNIQUE_ALIAS_EXACT",
                              "matched_alias": "차아염소산 나트륨",
                              "matched_alias_class": "AUTHORITATIVE_NAME",
                              "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                              "matched_alias_type": "kosha_name",
                              "matched_alias_verification_status": "SOURCE_EXACT",
                              "rule_eligible": false,
                              "score": 1
                            }
                          ],
                          "evidence_cas_hint": "7681-52-9",
                          "matches_confirmed_cas": false,
                          "requires_responder_confirmation": true,
                          "resolver_input_class": "AUTHORITATIVE_ALIAS",
                          "resolver_status": "EXACT_ALIAS_CANDIDATE",
                          "role": "INCIDENT",
                          "surface_text": "차아염소산나트륨"
                        },
                        {
                          "assertion": "AFFIRMED",
                          "candidates": [
                            {
                              "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                              "cas_number": "7647-01-0",
                              "catalog_candidate_only": false,
                              "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                              "current_inventory_confirmed": false,
                              "has_kosha_detail": true,
                              "match_type": "UNIQUE_ALIAS_EXACT",
                              "matched_alias": "염산",
                              "matched_alias_class": "AUTHORITATIVE_NAME",
                              "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                              "matched_alias_type": "search_name",
                              "matched_alias_verification_status": "SOURCE_EXACT",
                              "rule_eligible": false,
                              "score": 1
                            }
                          ],
                          "evidence_cas_hint": "7647-01-0",
                          "matches_confirmed_cas": true,
                          "requires_responder_confirmation": true,
                          "resolver_input_class": "AUTHORITATIVE_ALIAS",
                          "resolver_status": "EXACT_ALIAS_CANDIDATE",
                          "role": "FACILITY",
                          "surface_text": "염산"
                        }
                      ],
                      "summary": "신고 표현: 누출. 확인 기록 1/2개 · 미확인 항목 2개. 후보와 확인 기록을 구분해 인계하세요. 현장 명령이 아닌 검수 전 보조 안내입니다.",
                      "versions": {
                        "catalog": "action-catalog-v1",
                        "catalog_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                        "llm": "NOT_USED",
                        "phrase_review": "DRAFT_NOT_EXPERT_REVIEWED",
                        "planning_mode": "DETERMINISTIC_POLICY_PLANNER",
                        "policy": "action-policy-v1",
                        "resolver": "resolver-char-tfidf-v4-incident-catalog-expanded",
                        "retriever": "evidence-hybrid-tfidf-v2",
                        "rule_policy": "PUBLIC_SOURCE_PILOT_V1",
                        "service": "0.4.0"
                      }
                    }
                  },
                  "missing_cas_evidence": {
                    "summary": "실제 artifact + 합성 입력: missing_cas_evidence",
                    "value": {
                      "cards": [
                        {
                          "card_id": "VERIFY_LOCATION:UNKNOWN",
                          "category": "확인",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "접수 시스템의 위치 정보를 확인해 주세요. 삐 처리된 주소는 복원하지 않습니다.",
                          "phrase_id": "VERIFY_LOCATION",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "음성에서 가려진 주소를 모델이 추측하지 않습니다.",
                          "required_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "adcc78f306e51050da34057c33497b5d9ad6cd4282711edc6842eae7439c2729",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "위치를 별도로 확인해 주세요",
                          "unmet_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ]
                        },
                        {
                          "card_id": "VERIFY_MATERIAL:FACILITY",
                          "category": "확인",
                          "confirmation_status": "UNCONFIRMED",
                          "message": "용기 라벨이나 제품 SDS에서 물질명과 CAS를 확인해 주세요.",
                          "phrase_id": "VERIFY_MATERIAL",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "신고 표현과 검색 후보는 현장 물질 확인을 대신하지 않습니다.",
                          "required_conditions": [
                            "역할별 현장 확인 기록"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "FACILITY",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "adcc78f306e51050da34057c33497b5d9ad6cd4282711edc6842eae7439c2729",
                          "tactical_authorization": false,
                          "target_label": "시설물질",
                          "title": "물질을 확인해 주세요",
                          "unmet_conditions": [
                            "역할별 현장 확인 기록"
                          ]
                        },
                        {
                          "card_id": "HOLD_PAIR:UNKNOWN",
                          "category": "보류",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "사고물질과 시설물질의 CAS를 각각 확인해야 조합 규칙을 조회할 수 있습니다.",
                          "phrase_id": "HOLD_PAIR",
                          "phrase_version": "action-catalog-v1",
                          "priority": 2,
                          "reason": "두 CAS 확인은 규칙 실행 조건이며 진입·방수·대피 승인 조건이 아닙니다.",
                          "required_conditions": [
                            "사고물질 확인",
                            "시설물질 확인"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "adcc78f306e51050da34057c33497b5d9ad6cd4282711edc6842eae7439c2729",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "물질 조합 검토는 아직 보류입니다",
                          "unmet_conditions": [
                            "시설물질 확인"
                          ]
                        },
                        {
                          "card_id": "NO_EVIDENCE:INCIDENT",
                          "cas_number": "9999999-99-5",
                          "category": "보류",
                          "confirmation_status": "CONFIRMED_INPUT",
                          "message": "제품 SDS와 해당 기관의 절차를 별도로 확인해 주세요.",
                          "phrase_id": "NO_EVIDENCE",
                          "phrase_version": "action-catalog-v1",
                          "priority": 2,
                          "reason": "검색 결과 없음·검색 실패·출처 불일치는 생성 답변으로 채우지 않습니다.",
                          "required_conditions": [
                            "같은 CAS의 사용 가능한 공식 근거"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "INCIDENT",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "adcc78f306e51050da34057c33497b5d9ad6cd4282711edc6842eae7439c2729",
                          "tactical_authorization": false,
                          "target_label": "사고물질",
                          "title": "사용할 근거가 부족합니다",
                          "unmet_conditions": [
                            "같은 CAS의 사용 가능한 공식 근거"
                          ]
                        },
                        {
                          "card_id": "HANDOFF:UNKNOWN",
                          "category": "인계",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "확인 상태·물질 후보·근거 링크·미확인 항목을 구분해서 전달해 주세요.",
                          "phrase_id": "HANDOFF",
                          "phrase_version": "action-catalog-v1",
                          "priority": 4,
                          "reason": "후보나 확인 대기 정보를 확정 사실로 인계하지 않습니다.",
                          "required_conditions": [
                            "현재 revision의 결과"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "adcc78f306e51050da34057c33497b5d9ad6cd4282711edc6842eae7439c2729",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "확인 내용과 남은 질문을 함께 인계하세요",
                          "unmet_conditions": []
                        }
                      ],
                      "confirmation_state": {
                        "FACILITY": false,
                        "INCIDENT": true
                      },
                      "facts": {
                        "backend": "DETERMINISTIC_BASELINE",
                        "fire_status": "UNKNOWN",
                        "incident_types": [
                          "UNKNOWN"
                        ],
                        "missing_fields": [
                          "substance"
                        ],
                        "needs_substance_confirmation": true,
                        "planned_actions": [],
                        "substance_mentions": [],
                        "warning": "결정적 기준선도 대원 확인 전 물질을 확정하지 않습니다."
                      },
                      "handoff": {
                        "analysis_complete": true,
                        "received_confirmation_records": [
                          {
                            "cas_number": "9999999-99-5",
                            "confirmation_basis": "CONTAINER_LABEL",
                            "confirmation_id": "CNF-DEMO-INCIDENT",
                            "model_verified_human_confirmation": false,
                            "role": "INCIDENT"
                          }
                        ],
                        "reported_incident_types": [
                          "UNKNOWN"
                        ],
                        "reported_mentions_not_confirmed_facts": [],
                        "rule_status": "NOT_RUN_REQUIRES_TWO_CONFIRMED_CAS",
                        "source_ids": [],
                        "unconfirmed_items": [
                          "시설물질의 현장 확인 기록",
                          "접수 시스템에서 확인한 위치",
                          "사고물질의 사용 가능한 공식 근거"
                        ]
                      },
                      "incident_id": "INC-SYNTHETIC-1",
                      "input_provenance": {
                        "characters": 17,
                        "stt_included": false,
                        "text_sha256": "044f75da713f9d34485226b60fa29eb2a425bd6d2bcb55cbff1e566a8e9ceaef",
                        "transcript_rewritten": false,
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "limitations": [
                        "개발용 의사결정 지원 API입니다. 현장 적용·전술 문구 전문 검수는 완료되지 않았습니다.",
                        "확인 상태는 Backend가 전달한 기록입니다. 모델 API는 실제 대원 확인이나 최신 revision을 인증하지 않습니다.",
                        "주소 비식별 부분 복원·ASR 오인식 정답 복구·근거의 의미 상충 완전 탐지는 지원하지 않습니다.",
                        "공식 자료의 존재와 CAS 일치는 제품·농도·상태·기관 SOP의 현장 적용 승인이 아닙니다."
                      ],
                      "missing_information": [
                        "시설물질의 현장 확인 기록",
                        "접수 시스템에서 확인한 위치",
                        "사고물질의 사용 가능한 공식 근거"
                      ],
                      "phase": "final",
                      "processing": {
                        "analysis_latency_ms": 70.652,
                        "cancel_mode": "COOPERATIVE_BOUNDED_INFLIGHT",
                        "deadline_seconds": 15,
                        "initial_build_ms": 0.185,
                        "llm": "SKIPPED_BY_POLICY",
                        "retries": 0,
                        "stt_included": false,
                        "tasks": [
                          {
                            "coordinator_slots": 2,
                            "event": "configured",
                            "max_cas_link_fallbacks": 2,
                            "max_discovery_calls": 1,
                            "max_discovery_internal_searches": 3,
                            "max_facility_history_calls": 1,
                            "max_role_retrievals": 2,
                            "max_rule_calls": 1,
                            "parallel": false,
                            "retries": 0,
                            "role": "결정적 정책",
                            "tool": "EXECUTION_LIMITS",
                            "tool_slots": 6
                          },
                          {
                            "event": "started",
                            "input_characters": 17,
                            "role": "상황정리·물질식별",
                            "tool": "PARSER_RESOLVER"
                          },
                          {
                            "candidate_promotion": false,
                            "event": "completed",
                            "role": "상황정리·물질식별",
                            "tool": "PARSER_RESOLVER"
                          },
                          {
                            "arguments": {
                              "cas_hint": "9999999-99-5",
                              "role": "INCIDENT",
                              "top_k": 5
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 0.012,
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "arguments": {
                              "cas_hint": "9999999-99-5",
                              "section_relevance_verified": false,
                              "top_k": 1
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_CAS_LINK_FALLBACK"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 0.002,
                            "role": "대응근거",
                            "tool": "OFFICIAL_CAS_LINK_FALLBACK"
                          },
                          {
                            "event": "completed",
                            "executed": false,
                            "role": "결정적 정책",
                            "tool": "RULE_GATE"
                          }
                        ]
                      },
                      "request_id": "REQ-EVAL-missing_cas_evidence",
                      "revision": 2,
                      "rule_review": {
                        "executed": false,
                        "is_probability": false,
                        "status": "NOT_RUN_REQUIRES_TWO_CONFIRMED_CAS",
                        "tactical_authorization": false
                      },
                      "schema_version": "action-brief-v1",
                      "sources": [
                        {
                          "content_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                          "document_id": "docs/ACTION_BRIEF.md",
                          "document_version": "action-policy-v1",
                          "freshness_status": "VERSIONED_POLICY",
                          "license_status": "PROJECT_AUTHORED",
                          "role": "UNKNOWN",
                          "section": "확인 Gate와 카드 정책",
                          "selection_method": "BASELINE_RETRIEVAL",
                          "source_id": "POLICY",
                          "source_type": "INTERNAL_POLICY",
                          "url": "docs/ACTION_BRIEF.md"
                        }
                      ],
                      "state_fingerprint": "adcc78f306e51050da34057c33497b5d9ad6cd4282711edc6842eae7439c2729",
                      "status": "HELD",
                      "substance_candidates": [],
                      "summary": "신고 표현: 유형 미상. 확인 기록 1/2개 · 미확인 항목 3개. 후보와 확인 기록을 구분해 인계하세요. 현장 명령이 아닌 검수 전 보조 안내입니다.",
                      "versions": {
                        "catalog": "action-catalog-v1",
                        "catalog_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                        "llm": "NOT_USED",
                        "phrase_review": "DRAFT_NOT_EXPERT_REVIEWED",
                        "planning_mode": "DETERMINISTIC_POLICY_PLANNER",
                        "policy": "action-policy-v1",
                        "resolver": "resolver-char-tfidf-v4-incident-catalog-expanded",
                        "retriever": "evidence-hybrid-tfidf-v2",
                        "rule_policy": "PUBLIC_SOURCE_PILOT_V1",
                        "service": "0.4.0"
                      }
                    }
                  },
                  "normal_unconfirmed": {
                    "summary": "실제 artifact + 합성 입력: normal_unconfirmed",
                    "value": {
                      "cards": [
                        {
                          "card_id": "VERIFY_LOCATION:UNKNOWN",
                          "category": "확인",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "접수 시스템의 위치 정보를 확인해 주세요. 삐 처리된 주소는 복원하지 않습니다.",
                          "phrase_id": "VERIFY_LOCATION",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "음성에서 가려진 주소를 모델이 추측하지 않습니다.",
                          "required_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "1c1fc20249bc8dec408f086d1c0dc43b76ea9e917cda1c3fe650e9635cf4c173",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "위치를 별도로 확인해 주세요",
                          "unmet_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ]
                        },
                        {
                          "card_id": "VERIFY_MATERIAL:FACILITY",
                          "category": "확인",
                          "confirmation_status": "UNCONFIRMED",
                          "message": "용기 라벨이나 제품 SDS에서 물질명과 CAS를 확인해 주세요.",
                          "phrase_id": "VERIFY_MATERIAL",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "신고 표현과 검색 후보는 현장 물질 확인을 대신하지 않습니다.",
                          "required_conditions": [
                            "역할별 현장 확인 기록"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "FACILITY",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "1c1fc20249bc8dec408f086d1c0dc43b76ea9e917cda1c3fe650e9635cf4c173",
                          "tactical_authorization": false,
                          "target_label": "시설물질",
                          "title": "물질을 확인해 주세요",
                          "unmet_conditions": [
                            "역할별 현장 확인 기록"
                          ]
                        },
                        {
                          "card_id": "VERIFY_MATERIAL:INCIDENT",
                          "category": "확인",
                          "confirmation_status": "UNCONFIRMED",
                          "message": "용기 라벨이나 제품 SDS에서 물질명과 CAS를 확인해 주세요.",
                          "phrase_id": "VERIFY_MATERIAL",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "신고 표현과 검색 후보는 현장 물질 확인을 대신하지 않습니다.",
                          "required_conditions": [
                            "역할별 현장 확인 기록"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "INCIDENT",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "1c1fc20249bc8dec408f086d1c0dc43b76ea9e917cda1c3fe650e9635cf4c173",
                          "tactical_authorization": false,
                          "target_label": "사고물질",
                          "title": "물질을 확인해 주세요",
                          "unmet_conditions": [
                            "역할별 현장 확인 기록"
                          ]
                        },
                        {
                          "card_id": "HOLD_PAIR:UNKNOWN",
                          "category": "보류",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "사고물질과 시설물질의 CAS를 각각 확인해야 조합 규칙을 조회할 수 있습니다.",
                          "phrase_id": "HOLD_PAIR",
                          "phrase_version": "action-catalog-v1",
                          "priority": 2,
                          "reason": "두 CAS 확인은 규칙 실행 조건이며 진입·방수·대피 승인 조건이 아닙니다.",
                          "required_conditions": [
                            "사고물질 확인",
                            "시설물질 확인"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "1c1fc20249bc8dec408f086d1c0dc43b76ea9e917cda1c3fe650e9635cf4c173",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "물질 조합 검토는 아직 보류입니다",
                          "unmet_conditions": [
                            "사고물질 확인",
                            "시설물질 확인"
                          ]
                        },
                        {
                          "card_id": "HANDOFF:UNKNOWN",
                          "category": "인계",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "확인 상태·물질 후보·근거 링크·미확인 항목을 구분해서 전달해 주세요.",
                          "phrase_id": "HANDOFF",
                          "phrase_version": "action-catalog-v1",
                          "priority": 4,
                          "reason": "후보나 확인 대기 정보를 확정 사실로 인계하지 않습니다.",
                          "required_conditions": [
                            "현재 revision의 결과"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "1c1fc20249bc8dec408f086d1c0dc43b76ea9e917cda1c3fe650e9635cf4c173",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "확인 내용과 남은 질문을 함께 인계하세요",
                          "unmet_conditions": []
                        }
                      ],
                      "confirmation_state": {
                        "FACILITY": false,
                        "INCIDENT": false
                      },
                      "facts": {
                        "backend": "DETERMINISTIC_BASELINE",
                        "fire_status": "UNKNOWN",
                        "incident_types": [
                          "LEAK"
                        ],
                        "missing_fields": [],
                        "needs_substance_confirmation": true,
                        "planned_actions": [],
                        "substance_mentions": [
                          {
                            "assertion": "AFFIRMED",
                            "resolver": {
                              "candidates": [
                                {
                                  "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                                  "cas_number": "7681-52-9",
                                  "catalog_candidate_only": false,
                                  "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                                  "current_inventory_confirmed": false,
                                  "has_kosha_detail": true,
                                  "match_type": "UNIQUE_ALIAS_EXACT",
                                  "matched_alias": "차아염소산 나트륨",
                                  "matched_alias_class": "AUTHORITATIVE_NAME",
                                  "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                                  "matched_alias_type": "kosha_name",
                                  "matched_alias_verification_status": "SOURCE_EXACT",
                                  "rule_eligible": false,
                                  "score": 1
                                }
                              ],
                              "confirmation_reason": "NAME_MATCH_REQUIRES_IDENTITY_AND_PRESENCE_CONFIRMATION",
                              "current_inventory_confirmed": false,
                              "input_class": "AUTHORITATIVE_ALIAS",
                              "normalized_query": "차아염소산나트륨",
                              "query": "차아염소산나트륨",
                              "requires_responder_confirmation": true,
                              "rule_input_eligible": false,
                              "status": "EXACT_ALIAS_CANDIDATE"
                            },
                            "role": "INCIDENT",
                            "surface_text": "차아염소산나트륨"
                          },
                          {
                            "assertion": "AFFIRMED",
                            "resolver": {
                              "candidates": [
                                {
                                  "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                                  "cas_number": "7647-01-0",
                                  "catalog_candidate_only": false,
                                  "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                                  "current_inventory_confirmed": false,
                                  "has_kosha_detail": true,
                                  "match_type": "UNIQUE_ALIAS_EXACT",
                                  "matched_alias": "염산",
                                  "matched_alias_class": "AUTHORITATIVE_NAME",
                                  "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                                  "matched_alias_type": "search_name",
                                  "matched_alias_verification_status": "SOURCE_EXACT",
                                  "rule_eligible": false,
                                  "score": 1
                                }
                              ],
                              "confirmation_reason": "NAME_MATCH_REQUIRES_IDENTITY_AND_PRESENCE_CONFIRMATION",
                              "current_inventory_confirmed": false,
                              "input_class": "AUTHORITATIVE_ALIAS",
                              "normalized_query": "염산",
                              "query": "염산",
                              "requires_responder_confirmation": true,
                              "rule_input_eligible": false,
                              "status": "EXACT_ALIAS_CANDIDATE"
                            },
                            "role": "FACILITY",
                            "surface_text": "염산"
                          }
                        ],
                        "warning": "결정적 기준선도 대원 확인 전 물질을 확정하지 않습니다."
                      },
                      "handoff": {
                        "analysis_complete": true,
                        "received_confirmation_records": [],
                        "reported_incident_types": [
                          "LEAK"
                        ],
                        "reported_mentions_not_confirmed_facts": [
                          {
                            "assertion": "AFFIRMED",
                            "role": "INCIDENT",
                            "surface_text": "차아염소산나트륨"
                          },
                          {
                            "assertion": "AFFIRMED",
                            "role": "FACILITY",
                            "surface_text": "염산"
                          }
                        ],
                        "rule_status": "NOT_RUN_REQUIRES_TWO_CONFIRMED_CAS",
                        "source_ids": [],
                        "unconfirmed_items": [
                          "사고물질의 현장 확인 기록",
                          "시설물질의 현장 확인 기록",
                          "접수 시스템에서 확인한 위치"
                        ]
                      },
                      "incident_id": "INC-SYNTHETIC-1",
                      "input_provenance": {
                        "characters": 38,
                        "stt_included": false,
                        "text_sha256": "81bc382ed0b9466de97396f4a1c2264b8a11810dd6f83433095e205c329b0ff2",
                        "transcript_rewritten": false,
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "limitations": [
                        "개발용 의사결정 지원 API입니다. 현장 적용·전술 문구 전문 검수는 완료되지 않았습니다.",
                        "확인 상태는 Backend가 전달한 기록입니다. 모델 API는 실제 대원 확인이나 최신 revision을 인증하지 않습니다.",
                        "주소 비식별 부분 복원·ASR 오인식 정답 복구·근거의 의미 상충 완전 탐지는 지원하지 않습니다.",
                        "공식 자료의 존재와 CAS 일치는 제품·농도·상태·기관 SOP의 현장 적용 승인이 아닙니다."
                      ],
                      "missing_information": [
                        "사고물질의 현장 확인 기록",
                        "시설물질의 현장 확인 기록",
                        "접수 시스템에서 확인한 위치"
                      ],
                      "phase": "final",
                      "processing": {
                        "analysis_latency_ms": 107.446,
                        "cancel_mode": "COOPERATIVE_BOUNDED_INFLIGHT",
                        "deadline_seconds": 15,
                        "initial_build_ms": 0.196,
                        "llm": "SKIPPED_BY_POLICY",
                        "retries": 0,
                        "stt_included": false,
                        "tasks": [
                          {
                            "coordinator_slots": 2,
                            "event": "configured",
                            "max_cas_link_fallbacks": 2,
                            "max_discovery_calls": 1,
                            "max_discovery_internal_searches": 3,
                            "max_facility_history_calls": 1,
                            "max_role_retrievals": 2,
                            "max_rule_calls": 1,
                            "parallel": false,
                            "retries": 0,
                            "role": "결정적 정책",
                            "tool": "EXECUTION_LIMITS",
                            "tool_slots": 6
                          },
                          {
                            "event": "started",
                            "input_characters": 38,
                            "role": "상황정리·물질식별",
                            "tool": "PARSER_RESOLVER"
                          },
                          {
                            "candidate_promotion": false,
                            "event": "completed",
                            "role": "상황정리·물질식별",
                            "tool": "PARSER_RESOLVER"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7681-52-9",
                              "role": "INCIDENT",
                              "top_k": 5
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 19.711,
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7647-01-0",
                              "role": "FACILITY",
                              "top_k": 5
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 17.242,
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "executed": false,
                            "role": "결정적 정책",
                            "tool": "RULE_GATE"
                          }
                        ]
                      },
                      "request_id": "REQ-EVAL-normal_unconfirmed",
                      "revision": 1,
                      "rule_review": {
                        "executed": false,
                        "is_probability": false,
                        "status": "NOT_RUN_REQUIRES_TWO_CONFIRMED_CAS",
                        "tactical_authorization": false
                      },
                      "schema_version": "action-brief-v1",
                      "sources": [
                        {
                          "content_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                          "document_id": "docs/ACTION_BRIEF.md",
                          "document_version": "action-policy-v1",
                          "freshness_status": "VERSIONED_POLICY",
                          "license_status": "PROJECT_AUTHORED",
                          "role": "UNKNOWN",
                          "section": "확인 Gate와 카드 정책",
                          "selection_method": "BASELINE_RETRIEVAL",
                          "source_id": "POLICY",
                          "source_type": "INTERNAL_POLICY",
                          "url": "docs/ACTION_BRIEF.md"
                        }
                      ],
                      "state_fingerprint": "1c1fc20249bc8dec408f086d1c0dc43b76ea9e917cda1c3fe650e9635cf4c173",
                      "status": "NEEDS_CONFIRMATION",
                      "substance_candidates": [
                        {
                          "assertion": "AFFIRMED",
                          "candidates": [
                            {
                              "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                              "cas_number": "7681-52-9",
                              "catalog_candidate_only": false,
                              "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                              "current_inventory_confirmed": false,
                              "has_kosha_detail": true,
                              "match_type": "UNIQUE_ALIAS_EXACT",
                              "matched_alias": "차아염소산 나트륨",
                              "matched_alias_class": "AUTHORITATIVE_NAME",
                              "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                              "matched_alias_type": "kosha_name",
                              "matched_alias_verification_status": "SOURCE_EXACT",
                              "rule_eligible": false,
                              "score": 1
                            }
                          ],
                          "evidence_cas_hint": "7681-52-9",
                          "matches_confirmed_cas": false,
                          "requires_responder_confirmation": true,
                          "resolver_input_class": "AUTHORITATIVE_ALIAS",
                          "resolver_status": "EXACT_ALIAS_CANDIDATE",
                          "role": "INCIDENT",
                          "surface_text": "차아염소산나트륨"
                        },
                        {
                          "assertion": "AFFIRMED",
                          "candidates": [
                            {
                              "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                              "cas_number": "7647-01-0",
                              "catalog_candidate_only": false,
                              "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                              "current_inventory_confirmed": false,
                              "has_kosha_detail": true,
                              "match_type": "UNIQUE_ALIAS_EXACT",
                              "matched_alias": "염산",
                              "matched_alias_class": "AUTHORITATIVE_NAME",
                              "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                              "matched_alias_type": "search_name",
                              "matched_alias_verification_status": "SOURCE_EXACT",
                              "rule_eligible": false,
                              "score": 1
                            }
                          ],
                          "evidence_cas_hint": "7647-01-0",
                          "matches_confirmed_cas": false,
                          "requires_responder_confirmation": true,
                          "resolver_input_class": "AUTHORITATIVE_ALIAS",
                          "resolver_status": "EXACT_ALIAS_CANDIDATE",
                          "role": "FACILITY",
                          "surface_text": "염산"
                        }
                      ],
                      "summary": "신고 표현: 누출. 확인 기록 0/2개 · 미확인 항목 3개. 후보와 확인 기록을 구분해 인계하세요. 현장 명령이 아닌 검수 전 보조 안내입니다.",
                      "versions": {
                        "catalog": "action-catalog-v1",
                        "catalog_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                        "llm": "NOT_USED",
                        "phrase_review": "DRAFT_NOT_EXPERT_REVIEWED",
                        "planning_mode": "DETERMINISTIC_POLICY_PLANNER",
                        "policy": "action-policy-v1",
                        "resolver": "resolver-char-tfidf-v4-incident-catalog-expanded",
                        "retriever": "evidence-hybrid-tfidf-v2",
                        "rule_policy": "PUBLIC_SOURCE_PILOT_V1",
                        "service": "0.4.0"
                      }
                    }
                  },
                  "one_confirmed": {
                    "summary": "실제 artifact + 합성 입력: one_confirmed",
                    "value": {
                      "cards": [
                        {
                          "card_id": "VERIFY_LOCATION:UNKNOWN",
                          "category": "확인",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "접수 시스템의 위치 정보를 확인해 주세요. 삐 처리된 주소는 복원하지 않습니다.",
                          "phrase_id": "VERIFY_LOCATION",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "음성에서 가려진 주소를 모델이 추측하지 않습니다.",
                          "required_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "9e305954640d28385b68b922af5fb5681b414f8c8a178688f6c38932f5ce08d3",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "위치를 별도로 확인해 주세요",
                          "unmet_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ]
                        },
                        {
                          "card_id": "VERIFY_MATERIAL:FACILITY",
                          "category": "확인",
                          "confirmation_status": "UNCONFIRMED",
                          "message": "용기 라벨이나 제품 SDS에서 물질명과 CAS를 확인해 주세요.",
                          "phrase_id": "VERIFY_MATERIAL",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "신고 표현과 검색 후보는 현장 물질 확인을 대신하지 않습니다.",
                          "required_conditions": [
                            "역할별 현장 확인 기록"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "FACILITY",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "9e305954640d28385b68b922af5fb5681b414f8c8a178688f6c38932f5ce08d3",
                          "tactical_authorization": false,
                          "target_label": "시설물질",
                          "title": "물질을 확인해 주세요",
                          "unmet_conditions": [
                            "역할별 현장 확인 기록"
                          ]
                        },
                        {
                          "card_id": "HOLD_PAIR:UNKNOWN",
                          "category": "보류",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "사고물질과 시설물질의 CAS를 각각 확인해야 조합 규칙을 조회할 수 있습니다.",
                          "phrase_id": "HOLD_PAIR",
                          "phrase_version": "action-catalog-v1",
                          "priority": 2,
                          "reason": "두 CAS 확인은 규칙 실행 조건이며 진입·방수·대피 승인 조건이 아닙니다.",
                          "required_conditions": [
                            "사고물질 확인",
                            "시설물질 확인"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "9e305954640d28385b68b922af5fb5681b414f8c8a178688f6c38932f5ce08d3",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "물질 조합 검토는 아직 보류입니다",
                          "unmet_conditions": [
                            "시설물질 확인"
                          ]
                        },
                        {
                          "card_id": "REFERENCE_AVAILABLE:INCIDENT",
                          "cas_number": "7681-52-9",
                          "category": "대응 참고",
                          "confirmation_status": "CONFIRMED_INPUT",
                          "message": "연결된 공식 자료 항목을 확인해 주세요. 제품·농도·상태와 기관 절차가 맞는지는 별도 확인이 필요합니다.",
                          "phrase_id": "REFERENCE_AVAILABLE",
                          "phrase_version": "action-catalog-v1",
                          "priority": 2,
                          "reason": "이 카드는 자료 조회 안내입니다. 자료 내용의 현장 적용이나 특정 전술을 승인하지 않습니다.",
                          "required_conditions": [
                            "역할별 CAS 확인",
                            "같은 CAS의 공식 출처",
                            "상충 보고 없음"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "INCIDENT",
                          "source_ids": [
                            "INCIDENT:CAMEO:4503"
                          ],
                          "state_fingerprint": "9e305954640d28385b68b922af5fb5681b414f8c8a178688f6c38932f5ce08d3",
                          "tactical_authorization": false,
                          "target_label": "사고물질",
                          "title": "확인 물질의 근거를 찾았습니다",
                          "unmet_conditions": []
                        },
                        {
                          "card_id": "HANDOFF:UNKNOWN",
                          "category": "인계",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "확인 상태·물질 후보·근거 링크·미확인 항목을 구분해서 전달해 주세요.",
                          "phrase_id": "HANDOFF",
                          "phrase_version": "action-catalog-v1",
                          "priority": 4,
                          "reason": "후보나 확인 대기 정보를 확정 사실로 인계하지 않습니다.",
                          "required_conditions": [
                            "현재 revision의 결과"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "9e305954640d28385b68b922af5fb5681b414f8c8a178688f6c38932f5ce08d3",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "확인 내용과 남은 질문을 함께 인계하세요",
                          "unmet_conditions": []
                        }
                      ],
                      "confirmation_state": {
                        "FACILITY": false,
                        "INCIDENT": true
                      },
                      "facts": {
                        "backend": "DETERMINISTIC_BASELINE",
                        "fire_status": "UNKNOWN",
                        "incident_types": [
                          "LEAK"
                        ],
                        "missing_fields": [],
                        "needs_substance_confirmation": true,
                        "planned_actions": [],
                        "substance_mentions": [
                          {
                            "assertion": "AFFIRMED",
                            "resolver": {
                              "candidates": [
                                {
                                  "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                                  "cas_number": "7681-52-9",
                                  "catalog_candidate_only": false,
                                  "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                                  "current_inventory_confirmed": false,
                                  "has_kosha_detail": true,
                                  "match_type": "UNIQUE_ALIAS_EXACT",
                                  "matched_alias": "차아염소산 나트륨",
                                  "matched_alias_class": "AUTHORITATIVE_NAME",
                                  "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                                  "matched_alias_type": "kosha_name",
                                  "matched_alias_verification_status": "SOURCE_EXACT",
                                  "rule_eligible": false,
                                  "score": 1
                                }
                              ],
                              "confirmation_reason": "NAME_MATCH_REQUIRES_IDENTITY_AND_PRESENCE_CONFIRMATION",
                              "current_inventory_confirmed": false,
                              "input_class": "AUTHORITATIVE_ALIAS",
                              "normalized_query": "차아염소산나트륨",
                              "query": "차아염소산나트륨",
                              "requires_responder_confirmation": true,
                              "rule_input_eligible": false,
                              "status": "EXACT_ALIAS_CANDIDATE"
                            },
                            "role": "INCIDENT",
                            "surface_text": "차아염소산나트륨"
                          },
                          {
                            "assertion": "AFFIRMED",
                            "resolver": {
                              "candidates": [
                                {
                                  "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                                  "cas_number": "7647-01-0",
                                  "catalog_candidate_only": false,
                                  "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                                  "current_inventory_confirmed": false,
                                  "has_kosha_detail": true,
                                  "match_type": "UNIQUE_ALIAS_EXACT",
                                  "matched_alias": "염산",
                                  "matched_alias_class": "AUTHORITATIVE_NAME",
                                  "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                                  "matched_alias_type": "search_name",
                                  "matched_alias_verification_status": "SOURCE_EXACT",
                                  "rule_eligible": false,
                                  "score": 1
                                }
                              ],
                              "confirmation_reason": "NAME_MATCH_REQUIRES_IDENTITY_AND_PRESENCE_CONFIRMATION",
                              "current_inventory_confirmed": false,
                              "input_class": "AUTHORITATIVE_ALIAS",
                              "normalized_query": "염산",
                              "query": "염산",
                              "requires_responder_confirmation": true,
                              "rule_input_eligible": false,
                              "status": "EXACT_ALIAS_CANDIDATE"
                            },
                            "role": "FACILITY",
                            "surface_text": "염산"
                          }
                        ],
                        "warning": "결정적 기준선도 대원 확인 전 물질을 확정하지 않습니다."
                      },
                      "handoff": {
                        "analysis_complete": true,
                        "received_confirmation_records": [
                          {
                            "cas_number": "7681-52-9",
                            "confirmation_basis": "CONTAINER_LABEL",
                            "confirmation_id": "CNF-DEMO-INCIDENT",
                            "model_verified_human_confirmation": false,
                            "role": "INCIDENT"
                          }
                        ],
                        "reported_incident_types": [
                          "LEAK"
                        ],
                        "reported_mentions_not_confirmed_facts": [
                          {
                            "assertion": "AFFIRMED",
                            "role": "INCIDENT",
                            "surface_text": "차아염소산나트륨"
                          },
                          {
                            "assertion": "AFFIRMED",
                            "role": "FACILITY",
                            "surface_text": "염산"
                          }
                        ],
                        "rule_status": "NOT_RUN_REQUIRES_TWO_CONFIRMED_CAS",
                        "source_ids": [
                          "INCIDENT:CAMEO:4503"
                        ],
                        "unconfirmed_items": [
                          "시설물질의 현장 확인 기록",
                          "접수 시스템에서 확인한 위치"
                        ]
                      },
                      "incident_id": "INC-SYNTHETIC-1",
                      "input_provenance": {
                        "characters": 38,
                        "stt_included": false,
                        "text_sha256": "81bc382ed0b9466de97396f4a1c2264b8a11810dd6f83433095e205c329b0ff2",
                        "transcript_rewritten": false,
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "limitations": [
                        "개발용 의사결정 지원 API입니다. 현장 적용·전술 문구 전문 검수는 완료되지 않았습니다.",
                        "확인 상태는 Backend가 전달한 기록입니다. 모델 API는 실제 대원 확인이나 최신 revision을 인증하지 않습니다.",
                        "주소 비식별 부분 복원·ASR 오인식 정답 복구·근거의 의미 상충 완전 탐지는 지원하지 않습니다.",
                        "공식 자료의 존재와 CAS 일치는 제품·농도·상태·기관 SOP의 현장 적용 승인이 아닙니다."
                      ],
                      "missing_information": [
                        "시설물질의 현장 확인 기록",
                        "접수 시스템에서 확인한 위치"
                      ],
                      "phase": "final",
                      "processing": {
                        "analysis_latency_ms": 106.409,
                        "cancel_mode": "COOPERATIVE_BOUNDED_INFLIGHT",
                        "deadline_seconds": 15,
                        "initial_build_ms": 0.169,
                        "llm": "SKIPPED_BY_POLICY",
                        "retries": 0,
                        "stt_included": false,
                        "tasks": [
                          {
                            "coordinator_slots": 2,
                            "event": "configured",
                            "max_cas_link_fallbacks": 2,
                            "max_discovery_calls": 1,
                            "max_discovery_internal_searches": 3,
                            "max_facility_history_calls": 1,
                            "max_role_retrievals": 2,
                            "max_rule_calls": 1,
                            "parallel": false,
                            "retries": 0,
                            "role": "결정적 정책",
                            "tool": "EXECUTION_LIMITS",
                            "tool_slots": 6
                          },
                          {
                            "event": "started",
                            "input_characters": 38,
                            "role": "상황정리·물질식별",
                            "tool": "PARSER_RESOLVER"
                          },
                          {
                            "candidate_promotion": false,
                            "event": "completed",
                            "role": "상황정리·물질식별",
                            "tool": "PARSER_RESOLVER"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7681-52-9",
                              "role": "INCIDENT",
                              "top_k": 5
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 17.361,
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7681-52-9",
                              "section_relevance_verified": false,
                              "top_k": 1
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_CAS_LINK_FALLBACK"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 0.014,
                            "role": "대응근거",
                            "tool": "OFFICIAL_CAS_LINK_FALLBACK"
                          },
                          {
                            "arguments": {
                              "cas_hint": "7647-01-0",
                              "role": "FACILITY",
                              "top_k": 5
                            },
                            "event": "started",
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "latency_ms": 17.15,
                            "role": "대응근거",
                            "tool": "OFFICIAL_EVIDENCE"
                          },
                          {
                            "event": "completed",
                            "executed": false,
                            "role": "결정적 정책",
                            "tool": "RULE_GATE"
                          }
                        ]
                      },
                      "request_id": "REQ-EVAL-one_confirmed",
                      "revision": 2,
                      "rule_review": {
                        "executed": false,
                        "is_probability": false,
                        "status": "NOT_RUN_REQUIRES_TWO_CONFIRMED_CAS",
                        "tactical_authorization": false
                      },
                      "schema_version": "action-brief-v1",
                      "sources": [
                        {
                          "content_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                          "document_id": "docs/ACTION_BRIEF.md",
                          "document_version": "action-policy-v1",
                          "freshness_status": "VERSIONED_POLICY",
                          "license_status": "PROJECT_AUTHORED",
                          "role": "UNKNOWN",
                          "section": "확인 Gate와 카드 정책",
                          "selection_method": "BASELINE_RETRIEVAL",
                          "source_id": "POLICY",
                          "source_type": "INTERNAL_POLICY",
                          "url": "docs/ACTION_BRIEF.md"
                        },
                        {
                          "cas_number": "7681-52-9",
                          "content_sha256": "abc24aedb263159e9259dc96f22c1fed70b0202dbe0ceb342d6ef1320c691d0c",
                          "document_id": "4503",
                          "document_version": "3.1.0",
                          "freshness_status": "INDEX_VERSION_ONLY",
                          "license_status": "LINK_ONLY_TERMS_REVIEW_REQUIRED",
                          "role": "INCIDENT",
                          "section": "차아염소산나트륨 | NaOCl | SODIUM HYPOCHLORITE — CAMEO 반응성",
                          "selection_method": "EXACT_CAS_LINK_FALLBACK_NOT_SECTION_RELEVANCE",
                          "source_id": "INCIDENT:CAMEO:4503",
                          "source_type": "CAMEO",
                          "url": "https://cameochemicals.noaa.gov/chemical/4503"
                        }
                      ],
                      "state_fingerprint": "9e305954640d28385b68b922af5fb5681b414f8c8a178688f6c38932f5ce08d3",
                      "status": "NEEDS_CONFIRMATION",
                      "substance_candidates": [
                        {
                          "assertion": "AFFIRMED",
                          "candidates": [
                            {
                              "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                              "cas_number": "7681-52-9",
                              "catalog_candidate_only": false,
                              "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                              "current_inventory_confirmed": false,
                              "has_kosha_detail": true,
                              "match_type": "UNIQUE_ALIAS_EXACT",
                              "matched_alias": "차아염소산 나트륨",
                              "matched_alias_class": "AUTHORITATIVE_NAME",
                              "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                              "matched_alias_type": "kosha_name",
                              "matched_alias_verification_status": "SOURCE_EXACT",
                              "rule_eligible": false,
                              "score": 1
                            }
                          ],
                          "evidence_cas_hint": "7681-52-9",
                          "matches_confirmed_cas": true,
                          "requires_responder_confirmation": true,
                          "resolver_input_class": "AUTHORITATIVE_ALIAS",
                          "resolver_status": "EXACT_ALIAS_CANDIDATE",
                          "role": "INCIDENT",
                          "surface_text": "차아염소산나트륨"
                        },
                        {
                          "assertion": "AFFIRMED",
                          "candidates": [
                            {
                              "authority_level": "PUBLIC_AUTHORITY_SOURCE",
                              "cas_number": "7647-01-0",
                              "catalog_candidate_only": false,
                              "catalog_scope": "KOSHA_CORE_WITH_DETAIL",
                              "current_inventory_confirmed": false,
                              "has_kosha_detail": true,
                              "match_type": "UNIQUE_ALIAS_EXACT",
                              "matched_alias": "염산",
                              "matched_alias_class": "AUTHORITATIVE_NAME",
                              "matched_alias_source": "01_KOSHA_물질안전보건자료.csv",
                              "matched_alias_type": "search_name",
                              "matched_alias_verification_status": "SOURCE_EXACT",
                              "rule_eligible": false,
                              "score": 1
                            }
                          ],
                          "evidence_cas_hint": "7647-01-0",
                          "matches_confirmed_cas": false,
                          "requires_responder_confirmation": true,
                          "resolver_input_class": "AUTHORITATIVE_ALIAS",
                          "resolver_status": "EXACT_ALIAS_CANDIDATE",
                          "role": "FACILITY",
                          "surface_text": "염산"
                        }
                      ],
                      "summary": "신고 표현: 누출. 확인 기록 1/2개 · 미확인 항목 2개. 후보와 확인 기록을 구분해 인계하세요. 현장 명령이 아닌 검수 전 보조 안내입니다.",
                      "versions": {
                        "catalog": "action-catalog-v1",
                        "catalog_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                        "llm": "NOT_USED",
                        "phrase_review": "DRAFT_NOT_EXPERT_REVIEWED",
                        "planning_mode": "DETERMINISTIC_POLICY_PLANNER",
                        "policy": "action-policy-v1",
                        "resolver": "resolver-char-tfidf-v4-incident-catalog-expanded",
                        "retriever": "evidence-hybrid-tfidf-v2",
                        "rule_policy": "PUBLIC_SOURCE_PILOT_V1",
                        "service": "0.4.0"
                      }
                    }
                  },
                  "timeout": {
                    "summary": "계약 예시: deadline 초과 보류(모델 정확도·실측 지연 예시 아님)",
                    "value": {
                      "cards": [
                        {
                          "card_id": "VERIFY_LOCATION:UNKNOWN",
                          "category": "확인",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "접수 시스템의 위치 정보를 확인해 주세요. 삐 처리된 주소는 복원하지 않습니다.",
                          "phrase_id": "VERIFY_LOCATION",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "음성에서 가려진 주소를 모델이 추측하지 않습니다.",
                          "required_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "483619d8dc1ae26ba5cc7da48291054d3d4beca0a6436d49b6249fe6a6bfef5f",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "위치를 별도로 확인해 주세요",
                          "unmet_conditions": [
                            "접수 시스템 또는 대원이 확인한 위치"
                          ]
                        },
                        {
                          "card_id": "HOLD_FAILURE:UNKNOWN",
                          "category": "보류",
                          "confirmation_status": "NOT_APPLICABLE",
                          "message": "이전 결과를 현재 결과로 사용하지 마세요. 필요한 자료를 확인한 뒤 다시 요청해 주세요.",
                          "phrase_id": "HOLD_FAILURE",
                          "phrase_version": "action-catalog-v1",
                          "priority": 1,
                          "reason": "제한시간·도구 오류·출력 검증 실패 시 추정한 대응을 표시하지 않습니다.",
                          "required_conditions": [
                            "현재 상태의 검증된 분석 결과"
                          ],
                          "review_status": "DRAFT_NOT_EXPERT_REVIEWED",
                          "role": "UNKNOWN",
                          "source_ids": [
                            "POLICY"
                          ],
                          "state_fingerprint": "483619d8dc1ae26ba5cc7da48291054d3d4beca0a6436d49b6249fe6a6bfef5f",
                          "tactical_authorization": false,
                          "target_label": "전체 안내",
                          "title": "분석을 마치지 못했습니다",
                          "unmet_conditions": [
                            "현재 상태의 검증된 분석 결과"
                          ]
                        }
                      ],
                      "confirmation_state": {
                        "FACILITY": true,
                        "INCIDENT": true
                      },
                      "facts": {},
                      "handoff": {
                        "analysis_complete": false,
                        "received_confirmation_records": [
                          {
                            "cas_number": "7681-52-9",
                            "confirmation_basis": "CONTAINER_LABEL",
                            "confirmation_id": "CNF-DEMO-INCIDENT",
                            "model_verified_human_confirmation": false,
                            "role": "INCIDENT"
                          },
                          {
                            "cas_number": "7647-01-0",
                            "confirmation_basis": "CONTAINER_LABEL",
                            "confirmation_id": "CNF-DEMO-FACILITY",
                            "model_verified_human_confirmation": false,
                            "role": "FACILITY"
                          }
                        ],
                        "unconfirmed_items": [
                          "접수 시스템에서 확인한 위치"
                        ]
                      },
                      "incident_id": "INC-SYNTHETIC-1",
                      "input_provenance": {
                        "characters": 38,
                        "stt_included": false,
                        "text_sha256": "81bc382ed0b9466de97396f4a1c2264b8a11810dd6f83433095e205c329b0ff2",
                        "transcript_rewritten": false,
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "limitations": [
                        "개발용 의사결정 지원 API입니다. 현장 적용·전술 문구 전문 검수는 완료되지 않았습니다.",
                        "확인 상태는 Backend가 전달한 기록입니다. 모델 API는 실제 대원 확인이나 최신 revision을 인증하지 않습니다.",
                        "주소 비식별 부분 복원·ASR 오인식 정답 복구·근거의 의미 상충 완전 탐지는 지원하지 않습니다.",
                        "공식 자료의 존재와 CAS 일치는 제품·농도·상태·기관 SOP의 현장 적용 승인이 아닙니다."
                      ],
                      "missing_information": [
                        "접수 시스템에서 확인한 위치",
                        "현재 상태로 재분석한 검증 결과"
                      ],
                      "phase": "final",
                      "processing": {
                        "example_only": true,
                        "failure_code": "DEADLINE_EXCEEDED",
                        "llm": "SKIPPED_BY_POLICY"
                      },
                      "request_id": "REQ-TIMEOUT-EXAMPLE",
                      "revision": 3,
                      "rule_review": {
                        "executed": false
                      },
                      "schema_version": "action-brief-v1",
                      "sources": [
                        {
                          "content_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                          "document_id": "docs/ACTION_BRIEF.md",
                          "document_version": "action-policy-v2-statement-clarification",
                          "freshness_status": "VERSIONED_POLICY",
                          "license_status": "PROJECT_AUTHORED",
                          "role": "UNKNOWN",
                          "section": "확인 Gate와 카드 정책",
                          "selection_method": "BASELINE_RETRIEVAL",
                          "source_id": "POLICY",
                          "source_type": "INTERNAL_POLICY",
                          "url": "docs/ACTION_BRIEF.md"
                        }
                      ],
                      "state_fingerprint": "483619d8dc1ae26ba5cc7da48291054d3d4beca0a6436d49b6249fe6a6bfef5f",
                      "status": "TIMEOUT",
                      "substance_candidates": [],
                      "summary": "현재 상태의 분석을 완료하지 못했습니다. 확인·보류 안내만 사용할 수 있습니다.",
                      "versions": {
                        "catalog": "action-catalog-v1",
                        "catalog_sha256": "8648c53dcdc271d5c64307e7d7b05dd4ac16441f19c62f19438f5bdf231f97d8",
                        "llm": "NOT_USED",
                        "phrase_review": "DRAFT_NOT_EXPERT_REVIEWED",
                        "planning_mode": "DETERMINISTIC_POLICY_PLANNER",
                        "policy": "action-policy-v2-statement-clarification"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/BriefResponse"
                }
              }
            },
            "description": "현재 입력의 최종 행동 카드 snapshot. 예시는 실제 artifact에 합성 입력을 실행한 결과입니다."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "백엔드 인증 실패"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "요청 계약 위반"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "출력 안전 검증 또는 내부 오류"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "인증 또는 모델 artifact 준비 실패"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "현재 확인 상태의 행동·확인 카드 생성",
        "tags": [
          "action-brief"
        ]
      }
    },
    "/api/v1/agents/incidents/brief/stream": {
      "post": {
        "operationId": "incident_brief_stream_api_v1_agents_incidents_brief_stream_post",
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "both_confirmed": {
                  "summary": "합성 예시: 두 역할 확인",
                  "value": {
                    "analysis": {
                      "confirmed_facility_substance": {
                        "cas_number": "7647-01-0",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-FACILITY",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "FACILITY"
                      },
                      "confirmed_incident_substance": {
                        "cas_number": "7681-52-9",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "revision": 3
                  }
                },
                "cancelled": {
                  "summary": "합성 예시: 확인 취소 후 재분석",
                  "value": {
                    "analysis": {
                      "confirmed_facility_substance": {
                        "cas_number": "7647-01-0",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-FACILITY",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "FACILITY"
                      },
                      "confirmed_incident_substance": {
                        "cas_number": "7681-52-9",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "invalidated_confirmation_ids": [
                      "CNF-DEMO-INCIDENT"
                    ],
                    "revision": 4
                  }
                },
                "conflict": {
                  "summary": "합성 예시: 새 근거 상충 보고",
                  "value": {
                    "analysis": {
                      "confirmed_facility_substance": {
                        "cas_number": "7647-01-0",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-FACILITY",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "FACILITY"
                      },
                      "confirmed_incident_substance": {
                        "cas_number": "7681-52-9",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "reported_evidence_conflict": true,
                    "revision": 4
                  }
                },
                "invalid_cas": {
                  "summary": "오류 예시: CAS checksum 오류(422)",
                  "value": {
                    "analysis": {
                      "confirmed_incident_substance": {
                        "cas_number": "7681-52-0",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "revision": 2
                  }
                },
                "no_evidence": {
                  "summary": "합성 예시: 인덱스의 해당 CAS 근거가 없을 수 있음",
                  "value": {
                    "analysis": {
                      "confirmed_incident_substance": {
                        "cas_number": "7732-18-5",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "미상 제품의 정보 확인 요청",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "revision": 1
                  }
                },
                "one_confirmed": {
                  "summary": "합성 예시: 사고물질만 확인",
                  "value": {
                    "analysis": {
                      "confirmed_incident_substance": {
                        "cas_number": "7681-52-9",
                        "confirmation_basis": "CONTAINER_LABEL",
                        "confirmation_id": "CNF-DEMO-INCIDENT",
                        "observed_at": "2026-09-01T00:00:00+09:00",
                        "presence_status": "CONFIRMED_PRESENT",
                        "role": "INCIDENT"
                      },
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "revision": 2
                  }
                },
                "unconfirmed": {
                  "summary": "합성 예시: 미확인",
                  "value": {
                    "analysis": {
                      "evidence_top_k": 5,
                      "incident_id": "INC-SYNTHETIC-1",
                      "input": {
                        "text": "차아염소산나트륨 탱크에서 누출이 있고 옆 저장고에는 염산이 있습니다.",
                        "type": "VOICE_TRANSCRIPT"
                      },
                      "request_id": "REQ-DEMO-1"
                    },
                    "revision": 1
                  }
                }
              },
              "schema": {
                "$ref": "#/components/schemas/BriefRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "검증된 initial/final BriefResponse를 담은 SSE. 각 이벤트는 전체 snapshot이며 합쳐서 누적하지 않습니다."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "백엔드 인증 실패"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "요청 계약 위반"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "출력 안전 검증 또는 내부 오류"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "인증 또는 모델 artifact 준비 실패"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "검증된 확인 카드와 후속 결과를 SSE로 순차 반환",
        "tags": [
          "action-brief"
        ]
      }
    },
    "/api/v1/agents/incidents/step": {
      "post": {
        "operationId": "run_incident_agent_step_api_v1_agents_incidents_step_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IncidentAgentStepRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IncidentAgentStepResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "백엔드 인증 실패"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "요청 계약 위반"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "출력 안전 검증 또는 내부 오류"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "인증 또는 모델 artifact 준비 실패"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "사고 상태를 관찰해 필요한 도구를 선택하고 재계획",
        "tags": [
          "agent"
        ]
      }
    },
    "/api/v1/conflicts/review": {
      "post": {
        "operationId": "conflict_review_api_v1_conflicts_review_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ConflictReviewRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "title": "Response Conflict Review Api V1 Conflicts Review Post",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "백엔드 인증 실패"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "요청 계약 위반"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "출력 안전 검증 또는 내부 오류"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "인증 또는 모델 artifact 준비 실패"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Conflict Review",
        "tags": [
          "rules"
        ]
      }
    },
    "/api/v1/evidence/search": {
      "post": {
        "operationId": "evidence_search_api_v1_evidence_search_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EvidenceSearchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "title": "Response Evidence Search Api V1 Evidence Search Post",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "백엔드 인증 실패"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "요청 계약 위반"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "출력 안전 검증 또는 내부 오류"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "인증 또는 모델 artifact 준비 실패"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Evidence Search",
        "tags": [
          "models"
        ]
      }
    },
    "/api/v1/facilities/candidates": {
      "post": {
        "operationId": "facility_candidates_api_v1_facilities_candidates_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FacilityHistorySearchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "title": "Response Facility Candidates Api V1 Facilities Candidates Post",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "백엔드 인증 실패"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "요청 계약 위반"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "출력 안전 검증 또는 내부 오류"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "인증 또는 모델 artifact 준비 실패"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Facility Candidates",
        "tags": [
          "models"
        ]
      }
    },
    "/api/v1/incidents/analyze": {
      "post": {
        "operationId": "analyze_api_v1_incidents_analyze_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IncidentAnalyzeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnalysisResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "백엔드 인증 실패"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "요청 계약 위반"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "출력 안전 검증 또는 내부 오류"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "인증 또는 모델 artifact 준비 실패"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "사고 입력을 구조화하고 근거·Rule 검토 상태를 반환",
        "tags": [
          "analysis"
        ]
      }
    },
    "/api/v1/meta": {
      "get": {
        "operationId": "metadata_api_v1_meta_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "title": "Response Metadata Api V1 Meta Get",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Metadata",
        "tags": [
          "metadata"
        ]
      }
    },
    "/api/v1/substances/discover": {
      "post": {
        "operationId": "discover_api_v1_substances_discover_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubstanceDiscoveryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubstanceDiscoveryResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "백엔드 인증 실패"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "요청 계약 위반"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "출력 안전 검증 또는 내부 오류"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "인증 또는 모델 artifact 준비 실패"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "물질명·CAS·관찰 정보에서 확인 전 물질 후보와 공식 근거 검색",
        "tags": [
          "models"
        ]
      }
    },
    "/api/v1/substances/resolve": {
      "post": {
        "operationId": "resolve_api_v1_substances_resolve_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResolveRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "title": "Response Resolve Api V1 Substances Resolve Post",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "백엔드 인증 실패"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "요청 계약 위반"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "출력 안전 검증 또는 내부 오류"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "인증 또는 모델 artifact 준비 실패"
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ],
        "summary": "Resolve",
        "tags": [
          "models"
        ]
      }
    },
    "/health/live": {
      "get": {
        "operationId": "live_health_live_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "additionalProperties": true,
                  "title": "Response Live Health Live Get",
                  "type": "object"
                }
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Live",
        "tags": [
          "health"
        ]
      }
    },
    "/health/ready": {
      "get": {
        "operationId": "ready_health_ready_get",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          }
        },
        "summary": "Ready",
        "tags": [
          "health"
        ]
      }
    }
  }
}
