pm.gatedrentals.com PHASE 0 checking identity…
PM Portal › Process map

Process map

How the operation runs from lead source through move-out, from a PM's perspective. License-to-occupy model — closer to a hotel than a residential lease. Last updated: 2026-05-16.

License-based, not lease-based. Texas Property Code Ch.92 (residential tenancy) doesn't apply the way it would for a residential lease. Hotel Occupancy Tax (state HOT 6% for stays <30d, plus local HOT for <35d) does apply. Fair Housing Act fully applies regardless. FCRA adverse-action cycle is lighter — we can deny same-day. See the reports-side process map for full system architecture.
Every customer-facing surface (invoice, email, SMS, modal, portal page) carries a fair housing notice. Every payment cycle bills 1 week before due, due before noon on the assigned day. Every state change emits a CRM sync event. Refunds are physical stamped checks only.
PM Applicant / Resident Delivery crew Technician Accountant System / automation

1. The funnel — lead source to license signed

5 intake routes are LIVE in portal-api (inquire / tour / schedule-call / walkin / phone-log). Each writes both a lead and an activity. Plaid IDV is wired; Documenso for license signing is not yet set up.

flowchart TD
  A1[Lead source
landing inquire-now,
schedule-tour, schedule-call,
FB Leadgen, walkin tablet,
PM phone-log] --> B[lead_inbound + crm_sync_event
in portal-postgres] B -.drain pending.-> C[CRM sync drain
writes lead + activity to DV] C --> D[CRM lead created
in correct tenant] D --> E{PM follow-up?} E -->|tour, call, walkin captured| F[gr_toursignins or
phonecall activity logged] E -->|stuck > 24h| G[PM action queue
'follow up'] F --> H[Applicant clicks Apply] H --> I[Account create + OTP] I --> J[Plaid IDV
primary] J --> K{Co-applicant?} K -->|yes| L[SMS deep-link] L --> M[Co-app Plaid IDV] K -->|no| N[Pay $65 fee
AuthNet Accept.js] M --> N N --> O[Auto-fire
Plaid Income +
Kredifi screening] O --> P{PM decision
approve / conditional / deny} P -->|deny — sex offender, felony| Q1[Hard denial
no adverse-action cycle] P -->|deny — other| Q2[Soft denial
one-line reason +
Kredifi agency contact] P -->|approve| R[License agreement
via Documenso
NOT YET SET UP] R --> S[License signed] S --> T[Move-in prep fan-out] classDef pm fill:#dbe6cf,stroke:#143,color:#143 classDef appl fill:#fef3c7,stroke:#7a4d00,color:#7a4d00 classDef sys fill:#cfd6dc,stroke:#2f4a62,color:#2f4a62 classDef pending fill:#fff4e5,stroke:#ef6c00,color:#7a3a00,stroke-dasharray:5 3 class A1,H,I,J,L,M,N appl class E,F,P,Q1,Q2 pm class B,C,D,G,O,S,T sys class R pending

2. Pay frequency + invoice timing

Captured at license signing — weekly / biweekly / monthly. Invoice issues 7 days before due. Due before noon on the assigned day.

flowchart LR
  A[Lease.pay_frequency
weekly / biweekly / monthly] --> B{Frequency} B -->|weekly| C1[Invoice every 7 days
due before noon on
assigned weekday] B -->|biweekly| C2[Invoice every 14 days
due before noon on
assigned day] B -->|monthly| C3[Invoice on the 1st
due before noon on
the 1st] C1 --> D[Recurring invoice generator
fires 7 days before due] C2 --> D C3 --> D D --> E[Email + SMS to resident
w/ fair housing footer] E --> F{Paid by noon
on due day?} F -->|yes| G[Mark paid,
apply per priority engine] F -->|no| H[Late fee accrues
per catalog] classDef sys fill:#cfd6dc,stroke:#2f4a62,color:#2f4a62 classDef appl fill:#fef3c7,stroke:#7a4d00,color:#7a4d00 class A,B,F appl class C1,C2,C3,D,E,G,H sys

3. Move-in prep — the fan-out

After license signing, six things happen. Currently the PM does all six manually. Task #105 builds the orchestrator.

