svc-emergency-response¶
NovaTrek Emergency Response Service | Safety | v1.0.0 | NovaTrek Safety and Compliance Team
Manages emergency alerts, SOS signals from guests on active adventures,
Swagger UI Download OpenAPI Spec
Integration Context¶
Data Store¶
Overview¶
| Property | Detail |
|---|---|
| Engine | PostgreSQL 15 |
| Schema | emergency |
| Tables | emergencies, emergency_timeline, dispatch_records, rescue_teams, emergency_contacts |
| Estimated Volume | ~50 emergencies/month (peak season) |
| Connection Pool | min 5 / max 15 / idle timeout 10min |
| Backup Strategy | Continuous WAL archiving, daily base backup, 30-day PITR |
Key Features¶
- Indexes on guest_id and reservation_id for fast lookup
- Optimistic locking via _rev column on emergencies table
- Composite index on (status, severity) for active incident filtering
- TTL-based archival of resolved emergencies after 90 days
Table Reference¶
emergencies¶
Primary emergency incident records triggered by SOS or staff report
| Column | Type | Constraints |
|---|---|---|
emergency_id | UUID | PK, DEFAULT gen_random_uuid() |
guest_id | UUID | NOT NULL |
reservation_id | UUID | NOT NULL |
type | VARCHAR(30) | NOT NULL |
severity | VARCHAR(10) | NOT NULL |
status | VARCHAR(20) | NOT NULL, DEFAULT 'active' |
latitude | DOUBLE PRECISION | NOT NULL |
longitude | DOUBLE PRECISION | NOT NULL |
altitude_meters | DOUBLE PRECISION | NULL |
description | TEXT | NULL |
reported_by | VARCHAR(100) | NOT NULL |
dispatch_id | UUID | NULL |
resolution_notes | TEXT | NULL |
created_at | TIMESTAMPTZ | NOT NULL, DEFAULT NOW() |
updated_at | TIMESTAMPTZ | NOT NULL, DEFAULT NOW() |
resolved_at | TIMESTAMPTZ | NULL |
_rev | VARCHAR(36) | NOT NULL |
Indexes:
idx_emergency_guestonguest_ididx_emergency_reservationonreservation_ididx_emergency_activeonstatus, severityidx_emergency_dateoncreated_at DESC
emergency_timeline¶
Chronological event log for each emergency incident
| Column | Type | Constraints |
|---|---|---|
entry_id | UUID | PK, DEFAULT gen_random_uuid() |
emergency_id | UUID | NOT NULL, FK -> emergencies |
event_type | VARCHAR(20) | NOT NULL |
description | TEXT | NOT NULL |
actor | VARCHAR(100) | NOT NULL |
timestamp | TIMESTAMPTZ | NOT NULL, DEFAULT NOW() |
Indexes:
idx_timeline_emergencyonemergency_id, timestamp
dispatch_records¶
Rescue team dispatch records linked to emergencies
| Column | Type | Constraints |
|---|---|---|
dispatch_id | UUID | PK, DEFAULT gen_random_uuid() |
emergency_id | UUID | NOT NULL, FK -> emergencies |
rescue_team_id | UUID | NOT NULL, FK -> rescue_teams |
priority | VARCHAR(20) | NOT NULL, DEFAULT 'urgent' |
status | VARCHAR(20) | NOT NULL, DEFAULT 'dispatched' |
dispatched_at | TIMESTAMPTZ | NOT NULL, DEFAULT NOW() |
eta_minutes | INTEGER | NULL |
Indexes:
idx_dispatch_emergencyonemergency_ididx_dispatch_teamonrescue_team_id
rescue_teams¶
Registry of available rescue teams and their operational status
| Column | Type | Constraints |
|---|---|---|
team_id | UUID | PK, DEFAULT gen_random_uuid() |
name | VARCHAR(100) | NOT NULL |
region | VARCHAR(50) | NOT NULL |
status | VARCHAR(20) | NOT NULL, DEFAULT 'available' |
member_count | INTEGER | NOT NULL |
certifications | TEXT[] | NULL |
Indexes:
idx_team_statusonstatusidx_team_regiononregion
emergency_contacts¶
Guest emergency contact information for SOS notifications
| Column | Type | Constraints |
|---|---|---|
contact_id | UUID | PK, DEFAULT gen_random_uuid() |
guest_id | UUID | NOT NULL |
name | VARCHAR(200) | NOT NULL |
relationship | VARCHAR(50) | NOT NULL |
phone | VARCHAR(20) | NOT NULL |
email | VARCHAR(200) | NULL |
is_primary | BOOLEAN | NOT NULL, DEFAULT false |
Indexes:
idx_contact_guestonguest_id
Endpoints (10 total)¶
GET /emergencies -- List emergency incidents with optional filters¶
POST /emergencies -- Trigger a new emergency alert (SOS)¶
Creates a new emergency incident from a guest SOS signal or staff report.
GET /emergencies/{emergency_id} -- Get emergency incident details¶
PATCH /emergencies/{emergency_id} -- Update emergency status or add resolution notes¶
GET /emergencies/{emergency_id}/timeline -- Get the full event timeline for an emergency¶
POST /emergencies/{emergency_id}/timeline -- Add a timeline entry to an active emergency¶
POST /emergencies/{emergency_id}/dispatch -- Dispatch a rescue team to the emergency location¶
GET /rescue-teams -- List available rescue teams and their current status¶
GET /emergency-contacts/{guest_id} -- Get emergency contacts for a guest¶
PUT /emergency-contacts/{guest_id} -- Update emergency contacts for a guest¶
Consuming Applications¶
| Application | Screens Using This Service |
|---|---|
| Operations Dashboard | Safety Incident Board |
| Adventure App | Weather and Trail Alerts |
Events Published¶
| Event | Channel | Trigger | Consumers |
|---|---|---|---|
emergency.triggered | novatrek.safety.emergency.triggered | POST /emergencies | svc-notifications, svc-scheduling-orchestrator, svc-safety-compliance, svc-analytics |