다크모드
청구·수납 상세 역할 분리 — FE 메인테이너 매뉴얼
독자: FE 메인테이너/AI. 빌링 콘솔 상세 시트 IA(청구=문서/수납=원장)·소스·라우팅. 정본 spec:
docs/superpowers/specs/2026-06-28-invoicing-collecting-role-split.md. as-built 2026-06-28.
1. 두 시트 (역할 분리)
| 청구 상세 | 수납 상세 | |
|---|---|---|
| 컴포넌트 | invoicing/overlays/SheetInvoicingDetailArt.vue | collecting/detail/blocks/SheetCollectingDetailArt.vue |
| id | sheet-invoicing-detail-art | sheet-collecting-detail-art |
| 선택 상태 | selectedBilling | selectedCollecting |
| 소스 | useInvoicingDetail(detailFor + itemsFor) | useCollectingDetail(useCollectingActions) |
| 역할 | 문서: 부과 명세·세금구분·청구액·고지서 | 원장: 차수충당·수납내역·선수금·수납처리 |
2. 진입 (라우팅)
- 청구탭(invoicing unit/contract/member DynamicTableOrg): 이름클릭 →
selectedBilling세팅 +sheet-invoicing-detail-art. (총청구금 클릭도 동일 시트.) - 수납탭(collecting unit/contract/member): 이름클릭 캐논 →
goDetail(selectedCollecting +sheet-collecting-detail-art) / 비캐논 →openBillingRead(동일 수납 시트, key 없으면 빈 상세). - ⚠ 메가시트
SheetReadBillingArt폐기(2026-06-28): 청구·수납을 섞던 시트 삭제. 청구→청구 상세, 수납→수납 상세로 완전 분리.
3. 청구 상세 본문 (SheetInvoicingDetailArt)
- 청구액 헤드라인(
payable) —useCollectingDetail.totals.payable재사용(정본·재계산 금지). 수납 상세와 동일 bridge. (부과 합계grandTotal과 라벨 구분 — payable은 연체 포함·선수금 차감.) - 부과 항목 명세 —
useInvoicingDetail.itemsFor(selection): charge별 배분(부과원금) + 세금구분·부과기준·단가·VAT·부과액. READ 전용(단가/조정 편집은 항목설정/어셈블 소관). - 부과 요약(당기/이월/합계·세금구분 sections) · 분개 미리보기 · 가상계좌 · [고지서].
4. itemsFor 도출 (신규)
useInvoicingDetail.itemsFor: charges × allocationBreakdown(charge, axis, key) 조인. 불변식 Σ(부과원금)===current.supplyTotal · Σ(과세VAT)===current.vat. 테스트 __tests__/invoicingItems.spec.js.
5. 확장 포인트
- 부과항목 컬럼 추가/편집 모드는 항목설정 화면. 청구 상세는 READ 유지.
- 비캐논(lease/sales) 수납 상세 실데이터는 후속(현재 빈 상세 폴백).
6. 테스트
invoicingItems.spec.js— itemsFor 불변식.- collecting
*.noncanon.spec.js— 비캐논 이름클릭 → selectedCollecting + sheet-collecting-detail-art. - Playwright: 청구탭→청구 상세(부과항목·고지서, 수납콘텐츠0) / 수납탭→수납 상세(충당·수납내역, 부과항목0) / 메가시트 DOM 0.