외부 임상 검토 원장을 보강

This commit is contained in:
Yun Chan 2026-08-28 21:01:57 +09:00
parent dd71cb9710
commit 3b540a881f
8 changed files with 310 additions and 50 deletions

View file

@ -1,5 +1,5 @@
{
"schema_version": "vignette.clinical_crisis_review.v1",
"schema_version": "vignette.clinical_crisis_review.v2",
"protocol_id": "p1-suicide-ideation-response",
"version": "2026-08-28.1",
"scope": "P1 가상내담자 자살사고·자해 신호와 상담자 위기반응 훈련의 기술 사전검토",
@ -8,7 +8,7 @@
"external_review_boundary": "공식 근거와 자동 검사는 기술 안전 범위만 확인하며 외부 임상 검토와 승인을 대신하지 않는다.",
"review_case_set": "data/clinical/p1-crisis-review-cases.json",
"review_case_set_id": "p1-crisis-review-cases",
"review_case_set_version": "2026-08-28.1",
"review_case_set_version": "2026-08-28.2",
"sources": [
{
"source_id": "samhsa_safe_t",
@ -52,12 +52,13 @@
"수련생 본인의 현재적 1인칭 위기 신호는 엔진 호출 전에 중단하고 109 안전자원을 제공한다.",
"가상내담자의 정서적 자살사고·자해 표현은 허용하되 수단·방법 상세는 차단한다.",
"가상내담자 자살사고 단계는 3을 넘지 않는다.",
"pending_external_review에서는 모든 approval 값과 사례별 reviewer_assessment 값을 null로 유지한다.",
"approved·conditional·rejected 전환은 검토자·소속·날짜·결정·증거 참조와 SHA-256·검토 프로토콜 버전·검토 사례 세트 SHA-256·모든 사례 판정이 일치할 때만 허용한다."
"pending_external_review에서는 모든 approval 값, 사례별 reviewer_assessment 값, 청소년 특화 검토 답변을 null로 유지한다.",
"approved·conditional·rejected 전환은 검토자·소속·자격·날짜·결정·판정 근거·증거 참조와 SHA-256·검토 프로토콜 버전·검토 사례 세트 SHA-256·모든 사례 판정·청소년 특화 답변이 일치할 때만 허용한다."
],
"approval": {
"reviewer": null,
"organization": null,
"reviewer_role_or_qualification": null,
"reviewed_at": null,
"decision": null,
"notes": null,

View file

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "vignette.clinical_crisis_review.v1",
"$id": "vignette.clinical_crisis_review.v2",
"title": "Vignette P1 crisis protocol external clinical review contract",
"type": "object",
"additionalProperties": false,
@ -21,7 +21,7 @@
"approval"
],
"properties": {
"schema_version": { "const": "vignette.clinical_crisis_review.v1" },
"schema_version": { "const": "vignette.clinical_crisis_review.v2" },
"protocol_id": { "const": "p1-suicide-ideation-response" },
"version": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}\\.[0-9]+$" },
"scope": { "type": "string", "minLength": 1 },
@ -88,6 +88,7 @@
"required": [
"reviewer",
"organization",
"reviewer_role_or_qualification",
"reviewed_at",
"decision",
"notes",
@ -99,6 +100,7 @@
"properties": {
"reviewer": { "$ref": "#/$defs/nullableString" },
"organization": { "$ref": "#/$defs/nullableString" },
"reviewer_role_or_qualification": { "$ref": "#/$defs/nullableString" },
"reviewed_at": {
"anyOf": [
{ "type": "null" },
@ -131,6 +133,7 @@
"properties": {
"reviewer": { "type": "null" },
"organization": { "type": "null" },
"reviewer_role_or_qualification": { "type": "null" },
"reviewed_at": { "type": "null" },
"decision": { "type": "null" },
"notes": { "type": "null" },
@ -156,8 +159,10 @@
"properties": {
"reviewer": { "type": "string", "minLength": 1 },
"organization": { "type": "string", "minLength": 1 },
"reviewer_role_or_qualification": { "type": "string", "minLength": 1 },
"reviewed_at": { "type": "string", "format": "date" },
"decision": { "enum": ["approved", "conditional", "rejected"] },
"notes": { "type": "string", "minLength": 1 },
"evidence_ref": { "type": "string", "minLength": 1 },
"evidence_sha256": { "type": "string", "pattern": "^[0-9a-f]{64}$" },
"reviewed_protocol_version": { "type": "string", "minLength": 1 },
@ -187,8 +192,7 @@
"properties": {
"approval": {
"properties": {
"decision": { "const": "conditional" },
"notes": { "type": "string", "minLength": 1 }
"decision": { "const": "conditional" }
}
}
}
@ -203,8 +207,7 @@
"properties": {
"approval": {
"properties": {
"decision": { "const": "rejected" },
"notes": { "type": "string", "minLength": 1 }
"decision": { "const": "rejected" }
}
}
}

View file

@ -1,7 +1,7 @@
{
"schema_version": "vignette.p1_crisis_review_cases.v1",
"schema_version": "vignette.p1_crisis_review_cases.v2",
"case_set_id": "p1-crisis-review-cases",
"version": "2026-08-28.1",
"version": "2026-08-28.2",
"protocol_id": "p1-suicide-ideation-response",
"protocol_version": "2026-08-28.1",
"priority": "P1",
@ -25,6 +25,14 @@
"conditional_rule": "fail 없이 하나 이상의 conditional",
"rejected_rule": "하나 이상의 fail"
},
"youth_review_responses": {
"guardian_notification": null,
"means_restriction": null,
"risk_disposition": null,
"follow_up_48_72h": null,
"documentation": null,
"safeguarding": null
},
"cases": [
{
"case_id": "P1-CRISIS-001",
@ -51,6 +59,8 @@
"reviewer_assessment": {
"decision": null,
"rationale": null,
"findings_and_required_changes": null,
"re_review": null,
"reviewed_at": null
}
},
@ -79,6 +89,8 @@
"reviewer_assessment": {
"decision": null,
"rationale": null,
"findings_and_required_changes": null,
"re_review": null,
"reviewed_at": null
}
},
@ -103,6 +115,8 @@
"reviewer_assessment": {
"decision": null,
"rationale": null,
"findings_and_required_changes": null,
"re_review": null,
"reviewed_at": null
}
},
@ -131,6 +145,8 @@
"reviewer_assessment": {
"decision": null,
"rationale": null,
"findings_and_required_changes": null,
"re_review": null,
"reviewed_at": null
}
},
@ -163,6 +179,8 @@
"reviewer_assessment": {
"decision": null,
"rationale": null,
"findings_and_required_changes": null,
"re_review": null,
"reviewed_at": null
}
},
@ -195,6 +213,8 @@
"reviewer_assessment": {
"decision": null,
"rationale": null,
"findings_and_required_changes": null,
"re_review": null,
"reviewed_at": null
}
}

View file

@ -1,6 +1,6 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "vignette.p1_crisis_review_cases.v1",
"$id": "vignette.p1_crisis_review_cases.v2",
"title": "Vignette P1 synthetic crisis review cases",
"type": "object",
"additionalProperties": false,
@ -16,10 +16,11 @@
"content_safety",
"official_source_scope",
"case_decision_contract",
"youth_review_responses",
"cases"
],
"properties": {
"schema_version": { "const": "vignette.p1_crisis_review_cases.v1" },
"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" },
@ -59,6 +60,26 @@
"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,
@ -66,6 +87,12 @@
}
},
"$defs": {
"nullableString": {
"anyOf": [
{ "type": "null" },
{ "type": "string", "minLength": 1 }
]
},
"case": {
"type": "object",
"additionalProperties": false,
@ -99,7 +126,13 @@
"reviewer_assessment": {
"type": "object",
"additionalProperties": false,
"required": ["decision", "rationale", "reviewed_at"],
"required": [
"decision",
"rationale",
"findings_and_required_changes",
"re_review",
"reviewed_at"
],
"properties": {
"decision": {
"anyOf": [
@ -108,10 +141,13 @@
]
},
"rationale": {
"anyOf": [
{ "type": "null" },
{ "type": "string", "minLength": 1 }
]
"$ref": "#/$defs/nullableString"
},
"findings_and_required_changes": {
"$ref": "#/$defs/nullableString"
},
"re_review": {
"$ref": "#/$defs/nullableString"
},
"reviewed_at": {
"anyOf": [