T
TOMO
Developer Docs
BETA These docs are under partner review. Some features described are roadmap items, not yet shipped. Verify against your sandbox before relying on any contract.
● LIVEv1.0.0safety.book_private_ambulance

safety.book_private_ambulance — Full Intent Specification

INTENT NAMESPACE: safety
INTENT NAME:      book_private_ambulance
FULL ID:          safety.book_private_ambulance
VERSION:          v1.0.0
STATUS:           live
TTBS WEIGHTS:     time 0.55 · taste 0.05 · budget 0.15 · safety 0.25
LAST UPDATED:     2026-05-14

On-demand private ambulance dispatch in India. Distinct from safety.book_roadside_assistance because: (a) the cargo is a human in medical need — every second of ETA matters; (b) ambulance class (BLS / ALS / ICU / cardiac / neonatal / mortuary) maps to clinical capability; (c) crew is at minimum a trained EMT, often a paramedic; (d) MCI/NMC + state ambulance authority registration is regulatory baseline; (e) PCPNDT / drug-controlled-substance carrying compliance applies to ALS+; (f) the destination hospital must be empanelled or user-chosen; (g) 108 (government) is a parallel free path TOMO must surface — never hide. TOMO is a router, not a healthcare provider, never makes a clinical decision.


1. NATURAL LANGUAGE COVERAGE

Classifies IN

  • "ambulance to my home, fast"
  • "BLS ambulance pick up dad"
  • "ICU ambulance, transfer to Apollo"
  • "Ziqitza for accident victim"
  • "cardiac ambulance Hyderabad"
  • "ambulance Manipal Hospital"
  • "Stanplus / HelpNow ambulance"
  • "neonatal ambulance for premature baby transport"
  • "ambulance for senior, oxygen needed"
  • "108-like service but private, faster"

Classifies OUT — borderline NO

  • "roadside breakdown" → safety.book_roadside_assistance
  • "doctor home visit" → out of v1 (telemedicine adjacent)
  • "drug delivery" → logistics.book_cold_chain_delivery for biologic
  • "hearse / mortuary van for distant transport" → covered as ambulance class but UX-level distinct flow
  • "ambulance for non-medical reason (transport)" → not this intent (illegal)

MULTI-INTENT TRIGGERS

  • "ambulance + hospital admission prep" → safety.book_private_ambulance + (hospital admission flow, partner-specific)
  • "ambulance for accident + RSA for damaged vehicle" → safety.book_private_ambulance + safety.book_roadside_assistance
  • "ambulance + cyber + emergency SOS subscription"

2. INPUT — TOMO → PROVIDER

{
  "intent":          "safety.book_private_ambulance",
  "intent_version":  "v1.0.0",
  "request_id":      "req_amb_4q9p_2026-05-14T23:00:00Z",
  "user_session_id": "anon_user_token_or_uid",

  "incident": {
    "nature":         "cardiac_chest_pain",
    "natures_allowed":["accident_trauma", "cardiac_chest_pain", "stroke", "respiratory_distress", "obstetric", "neonatal", "non_critical_transfer", "mortuary"],
    "severity_self_reported": "high",
    "severities_allowed":     ["low", "medium", "high", "critical"],
    "patient_count":  1,
    "patient_age_band": "elder_60_plus",
    "patient_gender_optional": "male",
    "oxygen_required":  true,
    "stretcher_required": true
  },

  "pickup": {
    "lat":              17.4239,
    "lng":              78.4738,
    "geocoded_label":   "Home, Jubilee Hills",
    "contact_phone_e164": "+91XXXXXXXXXX"
  },

  "destination": {
    "type":             "user_chosen_hospital",
    "types_allowed":    ["nearest_hospital", "user_chosen_hospital", "user_chosen_address"],
    "hospital_name":    "Apollo Hospitals Jubilee Hills",
    "hospital_address_id": "addr_apollo_v1"
  },

  "ambulance_class_preference": "als",
  "ambulance_classes_allowed": ["bls", "als", "icu", "cardiac", "neonatal", "mortuary"],

  "patient_known_conditions_optional": ["hypertension", "type_2_diabetes"],

  "user_constants": {
    "preferred_providers": ["Ziqitza HealthCare", "HelpNow", "Stanplus", "Falck India"],
    "108_visible": true
  }
}

Field rules

  • incident.severity_self_reported ∈ ENUM. critical triggers PRIORITY routing.
  • ambulance_class_preference STRICT ENUM; partner returns nearest matching class.
  • 108_visible: true — UI MUST surface 108 (government, free) alongside private options. Never hide.
  • Patient consent is implicit by booking; for unconscious patient, kin acts in loco.

3. PROVIDER TOOLS

amb.dispatch

Returns nearest ambulance of requested class + ETA + crew.

amb.108_co_surface

Returns 108 service availability in user's city — NOT a dispatch (108 is dialed by user), just info.

amb.crew_profile

Returns EMT / paramedic certification level (Skill Council India + state EMT board).

amb.live_track

Live GPS of ambulance.

amb.handover_capture

Patient handover photo + crew sign at destination hospital.

amb.dispute

