평가 및 화면 구조 정리

This commit is contained in:
Yun Chan 2026-06-28 21:46:22 +09:00
parent 1248ae8ca4
commit 391639c1de
44 changed files with 5816 additions and 4501 deletions

View 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": []
}
}
}
}

View 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 }
}
}
}
}
}

View file

@ -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": ["이름은 중요하지"]
}
]

View 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 }
]
}
]
}

View 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" }
}
}
}
]
}
}
}
}
}