평가 및 화면 구조 정리
This commit is contained in:
parent
1248ae8ca4
commit
391639c1de
44 changed files with 5816 additions and 4501 deletions
74
data/privacy/pii-masking-eval-input.schema.json
Normal file
74
data/privacy/pii-masking-eval-input.schema.json
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "vignette.pii_masking_eval_input.v1",
|
||||
"title": "Vignette PII masking evaluation input",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"locale",
|
||||
"source",
|
||||
"category",
|
||||
"severity",
|
||||
"text",
|
||||
"expected_entities",
|
||||
"forbidden_substrings"
|
||||
],
|
||||
"properties": {
|
||||
"id": { "type": "string", "minLength": 1 },
|
||||
"locale": { "type": "string", "default": "ko-KR" },
|
||||
"source": {
|
||||
"type": "string",
|
||||
"enum": ["synthetic", "operator_supplied_redacted", "operational_gold"],
|
||||
"default": "synthetic"
|
||||
},
|
||||
"category": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"name",
|
||||
"organization",
|
||||
"contact",
|
||||
"national_id",
|
||||
"quasi_identifier",
|
||||
"negative_control",
|
||||
"unspecified"
|
||||
],
|
||||
"default": "unspecified"
|
||||
},
|
||||
"severity": {
|
||||
"type": "string",
|
||||
"enum": ["low", "medium", "high", "critical"],
|
||||
"default": "medium"
|
||||
},
|
||||
"text": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"description": "Evaluation input text. Use only local synthetic or approved redacted/gold text according to data governance gates."
|
||||
},
|
||||
"expected_entities": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"uniqueItems": true,
|
||||
"default": []
|
||||
},
|
||||
"unexpected_entities": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"uniqueItems": true,
|
||||
"default": []
|
||||
},
|
||||
"forbidden_substrings": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"default": []
|
||||
},
|
||||
"required_substrings": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"default": []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
99
data/privacy/pii-masking-eval-report.schema.json
Normal file
99
data/privacy/pii-masking-eval-report.schema.json
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "vignette.pii_masking_eval_report.v1",
|
||||
"title": "Vignette PII masking evaluation report",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"schema_version",
|
||||
"input_schema_version",
|
||||
"run_mode",
|
||||
"data_source",
|
||||
"evidence_text_included",
|
||||
"passed",
|
||||
"cases_total",
|
||||
"cases_passed",
|
||||
"cases_failed",
|
||||
"expected_entity_recall",
|
||||
"forbidden_substring_removal",
|
||||
"unexpected_entity_violations",
|
||||
"by_source",
|
||||
"by_category",
|
||||
"by_severity",
|
||||
"results"
|
||||
],
|
||||
"properties": {
|
||||
"schema_version": { "const": "vignette.pii_masking_eval_report.v1" },
|
||||
"input_schema_version": { "const": "vignette.pii_masking_eval_input.v1" },
|
||||
"run_mode": { "const": "technical_dry_run" },
|
||||
"data_source": { "type": "string" },
|
||||
"evidence_text_included": { "type": "boolean" },
|
||||
"passed": { "type": "boolean" },
|
||||
"cases_total": { "type": "integer", "minimum": 0 },
|
||||
"cases_passed": { "type": "integer", "minimum": 0 },
|
||||
"cases_failed": { "type": "integer", "minimum": 0 },
|
||||
"expected_entity_recall": { "type": "number", "minimum": 0, "maximum": 1 },
|
||||
"forbidden_substring_removal": { "type": "number", "minimum": 0, "maximum": 1 },
|
||||
"unexpected_entity_violations": { "type": "integer", "minimum": 0 },
|
||||
"by_source": { "$ref": "#/$defs/breakdown" },
|
||||
"by_category": { "$ref": "#/$defs/breakdown" },
|
||||
"by_severity": { "$ref": "#/$defs/breakdown" },
|
||||
"results": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"locale",
|
||||
"source",
|
||||
"category",
|
||||
"severity",
|
||||
"passed",
|
||||
"entities",
|
||||
"missing_entities",
|
||||
"unexpected_entities",
|
||||
"forbidden_remaining_count",
|
||||
"required_missing"
|
||||
],
|
||||
"properties": {
|
||||
"id": { "type": "string" },
|
||||
"locale": { "type": "string" },
|
||||
"source": { "type": "string" },
|
||||
"category": { "type": "string" },
|
||||
"severity": { "type": "string" },
|
||||
"passed": { "type": "boolean" },
|
||||
"entities": { "type": "array", "items": { "type": "string" } },
|
||||
"masked_text": {
|
||||
"type": "string",
|
||||
"description": "Optional local synthetic debugging evidence. Do not include this field in operational reports."
|
||||
},
|
||||
"forbidden_remaining_count": { "type": "integer", "minimum": 0 },
|
||||
"missing_entities": { "type": "array", "items": { "type": "string" } },
|
||||
"unexpected_entities": { "type": "array", "items": { "type": "string" } },
|
||||
"forbidden_remaining": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Optional local synthetic debugging evidence. Do not include this field in operational reports."
|
||||
},
|
||||
"required_missing": { "type": "array", "items": { "type": "string" } }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"breakdown": {
|
||||
"type": "object",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["cases_total", "cases_passed", "cases_failed"],
|
||||
"properties": {
|
||||
"cases_total": { "type": "integer", "minimum": 0 },
|
||||
"cases_passed": { "type": "integer", "minimum": 0 },
|
||||
"cases_failed": { "type": "integer", "minimum": 0 }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,10 @@
|
|||
[
|
||||
{
|
||||
"id": "ko_name_label",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "name",
|
||||
"severity": "high",
|
||||
"text": "이름: 김서연, 연락은 하지 말아 주세요.",
|
||||
"expected_entities": ["NAME"],
|
||||
"forbidden_substrings": ["김서연"],
|
||||
|
|
@ -8,13 +12,65 @@
|
|||
},
|
||||
{
|
||||
"id": "ko_name_relationship_context",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "name",
|
||||
"severity": "high",
|
||||
"text": "친구 박민수에게 오늘 상담 내용을 말하지 않았어요.",
|
||||
"expected_entities": ["NAME"],
|
||||
"forbidden_substrings": ["박민수"],
|
||||
"required_substrings": ["친구 [NAME]에게"]
|
||||
},
|
||||
{
|
||||
"id": "ko_name_role_particle",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "name",
|
||||
"severity": "high",
|
||||
"text": "상담자 최하늘은 이전 상담 기록을 보지 않았습니다.",
|
||||
"expected_entities": ["NAME"],
|
||||
"forbidden_substrings": ["최하늘"],
|
||||
"required_substrings": ["상담자 [NAME]은"]
|
||||
},
|
||||
{
|
||||
"id": "ko_name_natural_label_self",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "name",
|
||||
"severity": "high",
|
||||
"text": "제 이름은 김서연입니다.",
|
||||
"expected_entities": ["NAME"],
|
||||
"forbidden_substrings": ["김서연"],
|
||||
"required_substrings": ["제 이름은 [NAME]입니다"]
|
||||
},
|
||||
{
|
||||
"id": "ko_name_natural_label_guardian",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "name",
|
||||
"severity": "high",
|
||||
"text": "보호자 이름은 박민수입니다.",
|
||||
"expected_entities": ["NAME"],
|
||||
"forbidden_substrings": ["박민수"],
|
||||
"required_substrings": ["보호자 이름은 [NAME]입니다"]
|
||||
},
|
||||
{
|
||||
"id": "ko_name_self_intro_copula",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "name",
|
||||
"severity": "high",
|
||||
"text": "저는 최하늘입니다.",
|
||||
"expected_entities": ["NAME"],
|
||||
"forbidden_substrings": ["최하늘"],
|
||||
"required_substrings": ["저는 [NAME]입니다"]
|
||||
},
|
||||
{
|
||||
"id": "ko_org_school_department",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "organization",
|
||||
"severity": "high",
|
||||
"text": "소속은 한신대학교 상담심리학과입니다.",
|
||||
"expected_entities": ["ORG"],
|
||||
"unexpected_entities": ["NAME"],
|
||||
|
|
@ -23,16 +79,94 @@
|
|||
},
|
||||
{
|
||||
"id": "ko_org_health_center",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "organization",
|
||||
"severity": "high",
|
||||
"text": "지난주 마음봄상담센터에서 안내를 받았습니다.",
|
||||
"expected_entities": ["ORG"],
|
||||
"unexpected_entities": ["NAME"],
|
||||
"forbidden_substrings": ["마음봄상담센터"],
|
||||
"required_substrings": ["[ORG]"]
|
||||
},
|
||||
{
|
||||
"id": "ko_org_hospital",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "organization",
|
||||
"severity": "high",
|
||||
"text": "새봄병원에서 진료를 받았다고 말했어요.",
|
||||
"expected_entities": ["ORG"],
|
||||
"forbidden_substrings": ["새봄병원"],
|
||||
"required_substrings": ["[ORG]"]
|
||||
},
|
||||
{
|
||||
"id": "ko_contact_phone_email",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "contact",
|
||||
"severity": "critical",
|
||||
"text": "연락처는 010-1234-5678이고 이메일은 seoyeon@example.com입니다.",
|
||||
"expected_entities": ["PHONE", "EMAIL"],
|
||||
"forbidden_substrings": ["010-1234-5678", "seoyeon@example.com"],
|
||||
"required_substrings": ["[PHONE]", "[EMAIL]"]
|
||||
},
|
||||
{
|
||||
"id": "ko_rrn_numid",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "national_id",
|
||||
"severity": "critical",
|
||||
"text": "주민번호는 990101-1234567이고 보호자 번호는 123456789012입니다.",
|
||||
"expected_entities": ["RRN", "NUMID"],
|
||||
"forbidden_substrings": ["990101-1234567", "123456789012"],
|
||||
"required_substrings": ["[RRN]", "[NUMID]"]
|
||||
},
|
||||
{
|
||||
"id": "ko_date_money_address",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "quasi_identifier",
|
||||
"severity": "medium",
|
||||
"text": "2001년 4월 18일 서울시 강남구 역삼동에서 1200원을 냈어요.",
|
||||
"expected_entities": ["DATE", "ADDR", "MONEY"],
|
||||
"forbidden_substrings": ["2001년 4월 18일", "서울시 강남구 역삼동", "1200원"],
|
||||
"required_substrings": ["[DATE]", "[ADDR]", "[MONEY]"]
|
||||
},
|
||||
{
|
||||
"id": "ko_common_words_false_positive",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "negative_control",
|
||||
"severity": "medium",
|
||||
"text": "학교 가는 게 힘들고 엄마랑 친구 이야기를 하면 불안해요.",
|
||||
"expected_entities": [],
|
||||
"unexpected_entities": ["NAME", "ORG"],
|
||||
"forbidden_substrings": [],
|
||||
"required_substrings": ["학교", "엄마", "친구"]
|
||||
},
|
||||
{
|
||||
"id": "ko_address_negative_control",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "negative_control",
|
||||
"severity": "medium",
|
||||
"text": "서울 가는 길 이야기를 하면 그냥 마음이 답답해요.",
|
||||
"expected_entities": [],
|
||||
"unexpected_entities": ["ADDR"],
|
||||
"forbidden_substrings": [],
|
||||
"required_substrings": ["서울 가는 길"]
|
||||
},
|
||||
{
|
||||
"id": "ko_name_label_negative_control",
|
||||
"locale": "ko-KR",
|
||||
"source": "synthetic",
|
||||
"category": "negative_control",
|
||||
"severity": "medium",
|
||||
"text": "이름은 중요하지 않고 상담 내용만 이야기하고 싶어요.",
|
||||
"expected_entities": [],
|
||||
"unexpected_entities": ["NAME"],
|
||||
"forbidden_substrings": [],
|
||||
"required_substrings": ["이름은 중요하지"]
|
||||
}
|
||||
]
|
||||
|
|
|
|||
73
data/rubrics/case-worksheet-rubric.json
Normal file
73
data/rubrics/case-worksheet-rubric.json
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
{
|
||||
"schema_version": "vignette.case_worksheet_rubric.v1",
|
||||
"rubric_id": "case-worksheet-rubric@scaffold-2026-06-28",
|
||||
"title": "Case formulation worksheet rubric scaffold",
|
||||
"status": "scaffold_only",
|
||||
"content_owner": "clinical_team",
|
||||
"scoring_enabled": false,
|
||||
"approval": null,
|
||||
"notes": [
|
||||
"This file is a machine-readable scaffold only.",
|
||||
"Clinical scoring criteria, score anchors, and approval metadata must be supplied by the clinical team before scoring is enabled."
|
||||
],
|
||||
"sections": [
|
||||
{
|
||||
"key": "exploration_11",
|
||||
"title": "탐색 11항목",
|
||||
"items": [
|
||||
{ "key": "presenting_complaint", "label": "주호소", "criteria": [], "score_scale": null },
|
||||
{ "key": "trigger_context", "label": "계기·상황", "criteria": [], "score_scale": null },
|
||||
{ "key": "emotion", "label": "정서", "criteria": [], "score_scale": null },
|
||||
{ "key": "cognition", "label": "생각", "criteria": [], "score_scale": null },
|
||||
{ "key": "behavior", "label": "행동", "criteria": [], "score_scale": null },
|
||||
{ "key": "body", "label": "신체·수면", "criteria": [], "score_scale": null },
|
||||
{ "key": "relationship", "label": "관계", "criteria": [], "score_scale": null },
|
||||
{ "key": "resources", "label": "자원", "criteria": [], "score_scale": null },
|
||||
{ "key": "risk", "label": "위험 신호", "criteria": [], "score_scale": null },
|
||||
{ "key": "motivation", "label": "변화동기", "criteria": [], "score_scale": null },
|
||||
{ "key": "first_goal", "label": "상담 목표 초안", "criteria": [], "score_scale": null }
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "five_domains",
|
||||
"title": "호소 5영역",
|
||||
"items": [
|
||||
{ "key": "domain_emotion", "label": "정서", "criteria": [], "score_scale": null },
|
||||
{ "key": "domain_cognition", "label": "인지", "criteria": [], "score_scale": null },
|
||||
{ "key": "domain_behavior", "label": "행동", "criteria": [], "score_scale": null },
|
||||
{ "key": "domain_relationship", "label": "대인관계", "criteria": [], "score_scale": null },
|
||||
{ "key": "domain_body", "label": "신체", "criteria": [], "score_scale": null }
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "cognitive_triad_emotions",
|
||||
"title": "인지삼제·1/2차 감정",
|
||||
"items": [
|
||||
{ "key": "triad_self", "label": "자기", "criteria": [], "score_scale": null },
|
||||
{ "key": "triad_world", "label": "타인·세계", "criteria": [], "score_scale": null },
|
||||
{ "key": "triad_future", "label": "미래", "criteria": [], "score_scale": null },
|
||||
{ "key": "primary_emotion", "label": "1차 감정", "criteria": [], "score_scale": null },
|
||||
{ "key": "secondary_emotion", "label": "2차 감정", "criteria": [], "score_scale": null }
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "protective_barrier_quadrants",
|
||||
"title": "보호·방해 4사분면",
|
||||
"items": [
|
||||
{ "key": "internal_protective", "label": "내적 보호요인", "criteria": [], "score_scale": null },
|
||||
{ "key": "internal_barrier", "label": "내적 방해요인", "criteria": [], "score_scale": null },
|
||||
{ "key": "external_protective", "label": "외적 보호요인", "criteria": [], "score_scale": null },
|
||||
{ "key": "external_barrier", "label": "외적 방해요인", "criteria": [], "score_scale": null }
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "biopsychosocial_goals",
|
||||
"title": "생물·심리·사회 목표",
|
||||
"items": [
|
||||
{ "key": "bio_goal", "label": "생물", "criteria": [], "score_scale": null },
|
||||
{ "key": "psy_goal", "label": "심리", "criteria": [], "score_scale": null },
|
||||
{ "key": "social_goal", "label": "사회", "criteria": [], "score_scale": null }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
99
data/rubrics/case-worksheet-rubric.schema.json
Normal file
99
data/rubrics/case-worksheet-rubric.schema.json
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "vignette.case_worksheet_rubric.v1",
|
||||
"title": "Vignette case worksheet rubric",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"schema_version",
|
||||
"rubric_id",
|
||||
"title",
|
||||
"status",
|
||||
"content_owner",
|
||||
"scoring_enabled",
|
||||
"approval",
|
||||
"sections"
|
||||
],
|
||||
"properties": {
|
||||
"schema_version": { "const": "vignette.case_worksheet_rubric.v1" },
|
||||
"rubric_id": { "type": "string", "minLength": 1 },
|
||||
"title": { "type": "string", "minLength": 1 },
|
||||
"status": { "enum": ["scaffold_only", "draft", "approved"] },
|
||||
"content_owner": { "const": "clinical_team" },
|
||||
"scoring_enabled": { "type": "boolean" },
|
||||
"approval": {
|
||||
"anyOf": [
|
||||
{ "type": "null" },
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["clinical_reviewer", "approved_at"],
|
||||
"properties": {
|
||||
"clinical_reviewer": { "type": "string", "minLength": 1 },
|
||||
"approved_at": { "type": "string", "minLength": 1 },
|
||||
"notes": { "type": "string" }
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"notes": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"default": []
|
||||
},
|
||||
"sections": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": { "$ref": "#/$defs/section" }
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"section": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["key", "title", "items"],
|
||||
"properties": {
|
||||
"key": { "type": "string", "minLength": 1 },
|
||||
"title": { "type": "string", "minLength": 1 },
|
||||
"items": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": { "$ref": "#/$defs/item" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["key", "label", "criteria", "score_scale"],
|
||||
"properties": {
|
||||
"key": { "type": "string", "minLength": 1 },
|
||||
"label": { "type": "string", "minLength": 1 },
|
||||
"criteria": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"default": []
|
||||
},
|
||||
"score_scale": {
|
||||
"anyOf": [
|
||||
{ "type": "null" },
|
||||
{
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["min", "max", "anchors"],
|
||||
"properties": {
|
||||
"min": { "type": "integer" },
|
||||
"max": { "type": "integer" },
|
||||
"anchors": {
|
||||
"type": "array",
|
||||
"minItems": 2,
|
||||
"items": { "type": "string" }
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue