다크모드
FMS 자산(유닛) — 빌링 SSOT 공유 + 운영상태 (BE 참고)
독자: BE 개발자/AI. FMS(시설관리·
facility) 자산 유닛이 빌링과 동일 유닛 master(SSOT) 를 공유하고, 그 위에 운영상태(점유/청소/정비)를 얹는 모델. "확장 모듈 2번째 실증"(CRM 민원에 이은 FMS) — 멀티모듈이 단일 SSOT를 참조함을 증명. 정본 코드:src/composables/useAssetUnits.js. FE: [[facility-asset-board.md]]. CRM 선례: [[complaint-board.md]].
1. 단일 SSOT — 유닛 master
- FMS 유닛 master = 빌링 캐논(
useAllocations().units= demoSeedbuildSeed().units) 를 그대로 소비. 별도 mock 폐기. - 불변식:
useAssetUnits().units의 unitCode 집합 == 빌링 units unitCode 집합(테스트useAssetUnits.spec). 빌링 수납/청구 리스트와 같은 호실(101·102·201·202 + 코호트 1003~) 노출 → drift 0. - 파생 표시 필드(빌링 데이터에서 도출):
floor=⌊unitCode/100⌋·floorLabel·area=exclusiveArea·shareRatio=area/Σarea·site·building. 회계/빌링 무편집.
2. 점유(occupancy) — 빌링 실제 점유 파생
- base 점유 = 빌링 실제 점유(
unitOccupants(unitCode).length > 0 ? '사용중' : '공실') — SSOT 교차. 예: 202호(c-end prior-only, 당기 라인 없음) → 공실, 나머지 점유세대 → 사용중. - 운영 override가 있으면 그게 우선(점검 등). base ↔ override 분리.
3. 운영상태 레이어 — FMS 전용(인메모리)
occOverride·cleaningState·maintenanceState(reactive) — 점유 override·청소(done/required/inProgress)·정비(normal/inspection/repair).- 상태변경 seam:
setOccupancy/setCleaning/setMaintenance(unitCode, status)→ 보드·상세 즉시 반영(reactive). complaintsetStatus선례. - 데모 시드: 모듈로드 1회 결정적 mix(
idx%5→점검+정비점검 ·idx%4→청소필요 ·idx%7→수리). FMS 전용 — 빌링 테스트 미오염(useAssetUnits는 useAllocations만 읽고, 빌링 테스트는 useAssetUnits를 import하지 않음). resetAssetUnits()테스트용 override 초기화.
4. 경계·확장
- 회계 무관: 자산/점유는 증빙·분개 없음. 장기수선충당금(9112) 연동(수선비용 추적)은 별도 슬라이스(미착수).
- 실 데이터 전환: useAssetUnits의 demoSeed 소비를 디렉터리 fetch로 교체(units master는 동일 계약).
- 설비(equipment)·직원(employee)·거래처(business-partner) 자산축은 아직 정적 mock — 동일 SSOT 패턴으로 후속 가능.
- 테스트:
src/composables/__tests__/useAssetUnits.spec.js(SSOT 일치·점유 파생·상태변경·reset).