# Domain 9 — Messaging (Ticket System)

← Database Model

### `tickets` / `ticket_participants` / `ticket_messages` [CORE] #

Role: All post-booking communication, admin-readable, with no direct nurse↔customer channel. Why intentionally constrained: it protects vulnerable patients, creates dispute evidence, and prevents disintermediation (families and nurses pairing off-platform). `ticket_messages.is_internal` keeps admin-only notes out of user view. `reference_code` is the human-facing support id. On-site emergencies stay an operational playbook ("call the emergency contact from the app, then open a ticket") — surfaced prominently in the booking UI; no schema change, but documented so nurses don't seek the family's number off-platform. Fields unchanged; `UNIQUE(ticket_id, user_id)` on participants. Relations: `tickets` 1:N `ticket_participants`/`ticket_messages`; `tickets` optionally ↔ `bookings`, `refunds`.

↑ Back to top