Post-event dispute for SLA breach or misconduct.

amb.cancel

Pre-dispatch only.


4. RESPONSE SHAPE

{
  "intent": "safety.book_private_ambulance",
  "request_id": "req_amb_4q9p_2026-05-14T23:00:00Z",
  "108_strip": {
    "available": true,
    "phone": "108",
    "free": true,
    "median_eta_min_in_city": 18,
    "always_visible": true
  },
  "options": [
    {
      "tier": "OK",
      "provider": "Stanplus",
      "ambulance_class": "bls",
      "responder_eta_min": 14,
      "price_inr": 1500,
      "crew_level": "emt_basic",
      "oxygen_available": true,
      "stretcher_available": true,
      "state_registration_valid": true,
      "ttbs_score": 0.68,
      "tier_reason": "fastest BLS — basic clinical capability"
    },
    {
      "tier": "GOOD",
      "provider": "HelpNow",
      "ambulance_class": "als",
      "responder_eta_min": 18,
      "price_inr": 2800,
      "crew_level": "paramedic_plus_emt",
      "oxygen_available": true,
      "stretcher_available": true,
      "cardiac_monitor": true,
      "ecg_12_lead": true,
      "defibrillator": true,
      "state_registration_valid": true,
      "hospital_handoff_pre_alert": true,
      "ttbs_score": 0.87,
      "tier_reason": "balanced — ALS + paramedic + ECG + defib + pre-alert"
    },
    {
      "tier": "GREAT",
      "provider": "Ziqitza HealthCare",
      "ambulance_class": "icu",
      "responder_eta_min": 22,
      "price_inr": 4500,
      "crew_level": "paramedic_plus_critical_care_emt",
      "oxygen_available": true,
      "stretcher_available": true,
      "cardiac_monitor": true,
      "ecg_12_lead": true,
      "defibrillator": true,
      "ventilator_onboard": true,
      "infusion_pump": true,
      "state_registration_valid": true,
      "hospital_handoff_pre_alert": true,
      "doctor_onboard_for_high_severity": true,
      "ttbs_score": 0.92,
      "tier_reason": "ICU with ventilator + doctor onboard"
    }
  ]
}

5. CONTROLLED VOCABULARIES

incident.nature

accident_trauma · cardiac_chest_pain · stroke · respiratory_distress · obstetric · neonatal · non_critical_transfer · mortuary

incident.severity

low · medium · high · critical

ambulance_class

bls (basic life support) · als (advanced life support) · icu · cardiac · neonatal · mortuary

crew_level

emt_basic · paramedic_plus_emt · paramedic_plus_critical_care_emt

destination.type

nearest_hospital · user_chosen_hospital · user_chosen_address

All STRICT ENUM.


6. TTBS DIMENSIONS

TIME (weight 0.55 — dominant)

  • responder_eta_min (smaller = better)
  • Class match speed (BLS faster than ICU usually)
  • Pre-alert to hospital reduces door-to-treatment time
  • TIME = max(0, 1 − eta_min / 30)

TASTE (weight 0.05)

  • Crew communication band
  • App tracking UX
  • TASTE = comms × ux

BUDGET (weight 0.15)

  • price_inr vs best
  • Distance overage band
  • BUDGET = 1 − (price − best) / best

SAFETY (weight 0.25)

  • Ambulance class fits severity
  • State ambulance registration valid
  • Crew level fits severity (paramedic for high+)
  • Oxygen, stretcher, defib, ventilator (per class)
  • Hospital handoff pre-alert
  • Doctor onboard for critical
  • SAFETY = class_fit × registration × crew_fit × equipment × pre_alert × doctor_fit

HARD FILTERS

  1. State ambulance registration valid.
  2. Class fits severity (e.g., critical must be ALS+ or ICU).
  3. Oxygen + stretcher present.
  4. Crew at minimum EMT-basic.
  5. 108 strip rendered.

7. COMPLETION CONTRACT

Success criteria

  1. Quote returned; 108 strip surfaced.
  2. Ambulance dispatched; ETA + crew + vehicle plate shared.
  3. Live track active.
  4. Pre-alert to hospital (where supported).
  5. Patient handed over at destination; crew signs handover sheet.
  6. CPC webhook fires.

CPC webhook

{
  "event": "safety.book_private_ambulance.completed",
  "intent_id": "safety.book_private_ambulance",
  "request_id": "req_amb_4q9p_2026-05-14T23:00:00Z",
  "order_id": "AMB9KP72",
  "provider": "HelpNow",
  "ambulance_class": "als",
  "responder_eta_actual_min": 16,
  "price_inr": 2800,
  "tomo_commission_base_inr": 0,
  "tomo_commission_inr": 0,
  "pass_through_inr": 2800,
  "destination_hospital": "Apollo Hospitals Jubilee Hills",
  "handoff_at_iso": "2026-05-14T23:32:00+05:30",
  "signature_hmac_sha256": "…"
}

Note: TOMO often takes ZERO commission on ambulance dispatches as a policy stance (public-good framing). Many partners contractually pay zero referral on emergencies. CPC fires for audit; tomo_commission_inr: 0 typical.

