본문으로 건너뛰기

2026-04-22

ADR 0010 — Pack 1 회수 유형 UI 분기 설계

결정문

Pack 1 6 회수 유형 (대여금·공사대금·구상금·약정금·임대차보증금·양수금) UI 는:

  1. 단일 "회수" 탭 (?tab=recovery) 으로 ?tab=debt-settlement 를 대체. 탭 수 증가 억제.
  2. 탭 내부 RecoveryTab.tsxcaseData.recoveryType 으로 분기:
    • "debt" → 기존 <DebtSettlementTab /> 래핑 (704줄 파일 불변, 회귀 위험 0)
    • 나머지 5 유형 → 신규 <NonDebtRecoveryRouter /> 가 type 별 form 컴포넌트 dynamic import
  3. 유형 선택 UI: 기본 Dropdown (<Select>), CSS container query 로 폭 여유 시 Segmented Control 업그레이드. 모바일은 Dropdown 고정.
  4. 유형 변경 정책:
    • caseData.courtCaseNumber 미지정 (소 제기 전) → 유형 변경 허용 + AlertDialog 경고 + 이전 스냅샷 자동 archive
    • caseData.courtCaseNumber 있음 (소 제기 후) → Dropdown disabled + "새 사건 복제" CTA
  5. 문서 생성 UX 병존:
    • 개별 서면 1종 → 기존 InlineDocGenerate modal 3-step (back-compat)
    • 5 서면 묶음 → 신규 DocumentBundleDrawer (우측 슬라이드, 5 탭 + 클립보드 복사)
  6. 임대차보증금 공제: useFieldArray 인라인 동적 배열 (별도 서브모달 금지).
  7. 점진 배포: features.infraHardening.recoveryTypeUi 플래그 default false. 5 PR 전부 머지 후 Chair 가 true 로 전환.

