Pack 5 — 계약 분쟁 Product Spec
Phase 3 (36M+) Pack 5 · 부당이득 반환·계약 손해배상 2 종
| 항목 | 내용 |
|---|---|
| 작성일 | 2026-04-29 |
| 상태 | ✅ 완전 구현 (PR-1 ~ PR-8, 2026-04-26) |
| 작성 근거 | ADR 0027 Pack 5 계약 분쟁 도메인 확장 |
| roadmap 위치 | Phase 3 (36M+) |
| Anti-Goal Compliance | ADR 0001 "민사 외 = 형사·행정·IP" 미위반. 계약 분쟁은 민사 핵심 |
1. 개요
Pack 1 채권 엔진을 부분 재사용하면서, 발생 원인 (cause) 이 다른 청구 를 별도 도메인으로 분리. 시효 (§162 ① 10년 / 상사 §64 5년) 는 Pack 1 과 동일하지만 청구취지 본문에서 발생 원인을 명확히 구분 해야 변호사 실무에 부합.
2 도메인
unjust-enrichment— 부당이득 반환 (민법 §741 — 법률상 원인 없는 이득)- 사례: 매매계약 무효·취소 후 매매대금 반환 / 변제자 이중지급 / 결혼식 비용 양가 정산 분쟁
contract-damages— 계약 손해배상 (민법 §390 — 채무불이행 손해)- 사례: 공급계약 미이행 / 도급계약 하자보수 미이행 / 임대차 약정 위반
의도적 제외
- 손해배상 일반 (불법행위 §750) — 빈도 낮고 사실관계 복잡, Phase 4 검토
- 매매·임대차 등 특정 계약 분쟁 — Pack 1 (
lease-deposit) · Pack 3 (real-estate-*) 가 흡수 - 계약 해제·취소 청구 — 별도 도메인, ADR 0028 enum rename 후 결정
2. 핵심 차별 가치
- 발생 원인 명확 분기 — 부당이득 vs 계약 손배 청구취지 본문 차이
- 채무불이행 3 유형 분기 — 이행 지체 / 이행 불능 / 불완전 이행 (계약 손배)
- Pack 1 시효 엔진 재사용 — §162 ① 10년 (민사) · §64 5년 (상사) 그대로
- 결정론 빌더 — AI 추천 없이 변호사 입력 그대로
3. 데이터 모델
apps/web/types/case.ts CaseData 확장 필드 (모두 optional):
// PR-2 추가 (부당이득 + 계약 손배 공용)
contractCauseType?: // 발생 원인
| "unjust-enrichment"
| "contract-damages";
contractCauseDescription?: string; // 발생 사실 자유 기술 (예: "매매계약 무효 후 대금 반환")
benefitDate?: string; // 이득 발생일 / 채무불이행일 (YYYY-MM-DD, 시효 기산)
benefitAmountKrw?: number; // 청구 원금 (반환액 또는 손해액)
contractDate?: string; // 원 계약 체결일 (Pack 3 와 공유 — 충돌 검토 완료)
breachType?: // 채무불이행 유형 (계약 손배만)
| "non-performance" // 이행 불능
| "incomplete" // 불완전 이행
| "delay"; // 이행 지체
damageBreakdown?: string; // 손해 내역 (적극 손해 + 일실 이익)
contractNote?: string; // 사건 메모
recoveryType: "unjust-enrichment" | "contract-damages".
4. 핵심 기능 (구현 완료)
4.1 부당이득 청구취지 빌더 (PR-4)
위치: apps/web/app/(workspace)/cases/[caseId]/_lib/unjust-enrichment-text.ts:buildUnjustEnrichmentText
기능:
- "피고는 원고에게 [반환액] 원 및 [지연이자] 를 지급하라"
- 발생 원인 본문:
contractCauseDescription그대로 청구원인 단락 삽입 - 시효 §162 ① 10년 (민사) · §64 5년 (상사) 자동 분기
테스트: 10+ cases.
4.2 계약 손배 청구취지 빌더 (PR-5)
위치: apps/web/app/(workspace)/cases/[caseId]/_lib/contract-damages-text.ts:buildContractDamagesText
기능:
- "피고는 원고에게 [손해액] 원 및 [지연이자] 를 지급하라"
- 채무불이행 유형 (delay / non-performance / incomplete) 별 본문 분기
- 손해 내역 (
damageBreakdown) — 적극 손해 + 일실 이익 분리 기재
테스트: 10+ cases.
4.3 시효 엔진 (Pack 1 재사용)
위치: apps/web/app/(workspace)/cases/[caseId]/_lib/statute-of-limitations.ts
- §162 ① 일반 채권 — 10년 (민사 기본)
- §64 상사 시효 — 5년 (상사 기본,
isCommercial플래그 추가 후속)
5. 사용자 여정
부당이득 (매매계약 무효 후 대금 반환)
- 사건 등록:
recoveryType="unjust-enrichment"+ 발생일 + 반환액 + 발생 원인 - ContractInfoSection —
contractCauseDescription"매매계약 §103 무효, 대금 반환" 입력 buildUnjustEnrichmentText→ 부당이득 청구취지 자동- DocKind
unjust-enrichment-complaint에디터 진입 → 변호사 검토 - 시효 §162 ① 10년 임박 알림
계약 손배 (공급계약 미이행)
- 사건 등록:
recoveryType="contract-damages"+ 채무불이행일 + 손해액 + breachType - ContractInfoSection —
breachType="non-performance"+damageBreakdown적극 손해 / 일실 이익 buildContractDamagesText→ 계약 손배 청구취지 자동- DocKind
contract-damages-complaint에디터 진입
6. DocKind (서류 유형)
PR-6 추가:
unjust-enrichment-complaint— 부당이득 반환 소장contract-damages-complaint— 계약 손배 소장
7. Anti-Goal (제외 항목)
- ✗ 손해액 산정 AI 추천 (변호사 입력만)
- ✗ 채무불이행 사실 인정 AI 판단 (결정론 빌더만)
- ✗ 매매계약 무효 사유 AI 자동 판단
8. 향후 확장 후보
- 손해배상 일반 (불법행위 §750) — Phase 4
- 계약 해제·취소 청구 — 별도 도메인, ADR 0028 enum rename 후
isCommercial필드 추가 → §64 상사 5년 자동 분기 정밀화 (현재 §162 ① 10년 단일 적용)
관련 문서
- ADR 0027 Pack 5 계약 분쟁 도메인 확장
- Pack 1 Product Spec — 시효 엔진 재사용 원천
- 로드맵 — Phase 별 Pack 일정