본문으로 건너뛰기

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 ComplianceADR 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. 사용자 여정

부당이득 (매매계약 무효 후 대금 반환)

  1. 사건 등록: recoveryType="unjust-enrichment" + 발생일 + 반환액 + 발생 원인
  2. ContractInfoSectioncontractCauseDescription "매매계약 §103 무효, 대금 반환" 입력
  3. buildUnjustEnrichmentText → 부당이득 청구취지 자동
  4. DocKind unjust-enrichment-complaint 에디터 진입 → 변호사 검토
  5. 시효 §162 ① 10년 임박 알림

계약 손배 (공급계약 미이행)

  1. 사건 등록: recoveryType="contract-damages" + 채무불이행일 + 손해액 + breachType
  2. ContractInfoSectionbreachType="non-performance" + damageBreakdown 적극 손해 / 일실 이익
  3. buildContractDamagesText → 계약 손배 청구취지 자동
  4. 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년 단일 적용)

관련 문서