배경

  • Pack 1 Core Layer 3-tier 완성 (엔진 6 · 서면 5 · 어댑터 5 · RecoverySnapshot Server Action #372).
  • UI 만 DebtSettlementTab.tsx (704줄) 로 debt 전용. 나머지 5 유형은 코드 존재하나 사용자 접근 경로 없음.
  • Chair 피드백: "가시적 제품 진전" 강조. 코드만 있고 UI 없으면 진전 없어 보임.
  • "베이스 + 유형 팩" 아키텍처 원칙 — Pack 2~5 재사용 가능한 패턴 필요.

대안 검토

대안 A — 유형별 독립 탭 6개 (기각)

  • 장점: 유형별 URL 공유 가능.
  • 단점: 탭 밴드 포화 (CaseDetailClient.VALID_TABS 현재 8개 + 6 추가 = 14개). 모바일·14" 노트북 wrap. Pack 2 이혼 도달 시 탭 20개. "베이스+유형 팩" 원칙 정면 위반.
  • 기각 사유: 아키텍처 원칙 및 정보 위계 모두 반대.

대안 B — DebtSettlementTab 즉시 rename·통합 (기각)

  • 장점: 파일 일관성.
  • 단점: 704줄 파일 대규모 리팩터 → 6-way switch 주입 시 1200줄+. settlementSnapshotsPath · AddRecoveryModal · debt 전용 buildClaimText 와 결합. 기존 debt 회귀 위험.
  • 기각 사유: Phase 0 Week 4 Go/No-Go 일정 보호 + 리팩터 비용 과다.

대안 C — 유형 변경 완전 금지, 새 사건 복제 (기각)

  • 장점: 데이터 모델 엄격성. Zod discriminator·engineVersion 호환성 단순화.
  • 단점: 변호사 실무상 "대여금 → 구상금" 재분류 월 2-3건 발생. 새 사건 복제는 당사자·증거·기일 재입력 2-3시간 낭비. 사무소 내부 사건번호 추적 혼란.
  • 기각 사유: P1·P2 실무 반례 강력. P3·P5 중대 양보로 타협안 수용.

대안 D — 유형 변경 자유 (완전 허용, 기각)

  • 장점: 변호사 실무 최대 유연성.
  • 단점: 소 제기 후 법원 사건번호 부여된 상태에서 청구취지 변경 시 법원 절차 혼란. 데이터 오염.
  • 기각 사유: P3 Anti-Goal 방어선 논리 수용. "소 제기 전/후" 분기가 절충점.

결정 + 근거

핵심 근거

  1. Pack 2~5 재사용성: "회수" 단일 탭 + 내부 type 스왑은 Pack 2 이혼 (재산분할·양육비) 진입 시 동일 패턴 복제 가능. 베이스+팩 아키텍처 원칙의 UI 레이어 첫 증명.
  2. 실무 오분류 복구 비용: P1 증언 — 월 2-3건 재분류 발생. "소 제기 전" 변경 허용은 변호사 시간 절약 + 사무소 번호 일관성 유지.
  3. 회귀 위험 최소화: 기존 DebtSettlementTab 704줄 불변, 신규 컴포넌트 병존. Phase 0 Week 4 일정 보호.
  4. 패턴 재사용: 개별 서면 = 기존 modal (back-compat), 번들 = drawer (5 서면 × 계산표 동시 참조). 서로 다른 task 에 적합한 UX.

성공 지표

  • ?tab=recovery 진입률 (6 유형 누적 사용)
  • "회수" 탭에서 스냅샷 저장 → 문서 번들 생성 완료 플로우 소요 시간 (MVP 목표 < 5분)
  • 유형 오분류 발생률 (월 0건 목표, Alert Dialog 수용률로 측정)
  • 기존 debt 탭 회귀 0건 (테스트 + 실 운영 모니터링)

Minority Report (반대의견)

P4 디자이너 — InlineDocGenerate 단일 패턴 고수 주장 (R2 에서 양보)

"Drawer 신규 도입은 패턴 이중화. 기존 InlineDocGenerate 3-step modal 을 Step 1 docType 에 '5종 묶음 프리셋' + '개별 5 체크박스' 로 확장해 단일 UX 유지하는 편이 유지보수·학습 부담 낮다."

결정과의 차이: 본 ADR 은 modal (개별) + drawer (번들) 병존. P4 는 modal 단일로 5 서면 프리셋 처리 선호.

미해결 우려: drawer 와 modal 양 패턴 이중화로 인한 향후 UX 일관성 리스크. Phase 1 회고 시 재평가.

P5 개발자 — 초기 "유형 변경 금지" 주장 (R2 에서 조건부 철회)

"Zod z.discriminatedUnion + RHF resolver 실전 함정. 타입 별 독립 form 인스턴스 분리로 우회 가능하나, 유형 변경 허용은 향후 data migration 부담 누적."

결정과의 차이: 본 ADR 은 "소 제기 전 허용 + 이후 금지" 분기. P5 는 완전 금지 선호했음.

미해결 우려: 자동 스냅샷 archive 로직이 Server Action 에 추가됨 — 복잡도 증가. 실제 변경 빈도 모니터링 필요 (Phase 1 초반).

후속 과제

본 ADR 범위 내 (5 PR)

  1. RecoveryTab shell + URL + 킬 스위치 + debt 래핑
  2. RecoveryTypeSelector + RecoveryResultSummary + RecoveryClaimTextPreview + 유형 변경 Alert
  3. 3 form (construction·agreement·subrogation)
  4. LeaseDepositForm + useFieldArray
  5. AssignedClaimForm + DocumentBundleDrawer

Phase 1 이관 (별도 안건)

  • Q2 소멸시효 경고 UI (유형별 기산일 · 시효 순수 함수)
  • Q3 공제 증빙 파일 첨부 (Storage + PII)
  • Q4 회수 성공률 상태머신 통일 (CaseStatus union 확장)
  • Q5 모바일 read-only 뷰
  • "법원 사건번호" 부여 감지 로직 정교화 (수동 입력 + 이송 시 변경)
  • InlineDocGenerate + DocumentBundleDrawer 일관성 재평가 (P4 Minority Report)

운영

  • PR 5개 전부 머지 후 Chair 가 features.infraHardening.recoveryTypeUi: true seed 실행
  • 첫 2주 텔레메트리 수집 (오류율·클릭 수·완료 시간)
  • 문제 시 플래그 false 원격 롤백

참여자 최종 입장

역할R1 원초R3 최종
P1 변호사통합 탭 · 변경 허용 · drawer · 교체 · 인라인 공제✅ 수용 (소 제기 전/후 분기 합의)
P2 사무장통합 탭 · 변경+자동 스냅샷 · drawer · RecoveryTab+debt 흡수 · 아코디언 공제✅ 수용
P3 PM통합 탭 · 변경 금지 → 분기 · drawer · debt default view · 조건부 섹션✅ 수용 (주요 양보)
P4 디자이너통합 탭 · 자유+경고 · modal 재사용 · rename·교체 · 섹션 접힘🟡 modal 부분 Minority Report
P5 개발자통합 탭 · 변경 금지 · drawer · 병존 · useFieldArray🟡 변경 금지 부분 Minority Report

Anti-Goal 4개 위반 없음. ADR 0002 (전 사용자 무료) 위반 없음. P1 변호사·P5 개발자 양측 납득 (조건부 양보 포함).