← All docs
Main features
PMS — MAIN FEATURES
===================
Updated: 2026-07-19
ENTRY
-----
scripts/pm-menu.sh
Hubs: [r] Rent [w] Work [s] Reports [d] Dashboards [y] System
Core: [o] Owners [p] Properties [u] Units [t] Tenants [l] Leases [v] Vacant
AUTHORIZED EXECUTION
--------------------
All menu actions go through bin/run (manifest/scripts.tsv).
SQL via lib/runsql.sh / bin/runsql (manifest/sql.tsv).
CORE ENTITIES
-------------
Full manage screens for owners, properties, units, tenants, leases.
Vacant units view (current active lease window — same rule as lease picker).
Properties [p]
· List columns: ID, Address, Owner, Units, City, ST, ZIP
· Detail: Owner ID + resolved Owner Name + unit count
· Shell properties show Units=0 and a tip to add units under [u]
· Search (/) matches owner name (e.g. last name) as well as address
· Sort: 1=ID 2=Address 3=City 4=Owner 5=Units
· Add property shows owner picker table first
Units [u] → A Add
· Property picker shows PID · Address · Owner · existing unit count
· Enter PID only (shell props = Units: 0)
Tenant add [t]→A
First + last name required; email or phone required.
After save: open [l] to place on a vacant unit.
Lease add [l]→A
Tenant picker · available-unit picker (no current active lease)
Defaults: rent = unit base_monthly_rent · deposit = rent
start = 1st of month · end ≈ +12 months · status active
Guards: one status=active lease per unit
Side effect: unit status occupied/vacant synced from lease window
RENT & COLLECTIONS [r]
----------------------
· View lease / invoice AR summary
· Monthly rent invoicing: INV-YYYYMM-#####, calendar month
Issue/due days from PMO settings (default 1 and 5)
· Collect rent: payments + late fee rule + owner ledger post
· AR exceptions / reverse payment: soft-void duplicates, recompute AR
· Bill work order to owner (charge + WO invoiced)
· AR aging detail: overdue invoices by 0-30 / 31-60 / 61-90 / 90+ days
WORK ORDERS & EXPENSES [w]
--------------------------
· Manage work orders — columns #Exp / Exp$; X=linked expenses, N=add expense
· Manage expenses (must link to WO# to bill owner)
· [6] WOs missing expenses (focus list)
· Complete work order
· Bill completed WO to owner (SUM linked expenses → ledger expense −)
· List WOs ready to bill (Exp_Total vs actual_cost; Bill_Ready flag)
· Note: actual_cost on the WO is not enough to bill — need expense lines
FINANCE / OWNER LEDGER
----------------------
Signed owner_transactions:
rent_collected (+), expense (−), management_fee (−)
Management fee % auto on each rent payment (system_settings).
Payment reverse: status=reversed + clear ledger for payment_id
Contract: docs/workflows-finance.txt
Backfill tool: bin/run ledger-backfill
OWNER STATEMENTS [s] → [o]
--------------------------
· Periods: month · quarter · **YTD** · annual · custom range (CLI)
· Period activity only (income / charges / fees / net) from owner ledger
· Kitchen-table PDF order: summary → by property → rollups → line detail
· $ amounts with thousands separators on PDF/MD; CSV plain for Excel
· Letterhead from PMO letterhead settings
· [t]/[T] year-to-date · [j] owner portfolio job sheet
· Browse / regenerate anytime (idempotent)
· Output: reports/owner_statements/{YYYY-MM|YYYY-Qn|YYYY-YTD|YYYY}/
· macOS PDF: pandoc + BasicTeX; see wiki-How_to_Run_Reports / Troubleshooting
DASHBOARDS [d]
--------------
Tenant dashboard, general portfolio dashboard, inventory stats
Portfolio map [4]: directory (owner/unit/tenant) + property job sheet
CLI: bin/run portfolio-map · CSV under reports/portfolio/
Pickers show full OID/PID tables before asking for an id
OWNERSHIP (ops guidance)
------------------------
One owner per property (bill-to). Unit = managed door.
Same address on multiple properties is OK when owners differ —
put unit/apartment in the address or notes. Full rules:
docs/wiki-Workflows.txt §1 · docs/pms-architecture.md §5
SYSTEM [y]
----------
Wiki, forum (commentorium), refresh docs from live schema
Admin console: inventory, telemetry, drift, SQL audit
PMO business parameters (fees, invoice calendar)
PMO letterhead (company name, address, contact)
Ledger backfill
QA Lab [Q] — sandbox pmdb_qa only (never PRD data)
Rent [5 6 9 a c d] · WO [w] · season [s g] · lease onboard [l m]
AR reverse [v] · statement ↔ ledger recon [t]
Re-fight without wipe (heal U1/U2, free U3); wipe [7] only if corrupt
TELEMETRY
---------
runtime_telemetry table; calls via run/runsql logged best-effort.
View density in Admin → Telemetry.