flowchart LR
  A[License signed] --> B[Pre-move-in inspection
cleared by delivery crew] B --> C[PPSK QR generated] B --> D[Lock code pushed
to Assa Abloy] B --> E[Portal flipped
applicant → resident] B --> F[Welcome email
via ACS Email] B --> G[First invoice cut
rent + prorations
per pay_frequency] B --> H{Autopay?} H -->|yes| I[ARB subscription
via AuthNet] H -->|no| J[Pay-on-portal
each cycle] classDef pm fill:#dbe6cf,stroke:#143,color:#143 classDef delivery fill:#cfe6e2,stroke:#0f3a36,color:#0f3a36 classDef sys fill:#cfd6dc,stroke:#2f4a62,color:#2f4a62 class B delivery class A,C,D,E,F,G,I,J sys

4. Resident steady state — what residents do every month

Residents have five payment surfaces: portal (AuthNet card / eCheck), cash kiosk on-site, Zelle (matched via queue), mailed check (LiveWire), in-person cash/MO at the office. No lease "renewal" — continuous pay-to-stay until they leave or stop paying.

sequenceDiagram
  participant SYS as System
  participant PM as PM
  participant R as Resident
  participant T as Technician
  Note over SYS,R: 7 days before each cycle
  SYS->>SYS: Generate invoice (rent + recurring fees)
  SYS->>R: Email + SMS — fair housing footer attached
  Note over R: Resident pays via any surface
  par
    R->>SYS: AuthNet Accept.js (portal)
  and
    R->>SYS: Cash kiosk (on-site)
  and
    R->>SYS: Zelle (matched in Zelle queue)
  and
    R->>SYS: Mailed check (LiveWire scan)
  and
    R->>SYS: Cash / MO at office (PM records)
  end
  SYS->>SYS: Priority engine applies cash:
rent → electric → propane →
utilities → fees → late alt Overpayment SYS->>SYS: Immediately bill next rent cycle
(GAAP — never hold money against zero obligation) end Note over PM,R: When something breaks R->>SYS: Submit work order (portal) SYS->>PM: Action queue + notify PM->>T: Assign technician T->>SYS: Photo before + after, status SYS->>R: Email — resolved alt Warranty-flagged asset SYS->>PM: Route to Home Assembly action queue end

5. Exit — NTV through SODA

Hard 7-day SODA deadline. Wild Energy final electric is estimated at move-out (not waiting 30 days for the actual bill) so SODA can close. We eat the variance.

flowchart TD
  A[Resident submits NTV] --> B[Lease.notice_given_date set]
  B --> C[PM confirms surrender date]
  C --> D[Final rent prorated to surrender]
  D --> E[Move-out date]
  E --> F[Delivery crew walks unit
inspection bundle + photos to Garage] F --> G[SODA created — draft] G --> H[Wild Energy
final electric estimate
from last accumulator +
avg daily kWh × days] H --> I[Damages assessed per room
clean / damaged-tenant /
damaged-warranty / normal-wear] I --> J[7-day SODA deadline timer] J --> K[Finalize SODA] K --> L[Refund disbursement
CHECK ONLY — no electronic] L --> M[Check stamped, mailed] M --> N[Bank ledger clears
refund — close lease] classDef pm fill:#dbe6cf,stroke:#143,color:#143 classDef delivery fill:#cfe6e2,stroke:#0f3a36,color:#0f3a36 classDef appl fill:#fef3c7,stroke:#7a4d00,color:#7a4d00 classDef sys fill:#cfd6dc,stroke:#2f4a62,color:#2f4a62 class A appl class C,K,M pm class F delivery class B,D,E,G,H,I,J,L,N sys

6. Who does what — reference card

StagePM actionAutomatedSurface
New lead lands (any of 5 intake routes)None (until 24h stuck)lead_inbound + crm_sync_event written
Stuck lead 24h+Call or emailAction queue surfacesAction queue
Tour bookedGreet, walk unitConfirmation .ics + email — fair housing footerTour sign-in
Walk-in (tablet)Capture on tabletlead + gr_toursignins activityTablet — Crosby
Phone logFill form during/after calllead + phonecall activityLog Call form
Application submitted + paidNonePlaid Income + Kredifi auto-fire
Screening completeDecision: approve / conditional / denySoft-denial notification (no formal adverse-action cycle)Action queue
ApprovedSend license agreementDocumenso envelope (NOT YET WIRED)Lease action
License signedDelivery crew inspection sign-offMove-in prep fan-out (manual today)Tools
Resident steady stateTriage WOs + messagesRent invoice gen + payment apply + autopayAction queue
NTV submittedConfirm surrender dateTimer startsAction queue
Move-out walk-throughWalk unit, photo, fill inspectionSODA draft + Wild Energy estimate auto-firedSODA finalize
SODA finalizeReview math, confirm, stamp checkDamages invoice + check disbursementSODA finalize

