다크모드
수납 대사 3채널 + 수납추천 — FE 핸드오프
화면
/service-charge/actual/console/collecting/reconciliation에서 CMS·가상계좌, PG 결제, 은행 입금 유입을 한 표로 보여준다. 계약·유닛·멤버 수납 탭에서 actual 관리비일 때만 [대사] 탭이 노출된다. provider 키는 내부 repo 선택에만 사용하고 고객 표면에는 노출하지 않는다.
은행 입금 행은 호수·입금자명·미수금·과거 확정 이력을 조합한 후보와 신뢰도를 표시한다. 운영자가 후보를 선택해 [수납확정]하거나 추천이 없으면 [가수금처리]한다.
은행 계좌에 들어온 수납 채널 합산 정산금은 세대 입금이 아니다. 내부 적요 분류 규칙으로 식별하되 화면에는 수납 채널에서 이미 개별 수납 · 채널 정산 대사 대상, 상태에 수납 제외, 처리에 비활성 처리안함을 표시한다. 이는 정산금의 존재는 설명하면서 이중 수납을 막기 위한 기획 표현이다.
상태 계약
대기: 아직 원장에 기록되지 않음확정: 계약 귀속recordReceipt(identified:true)완료가수금:recordReceipt(identified:false)완료, 기존 suspense pool 연결수납 제외: 선행 수납 채널의 합산 정산금. 추천·확정·가수금 모두 금지
같은 행을 다시 처리하면 {ok:false}이며 버튼도 비활성화된다.
부분연동·오류·빈 상태
- 채널 호출은
Promise.allSettled로 격리한다. 하나가 실패해도 성공 채널의 행은 갱신하고, 실패 채널의 직전 행은 보존한다. channelStates[key]는idle | loading | success | failed, 사용자용message,lastAttemptAt을 제공한다.- 실패 채널은 채널 카드의
[재시도]로 해당 repo만 다시 호출한다. 전체 빈 상태는 채널 상태를 먼저 보여 준 뒤 재시도를 안내한다. - 채널 정산 행에
settlementGross,settlementFee,amount가 있으면총액 − 수수료 = 실입금을 표시한다. 차이가 0이어도 세대 수납 확정 버튼은 활성화하지 않는다. - 좁은 화면에서는 표 컨테이너 자체가 가로 스크롤을 소유하며 페이지 전체 가로 넘침을 만들지 않는다.