Failure cases

  • no_ambulance_in_range → fall back to alt provider or 108 prompt.
  • ambulance_no_show → emergency replacement.
  • wrong_class_dispatched → escalation; partner SLA penalty.
  • hospital_refused_admission → re-route to alt hospital.

8. WIDGET

{
  "widget": "AmbulanceWidget",
  "header": {
    "incident_strip": "Cardiac chest pain · severity HIGH · 1 patient",
    "108_strip":      "108 (government, free) · ~18 min median ETA · DIAL NOW if you prefer",
    "destination_strip": "Apollo Hospitals Jubilee Hills · 4.2 km"
  },
  "regions": {
    "region_1_intelligence": ["ALS class fits HIGH severity", "paramedic + ECG + defib", "pre-alert to hospital active"],
    "region_2_summary": "Dispatching, ETA ~18 min",
    "region_3_visual": "ambulance_photo_url (post-dispatch, partner-supplied)",
    "region_4_now_pin": "Keep the patient calm and seated · share live location with kin",
    "region_5_tomo_choices": [
      {"tier": "OK", "label": "Stanplus BLS · ₹1,500 · 14 min", "reason": "fastest BLS"},
      {"tier": "GOOD", "label": "HelpNow ALS · ₹2,800 · 18 min · paramedic + defib", "reason": "balanced"},
      {"tier": "GREAT", "label": "Ziqitza ICU · ₹4,500 · 22 min · ventilator + doctor", "reason": "highest care"}
    ]
  },
  "footer_disclosures": [
    "108 is free and public — dialing it does not affect this booking. If anything looks slow here, dial it as a parallel.",
    "TOMO doesn't take commission on emergency dispatch — we route, partner bills, we keep zero.",
    "If the patient becomes unconscious, switch the severity to CRITICAL — partner re-routes to ICU class."
  ]
}

9. CACHING POLICY

  • Quote: 30s TTL (emergencies are time-sensitive).
  • 108 availability per city: 30d cache, refresh weekly.
  • Crew profile: at partner; pointer at TOMO.
  • Handover photos: at partner; hash at TOMO.
  • Past dispatches: 5 years at partner per medical-records audit; 1 year on-device.

10. ERROR CODES

Code Meaning UI surface
ERR_NO_AMB_IN_RANGE no class match in radius Fall back to 108 prompt
ERR_AMB_NO_SHOW dispatched but no arrival Replacement
ERR_WRONG_CLASS_DISPATCHED partner sent wrong class Escalation + SLA penalty
ERR_HOSPITAL_REFUSED dest hospital can't admit Re-route
ERR_STATE_REGISTRATION_INVALID partner license lapsed Drop option
ERR_CREW_LEVEL_INSUFFICIENT crew < severity need Upgrade class
ERR_OXYGEN_MISSING flag set, ambulance lacks Drop option
ERR_VENTILATOR_REQUIRED severity critical needs ventilator Upgrade to ICU class
ERR_108_DIAL_FALLBACK private path failed UI surfaces 108 in red
ERR_PARTNER_OFFLINE partner API down Try next

11. SANDBOX → PRODUCTION CHECKLIST

  • Sandbox 108 strip rendered on every quote.
  • Sandbox class fit check (BLS for low/med, ALS+ for high, ICU for critical).
  • Sandbox state registration validation.
  • Sandbox crew level check.
  • Sandbox no-show replacement within 5 min.
  • Sandbox hospital pre-alert flow.
  • Production state ambulance authority registry synced quarterly.
  • Production crew certification check at assignment time.
  • Production rate limit: not applicable (emergencies).
  • Production CPC HMAC-SHA256 5-min replay verified.
  • Production zero-commission audit verified.

12. ANTI-FABRICATION RULES

  • NO paid_placement on providers — TTBS only.
  • NO synthetic crew or ambulance photos.
  • NO "fastest in city" without partner ETA SLA.
  • NO hiding 108 — always visible.
  • NO recommending a paid private ambulance over 108 unless ETA differential is real and surfaced honestly.
  • NO claim of clinical diagnosis — TOMO never makes a medical call.
  • NO TOMO-issued state registration badge.
  • NO holding patient medical record at TOMO.
  • NO synthetic equipment availability — partner-attested only.
  • NO marketing language ("smart ambulance").

13. REGULATORY FRAMING

  • Clinical Establishments (Registration and Regulation) Act 2010 + state rules — ambulance registration.
  • Indian Medical Council Act 1956 / NMC Act 2019 — paramedic + EMT scope.
  • Drugs and Cosmetics Act 1940 — drugs onboard (ALS+).
  • Motor Vehicles Act 1988 — siren, beacon, ambulance permit.
  • Skill Sector Council — EMT/paramedic training certification.
  • DPDPA 2023 — patient data + recordings = personal data; partner is processor.
  • MCI / NMC ethics — patient consent for non-emergency transport.
  • CrPC 134 — police may compel ambulance assistance for accident victim.
  • TOMO is router only — does NOT operate ambulances, does NOT employ crew, does NOT prescribe or treat.