ADR 0049: 상담(수임 전) 단계 신설
배경
case-flow SSoT 의 1단계는 "상담" 이지만, 실제 코드의 진입점은 사건 등록 위저드 — 즉 수임이 확정된 사건만 제품에 존재할 수 있었다. 그 결과:
- 상담 단계 데이터 (사건 경위 원문·쟁점·미수임 사유) 가 수첩·한글에 남아 제품 밖으로 유출 — 한 줄 본질 ("자기 데이터로 자기 AI 학습") 의 최상류 누수.
- 미수임 상담이 기록되지 않아 동일 상대방 재등장 시 이해충돌 (변호사법 §31) 대조 소스가 비어 있음.
- "사건 설명 → recoveryType 자동 분류 AI" (case-flow.md 차기 우선순위 2번) 의 입력 데이터가 존재하지 않음.
"너홀로프로만으로 모든 업무" 갭 분석 (2026-06-10) 의 P0-3.
결정
1. 경량 독립 컬렉션 — CaseStatus union 비침습
tenants/{tid}/consultations/{id} 신설. CaseStatus ("소제기"~"종결" 5종)
는 건드리지 않는다 — 1785+ 참조 union 확장 대신 additive 컬렉션
(RecoveryType→CaseDomainType alias 와 동일한 보수 전략).
clientName · clientPhone · opponentName — 당사자 (이해충돌 대조 소스)
consultedAt (YYYY-MM-DD) — 상담일
summary (≤5000) — 사건 경위 원문 (AI 분류 입력)
issues (≤2000) · expectedAmountKrw — 쟁점·예상 청구액
recoveryTypeCandidate — 민사 14종 후보 (선택)
status: open | converted | declined — 상담중 | 수임 | 미수임
declineReason · convertedCaseId
2. 상태 머신
open → declined(+사유) /declined → open(재오픈)* → converted(+caseId) — 종단 상태. 사건 생성이 사실이므로 declined 에서도 수렴 허용, 역전이 금지.- 삭제 없음 — 미수임 상담도 사무소 자산 (이해충돌 대조·재상담 이력).
3. 수임 전환 = 위저드 prefill
/consultations 의 "수임 전환" → /cases/new?consultationId={id}.
위저드가 상담 데이터를 applyAiPrefill 경로로 주입 (이름·연락처·상대방·
후보 유형·경위), createCase 성공 시 markConsultationConverted 호출.
(PR A = 모델+페이지, PR B = 위저드 연동)
4. 이해충돌 검사 연동 (P0-4 시너지)
상담 등록 폼에 ConflictCheckPanel 재사용 — 수임 "전" 이 §31 확인의
올바른 시점. 향후 conflict-check 액션의 대조 소스에 consultations 추가
검토 (후속).
비목표
- 상담 예약·캘린더 연동 (별건)
- 상담료 과금 (P1-6 경비·정산에서 사건 단위로만)
- 통화 녹취 자동 캡처 (case-flow.md 장기 gap 유지)
구현 위치
- 모델:
packages/business-logic/src/consultations/(create·status) - 페이지:
apps/web/app/(workspace)/consultations/ - 사이드바: WORKFLOW_NAV "상담" (대시보드 ↔ 사건 사이 — 업무 시간 순서)
- rules: consultations read=staff · write=false (Server Action 전용)
- 회귀:
apps/web/__tests__/business-logic-consultations.test.ts