Scope
계약 템플릿 등록/수정 폼을 카테고리(SUBSCRIPTION / RENTAL / CUSTOM)·형태(TAKEOVER / RETURN)·기간 단위(DAY/WEEK/MONTH/QUARTER/HALF_YEAR/YEAR) 입력에 맞춰 재설계한다. 백엔드 Slice A 의 어드민 UI 마무리.
Included:
- `ContractTemplateForm` 을 client component 로 변환 — 카테고리 select 에 따라 동적으로 필드 노출.
- 카테고리별 입력 규칙:
- SUBSCRIPTION: 형태 (인수형/반납형) + MONTH × 12 고정 (운영자가 변경 못 하도록 disabled 표시) + 보험 포함 체크박스 + 기본 보험 아이템 select.
- RENTAL: 형태 + 단위 (일/주/월/분기/반기) select + 값 (양의 정수) + 보험 포함 체크박스 (옵션).
- CUSTOM: 기존 일/시간/분 입력 또는 무제한 (legacy 호환).
- 페이지(`/contract-templates/new`, `/contract-templates/{id}/edit`) 가 보험 아이템 목록 fetch → form 에 props 로 전달.
- payload mapping 확장: category / returnType / durationUnit / durationValue / includesInsurance / defaultInsuranceItemId.
- 기존 CUSTOM 페이로드는 그대로 동작 (legacy 호환).
- 새 필드를 detail 페이지(`/contract-templates/{id}`) 에 노출.
Excluded:
- 어드민 폼에서 다중 보험 아이템 선택 / ADDON 보험 패키지 (Slice B 에서 ADDON 다중 발급 정책 정해진 후 별도 슬라이스).
- 라이더-차량 계약 폼 자체에 자동 보험 발급 결과 표시 (별도 슬라이스 ④-4).
- 시스템 템플릿 (`무제한 계약`) 보호 UI 변경.
Acceptance criteria
- 새 폼이 카테고리 선택에 따라 동적으로 필드 노출.
- SUBSCRIPTION 카테고리에서 MONTH × 12 외 입력이 불가능하도록 disabled.
- RENTAL 카테고리에서 단위 / 값 모두 필수.
- CUSTOM 카테고리에서 기존 일/시간/분 입력 + 무제한 옵션 그대로 동작.
- 보험 포함 체크 시 보험 아이템 select 노출 (백엔드 V8 시드 기본 4종 + 기존 추가 항목).
- 폼 제출 시 백엔드가 SUBSCRIPTION × DAY 같은 잘못된 조합 거부 → save-error 페이지로 redirect.
- detail 페이지에 카테고리/형태/단위/값/보험 포함 정보 노출.
- `npm run lint` / `npx tsc --noEmit` / `npm run build` 통과.
Trace
Concurrent work gate
Decision: allowed-with-non-overlap
Evidence:
- Open target issues: none.
- Open target PRs: none.
- Active branches: dev, main.
Reason: front-admin-web 만 변경.
Scope
계약 템플릿 등록/수정 폼을 카테고리(SUBSCRIPTION / RENTAL / CUSTOM)·형태(TAKEOVER / RETURN)·기간 단위(DAY/WEEK/MONTH/QUARTER/HALF_YEAR/YEAR) 입력에 맞춰 재설계한다. 백엔드 Slice A 의 어드민 UI 마무리.
Included:
Excluded:
Acceptance criteria
Trace
Concurrent work gate
Decision: allowed-with-non-overlap
Evidence:
Reason: front-admin-web 만 변경.