전 저장소 리팩터링과 SSOT 정비

This commit is contained in:
Yun Chan 2026-07-15 21:31:30 +09:00
parent 14ecbd4e7d
commit 3dfddcac6f
173 changed files with 19679 additions and 6952 deletions

View file

@ -26,7 +26,9 @@ from dataclasses import dataclass, field
from enum import Enum
from typing import Optional
TAXONOMY_VERSION = "1.0.0" # 라벨 코드 불변 보장 버전. 새 라벨 추가 시 minor++.
TAXONOMY_VERSION = "1.1.0" # 라벨 코드 불변 보장 버전. 새 라벨 추가 시 minor++.
# 1.1.0 (2026-07-15): 연구팀 태깅 축어록 4종(첫회기 BPS·게슈탈트 3회기·자해 DBT·우울 CBT)
# 태그 정합을 위해 Technique 9종·ClientState 9종 append-only 추가. 기존 코드 불변.
# ════════════════════════════════════════════════════════════════════════════
@ -94,16 +96,28 @@ class Technique(str, Enum):
RISK_ASSESSMENT = "risk_assessment" # 위험요인/자해·자살 탐색 (0615: "위험요인 탐색", "자해 위험 및 경험 탐색")
CONSENT_MOTIVATION_CHECK = "consent_motivation_check" # 동의/동기 확인 (0615: "동의확인, 동기수준 확인")
OPINION_CHECK = "opinion_check" # 내담자 의견·반응 확인 (0615: "내담자 의견 확인", "주호소 문제 재확인")
# 1.1.0 추가 (연구팀 태깅 자료 정합)
CLARIFICATION = "clarification" # 명료화 질문 (cbt: "이해를 명확하게 하기 위해 질문", ch3 다수)
SCALING = "scaling" # 감정/증상 수치화·척도 질문 (cbt: 감정 강도 0~100)
CHAIN_ANALYSIS = "chain_analysis" # 행동 체인분석 — 사건→감정→행동 사슬 탐색 (dbt)
# ── INTERVENTION ──
CONFRONTATION = "confrontation" # 직면 (0615: "기초자료를 활용하여 반응의 불일치에 직면시킴")
INTERPRETATION = "interpretation" # 해석 (0615: "모순의 의미를 해석함", "비언어적 자극 해석", "행동의 재해석")
# 1.1.0 추가
COGNITIVE_RESTRUCTURING = "cognitive_restructuring" # 인지재구성 — 이분법·파국화 확인, 연속선 사고, 핵심신념 작업 (cbt 55건)
BEHAVIORAL_ALTERNATIVE = "behavioral_alternative" # 대안행동 탐색·계획 (cbt)
COMMITMENT_STRATEGY = "commitment_strategy" # 서약/전념 전략 — 악마의 옹호자, 방해물 예상 (dbt)
HERE_AND_NOW_FOCUS = "here_and_now_focus" # 지금-여기 초점화 (gestalt: 현전·트래킹)
# ── STABILIZING ──
STABILIZATION = "stabilization" # 안정화 (0615: "안정화")
HOPE_INSTILLATION = "hope_instillation" # 희망고취 (0615: "동기부여, 희망고취", "희망 고취, 욕구 반영")
REINFORCEMENT = "reinforcement" # 강화 (0615: "강화")
NORMALIZATION = "normalization" # 정상화 (0615: "감정 반응을 노출하는 것을 정상화함")
# 1.1.0 추가
RESTATEMENT = "restatement" # 재진술 — 내용을 되돌려 확인 (cbt: 재진술 후 내담자 확인 대기)
SKILLS_COACHING = "skills_coaching" # 기술 코칭 — 고통감내·위기대처 기술 안내 (dbt)
# ── STRUCTURING ──
PRINCIPLE_EXPLANATION = "principle_explanation" # 상담원칙/비밀보장 설명 (0615: "상담원칙에 대한 설명", "비밀보장 제외 원칙 설명")
@ -134,6 +148,16 @@ TECHNIQUE_CATEGORY: dict[Technique, TechniqueCategory] = {
Technique.PRINCIPLE_EXPLANATION: TechniqueCategory.STRUCTURING,
Technique.PSYCHOEDUCATION: TechniqueCategory.STRUCTURING,
Technique.HOMEWORK: TechniqueCategory.STRUCTURING,
# 1.1.0 추가
Technique.CLARIFICATION: TechniqueCategory.EXPLORATORY,
Technique.SCALING: TechniqueCategory.EXPLORATORY,
Technique.CHAIN_ANALYSIS: TechniqueCategory.EXPLORATORY,
Technique.COGNITIVE_RESTRUCTURING: TechniqueCategory.INTERVENTION,
Technique.BEHAVIORAL_ALTERNATIVE: TechniqueCategory.INTERVENTION,
Technique.COMMITMENT_STRATEGY: TechniqueCategory.INTERVENTION,
Technique.HERE_AND_NOW_FOCUS: TechniqueCategory.INTERVENTION,
Technique.RESTATEMENT: TechniqueCategory.RELATIONAL,
Technique.SKILLS_COACHING: TechniqueCategory.STABILIZING,
}
# 한글 표시명(UI 라벨 칩·리뷰 화면). docs/taxonomy.md 와 일치.
@ -159,6 +183,16 @@ TECHNIQUE_KO: dict[Technique, str] = {
Technique.PRINCIPLE_EXPLANATION: "상담원칙 설명",
Technique.PSYCHOEDUCATION: "심리교육",
Technique.HOMEWORK: "과제 부여",
# 1.1.0 추가
Technique.CLARIFICATION: "명료화",
Technique.SCALING: "수치화 질문",
Technique.CHAIN_ANALYSIS: "체인분석",
Technique.COGNITIVE_RESTRUCTURING: "인지재구성",
Technique.BEHAVIORAL_ALTERNATIVE: "대안행동 탐색",
Technique.COMMITMENT_STRATEGY: "전념 전략",
Technique.HERE_AND_NOW_FOCUS: "지금-여기 초점화",
Technique.RESTATEMENT: "재진술",
Technique.SKILLS_COACHING: "기술 코칭",
}
@ -183,6 +217,16 @@ class ClientState(str, Enum):
RESPONDS_TO_EXPLORATION = "responds_to_exploration" # 탐색에 반응함 (0615: "상담자의 탐색에 반응함")
EXPRESSES_PLAN = "expresses_plan" # 자기 계획/욕구 표현 (0615: "자신의 계획을 표현함")
DEFENSE_LOOSENING = "defense_loosening" # 방어가 서서히 풀림 (0615: "방어가 서서히 풀어지고 있음")
# 1.1.0 추가 (연구팀 태깅 자료 정합)
COMPLIANT_SURFACE = "compliant_surface" # 표면 순응 — 겉으로 동의하나 내면 미변화 (ch2)
EXTERNALIZING = "externalizing" # 문제 외재화 — "아이가 학교만 가면"/"문제는 아내" (ch2·cbt)
SEEKS_GUIDANCE = "seeks_guidance" # 상담자 의견/지시를 구함 (cbt)
APPARENT_COMPETENCE = "apparent_competence" # 겉보기 유능함 — 회기 내 유능, 위기 시 붕괴 (dbt)
ACTIVE_PASSIVITY = "active_passivity" # 적극적 수동성 — 해결을 타인에게 위임 (dbt)
SELF_HARM_DISCLOSURE = "self_harm_disclosure" # 자해 보고 — 자살사고 인정과 구분 (dbt)
SOMATIC_COMPLAINT = "somatic_complaint" # 신체증상 호소 — 숨막힘·두근거림 (ch2)
AFFECT_MASKING = "affect_masking" # 감정 가림 — 웃음·무덤덤함으로 덮기 (ch3)
FOCUS_DRIFT_FUSION = "focus_drift_fusion" # 초점 이탈/융합 — 자기 문제가 타인 이야기로 회귀 (ch2·ch3)
CLIENT_STATE_KO: dict[ClientState, str] = {
ClientState.INVOLUNTARY: "비자발적 태도",
@ -196,6 +240,16 @@ CLIENT_STATE_KO: dict[ClientState, str] = {
ClientState.RESPONDS_TO_EXPLORATION: "탐색에 반응",
ClientState.EXPRESSES_PLAN: "계획/욕구 표현",
ClientState.DEFENSE_LOOSENING: "방어 완화",
# 1.1.0 추가
ClientState.COMPLIANT_SURFACE: "표면 순응",
ClientState.EXTERNALIZING: "문제 외재화",
ClientState.SEEKS_GUIDANCE: "지시 요청",
ClientState.APPARENT_COMPETENCE: "겉보기 유능함",
ClientState.ACTIVE_PASSIVITY: "적극적 수동성",
ClientState.SELF_HARM_DISCLOSURE: "자해 보고",
ClientState.SOMATIC_COMPLAINT: "신체증상 호소",
ClientState.AFFECT_MASKING: "감정 가림",
ClientState.FOCUS_DRIFT_FUSION: "초점 이탈/융합",
}