163 lines
5.3 KiB
JSON
163 lines
5.3 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "vignette.p1_crisis_review_cases.v2",
|
|
"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",
|
|
"youth_review_responses",
|
|
"cases"
|
|
],
|
|
"properties": {
|
|
"schema_version": { "const": "vignette.p1_crisis_review_cases.v2" },
|
|
"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 }
|
|
}
|
|
},
|
|
"youth_review_responses": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"guardian_notification",
|
|
"means_restriction",
|
|
"risk_disposition",
|
|
"follow_up_48_72h",
|
|
"documentation",
|
|
"safeguarding"
|
|
],
|
|
"properties": {
|
|
"guardian_notification": { "$ref": "#/$defs/nullableString" },
|
|
"means_restriction": { "$ref": "#/$defs/nullableString" },
|
|
"risk_disposition": { "$ref": "#/$defs/nullableString" },
|
|
"follow_up_48_72h": { "$ref": "#/$defs/nullableString" },
|
|
"documentation": { "$ref": "#/$defs/nullableString" },
|
|
"safeguarding": { "$ref": "#/$defs/nullableString" }
|
|
}
|
|
},
|
|
"cases": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "$ref": "#/$defs/case" }
|
|
}
|
|
},
|
|
"$defs": {
|
|
"nullableString": {
|
|
"anyOf": [
|
|
{ "type": "null" },
|
|
{ "type": "string", "minLength": 1 }
|
|
]
|
|
},
|
|
"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",
|
|
"findings_and_required_changes",
|
|
"re_review",
|
|
"reviewed_at"
|
|
],
|
|
"properties": {
|
|
"decision": {
|
|
"anyOf": [
|
|
{ "type": "null" },
|
|
{ "enum": ["pass", "conditional", "fail"] }
|
|
]
|
|
},
|
|
"rationale": {
|
|
"$ref": "#/$defs/nullableString"
|
|
},
|
|
"findings_and_required_changes": {
|
|
"$ref": "#/$defs/nullableString"
|
|
},
|
|
"re_review": {
|
|
"$ref": "#/$defs/nullableString"
|
|
},
|
|
"reviewed_at": {
|
|
"anyOf": [
|
|
{ "type": "null" },
|
|
{ "type": "string", "format": "date" }
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|