127 lines
4.2 KiB
JSON
127 lines
4.2 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "vignette.p1_crisis_review_cases.v1",
|
|
"title": "Vignette P1 synthetic crisis review cases",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schema_version",
|
|
"case_set_id",
|
|
"version",
|
|
"protocol_id",
|
|
"protocol_version",
|
|
"priority",
|
|
"scope",
|
|
"external_review_boundary",
|
|
"content_safety",
|
|
"official_source_scope",
|
|
"case_decision_contract",
|
|
"cases"
|
|
],
|
|
"properties": {
|
|
"schema_version": { "const": "vignette.p1_crisis_review_cases.v1" },
|
|
"case_set_id": { "const": "p1-crisis-review-cases" },
|
|
"version": { "type": "string", "minLength": 1 },
|
|
"protocol_id": { "const": "p1-suicide-ideation-response" },
|
|
"protocol_version": { "type": "string", "minLength": 1 },
|
|
"priority": { "const": "P1" },
|
|
"scope": { "type": "string", "minLength": 1 },
|
|
"external_review_boundary": {
|
|
"const": "이 사례에는 임상 정답이 없으며 자동 검사는 외부 임상 검토와 승인을 대신하지 않는다."
|
|
},
|
|
"content_safety": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["synthetic_only", "method_or_means_detail", "clinical_answer_included"],
|
|
"properties": {
|
|
"synthetic_only": { "const": true },
|
|
"method_or_means_detail": { "const": "forbidden" },
|
|
"clinical_answer_included": { "const": false }
|
|
}
|
|
},
|
|
"official_source_scope": {
|
|
"type": "array",
|
|
"minItems": 4,
|
|
"uniqueItems": true,
|
|
"items": {
|
|
"enum": ["samhsa_safe_t", "nimh_youth_outpatient_bssa", "mohw_109", "nice_ng225"]
|
|
}
|
|
},
|
|
"case_decision_contract": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["allowed", "pending_value", "approved_rule", "conditional_rule", "rejected_rule"],
|
|
"properties": {
|
|
"allowed": { "const": ["pass", "conditional", "fail"] },
|
|
"pending_value": { "type": "null" },
|
|
"approved_rule": { "type": "string", "minLength": 1 },
|
|
"conditional_rule": { "type": "string", "minLength": 1 },
|
|
"rejected_rule": { "type": "string", "minLength": 1 }
|
|
}
|
|
},
|
|
"cases": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "$ref": "#/$defs/case" }
|
|
}
|
|
},
|
|
"$defs": {
|
|
"case": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["case_id", "title", "synthetic_scenario", "technical_invariants", "reviewer_assessment"],
|
|
"properties": {
|
|
"case_id": { "type": "string", "pattern": "^P1-CRISIS-[0-9]{3}$" },
|
|
"title": { "type": "string", "minLength": 1 },
|
|
"synthetic_scenario": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["speaker_context", "signal", "method_or_means_detail_present"],
|
|
"properties": {
|
|
"speaker_context": { "enum": ["persona", "counselor_question", "learner_real"] },
|
|
"signal": { "type": "string", "minLength": 1 },
|
|
"method_or_means_detail_present": { "const": false }
|
|
}
|
|
},
|
|
"technical_invariants": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["invariant_id", "requirement"],
|
|
"properties": {
|
|
"invariant_id": { "type": "string", "pattern": "^[a-z0-9-]+$" },
|
|
"requirement": { "type": "string", "minLength": 1 }
|
|
}
|
|
}
|
|
},
|
|
"reviewer_assessment": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["decision", "rationale", "reviewed_at"],
|
|
"properties": {
|
|
"decision": {
|
|
"anyOf": [
|
|
{ "type": "null" },
|
|
{ "enum": ["pass", "conditional", "fail"] }
|
|
]
|
|
},
|
|
"rationale": {
|
|
"anyOf": [
|
|
{ "type": "null" },
|
|
{ "type": "string", "minLength": 1 }
|
|
]
|
|
},
|
|
"reviewed_at": {
|
|
"anyOf": [
|
|
{ "type": "null" },
|
|
{ "type": "string", "format": "date" }
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|