Maintenance¶
The Maintenance module is your work-order system: residents report issues, management triages and assigns them, technicians work them and upload proof-of-completion, and everyone has a clear audit trail.
What residents see¶
Residents have a Report a Problem flow:
- Pick a category (Plumbing, Electrical, AC, Pest, Structural, Cleaning, Security, Emergency, Other).
- Describe the issue. Add up to 5 photos.
- Pick a priority (Low, Medium, High, Urgent — Urgent escalates directly to management).
- Submit. Resident gets a ticket number.
After submission residents see: - Real-time status: Open → Acknowledged → In Progress → Awaiting Parts → Completed → Verified. - The technician's name and contact (when assigned). - Photos uploaded by the technician at each stage. - An estimated completion time, if management has set one. - A Rate this work prompt once the ticket is Verified.
What technicians see¶
Technicians (and contractors / artisans) see only the work assigned to them:
- My queue — sorted by priority + age.
- Each ticket has the resident's contact info, the issue description, photos, and a Notes field for status updates.
- Update status — drop-down to move the ticket through the workflow.
- Upload completion photo — required when marking Completed.
- Request parts — moves the ticket to Awaiting Parts and pings management.
The Maintenance module works offline for technicians in basement mechanical rooms with no signal — status changes and photos sync once they're back online.
What facility admins do¶
Triage incoming tickets¶
The Open tab shows everything residents have just reported. From here:
- Assign to a specific technician or artisan.
- Re-categorize if the resident misclassified.
- Bump priority (or downgrade if a resident over-classified everything as Urgent).
- Add an internal note (residents don't see internal notes).
- Set an SLA / target completion time.
SLA tracking¶
Settings → Maintenance → SLA Targets lets you set a target hours per (category, priority) combination — e.g.: - Emergency: 1 hour - Plumbing High: 4 hours - Cleaning Low: 48 hours
The dashboard shows tickets approaching or breaching SLA in red. Useful for end-of-month reports to the HOA committee.
Verification¶
Once a technician marks a ticket Completed, it sits in Awaiting Verification until either: - The resident confirms the work via the Rate this work prompt, or - 48 hours pass (auto-verifies, with a default 5-star rating).
You can manually verify a ticket if the resident is unresponsive but you've physically inspected the work.
Reports¶
The Reports tab gives you: - Tickets per category per month - Average resolution time - SLA adherence percentage - Top recurring issues (good for capital-planning) - Per-technician performance (tickets closed, average rating, time per ticket)
Photo storage¶
Each ticket can hold up to 10 photos (5 from the resident, 5 from the technician). Photos are stored encrypted and auto-archived after a configurable retention window (default 18 months). Settings → Maintenance → Photo retention controls this.
Categories explained¶
| Category | Typical issues |
|---|---|
| Plumbing | Leaks, blockages, low pressure, water heater |
| Electrical | Sockets, lighting, fans, breakers |
| AC | A/C not cooling, noise, leaks |
| Pest | Roaches, ants, mosquitoes, rodents |
| Structural | Cracks, paint, doors, windows, locks |
| Cleaning | Common-area cleaning misses |
| Security | Gate issues, intercom faults, lighting outages |
| Emergency | Fire, flood, structural collapse, gas leak — escalates immediately |
| Other | Anything that doesn't fit the above |
Tips¶
- Photos are powerful evidence — encourage residents to attach them. A leaking shower with a photo gets resolved faster than one described in words.
- Set realistic SLAs — if you can't actually hit a 1-hour Emergency target with your current crew, residents will lose faith in the number. Better to set 4 hours and consistently beat it.
- Auto-verification at 48 hours is a feature, not a bug. Without it unresponsive residents keep tickets in limbo and skew your stats.
- Connect Maintenance to Artisans — when an external contractor is assigned, they get a portal login (read/write only on their assigned tickets) and you don't have to relay messages.
Process flows¶
End-to-end procedures the maintenance team runs day-to-day. Steps are anchored to the actual UI labels.
Resident files a ticket¶
- Resident opens Maintenance → + Report an issue.
- Pick a category (Plumbing / Electrical / HVAC / Structural / Pest / Other) and an urgency (Routine / Soon / Urgent / Emergency).
- Free-text description + up to 4 photos / 1 short video. Optional: tag the unit area (kitchen / bathroom / balcony / common area).
- Submit — ticket lands in the mgmt triage queue with status New. Resident gets a confirmation email + a tracking number.
Triage + assign a ticket¶
- Maintenance → Triage filter (default: New).
- Open the ticket → review the description + photos.
- Action:
- Reject + close for non-issues (resident clarification, duplicate, out-of-scope) with a reason that's emailed back.
- Reassign category / urgency if the resident misclassified (e.g. Routine → Urgent for a real water leak).
- Assign to internal staff — pick from the staff roster; the staff member gets a push. Reception staff can also handle triage + assignment on facilities that grant them the maintenance module-role.
- Assign to artisan — picks from the Artisans module roster.
The artisan picker hides suspended + blacklisted artisans
(license expired or violation-threshold breach); the assign
attempt against a blocked artisan returns
ARTISAN_LICENSE_EXPIREDorARTISAN_BLACKLISTEDcodes. - Set the SLA target (default per category, mgmt can override).
Status moves to Assigned — note: you cannot mark Assigned
without specifying a technician (the form blocks save with
INVALID_TRANSITION_NEEDS_ASSIGNEE).
Technician completes + uploads proof¶
- Assignee opens the ticket on their device (staff via the regular app, artisan via the vendor portal).
- Tap Mark in progress when starting work — surfaces in resident-facing status updates.
- After the work, + Add proof of completion — at least 1 photo of the resolved state, optional notes (parts used, follow-up needed).
- Tap Mark resolved — status moves to Awaiting verification; resident gets a push to confirm the fix.
Verify + close (auto-verification at 48 h)¶
- Resident opens the ticket → Confirm fix OR Reopen (with a reason).
- Confirm fix moves status to Closed + the SLA stops counting.
- Reopen puts the ticket back in front of mgmt with the resident's reason. Re-triage flows from there.
- If the resident doesn't respond within 48 h of Awaiting verification, the ticket auto-verifies + closes (configurable in Settings → Maintenance → Auto-verify after).
Resident cancels their own ticket¶
The reporter can pull their own ticket back before the work starts.
- Resident opens the ticket → Cancel ticket.
- Two cases depending on current status:
- Open (not yet assigned) — cancels free, no reason required.
- Assigned (technician picked but not yet started) — cancel requires a reason (typo / no longer needed / mistakenly reported / fixed it myself / other). The reason is emailed to the assigned technician so they don't show up to a no-op.
- Once In progress, the cancel button hides — at that point only mgmt can close the ticket (via Mark resolved or Reject).
Reception-role triage¶
Reception staff can handle the triage + assignment workflow for facilities that grant them the maintenance module-role (Settings → Users → role: reception with the maintenance module-role enabled). Reception users can:
- Receive tickets from residents.
- Triage + assign to staff / artisans.
- Re-categorise + re-prioritise.
They CANNOT alter SLA targets, edit the SLA configuration, or configure photo retention — those stay mgmt-only. Useful for buildings where the reception desk is the first point of contact for resident issues.