EMS Paramedic MDT
A 13-tab paramedic terminal — electronic Patient Care Reports, a full patient EHR, START triage, treatment protocols, a drug formulary with controlled-substance register, admissions with bed and equipment processing, and billing.
A paramedic Mobile Data Terminal for Qbox EMS — the medical counterpart to the police MDT (rr-mdt). Same polished, multi-tab terminal feel, recolored for EMS (medical teal / EMS red), with a medical brain: electronic Patient Care Reports, a full EHR, START triage / MCI, treatment protocols, a drug formulary + controlled-substance register, billing, and a roster/status board.
It shares the live medical 911 board with rr-hospital instead of running a second feed.
Open it
- F7 anywhere (must be on-duty
ambulancejob) — rebindable in Settings → Key Bindings. /emsmdtcommand.- G on/aimed-at a patient → assess them straight onto the MDT.
- ox_target a ped → Assess Patient (MDT); target a player → Take Vitals.
Tabs
| Tab | What it does |
|---|---|
| Dashboard | Day stats, on-duty roster w/ live status, recent PCRs, recent controlled admin, quick actions. |
| Dispatch | The shared medical 911 board (from rr-hospital). Respond → route in, a patient spawns on scene, treat with E / file a PCR to clear & bill. Self-assign / clear too. |
| Patients | Search + the full EHR: demographics, blood type, allergies/conditions/meds (editable chart), DNR/organ-donor/uninsured flags, live vitals, PCR + ED visit history, notes, invoices. Admit button → admission flow. |
| Admissions | Admit a patient → walk them to a bed → process them through the MLO's equipment (CT/X-ray/MRI/ultrasound/labs/OR) → discharge (heals + bills). The medical analog to police booking. |
| Care Reports | Filed ePCRs. Open any to read the full report. |
| Triage / MCI | START triage scratch board (RED/YELLOW/GREEN/BLACK), auto-sorted by acuity. Scene size-up tool. |
| Units & Status | Set your unit status (10-8 / En Route / On Scene / Transporting / At Hospital / OOS) + on-duty roster. |
| ER Status | Receiving-facility list, admissions today, avg response, route transport to a hospital. |
| Protocols | Step-by-step treatment algorithms (arrest, anaphylaxis, opioid OD, hypoglycemia, ACS, seizure, stroke, trauma, respiratory). |
| Medications | Drug formulary (dose/route/indication) + the controlled-substance administration register. |
| Billing | Patient invoices — mark paid / insurance; supervisor void. |
| Incidents | File run/incident reports. |
| Reference | Radio codes, START triage, vital-sign reference ranges. |
The ePCR (the RP centrepiece)
Document a patient: chief complaint, acuity, a full set of vitals (HR/BP/RR/SpO₂/Temp/BGL/GCS/Pain, colour-coded against reference ranges, with a Re-scan for serial obs), interventions, medications (controlled ones prompt for a witness + waste), a narrative, disposition and transport destination. Billing is auto-itemised (assessment + interventions + meds + BLS/ALS transport + cardiac-arrest/refusal surcharges) and editable. Filing a PCR linked to a dispatch call clears the call and pays the run.
Patient admission & processing (mirrors police booking)
- Open a patient's chart → Admit (or admit from a dispatch scene).
- Walk to a bed marker in your hospital MLO → press E to place the patient in the room (an NPC patient lies in the bed; a real player is healed on discharge).
- Process them at the equipment markers — CT, X-Ray, MRI, Ultrasound, Lab/Bloodwork, Operating Room — each runs a timed procedure that adds a procedural finding to the chart and bills the visit. (You can also order studies straight from the Admissions tab.) Findings scale with the patient's acuity — a critical patient gets abnormal results.
- Discharge → frees the bed, heals a real player (
qbx_medicalrevive), and drops a single itemised invoice into Billing.
Setting the coords
Every bed and equipment entry in config/admissions.lua starts at vec4(0,0,0,0) and is skipped until you give it real coords. To capture one: stand on the spot in-game (facing the way a patient should lie / where the doctor stands at the machine) and run:
/emscoords ER Bay 1
It prints a paste-ready vec4(x, y, z, h) to chat and copies it to your clipboard. Paste it into the matching coords = vec4(...) line in config/admissions.lua. Add/remove beds and equipment freely — anything left at vec4(0,0,0,0) simply won't appear. Tune BedPedZOffset if the lying patient ped sits above/below the mattress.
Integration (no edits to other resources required)
- Dispatch — consumes
rr-hospital's callbacks (rr-hospital:dispatch:getCalls/:respond/:selfAssign/:clear) and listens torr-hospital:dispatch:newCall/:refresh. One source of truth — the MDT board and the hospital's F10 board stay in sync. - Injuries / care — reads live injury state via
exports.qbx_medical:GetPlayerStatus; the chart's Revive / Treat Wounds buttons fire qbx_ambulancejob'shospital:server:RevivePlayer/:TreatWounds(consume the medic's First Aid Kit / Bandage). - Records — pulls ED-visit history from
rr_hospital_visits/rr_hospital_patientswhen present. - Money — credits the EMS budget (
governor_dept_budgets, jobambulance) on billing, mirroring rr-hospital.EMS.Billing.AutoCharge = falseby default (invoices are recorded, players aren't surprise-charged).
Identity universe
Patient identities are generated from the same deterministic seed engine as rr-mdt, so the same NPC runs consistently every time. Real players key off their citizenid, so their chart persists.
Database (auto-created, prefix rr_emsmdt_)
pcr, records (EHR chart overlay), notes, controlled, billing, incidents.
Config
config/config.lua— branding, job gate (ambulance+ anyems-type job), keys, ox_target, dispatch wiring, on-scene victim, hospitals, billing fees.config/medical.lua— radio codes, unit statuses, triage tags, vital ranges, chief complaints, interventions, drug formulary, protocols, dispositions, report types.config/data.lua— name / allergy / condition / medication / insurer pools for procedural patients.
Loading
Auto-loaded by ensure [custom]. Runtime-only dependency on rr-hospital (dispatch), qbx_medical (injuries) and qbx_core / ox_lib / oxmysql. No load-order changes needed.
Dev preview
.claude/serve-emsmdt.ps1 serves html/ on :8408. core.js auto-loads sample data when opened in a plain browser (DEV mode) so the UI renders without the game.
