C-001 임상 검토 게이트 보강
This commit is contained in:
parent
391fb9f4d0
commit
6988280b30
18 changed files with 1896 additions and 67 deletions
127
data/clinical/p1-crisis-review-cases.schema.json
Normal file
127
data/clinical/p1-crisis-review-cases.schema.json
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
{
|
||||
"$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" }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue