Work Order Intake and Dispatch SOP
This SOP governs how maintenance requests are received, triaged, prioritized, and dispatched at PPM. The AI OS handles intake automatically from all channels; this document defines the process and the staff responsibilities at each stage.
Systems involved: Buildium, n8n (WF-1, WF-2), Slack, Google Sheets (Vendor Registry), JustCall
Intake Channels
Work orders reach PPM through three channels:
Tenant portal β tenant submits a request in Buildium; triggers a
WorkOrder.Createdevent to WF-1 automaticallyPhone / voicemail / SMS β tenant calls or texts JustCall; WF-C1 (Communications Intake) classifies the intent and creates a work order in Buildium if maintenance is identified
Staff-created β a PPM team member manually creates a work order in Buildium (Maintenance β Work Orders β + New Work Order); WF-1 detects these as
buildium_manualsource and does not re-route
Priority Classification
Every work order is classified by priority. WF-1 applies this automatically; staff must verify and correct if misclassified.
Emergency (S0) β immediate threat to life, safety, or property: gas leak, major water flooding, no heat below 55Β°F, fire, security breach. Dispatched and owner-notified within 1 hour. Routed to #maintenance-emergency.
Urgent (S1) β significant impact on habitability or property: no hot water, HVAC failure, active leak, appliance failure. Targeted resolution within 24β48 hours. Routed to #maintenance-urgent.
Routine (S2) β non-critical repairs and maintenance. Targeted resolution within 5β7 business days. Routed to #maintenance-dispatch.
Informational (S3) β logged for awareness only; no dispatch required. Routed to #maintenance-info.
WF-1: Automated Intake and Routing
WF-1 (Maintenance Intake & Unification) runs automatically on every new work order event from Buildium. It:
Deduplicates against recent work orders for the same unit
Classifies priority (S0βS3) using Claude
Posts a structured summary to the appropriate Slack channel
For S0 emergencies: notifies the owner immediately via JustCall SMS
Checks the Vendor Registry (Google Sheets, ID
1_1Mo9XYxuyqRrpPwVie8-xQoNU8oWlkv5dZ1fVGCMds) for the appropriate vendor by trade and service areaPosts an Approve/Reject dispatch request to #maintenance-approvals (WF-2)
WF-2: Human-in-the-Loop Approval
For non-emergency work orders, WF-2 posts an approval card to #maintenance-approvals in Slack with:
Property, unit, issue description, priority
Suggested vendor from the registry
Approve / Reject / Reassign Vendor buttons
Staff (or Dan for high-value repairs) click Approve to dispatch. On approval, WF-2 assigns the vendor in Buildium, sends the vendor dispatch notification, and updates the work order status to In Progress.
For emergencies (S0), dispatch is automatic β no approval required. Staff are notified via #maintenance-emergency.
Staff Manual Steps
The AI OS handles routing and dispatch. Staff are responsible for:
Monitoring #maintenance-approvals and approving/rejecting within 2 business hours during business hours
Verifying work order completion β contact the tenant within 24 hours of vendor marking the job done
Posting the vendor invoice in Buildium: Accounting β Vendor Bills β New Bill, linked to the work order
Closing the work order in Buildium once verified complete: Maintenance β Work Orders β [WO] β Mark Complete
Escalating to Dan any repair estimated over $500 (owner authorization threshold)
Owner Notification Requirements
Emergency repairs β notify owner within 4 hours regardless of amount
Repairs $500β$2,500 β require Dan or director authorization before dispatch; notify owner
Repairs over $2,500 β require property owner written approval before dispatch
Major system replacements (HVAC, water heater, roof) β always require owner approval regardless of cost
Errors and Escalation
WF-1 posts errors to #maintenance-errors. If a work order is created in Buildium but no Slack notification appears within 5 minutes, check #maintenance-errors. If no error is posted either, check the n8n execution log for WF-1 at njppm.app.n8n.cloud or alert Dan.
