Cleaner Web App

Issue & damage reporting

When the cleaner finds something broken, missing, or wrong, she taps Report issue in the sticky footer or skips an item with reason broken.

The flow

A modal opens with:

  • Category — picker (broken appliance / missing supply / damage / cleaning issue / other).
  • Location — apartment → room (auto-prefilled to the current cleaning's property).
  • Multi-photo — camera or gallery, any number.
  • Voice note — hold to record, up to 60 s.
  • Description — free text in the cleaner's language.

Submit → toast Issue reported, operator notified.

What happens server-side

The report is not a bespoke "damage report" record. It's emitted as a cleaner message routed through the same LLM intent-classification pipeline guest messages use (gh#524 Slice 2 + §9.1).

The pipeline:

  1. Receives the cleaner message (text + media + voice transcription).
  2. Classifies the intent (broken appliance / missing supply / damage / etc.) against the operator's task templates.
  3. Matches the highest-scoring template (e.g. maintenance_request for a broken appliance).
  4. Spawns a task using that template — with the cleaner's text + photos + voice attached to the task.

This means the operator's task templates ARE the catalog. If you want a new category, add a task template — don't ask for code changes.

What the cleaner doesn't have to know

  • Which template to pick.
  • How the operator's routing works.
  • That voice gets transcribed first.

She just describes the issue in her language; the platform routes.

Confirmation back to the cleaner

The toast says "Issue reported, operator notified." That's it — the cleaner returns to the checklist. No "your issue is now ticket #123" detail; the operator handles follow-up.

Operator side

The new task lands in Operations → Tasks with source=cleaner-app and originatingMessage linked to the cleaner's submission. The operator can:

  • Open the task drawer to see photos + voice transcription + description.
  • Reply via the standard task notification flow (the cleaner sees the reply in WhatsApp).

Walkthrough doesn't break

Reporting an issue does NOT lose the cleaner's checklist progress — the modal closes, the cleaner is back on the checklist with the same state. She finishes the cleaning normally; the issue task lives independently.


Implements: gh#524 Slice 2 (cleaner-message LLM routing into operator task templates). Related: gh#212 (same routing path for WA-channel cleaner messages).

Source: the FlatsBratislava operator manual.