7. Where things live (system of record)

WhatCanonical homeSync toNotes
Lead, applicant, lease stateportal-postgresCRM (Dataverse)Portal is source of truth. ADR-0021.
Per-lease subledgerportal-postgresInvoice + payment rows. AR aging, deposits, refunds, revrec all source from here. CRM-side is delta/audit view only. ADR-0022.
Revenue recognition basisportal-postgres line-by-linePer-LINE: point-in-time products (propane, fees) recognize on invoice; period-bearing (rent, utilities) recognize ratably. Move-out clamps period_end. Lease dates are NOT the basis.
Bank ledger / ZelleBusiness CentralPortal subledger via Zelle matcher queueMatch against LEASE not invoice; priority engine handles per-line allocation.
AuthNet transactionsAuthNetPortal payment + CRM salesinvoice marked-paidWebhook (#102) wires this. Manual today; blocked on signature key setup (#190).
Wild Energy meter readingsWild Energy's cloudOur DV via API ingest jobSensors are Wild Energy's; we provide PoE + internet, consume data downstream.
Camera stateDahua NVR (10.10{N}.30.5 per site)portal camera_status tablePoE port state from MQTT broker as fallback.
WiFi PSKPPSK app (LXC 110)Resident welcome emailPhase 3 of design spec.
Door codesAssa Abloy cloudManual today; #83 wires API.
Documents (license PDFs, photos)Garage S3-compatible cluster (chronos + atlas)R2 nightly mirror, AWS S3 at park-sale timePer-home archive: homes/{site}/{pad}/{home_serial}/...
SecretsAzure Key Vault (per-site)Read by SP at startup. Never in repos. Never in .env on disk.

8. Refunds — check only

We do not issue electronic refunds. AuthNet refund / ACH reverse / Zelle send-back are all explicitly excluded. Physical stamped check is the audit trail. Earlier ADR-0028 had AuthNet-refund-first as the path; that's been reversed.

9. Compliance items always on

ItemWhereStatus
Fair housing noticeEvery email, invoice, SMS, portal page, modal triggerLive canonical snippet in [[reference_fair_housing_notice]]
HOT (Texas Hotel Occupancy Tax)Audit-gaps Section 4 flags every short-stay lease without HOTSurfaced — backlog needs catalog product (#195)
FCRA — credit pull consent + report on requestApply flow Plaid + Kredifi consent stepsLive per [[project_license_not_lease_model]]
FCRA — pre-adverse-action waiting periodNOT REQUIRED under license modelLighter than residential tenancy
Park-readiness inspections (lender filings)Monthly inspection-report-zip generatorPlanned (#214, #215)

10. Failure paths — what to do when something doesn't auto-resolve

SymptomLikely causeWhere to look
Payment landed but invoice still "open"AuthNet webhook missed or CRM sync queuedBC ↔ Chase reconciliation; portal-api logs
Resident says "I paid" but no recordUnmatched Zelle, kiosk, or third-party payerZelle queue, kiosk report — PM links payer to lease
Tour booked, no .ics in inboxACS Email error or applicant typoportal-api logs; resend manually
Plaid IDV stuckPlaid session expired or applicant abandonedAction queue surfaces after 30 min
Kredifi report not back > 4hVendor delayRefresh on order page; escalate if > 6h
License envelope not deliveredDocumenso not yet wiredDocumenso integration is task #81 / #104 — manual today.
SODA past 7 daysPM did not finalizeP0 — finalize now. SODA dashboard surfaces.
Wild Energy reading is staleAPI ingest job haltedDiscovery task #231; meter-data-freshness check coming
Camera offline + PoE offSwitch port down or cable cutMQTT switch state on chronos-broker
Camera offline but PoE onCamera firmware fault or stream frozenNVR diagnostic; remote reboot from Dahua console

For the full system-architecture view (databases, integrations, network readiness across Mist + Adtran + Dahua + MQTT switches, system-of-record matrix) see reports.gatedrentals.com/process. For reports catalog + management gaps, see /catalog and /gaps.