Property Management Solutions
← 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.