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.

Quick links:

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

1. Capture — citizen reports, field assessments, sensor readings, call logs, drone imagery, mutual-aid requests
2. Detect — alert engine + CCRIF triggers + anomaly detection on cross-domain spikes
3. Decide — Live Map + event view + MIRA matrix + ICS forms support incident commander decisions
4. Act — dispatch, mutual aid, resource requests, public alerts, partner webhooks
5. Report — SitRep, ICS 201/202/209, Sendai indicators, HXL exports, audit trail
Tip: The single most important concept is event scoping. Once you create a Disaster Event and mark it active, every report, call, alert and assessment that comes in is automatically tagged to it. This makes after-action review trivial.

First-day onboarding

A 6-step path to confidently operating DRMS Jamaica from your first login through to running a real response.

1Sign in. Visit drmsja.org/portal-login.html with the email and temporary password your administrator provided. You'll be prompted to set a new password.
2Verify your role. Top-right of the dashboard shows your name and role (admin, moderator, reporter, or subscriber). Each role sees a different left-side menu — that's intentional.
3Read the dashboard once. Live Map · Active Alerts · Recent Calls · Hazards. Don't click anything yet — just read every tile. Cross-reference with Reading the dashboard.
4Look at an existing disaster event. Side menu → Disaster Events → click any past event. Read every section. This is what leadership reads during an active event — know its layout cold.
5Practice writing a damage report. Side menu → Damage Reports → New report. Fill it out for a fake address in your parish. Don't submit yet — explore each field.
6Read your runbooks. Bookmark this Help page. Read the Failure modes and Troubleshooting sections before you ever need them.
Time budget: 45–60 minutes. After this, you'll know enough to log incidents and triage in a quiet shift. Active disaster response requires shadowing an experienced operator for at least one event.

Your first 30 days

WeekGoalSign of readiness
1Navigation + reading the dashboard fluentlyYou can locate any field within 10 seconds
2Independently filing reports, dispatching, taking callsYou've logged ≥10 reports without senior review
3Lead a tabletop exercise as junior ICGenerate a sample SitRep in ≤5 min
4Cover a low-tempo shift soloSenior 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.

┌─ Monitoring ─────────────┐ │ ▸ Dashboard │ │ ▸ Live Map │ │ ▸ Disaster Events │ └──────────────────────────┘ ┌─ Damage management ──────┐ │ ▸ Damage Reports │ │ ▸ Damage Analytics │ │ ▸ Reporters │ └──────────────────────────┘ ┌─ Humanitarian ops ───────┐ │ ▸ FTR · WASH · Health │ │ ▸ Mutual aid · Lifecycle │ │ ▸ MIRA · Drone imagery │ └──────────────────────────┘ ┌─ Standards & export ─────┐ │ ▸ Hurricanes · CCRIF │ │ ▸ Triage · Donations │ │ ▸ Sendai · Audit log │ └──────────────────────────┘ … plus Communications, Operations, Public engagement, Admin

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

TileWhat it showsWhen to act
Live MapAll spatial data — sensors, alerts, reports, drones, triage tagsAnything red — investigate immediately
Active AlertsOpen monitor_alertsCritical = drop other work; warning = next 5 min
Recent CallsLast 10 entries from call_logSpike in volume = something is happening
Active EventsOpen disaster events with current statusStatus change from monitoring → response = your whole shift refocuses
HazardsEarthquakes 24h, hurricanes near JM, flood watchesNew cone within 1500 km = pre-position resources
Power outagesActive power_outages entriesMulti-parish = utility coordination call
Sensor healthRecent readings + downtime alertsSilent sensor during incident = blind spot — dispatch maintenance
Population centresRisk-scored parish overlayDangerous (red) = consider evacuation order
Common mistake: Treating warning alerts as "deal with later." Warnings can compound — three open warnings in different parishes can indicate a multi-front incident the anomaly engine will soon escalate to critical.

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
Pro tip: Save your default layer set in the URL hash. Once layers are set the way you like, bookmark /dashboard.html#default to come back to the same view.

Reading triage colours

REDImmediate — life-threatening injury, needs rescue/transport now
YELLOWDelayed — serious but stable
GREENWalking wounded — minor
BLACKExpectant/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

StateMeaningWhat happens to data
monitoringThreat detected, not yet impactingData flows in; nothing escalated yet
responseActive impact — operators in command modeAll new damage reports auto-tag to this event
recoveryImmediate response done, recovery ongoingData continues to flow; SitRep cadence drops
closedOfficially terminatedNew 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:

  1. System looks for any event in monitoring/response/recovery status
  2. If one of them has the report's parish in its parish list, tag the report to that event
  3. Otherwise tag to the most recent active event
  4. If no active event exists, the report is filed unattributed
If you close an event prematurely, new reports will start flowing to the next-most-recent active event — which may be wrong. Always close events explicitly when the response is genuinely done.

Damage assessments

