다크모드
중간정산(provisional) 화면 — FE 메인테이너 핸드오프
라우트와 화면 경계
제품 화면은 /service-charge/provisional 하나다. 기존 /service-charge/provisional/console/** URL은 모두 root로 redirect한다. actual의 부과·청구·수납·세금계산서 route는 그대로 유지한다.
IndexView
├─ HeaderOrg
└─ MainOrg
├─ SearchToolBarOrg / CriteriaToolBarOrg / DataToolBarOrg
├─ DynamicTableOrg (제목 클릭 → selected row)
├─ SheetCreateProvisionalSettlementArt
├─ SheetReadProvisionalSettlementArt (read↔edit)
├─ DialogProvisionalTransitionArt (confirm/cancel)
└─ DialogCancelArt (dirty discard)예전 월별 Jan/Feb/Mar mock과 멤버·차량·계약 overlay mount는 렌더 트리에서 제거됐다. provisional은 _core invoicing/collecting/tax-invoice 또는 actual allocation 컴포넌트를 소비하지 않는다.
상태·repo 흐름
useProvisionalSettlements가 Office scope의 rows/spaces, selected id, loading/saving/error를 소유한다. serviceChargeProvisionalSettlementRepo는 list/create/update/confirm/cancel RPC만 호출하며 Supabase 설정이 없는 환경은 빈 repo를 반환한다. 운영 데이터 대신 mock 단가·공간·정산행을 자동 생성하지 않는다.
request key는 command payload signature별로 성공 전까지 유지된다. success row는 목록에 upsert하고 selected id도 맞춘다. revision/terminal/rate-history/entitlement 오류는 repo에서 안정적인 중간정산 메시지로 번역한다.
계산 입력
useProvisionalSettlement.js는 Vue singleton이 아닌 explicit-input pure calculator다. provisionalSettlementDraft.js가 화면 draft ↔ RPC calculation input 변환과 create/update validation을 담당한다.
신규 draft에는 빈 항목 1개만 있다. 사용자가 항목을 추가·제거하고 code/name/tax/basis/history/quantity를 모두 입력한다. 쉼표 단가 parser는 빈 토큰·문자 토큰을 버리지 않고 NaN으로 보존해 validation에서 저장을 막는다. 목록 수 1120, history 136, code uniqueness도 FE에서 먼저 검사한다. 서버 검증이 최종 권위다.
관리비 기본설정의 interimSettlementMonths는 새 create sheet를 여는 시점의 초기값으로만 읽는다. 생성된 row는 자신의 lookback을 서버에 보존하며, 전역 singleton override/watch는 없다.
Sheet/DS 계약
- create와 edit는
sheet-width-3xl집중 폭이다. SettlementFieldsMol은 한 개 outercard card-md안에 기본정보·계산 항목·선택 연결을 모두 펼친다. edit/create에서 disclosure와 중첩 card를 쓰지 않는다.- Read는 table-static과 계산 disclosure를 사용한다. 관리코드는 zone-top 우측에만 표시하고 목록에는 노출하지 않는다.
- 목록은
유형 → 공간 등록코드 → 중간정산명 → 속성순서이고, 중간정산명은font-medium cursor-pointer hover:underline로 상세 시트를 연다. 별도 상세 버튼은 없다. - draft만 edit/confirm/cancel 버튼을 보여준다. confirm은 명시 dialog를 거치며 confirmed/cancelled는 읽기 전용이다.
- dirty 취소/닫기는 공용
DialogCancelArt확인 뒤 discard한다.
AI·도움말
assistant feature와 page help는 root route와 service-charge-provisional-settlement 문서를 가리킨다. 로컬 AI는 사용자의 호실·퇴거일·검침값을 문장으로 정리할 뿐, prototype 단가로 금액을 만들거나 UI draft를 몰래 변경하지 않는다.
검증 위치
- pure calculator:
useProvisionalSettlement.spec.js - repo:
serviceChargeProvisionalSettlementRepo.spec.js - UI structure:
serviceChargeProvisionalSettlementUi.spec.js - route:
buildLineRoutes.spec.js - DB contract/smoke: backend handoff 참조
확장 시 항목 카탈로그 prefill은 선택 기능으로만 추가한다. 사용자가 확인하지 않은 단가·수량을 숨은 기본값으로 넣거나 다른 상품 entitlement를 중간정산 생성 조건으로 추가하지 않는다.