DRMS Jamaica — Operator Handbook
How to operate the platform end-to-end: from first sign-in to leading a multi-parish emergency response. Built for both new operators and seasoned IC leadership.
- First-day onboarding — get your account live in 5 min
- Reading the dashboard — what every tile means
- Managing disaster events — how event-tagging ties everything together
- Generating SitReps & ICS forms — print-to-PDF for any event
- Failure modes & recovery — what breaks and how to fix it
What DRMS does in one paragraph
DRMS Jamaica is an end-to-end disaster response platform that captures incidents from citizens and field teams, watches sensors and external feeds in real time, raises alerts when thresholds are breached, dispatches response, and produces UN/CDEMA/CCRIF-compliant reports — all backed by an immutable audit log. It is the single source of truth during an emergency and the system of record after it ends.
The five operating layers
First-day onboarding
A 6-step path to confidently operating DRMS Jamaica from your first login through to running a real response.
drmsja.org/portal-login.html with the email and temporary password your administrator provided. You'll be prompted to set a new password.admin, moderator, reporter, or subscriber). Each role sees a different left-side menu — that's intentional.Your first 30 days
| Week | Goal | Sign of readiness |
|---|---|---|
| 1 | Navigation + reading the dashboard fluently | You can locate any field within 10 seconds |
| 2 | Independently filing reports, dispatching, taking calls | You've logged ≥10 reports without senior review |
| 3 | Lead a tabletop exercise as junior IC | Generate a sample SitRep in ≤5 min |
| 4 | Cover a low-tempo shift solo | Senior operator is on call but not at console |
Operator navigation
The left sidebar is grouped into eight collapsible sections. They expand on click and remember your preference.
Top bar
- Crumb — shows your current location
- Search — coming soon: type any keyword to find an event, report, or person
- Account chip — your name + role; click for profile
- Sign out — clears your token; safe to use on shared workstations
Reading the dashboard
The dashboard shows you "what is happening right now" in eight tiles. Knowing each one cold means you can read the state of Jamaica in 10 seconds.
Tile-by-tile
| Tile | What it shows | When to act |
|---|---|---|
| Live Map | All spatial data — sensors, alerts, reports, drones, triage tags | Anything red — investigate immediately |
| Active Alerts | Open monitor_alerts | Critical = drop other work; warning = next 5 min |
| Recent Calls | Last 10 entries from call_log | Spike in volume = something is happening |
| Active Events | Open disaster events with current status | Status change from monitoring → response = your whole shift refocuses |
| Hazards | Earthquakes 24h, hurricanes near JM, flood watches | New cone within 1500 km = pre-position resources |
| Power outages | Active power_outages entries | Multi-parish = utility coordination call |
| Sensor health | Recent readings + downtime alerts | Silent sensor during incident = blind spot — dispatch maintenance |
| Population centres | Risk-scored parish overlay | Dangerous (red) = consider evacuation order |
Live Map walkthrough
The Live Map is your situational-awareness display during any active incident. Every layer can be toggled independently.
Layer groups
- Hazards — earthquakes (USGS live feed), hurricanes (NHC cones), tsunami evacuation zones, storm surge tiers Cat-1/3/5
- Operational — sensors, critical assets, active alerts, dispatch incidents, citizen reports
- Civic — emergency shelters, population centres
- Humanitarian — WASH failures, drone captures, missing-person last-seen, triage tags
/dashboard.html#default to come back to the same view.Reading triage colours
| RED | Immediate — life-threatening injury, needs rescue/transport now |
| YELLOW | Delayed — serious but stable |
| GREEN | Walking wounded — minor |
| BLACK | Expectant/deceased — palliative care or recovery only |
5+ RED tags within 6 hours automatically raises a Mass Casualty Incident (MCI) critical alert.
Managing disaster events
A "disaster event" is the container that ties everything else together. Get the event lifecycle right and the rest of the platform behaves correctly.
Lifecycle states
| State | Meaning | What happens to data |
|---|---|---|
| monitoring | Threat detected, not yet impacting | Data flows in; nothing escalated yet |
| response | Active impact — operators in command mode | All new damage reports auto-tag to this event |
| recovery | Immediate response done, recovery ongoing | Data continues to flow; SitRep cadence drops |
| closed | Officially terminated | New reports no longer auto-tag here — they go to the next active event or to nothing |
How auto-attribution works
When a new damage report comes in:
- System looks for any event in
monitoring/response/recoverystatus - If one of them has the report's parish in its parish list, tag the report to that event
- Otherwise tag to the most recent active event
- If no active event exists, the report is filed unattributed
Damage assessments
Two assessment modes — rapid (post-event 24-72 h) and detailed (insurer/ODPEM submission).
Rapid assessment workflow
Detailed assessment
Detailed mode unlocks construction type, repair cost estimate, agricultural acreage damaged, livestock lost, infrastructure type (hospital/school/gov/bridge/utility), telecom status. Use this for insurer submission and Sendai reporting.
Dispatch & incidents
Incidents are operator-logged events that require a response — fires, traffic accidents, search-and-rescue calls. They live in the items table with category prefix em_ or incidents.
Creating an incident from a call
Shelter operations
Shelters have a roster (occupants checked in) and a capacity (maximum). The system auto-alerts at 80% and 95% occupancy.
Check-in workflow
Capacity alerts
Generating SitReps & ICS forms
Every active event can produce four printable documents on demand, all sourced from the same snapshot endpoint.
Available reports
| Form | Use | When to issue |
|---|---|---|
| ICS 201 — Incident Briefing | Initial transfer-of-command document | Within first 2 h of incident |
| ICS 202 — Incident Objectives | IC's directives for the next op period | Each op period (12 h cycle) |
| ICS 209 — Incident Status Summary | Full status — casualties, damage, resources | Daily during response |
| SitRep | Plain-language narrative for leadership/media | 2× daily during response |
Workflow
Family Tracing & Reunification (FTR)
Aligned with ICRC standards. Tracks missing persons, found persons, and search-for-family records, with automatic matching.
The three record types
- Missing — family has lost contact with someone; family member submits the record
- Found — operator records a person they encountered (in a shelter, at a hospital) whose family is unknown
- Searching — a person is alive but searching for their family (often used after evacuation)
Public submission
Citizens can register a missing person at drmsja.org/ftr-public.html — no login required. Each submission flows into the FTR queue for operator review.
Auto-spike alert
When more than 5 "missing" records are filed in 24 h, the system raises an FTR spike alert (6 h cooldown). Treat this as a mass-displacement indicator — open the FTR queue and start matching against shelter rosters.
WASH water quality testing
Aligned with Sphere standards. Field teams test water at shelters and community taps; failing tests automatically raise an alert.
Sphere thresholds
| Parameter | Sphere standard |
|---|---|
| Free chlorine residual | ≥ 0.2 mg/L (after 30 min contact) |
| pH | 6.5 – 8.5 |
| Turbidity | < 5 NTU |
| E. coli | 0 CFU per 100 mL |
Health surveillance — WHO IDSR
Syndromic disease surveillance. Field clinics report case counts per parish per syndrome; anomalies trigger outbreak investigation.
Syndromes tracked
- Acute diarrhoea · Acute respiratory · Fever of unknown origin · Rash + fever · Vector-borne (dengue/zika/chik) · Post-disaster injury · Mental health presentation
Anomaly threshold
Cases > 2× the baseline rate (specified per report) flag the row as an anomaly and raise a health alert. Treat as suspected outbreak; coordinate with MoHW.
Mutual aid (EMAC)
Cross-jurisdiction resource requests — CARICOM partners, CDEMA, USAID/BHA, partner states.
Status lifecycle
submitted → acknowledged → matched → in_transit → delivered · or declined / cancelled at any step
Aging
Resource lifecycle
Once a resource request is matched to inventory or a donor, this view tracks every state transition.
States and SLAs
| State | SLA | What to do if breached |
|---|---|---|
| requested → matched | 6 h | Escalate to logistics lead |
| matched → en_route | 6 h | Confirm pickup with vendor / donor |
| en_route → delivered | 12 h | Confirm transit; consider divert |
| delivered → utilized | 24 h | Check with receiving site |
| utilized → returned | 48 h | For returnable equipment only |
The kanban board flags cards in red when they're past SLA.
MIRA — Multi-cluster Initial Rapid Assessment
IASC standard. First-72-hour rapid assessment across 10 humanitarian clusters using INFORM severity (1=minimal, 5=catastrophic).
The 10 clusters
- Food security & livelihoods
- WASH
- Health
- Nutrition
- Protection
- Shelter & NFI
- Education
- Logistics
- Early recovery
- CCCM (Camp Coordination)
When to file
Within 72 h of incident onset. Multiple teams can each file their own row per cluster — the system shows the peak severity per cluster on the event page.
Drone / UAV imagery
Aerial captures from authorised UAV flights. Each capture is geo-tagged and damage-rated.
Upload flow
/drone-images/…Auto-actions
Hurricane tracking — NHC
Live tracks pulled every 30 min from the US National Hurricane Center CurrentStorms.json feed.
What we capture per advisory
- Storm position (lat/lng) and intensity (kt)
- Classification (TS, H1–H5)
- Forecast cone (GeoJSON polygon)
- Forecast track (line)
- Pressure, movement vector
The Live Map renders the cone, track and current position automatically when the layer is on. Event pages show all active storms within 1500 km of Jamaica.
CCRIF parametric triggers
CCRIF SPC pays out automatically when objective thresholds are crossed. We watch them in real time so finance leadership knows when payout becomes eligible.
Thresholds watched
| Tropical Storm | Wind ≥ 34 kt (39 mph) |
| Cat-1 hurricane | Wind ≥ 64 kt (74 mph) |
| Cat-3 major | Wind ≥ 96 kt (111 mph) |
| Earthquake | M5.5+ within ~3° of Jamaica |
Each crossing records a ccrif_triggers row and raises a critical alert. Acknowledge each trigger after IC has confirmed it's a real threshold breach (not noise).
Triage tags (START method)
Simple Triage and Rapid Treatment — the field-standard mass casualty triage system. We track each tag with location, vital signs and disposition.
The four colours
- RED — Immediate: life-threatening but salvageable injury; transport priority 1
- YELLOW — Delayed: serious injury, stable, can wait briefly
- GREEN — Minor: walking wounded; ambulatory
- BLACK — Expectant/Deceased: not currently treatable or already deceased
MCI threshold
Donations ledger
Cash and in-kind contributions tied to events. Every $1M JMD milestone is auto-logged to the event timeline.
What to capture
- Donor name + organisation
- Cash amount + currency, or in-kind item + estimated JMD value
- Channel (bank / mobile_money / cheque / in_person / shipped)
- Restricted? (donor specified how it must be used)
- Acknowledgement sent? Receipt issued?
Reporting
Donations totals appear on the event page Standards section. Use the donation ledger CSV export for finance reconciliation.
Sendai Framework indicators
UN Office for Disaster Risk Reduction reporting — A through F indicators.
What we compute
| Code | Indicator | Source |
|---|---|---|
| A-1 | Deaths attributed to disasters | damage_assessments.deceased |
| A-2 | Mortality per 100k (estimate) | A-1 ÷ JM population |
| B-1 | People affected by disasters | damage_assessments.people_affected |
| B-2/3/4/5 | Injured, missing, displaced, households | damage_assessments |
| C-1/2/3/4 | Direct loss + agri + productive + housing | damage_assessments.estimated_repair_cost |
| D-1 | Critical infrastructure damaged | damage_assessments by structure_type |
| F-1 | Number of disasters in window | disaster_events |
Export at /api/sendai/indicators.csv with optional ?event_id + ?from + ?to filters.
Alert engine
Every alert in DRMS Jamaica goes through the same pipeline: capture → enrichment → severity → notification.
Severities
| info | Awareness only — no action required |
| warning | Threshold breached, plan a response |
| critical | Immediate action required; ICS protocols apply |
Sources
- Sensor thresholds (rain, river, wind, surge)
- CCRIF parametric triggers
- NHC hurricane proximity
- USGS earthquakes (M5.5+ within 3° of JM)
- Citizen reports (auto-classified by keywords)
- WASH water-quality failures
- Health surveillance anomalies
- FTR spike detection
- MIRA severity ≥ 4
- Drone aerial damage (major/destroyed)
- Mass Casualty (5+ RED triage tags)
- Shelter capacity (80% / 95%)
- Sensor silent failure (no readings 6h/24h)
- Cross-domain anomaly engine (2.5× baseline)
Anomaly detection
Cross-domain anomaly engine. Runs every 15 minutes, compares current 1-hour activity against a rolling 7-day baseline.
What it watches
- Call volume — anomaly_calls
- Citizen reports — anomaly_reports
- Damage assessments — anomaly_damage
- Alert engine itself — anomaly_alerts (a flood of alerts is itself a disaster signal)
Threshold
Current ≥ 2.5× baseline AND current ≥ 3 (small-N filter). Severity scales: 5× or more → critical, otherwise warning. Cooldown 6 h per signal.
Webhooks for partners
CDEMA, ODPEM, partner state EOCs and other systems can subscribe to receive real-time alerts.
How to register a partner
Payload format
{
"event": "alert.created",
"alert": {
"id": 12345,
"type": "ccrif",
"severity": "critical",
"title": "🌀 CCRIF TC wind threshold breached",
"message": "...",
"parish": "St Thomas",
"lat": 17.91, "lng": -76.42,
"event_id": 42,
"created_at": 1748023200000,
"source": "drmsja.org"
}
}
Signature header
If a secret is set on the endpoint, each request includes X-DRMS-Signature: sha256=<hex> and X-DRMS-Timestamp. Partners should verify the signature against the raw body before trusting the payload.
Retries
Failed deliveries (5xx or network error) retry up to 3 times with exponential back-off (30 s, 5 min, 1 h). Permanent failures are logged in the delivery history per endpoint.
Auto-actions catalog
The system performs these actions automatically without operator intervention. Knowing them prevents "wait, why did this happen?" confusion.
| Trigger | Action |
|---|---|
| New damage report (no event_id) | Auto-tag to most recent active event matching parish |
| Drone capture rated major/destroyed | Create damage_assessment + raise 🛩 alert |
| WASH test fails Sphere | Raise 💧 water-quality alert |
| Health surveillance > 2× baseline | Mark row anomaly + raise health alert |
| MIRA severity ≥ 4 | Raise 🧭 MIRA severity alert (critical at 5) |
| 5+ RED triage tags / 6 h | Raise 🚑 Mass Casualty Incident critical alert |
| 5+ missing FTR records / 24 h | Raise 🔎 FTR spike alert |
| Shelter ≥ 80% capacity | Raise 🏠 nearly-full warning |
| Shelter ≥ 95% capacity | Raise 🏠 AT CAPACITY critical alert |
| Sensor silent 6+ h | Raise 📡 silent-failure warning |
| Sensor silent 24+ h | Escalate to 📡 critical |
| Donation crosses $1M JMD | Log 💰 milestone to event timeline |
| Any monitor_alert active | Deliver to subscribed webhooks per filters |
| Any monitor_alert active | Deliver to email/SMS subscribers per parish/kind |
| Citizen report check-in matches FTR missing | Surface reunification candidate to shelter manager |
Failure modes & recovery
Production-grade reliability means anticipating what breaks. Here's the catalog.
External feed failures
| Feed | Failure mode | What you'll see | Action |
|---|---|---|---|
| NHC hurricane | API timeout / 5xx | Stale tracks; warning in logs | Auto-retries; cached data shown for up to 2 h |
| USGS earthquakes | API timeout | No new quakes appear | Auto-retries; cached data shown |
| RainViewer radar | Tile load failure | Radar layer blank | Refresh map; non-critical |
| Sensor uplink (downtime) | No readings 6h+ | 📡 Sensor silent alert | Dispatch maintenance to physical sensor |
Internal failures
| Component | Symptom | Recovery |
|---|---|---|
| Database write | API returns 500 | Check journalctl -u jims-backend; restart service |
| Alert engine | No new alerts for 30+ min during obvious incident | Restart jims-backend.service; cron jobs re-initialise |
| Webhook delivery | Partner not receiving alerts | Open admin webhook page; check delivery log; test ping |
| Map tiles fail to load | Grey background | Switch basemap (street/sat/dark); proxy may be blocking external tile provider |
/status.html will also be unavailable. There is no fallback site — administrator should restart jims-backend.service via SSH or restart the entire CyberPanel host.Backups & data retention
SQLite database at /home/myvirtualoffices.com/jims-backend/data/jims.db.
Backup strategy
- Daily snapshots — taken at 02:00 JST by host cron
- Retained: last 30 days locally, last 12 months in off-host storage
- Audit log
system_auditis append-only; nothing is ever deleted
Manual backup before risky changes
sudo systemctl stop jims-backend cp /home/myvirtualoffices.com/jims-backend/data/jims.db \ /home/myvirtualoffices.com/jims-backend/data/jims.db.backup-$(date +%F) sudo systemctl start jims-backend
Restore procedure
sudo systemctl stop jims-backend mv /home/myvirtualoffices.com/jims-backend/data/jims.db \ /home/myvirtualoffices.com/jims-backend/data/jims.db.corrupt cp /path/to/backup.db /home/myvirtualoffices.com/jims-backend/data/jims.db sudo systemctl start jims-backend
User & role management
Roles
| admin | Full access including webhook config, user management, audit log |
| moderator | Operational lead — can verify reports, manage events, edit any record |
| reporter | Field reporter — can file reports, manage their own records |
| subscriber | Citizen — receives alerts, can view public status page |
Creating a new operator
Audit log
Every POST/PATCH/DELETE against a sensitive entity is recorded immutably in the system_audit table.
What's logged
- User id and name
- Action (created/updated/deleted)
- Entity type and id
- Before/after snapshot (where applicable)
- Summary message
- Timestamp + source IP
Querying
Open Standards & export → Audit log. Filter by user, entity type, or date range. Export to CSV for compliance review.
Subscriber alerts — "My Alerts"
Citizens subscribe via a free DRMS Jamaica account and manage their preferences in the subscriber portal.
How it works
- Citizen signs up at
/portal-login.htmlwith email + phone verification - They draw or pick "monitoring zones" — the geofence polygons that define where they want alerts
- Per-zone preferences for alert types (hurricane, flood, earthquake, water-quality, etc.)
- Alerts delivered to the in-app "My Alerts" page and (where enabled) via email / Web Push
- Geofence-driven — alerts only fire when an event intersects a zone the subscriber owns
Subscriber count and active zones appear in the admin dashboard. Manage subscribers from Admin → Users.
Frequently asked questions
The dashboard shows nothing — is the system broken?
First check if you're signed in. If your token expired, you'll see empty tiles. Sign in again. If still empty, ping https://drmsja.org/api/health in the browser — should return {"ok":true,...}.
I can't sign in — "Invalid credentials"
Confirm caps-lock is off. If you're sure the password is right, your account may be suspended — contact your admin. Last-resort: ask admin to reset your password.
Why didn't my colleague get the alert I just raised?
Operator alerts go to the dashboard in real time. They do NOT go to email/SMS unless your colleague is also a subscriber. To page someone, use the SMS/email broadcast tool (admin only).
Reports I'm filing aren't showing up under any event
Either no event was active at the time, or the parish in your report doesn't match any active event's parish list. Open the event and add your parish to the parish list, or create a new active event.
The map is showing stale data
Hard-refresh the browser tab (Ctrl+Shift+R or Cmd+Shift+R). Caching on the JS bundles is aggressive by design — service workers serve stale data while fresh data loads.
A sensor I know is working shows "silent"
The sensor reading hasn't reached the database within the last 6 hours. Check the sensor's uplink (cellular signal, power, antenna). The most common cause is power outage at the sensor site.
Where are uploaded drone photos stored?
Server-side at uploads/drones/, served at https://drmsja.org/drone-images/<file>. They survive backend restart. They are subject to the standard backup schedule.
Can I delete a report I filed by mistake?
Reporters cannot delete reports — but can edit them. Moderators/admins can delete; that deletion is recorded in the audit log.
What's the difference between an "incident" and an "event"?
An incident is one specific occurrence — a single house fire, a single car accident. An event is the umbrella container (Hurricane X, Earthquake Y) that aggregates many incidents.
Glossary & acronyms
| AAR | After Action Review |
| CAP | Common Alerting Protocol — OASIS standard for alerts |
| CCRIF SPC | Caribbean Catastrophe Risk Insurance Facility |
| CDEMA | Caribbean Disaster Emergency Management Agency |
| EMAC | Emergency Management Assistance Compact — mutual aid framework |
| FTR | Family Tracing and Reunification (ICRC) |
| HXL | Humanitarian eXchange Language — tagging standard |
| IASC | Inter-Agency Standing Committee — UN humanitarian coordination |
| IC | Incident Commander |
| ICS | Incident Command System (NIMS standard) |
| IDSR | Integrated Disease Surveillance and Response (WHO) |
| INFORM | UN INFORM Severity Index — 1–5 scale |
| JDF | Jamaica Defence Force |
| JPS | Jamaica Public Service (electricity utility) |
| MCI | Mass Casualty Incident |
| MIRA | Multi-cluster Initial Rapid Assessment |
| MoHW | Ministry of Health and Wellness, Jamaica |
| NHC | US National Hurricane Center |
| NIMS | National Incident Management System |
| NWA | National Works Agency, Jamaica |
| ODPEM | Office of Disaster Preparedness and Emergency Management, Jamaica |
| Sendai | UN Sendai Framework for Disaster Risk Reduction 2015–2030 |
| Sphere | Humanitarian Charter and Minimum Standards in Disaster Response |
| START | Simple Triage and Rapid Treatment — field triage method |
| USAR | Urban Search and Rescue |
Standards alignment
DRMS Jamaica implements or aligns with the following international, regional, and national frameworks.
UN / international
- UN Sendai Framework for Disaster Risk Reduction 2015–2030 — indicators A through F computed and exportable as CSV
- UN INFORM Severity Index — 1–5 scale used in MIRA assessments
- IASC MIRA — Multi-cluster Initial Rapid Assessment, 10 clusters supported
- OCHA HXL — Humanitarian eXchange Language tagging in open-data CSV exports
- ICRC Family Links — FTR record structure aligned with ICRC standards
- WHO IDSR — Integrated Disease Surveillance and Response, syndromic case reporting
- Sphere Standards — WASH water-quality thresholds enforced
Regional
- CDEMA Comprehensive Disaster Management (CDM) — framework alignment
- CCRIF SPC — parametric trigger thresholds watched in real time
- CARICOM EMAC — mutual aid request lifecycle
National (Jamaica)
- ODPEM — coordination protocols
- MoHW — health surveillance integration
- NWA — road closures and infrastructure damage
- JPS — power outage data
Technical / interoperability
- NIMS / ICS — Incident Command System forms 201/202/209 generated
- OASIS CAP 1.2 — Common Alerting Protocol feed exposed
- OpenAPI — REST APIs documented
- HMAC-SHA256 — outbound webhook signing
- WebSocket (Socket.IO) — real-time event push
- Service Worker / PWA — offline-capable progressive web app
Security
- Argon2/bcrypt password hashing
- JWT signed tokens for sessions
- Role-Based Access Control (RBAC) — admin / moderator / reporter / subscriber
- Append-only system audit log
- Rate limiting on public endpoints
- CORS allow-list
- HTTPS enforced via host (LiteSpeed + Let's Encrypt)
Keyboard shortcuts
| Ctrl+Shift+R | Hard refresh — clear stale cached scripts |
| Esc | Close drawers and modals |
| / | Focus search (when implemented) |
Troubleshooting
Backend service not responding
sudo systemctl status jims-backend sudo journalctl -u jims-backend -n 50 --no-pager sudo systemctl restart jims-backend
Database appears corrupted
# Stop service, check integrity sudo systemctl stop jims-backend sqlite3 /home/myvirtualoffices.com/jims-backend/data/jims.db "PRAGMA integrity_check;" # If not "ok", restore from latest backup sudo systemctl start jims-backend
NHC hurricane data isn't updating
Check journalctl -u jims-backend | grep nhc. Common cause: NHC API rate-limited the host IP. Wait 30 min — the next poll cycle will succeed.
WebSocket / real-time updates stopped
Refresh the page. Socket.IO reconnects automatically but may need a manual nudge after long sleep states. If persistent, check that the LiteSpeed proxy is allowing /socket.io to upgrade to WebSocket.
"Origin not allowed by CORS"
You're accessing the API from a domain not in CORS_ORIGINS. Add the new domain to .env and restart.
Sensor showing readings but no alert raised
Open the sensor record; confirm thresholds are set. The monitoring engine only fires alerts when reading crosses the threshold direction (e.g., wind > 60 kt). A reading of 60 kt exactly does not fire — set thresholds to your action threshold minus a small safety margin.