Two assessment modes — rapid (post-event 24-72 h) and detailed (insurer/ODPEM submission).

Rapid assessment workflow

1Open Damage Reports → + New report
2Pick "rapid" assessment type
3Drop a pin or fill lat/lng; set parish + community
4Choose damage category (none/minor/major/destroyed/inaccessible)
5Record occupants, displaced, injured/missing/deceased counts
6Submit. The system auto-tags it to the active event for your parish.

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.

Detailed assessments feed directly into Sendai indicators C-1, C-2, C-3, C-4 and D-1.

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

1Answer the call; log it in Communications → Call log
2Click "Convert to incident" on the call entry
3Fill category, severity, location, dispatch target
4Save — the incident appears on the Live Map and dispatch queue

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

1Find the shelter on the Live Map or in the shelter list
2Click + Add occupant — record name, age, gender, family_id if multi-member
3Capture special needs (medical, mobility, dietary) so the shelter manager can plan
4The system auto-checks against open FTR records — if there's a name match, the shelter manager sees a reunification candidate

Capacity alerts

At 80%: warning alert ("plan overflow"). At 95%: critical alert ("activate overflow shelter, stop intake"). Alerts re-emit no more than once per 4 h per shelter+severity.

Generating SitReps & ICS forms

Every active event can produce four printable documents on demand, all sourced from the same snapshot endpoint.

Available reports

FormUseWhen to issue
ICS 201 — Incident BriefingInitial transfer-of-command documentWithin first 2 h of incident
ICS 202 — Incident ObjectivesIC's directives for the next op periodEach op period (12 h cycle)
ICS 209 — Incident Status SummaryFull status — casualties, damage, resourcesDaily during response
SitRepPlain-language narrative for leadership/media2× daily during response

Workflow

1Open the event page
2Click the form button in the header row (ICS 201/202/209/SitRep)
3Form opens in a new tab, pre-filled with all current event data
4Edit any free-text fields (objectives, command emphasis, narrative)
5Click 🖨 Print / Save as PDF
Repeatable: Each form opens fresh against the latest data. Generating an ICS 209 every 6 h gives you a time-stamped audit trail of how the situation evolved.

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

ParameterSphere standard
Free chlorine residual≥ 0.2 mg/L (after 30 min contact)
pH6.5 – 8.5
Turbidity< 5 NTU
E. coli0 CFU per 100 mL
Any single criterion failing flips the test to "fail" and raises a 💧 Water quality failure alert.

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

Requests in "submitted" or "acknowledged" status get an aging pill: orange after 12 h, red after 24 h. Overdue counts surface in the event-page Mutual aid card. Escalate aged requests to the partner agency directly.

Resource lifecycle

Once a resource request is matched to inventory or a donor, this view tracks every state transition.

States and SLAs

StateSLAWhat to do if breached
requested → matched6 hEscalate to logistics lead
matched → en_route6 hConfirm pickup with vendor / donor
en_route → delivered12 hConfirm transit; consider divert
delivered → utilized24 hCheck with receiving site
utilized → returned48 hFor 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

  1. Food security & livelihoods
  2. WASH
  3. Health
  4. Nutrition
  5. Protection
  6. Shelter & NFI
  7. Education
  8. Logistics
  9. Early recovery
  10. 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.

Severity ≥ 4 raises a critical monitor alert immediately. Severity ≥ 5 escalates to critical+top-of-queue.

Drone / UAV imagery

Aerial captures from authorised UAV flights. Each capture is geo-tagged and damage-rated.

Upload flow

1Take photo; export from drone or phone
2Open Humanitarian → Drone imagery → + Log a drone capture
3Choose file from device — image uploads to /drone-images/…
4Fill flight ref, pilot, lat/lng, altitude, damage rating
5Save

Auto-actions

When a capture is rated major or destroyed and includes lat/lng: a damage_assessment row is auto-created at that location, and a 🛩 Aerial damage spotted alert is raised. Ground teams get dispatched without any extra step.

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 StormWind ≥ 34 kt (39 mph)
Cat-1 hurricaneWind ≥ 64 kt (74 mph)
Cat-3 majorWind ≥ 96 kt (111 mph)
EarthquakeM5.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

5+ RED tags within 6 h automatically raises a 🚑 Mass Casualty Incident critical alert. This triggers MCI protocols: request medical mutual aid, prepare receiving hospitals, activate START leadership at the scene.

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

CodeIndicatorSource
A-1Deaths attributed to disastersdamage_assessments.deceased
A-2Mortality per 100k (estimate)A-1 ÷ JM population
B-1People affected by disastersdamage_assessments.people_affected
B-2/3/4/5Injured, missing, displaced, householdsdamage_assessments
C-1/2/3/4Direct loss + agri + productive + housingdamage_assessments.estimated_repair_cost
D-1Critical infrastructure damageddamage_assessments by structure_type
F-1Number of disasters in windowdisaster_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

