본문으로 건너뛰기

ADR 0003 — Pack 1 채권 계산 기능 사양

2026-04-20

  • 상태: Accepted (2026-04-20) · Amended (2026-04-20, Pack 순서)
  • 날짜: 2026-04-20
  • 보강 날짜: 2026-04-20 (#005 R3 수렴 반영)
  • 회의: #001 채권 계산 (Tier A, R1·R1.5·R2·R3)
  • 참여자 (R1~R2): P1 변호사 · P2 사무장 · P3 PM · P4 디자이너 · P5 개발자 · P6 Growth · P8 도메인 · P9 대형 로펌 파트너 · P10 회계 사무원 (9인)
  • 선행 ADR: 0001 Vision · Core Value (Amended 2026-04-20) · 0002 AX · 사무소 자산 · 전 기능 무료

결정

1. 기능 범위 · 전 사용자 무료

Pack 1 채권 계산 은 민법 제477·479조 법정변제충당 규칙을 자동 적용하는 결정론 계산기로, 모든 기능이 전 사용자에게 무료로 제공된다 (ADR 0002 정합).

전 사용자 무료 항목:

  • 계산 자체 (단일 대여·복수 대여·복수 변제)
  • 스냅샷 저장 (무제한)
  • PDF·CSV 출력 (무제한, 어뷰징 방지 기술 rate limit 만)
  • 시나리오 A/B (의뢰인 vs 상대방 주장 비교)
  • AI 적요 분류 (assistLimit 한도 내, #005 에서 재정의)
  • 합의서·약정서 업로드 (무제한)
  • 세대 간 지식 이전 RAG (ADR 0002)

2. 계산 방식

  • 기본값: A방식 (개별 채권 충당, 민법 정원칙)
  • Phase 1 에 B방식 정식 도입: 잔액 정산 (대법 96다54416, 2007다37400 계열 판례)
  • UX: 탐지 사실만 중립 표시 ("계약서에 '계속적 거래' 문구 발견") — 자동 권고·AI 판단 금지
  • 데이터 모델: Phase 0 에 loan.method: "A"|"B" 필드 예약
  • 기본 랜딩·온보딩: A방식 중심, B는 문서·헬프에서 동등

3. Phase 로드맵

Phase 0 (4주, 5~7 eng-day + UI 통합)

  • 단일 대여·복수 변제 법정충당 A방식 계산기
  • loan.method 필드 예약 · 확장 슬롯 필드 (연대채무·보증·양도·공탁 등) 예약
  • CSV 파서 3개 은행 (국민·카카오뱅크·토스뱅크) — AI 없는 결정론
  • 청구취지 결정론 템플릿 (AI weight 0) — 3종 프리셋 (청구취지형·준비서면 계산표형·CSV)
  • 별지 계산서 PDF · CSV 내보내기
  • 스냅샷 불변 + engineVersion 태깅
  • features.infraHardening.debtSettlement 킬 스위치
  • 10 테스트 케이스 (윤년·법정이율 경계·복리/단리·방식 A 안분·과납·지정충당·asOf·이자율 0%)

Phase 0 go/no-go 관문: 베타 유저 10명 엑셀 병행 이탈률 70%+

Phase 1 (4주, 7~10 eng-day)

  • 복수 대여·복수 변제 + 지연손해금 연 5%/12% 자동 기산 (민사·소촉법 2019.6.1 경계 분기)
  • B방식 정식 도입 + 계속적 거래 약정 업로드 유도·폴백 권고 경고
  • 당사자특약 (합의충당) 토글 + 합의서 파일 첨부 필드
  • 시나리오 A/B (의뢰인 vs 상대방) — 전 사용자 무료
  • AI 적요 분류 (settlementParse) — weight 1, 전 사용자 접근
  • 공탁 이벤트 타입 (민법 487조, 연 0.1% 보관금 이자, 공탁일 = 변제일 간주)
  • 시효 중단 플래그 연동 (기존 시효 모듈, 민법 168조 승인)
  • 은행 어댑터 확장 5개 (신한·하나·우리·농협·IBK) + 커스텀 컬럼 매핑 템플릿 저장

Phase 1 지표: 사건 등록→소장 제출 평균 소요 30% 단축

Phase 2 (6주, 3~4 eng-day + UI, = 2a)

  • 판결 후 재계산 + 소촉법 12% 자동 분기
  • engineVersion 스냅샷이 판결 기준 재계산을 입력으로 받아 새 스냅샷 생성
  • "판결 선고일" 필드 + 기산일 자동 변환

Phase 2 지표: 사건당 계산기 호출 중앙값 3회+ (전 사이클 내내 사용)

Phase 3 (= 2b, 차후)

  • 집행·배당기일 재재계산 (전부명령·공탁소 출급 연계)
  • 어쏘→파트너 승인 워크플로우 (대형 로펌 기능, ICP 외이므로 Phase 3)
  • 세무 신고용 정산서 PDF (의뢰인 재방문 트리거, 종소세 참고)

4. 데이터 모델

cases/{caseId}/
loans/{loanId} — 대여 건
repayments/{repaymentId} — 변제 건
interestRates/{rateId} — 이자 이력
settlements/{settlementId} — 정산 스냅샷 (기준일 별 동결)

loan:

{
id: string
principal: number // 정수 원 (KRW) 단위
lentAt: Timestamp
dueAt: Timestamp | null
method: "A" | "B" // Phase 0 예약, Phase 1 활용
note?: string
createdAt: Timestamp
createdBy: string
// 확장 슬롯 (Phase 0 예약, Phase 1+ 활용)
coObligors?: string[] // 연대채무자
guarantors?: string[] // 보증인
assignedFrom?: string // 채권양도 양도인
assignedAt?: Timestamp
}

repayment:

{
id: string
loanId?: string // 특정 채권 지정 or 전체
amount: number
paidAt: Timestamp
appropriationOverride?: "principal" | "interest" | null // 당사자 지정충당
source?: "계좌" | "현금" | "상계" | "공탁" | "대물변제"
evidenceIds?: string[]
statuteOfLimitationEffect?: boolean // 시효 중단 플래그 (민법 168조)
}

interestRate:

{
id: string
loanId?: string // null = 모든 채권 공통
rate: number // basis points (정수) e.g. 1200 = 12%
basis: "agreed" | "statutory" | "delay"
effectiveFrom: Timestamp
effectiveTo: Timestamp | null
compounding: "simple" | "monthly" | "annual"
}

settlementSnapshot:

{
id: string
asOf: Timestamp
method: "A" | "B"
totalPrincipal: number
totalInterest: number
totalDelay: number
totalRepaid: number
outstanding: number
breakdown: StepRow[] // 각 변제 → 원금/이자/지연 분해
engineVersion: string // 엔진 버전 태그 (필수)
scenarioId?: string // 시나리오 A/B 식별
parentSnapshotId?: string // Phase 2 판결 후 재계산 이어받기
createdBy: string
name: string // "소장 첨부본 2026-02-10" 등
frozen: boolean
}

위치:

  • 계산 엔진: apps/web/app/(workspace)/cases/[caseId]/_lib/debt-settlement.ts (순수 함수, Firebase 의존 0)
  • Server Action: _actions/settlement-actions.ts (CRUD + 스냅샷 동결)
  • 법정이율 테이블: apps/web/lib/legal/statutory-rates.ts (코드 상수, AI 접근 금지)

5. AI 사용 정책

  • 계산 자체 = weight 0 (결정론 TypeScript 함수) — 숫자 할루시네이션 허용 불가
  • 청구취지 문구 = weight 0 (결정론 템플릿 치환)
  • AI 적요 분류 (settlementParse) = weight 1 (변제/이자/무관 3분류, 폴백 "미분류" 수동 배치)
  • 계산표 자연어 해설 = weight 1
  • 대형 로펌 거래내역 1차 분류 (Phase 3) = weight 1
  • 법리 리스크 스캐닝 (Phase 3) = weight 3 (전략 보고서 재사용)
  • 모든 AI 출력 하단 "AI 초안 · 변호사 검토 필수" 워터마크 고정 (ADR 0002 공통 전제)
  • 감사 로그 tenants/{tid}/auditLog/ 연동

6. 신규 에러 코드

  • SETTLEMENT_INPUT_INVALID — Zod 검증 실패 (음수 원금·역순 날짜·중복 이자구간)
  • SETTLEMENT_RATE_MISSING — 계산 구간에 적용 가능한 interestRate 없음 (기본값 자동 주입 금지)
  • SETTLEMENT_SNAPSHOT_STALE — 동결된 스냅샷 대상 변경 시도

7. UI 배치

  • 사건 상세에 신규 탭 "채권계산" 추가 (Overview·Recoveries 와 분리)
  • 탭 순서: overview | documents | evidence | hearings | 채권계산 | recoveries | messages | notes
  • 결과 3뷰 토글: 요약카드 · 충당표 · 타임라인
  • 인라인 편집 테이블 + 키보드 네비 (Tab·Enter·Cmd+Enter)
  • 대여(+)·변제(-) 섹션 분리
  • 이자율 프리셋 드롭다운 + 수기 입력
  • 엑셀 붙여넣기 (CSV/TSV paste)
  • 시나리오 A/B 탭 스위처 (우상단)
  • 자연어 수식 서술 병기 ("원금 50,000,000 × 연 5% × 92일/365일 = 629,452원")

8. 기술 원칙 (P5·P12 제공)

  1. 정수 원(KRW) 단위 저장 — 부동소수점 금지. Math.floor(principal × rate × days / 365)
  2. KST 일할 계산dateToKstIsoDate + 문자열 diff. getTime() 차이 TZ 의존 금지
  3. 법정이율 이력 — 코드 상수 테이블. Firestore override 역할만
  4. 스냅샷 불변 — engineVersion 태그로 과거 재현 보장
  5. 서버 액션에서 tenantId 세션 주입 (클라이언트 입력 금지)
  6. property-based testing (fast-check) — "총 변제액 ≤ 총 채권액 + 지연이자" 같은 불변식

배경

현재 페인

  • 변호사·사무장이 엑셀로 수기 계산. 개인 사무소 1건당 반나절하루, 대형 로펌 기업 사건(5001,000행)은 어쏘 2일 + 사무장 1일.
  • 입력 실수 한 칸 = 전체 계산표 폐기. 버전 관리 혼란 (계산표_v3_최종_진짜최종.xlsx).
  • 계산 오류 → 일부 기각 → 소송비용 안분 → 변호사 과실배상 청구 (연 1~2건 실제 발생).
  • 대여금·공사대금 사건 70% 이상이 중간 변제 있는 케이스. 순수 단건은 드묾.

국내외 경쟁 공백

  • 국내 민간 판례 검색 SaaS (로앤비·엘박스·인텔리콘·케이스노트 등) — 판례 검색 DB, 계산기 기능 없음
  • Clio·MyCase·Practice Panther·Smokeball·Leap — 영미 Practice Management, 한국 민법 이자·KST·원화 미지원
  • 대법원 전자소송·법률구조공단 — 단일 채권 지연손해금만, 충당 순서 로직 없음
  • 국내 리걸테크에서 진짜 비어 있는 슬롯 — 너홀로프로 Pack 1 Killer Feature

대안 검토

A/B 방식 위상 (C1)

  • 채택: A 기본 + 메뉴 노출 동등 + Phase 0 method 필드 예약 + Phase 1 B 정식
  • 대안: B 를 "고급 모드·숨김 기능" 으로 격하 → 대형 로펌 시장 포기 위험 (P9 반대)
  • 대안: B 자동 권고 배너 → 변호사가 "제품이 권고했으니 맞겠지" 로 검증 건너뛸 위험 (P1 반대)

AI 파싱 시점 (C4)

  • 채택: 3단 분해 (P10 제안)
    • (a) CSV 컬럼 매핑 = 결정론 = Phase 0
    • (a') 추가 은행·커스텀 = 결정론 = Phase 1
    • (b) 적요 3분류 = AI weight 1 = Phase 1
    • (c) 적요 → 충당 금액 분해 = out-of-scope (AI 금지)
  • 대안: "Phase 2 AI 파싱" 뭉뚱그림 → (a) 결정론 파서 누락으로 사무장 엑셀 회귀 (P10 반대)

Free 개방 수준 (C5)

  • 채택: 전 사용자 무료 (ADR 0002 반영)
  • R2 원안: 스냅샷·PDF·시나리오·AI 크레딧 4축 유료화 매트릭스 → ADR 0002 Chair 재확인 시 철회

집행 단계 (C9)

  • 채택: Phase 2 = 2a (판결 후 재계산 + 소촉법 분기) · Phase 3 = 2b (배당·집행)
  • 대안: 전부 Phase 2 → 복잡도 폭발 (공탁·전부명령·배당표 파싱), 사건 빈도 낮음 (P5 반대)

결정 근거

결정론 고정 (AI 금지 수치)

  • P1 과실 배상 우려가 변호사 도입의 결정적 게이트
  • P5 기술 평가: 부동소수점·법정이율 이력 정확성 보장 불가 (AI 할루시네이션)
  • P8 도메인: 판례 번호 오인·이자 계산 오류는 변호사법·보험 직결
  • Anti-Goal "법률 조언 AI ✗" 와 완벽 정합

A방식 기본값

  • 재판부 표준 포맷 (원금 A+B+C 에 대한 각 이자 구조, 판결 주문 양식)
  • 개인 사무소 ICP 빈도 높음
  • Phase 1 B 정식 도입으로 대형 로펌 수요도 흡수

전 사용자 무료 (ADR 0002 정합)

  • Chair 2026-04-19·04-20 재확인
  • PLG 효과: 엑셀 탈출 허들 제거
  • 유료화 축 (스냅샷·PDF·시나리오) 은 오히려 사무장 월말 재계산 루프에서 엑셀 회귀 유발
  • 투자 유치 전환 (#005 지표 재정의)

8개 은행 CSV 단계적 지원

  • Phase 0 개인 대여 빈도 상위 3개 (국민·카카오뱅크·토스뱅크)로 개인 의뢰인 ~60% 커버
  • Phase 1 5개 추가로 개인 90%·법인 75% 커버 (P10 수치)
  • 커스텀 템플릿 저장으로 대형 로펌 법무팀 양식 대응 (P9 요청)

Minority Report (반대의견 보존)

P9 대형 로펌 파트너 — 집행·승인 워크플로우 Phase 2 포함 주장

  • 주장: 계산은 실무상 3회 발생 (소장/판결 직후/배당요구). Phase 2 가 배당까지 커버 못 하면 "반쪽"
  • 수용 범위: Phase 2 = 2a (판결 후 재계산) 포함
  • 유예: Phase 3 = 2b (배당·전부명령·승인 워크플로우) — ICP 5인 이하 이탈 방지
  • 재검토 조건: 대형 로펌 시장 진입 가능성 평가 후 Phase 3 활성화

P1 개인 변호사 — 과실 배상 방어책 필수

  • 주장: "틀린 계산은 지는 것보다 무섭다" — 변호사 과실 배상 직결
  • 방어책 (수용):
    • 원화 소수점 버림·절사 재판부 관행 일치
    • 수동 오버라이드 보존 (AI 재계산 시 플래그 표시)
    • 50건 실제 사건 테스트 선행
    • 3단 검증 (인용 실재·조문 실재·변호사 서명 체크리스트)
    • features.infraHardening.debtSettlement 킬 스위치 (원격 1-click 롤백)

P6 Growth — 유료화 매트릭스 철회 (ADR 0002 반영)

  • 원 주장: 스냅샷 2개·PDF 월 3회·시나리오 B Pro 전용·AI 크레딧 종량제 4축 유료화
  • 철회 이유: ADR 0002 "전 기능 무료" 재확인으로 전면 무효화
  • 대안 지표: #005 에서 활성 사무소 수·Pack 깊이·리텐션·NPS 로 재정의

P10 회계 사무원 — CSV 파서 3단 분해 수용

  • 주장: AI 파싱을 통으로 Phase 2 로 미루면 사무장 엑셀 회귀
  • 수용: (a) Phase 0 · (a') Phase 1 · (b) Phase 1 AI · (c) out-of-scope
  • 추가 수용: 공탁 이벤트 타입 Phase 1 포함 (민법 487조)

P8 리걸테크 — 품질 가드 Audit 전제 흡수

  • 주장: 판례 인용 실재 확인 · 조문 실재 확인 · 변호사 서명 체크리스트 3단 필수
  • 수용: ADR 0002 "모든 축적은 감사 가능성·철회 가능성·격리성을 전제한다" 공통 전제로 흡수

P2 사무장 — 스냅샷 이름 붙이기 현장 수용

  • 주장: "계산 스냅샷 = 사건의 공식 버전" 으로 승격
  • 수용: settlementSnapshot.name 필드 ("소장 첨부본 2026-02-10" 형태)·diff 요약 제공

후속 과제

즉시 (Phase 0 구현)

  1. _lib/debt-settlement.ts 순수 함수 엔진 구현 (5~7 eng-day)
  2. Firestore 스키마 마이그레이션cases/{caseId}/loans·repayments·interestRates·settlements
  3. 신규 에러 코드 3종ActionErrorCode union 확장
  4. Phase 0 테스트 10 케이스 + fast-check property test
  5. 법정이율 코드 상수 테이블lib/legal/statutory-rates.ts
  6. 국민·카카오뱅크·토스뱅크 CSV 어댑터parseBankStatement(format, content): { rows: TransactionRow[] } 인터페이스
  7. 사건 상세 신규 탭 "채권계산" UI — 인라인 편집 테이블 + 3뷰 토글
  8. 청구취지 결정론 템플릿 3종 — 청구취지형·준비서면 계산표형·CSV
  9. 별지 계산서 PDF 출력 — A4 세로 7열 (날짜·원금·이자·변제·잔액)
  10. features.infraHardening.debtSettlement 킬 스위치 Firestore metadata

단기 (Phase 1)

  • B방식 엔진 구현
  • settlementParse AI feature
  • 공탁 이벤트 타입
  • 시효 중단 플래그 연동
  • 은행 어댑터 5개 추가 + 커스텀 템플릿

중기 (Phase 2)

  • 판결 후 재계산 + 소촉법 자동 분기
  • engineVersion 스냅샷 이어받기

장기 (Phase 3)

  • 집행·배당 재재계산
  • 승인 워크플로우 (대형 로펌용)
  • 세무 신고용 정산서 PDF

변경 이력

  • 2026-04-20: 초안 작성 (Accepted). #001 R3 수렴 결과 반영.
  • 2026-04-20 (Amended): #005 R3 수렴 반영.
    • Pack 순서 변경: 부동산 → 상속 → 계약 → 이혼 (Pack 2) → 부동산 (Pack 3) → 상속 (Pack 4) → 계약 (Pack 5) (Chair "이혼 포함" 지시)
    • 손배 feature: 원안 유지 — Phase 2 후반 교통·산재 단건 경량 모듈 (회수 엔진 위)
    • 집단소송 모듈 → Phase 4 (가장 마지막) 이관 (Chair 2026-04-20 결정)
    • DPIA 시점 앞당김: Phase 2 → Phase 1 말 (18M) (개인정보 보호 규제 환경 강화 대응)
    • Provider 다중화 조항 삭제: OpenAI·Anthropic 대체 provider 어댑터 금지. Firebase AI Logic → 국산 소버린 AI 만. (memory project-ai-stack.md 정합, Chair 2026-04-20 재확인)
    • 상세는 ADR 0004 §1 로드맵 + Pack 순서 참조