# SPEC — Session 2026-09-14 (Rently / RentCharge) **Status:** implemented · **Operador:** Roger **Ambientes:** test + prod (frontend partilhado) --- ## Alterações do dia ### QuickPost modal - **Cash Sale** — layout fiel ao mockup (âmbar); modal shell 920px - **Credit Settlement** — UI mockup (azul), last 10 Credit Book history, `transaction_id` (`CT-`/`CR-`), balance after, Posted by; live over-settlement - **Credit Sale** — UI mockup (vermelho), impact R-CB03 (consumo over-settlement), recent charges last 8 weeks, footer info ### Backend ledger - Coluna `service_ledger_entries.transaction_id` + backfill - `GET /api/residents/{id}/credit-book` → `balance_after` + `transaction_id` ### Residents KPI header - Novo bloco visual (mockup KPI) em **`/people`** e **`/residents`** - Clique filtra: All / Current / Up to date / Arrears / Former - Lógica de contagem inalterada (`paymentStatus` + NP) ### Ficheiros principais - `frontend/src/components/QuickPostModal.tsx` - `frontend/src/components/residents/ResidentsKpiHeader.tsx` - `frontend/src/app/people/page.tsx` - `frontend/src/app/residents/page.tsx` - `frontend/src/app/globals.css` - `backend/app/database.py`, `services/ledger.py`, `modules/ledger/router.py` - `frontend/src/lib/api.ts` ## Versão **005.2026** — 2026-09-14 ## Deploy - `npm run build` frontend - restart `rentcharge-frontend` + `rentcharge-test-frontend` - backends se schema transaction_id (init_db)