infoAwareness only — no action required
warningThreshold breached, plan a response
criticalImmediate 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.

Best signal of a real disaster: anomaly_alerts firing. When multiple unrelated signals all surge at once, you're seeing a multi-domain disaster signature — escalate immediately to incident commander.

Webhooks for partners

CDEMA, ODPEM, partner state EOCs and other systems can subscribe to receive real-time alerts.

How to register a partner

1Admin opens Administration → Webhook endpoints
2Enter partner name, URL, optional secret (HMAC-SHA256)
3Filter by alert types, parishes, min severity
4Save — a fresh secret is auto-generated if you didn't provide one
5Click Test ping to verify partner endpoint is reachable

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.

TriggerAction
New damage report (no event_id)Auto-tag to most recent active event matching parish
Drone capture rated major/destroyedCreate damage_assessment + raise 🛩 alert
WASH test fails SphereRaise 💧 water-quality alert
Health surveillance > 2× baselineMark row anomaly + raise health alert
MIRA severity ≥ 4Raise 🧭 MIRA severity alert (critical at 5)
5+ RED triage tags / 6 hRaise 🚑 Mass Casualty Incident critical alert
5+ missing FTR records / 24 hRaise 🔎 FTR spike alert
Shelter ≥ 80% capacityRaise 🏠 nearly-full warning
Shelter ≥ 95% capacityRaise 🏠 AT CAPACITY critical alert
Sensor silent 6+ hRaise 📡 silent-failure warning
Sensor silent 24+ hEscalate to 📡 critical
Donation crosses $1M JMDLog 💰 milestone to event timeline
Any monitor_alert activeDeliver to subscribed webhooks per filters
Any monitor_alert activeDeliver to email/SMS subscribers per parish/kind
Citizen report check-in matches FTR missingSurface reunification candidate to shelter manager

Failure modes & recovery

Production-grade reliability means anticipating what breaks. Here's the catalog.

External feed failures

FeedFailure modeWhat you'll seeAction
NHC hurricaneAPI timeout / 5xxStale tracks; warning in logsAuto-retries; cached data shown for up to 2 h
USGS earthquakesAPI timeoutNo new quakes appearAuto-retries; cached data shown
RainViewer radarTile load failureRadar layer blankRefresh map; non-critical
Sensor uplink (downtime)No readings 6h+📡 Sensor silent alertDispatch maintenance to physical sensor

Internal failures

ComponentSymptomRecovery
Database writeAPI returns 500Check journalctl -u jims-backend; restart service
Alert engineNo new alerts for 30+ min during obvious incidentRestart jims-backend.service; cron jobs re-initialise
Webhook deliveryPartner not receiving alertsOpen admin webhook page; check delivery log; test ping
Map tiles fail to loadGrey backgroundSwitch basemap (street/sat/dark); proxy may be blocking external tile provider
Total system outage: If the backend service is completely down, the public status page at /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_audit is 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

adminFull access including webhook config, user management, audit log
moderatorOperational lead — can verify reports, manage events, edit any record
reporterField reporter — can file reports, manage their own records
subscriberCitizen — receives alerts, can view public status page

Creating a new operator

1Admin opens Administration → Users
2Click + Add user — fill name, email, role, assigned parishes (for reporters)
3Set a temporary password (system will email it)
4User receives the email and is forced to change password on first login
Suspending a user is preferred over deletion. Suspended users can no longer log in but their audit trail stays intact.

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.

Compliance use: When a regulator or insurer asks "who changed this record?", the audit log answers it definitively. The log itself cannot be edited; only appended.

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.html with 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

AARAfter Action Review
CAPCommon Alerting Protocol — OASIS standard for alerts
CCRIF SPCCaribbean Catastrophe Risk Insurance Facility
CDEMACaribbean Disaster Emergency Management Agency
EMACEmergency Management Assistance Compact — mutual aid framework
FTRFamily Tracing and Reunification (ICRC)
HXLHumanitarian eXchange Language — tagging standard
IASCInter-Agency Standing Committee — UN humanitarian coordination
ICIncident Commander
ICSIncident Command System (NIMS standard)
IDSRIntegrated Disease Surveillance and Response (WHO)
INFORMUN INFORM Severity Index — 1–5 scale
JDFJamaica Defence Force
JPSJamaica Public Service (electricity utility)
MCIMass Casualty Incident
MIRAMulti-cluster Initial Rapid Assessment
MoHWMinistry of Health and Wellness, Jamaica
NHCUS National Hurricane Center
NIMSNational Incident Management System
NWANational Works Agency, Jamaica
ODPEMOffice of Disaster Preparedness and Emergency Management, Jamaica
SendaiUN Sendai Framework for Disaster Risk Reduction 2015–2030
SphereHumanitarian Charter and Minimum Standards in Disaster Response
STARTSimple Triage and Rapid Treatment — field triage method
USARUrban 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+RHard refresh — clear stale cached scripts
EscClose 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.