🧩 Module Spec · M6 ARXL · Adverse Reaction Loop · DETAIL · 26 April 2026
← Modules M6 · ARXL DETAIL Phase 3 · 15-28 Oct 2026

M6 — Adverse Reaction Loop

Pesakit ngadu side effect via M1 → cross-ref recent prescriptions (M5) → broadcast alert ke prescribing doctor (M4) + pharmacy (M5) + admin (M7) → permanent allergy registry · auto-block re-prescribe · NPRA pharmacovigilance.

1. 📌 Overview & Purpose

Goal: Adverse drug reactions (ADR) selalu missed sebab pesakit lupa nak email doktor atau jumpa balik. M6 buka channel "ngadu balik kat AI yang sama" → cross-ref RX 14 hari recent → broadcast alert ke seluruh eco → mencegah ulangan + register permanent allergy.

Lifecycle continuity feature: Demonstrates eco-system value beyond single encounter. Shows that ALESA isn't just transactional but stewards patient safety across time.

Compliance: NPRA pharmacovigilance reporting (mandatory) · MOH adverse event registry contribution.

2. 👤 User Stories

US-6.1 (Pesakit · Ringan)

Saya gatal ruam 2 hari lepas mula amoxicillin · saya buka app · AI tanya 4 soalan keselamatan · cadang stop drug + antihistamine · book follow-up esok.

US-6.2 (Pesakit · Anaphylaxis)

Bibir bengkak + sesak nafas · AI alert MERAH segera · 999 + ED routing + auto-share pesakit GPS + RX recent details ke ED.

US-6.3 (Doktor · Alert)

Saya preskripsi semalam · pesakit ngadu hari ni · saya terima notification dgn detail · permanent allergy registered patient profile.

US-6.4 (Farmasis · Block re-dispense)

Bila doktor lain preskripsi same drug class minggu depan · M5 auto-block + alert pharmacist + cadang alternative.

US-6.5 (NPRA · Pharmacovigilance)

ADR severity = severe · system auto-prepare NPRA report · doctor verify + submit · regulator visibility.

US-6.6 (Cross-clinic - M8 enabled)

Pesakit jumpa Klinik A semalam, ngadu via app, M6 propagate alert ke Klinik B yang dia visit minggu depan — Klinik B doktor terus tahu.

3. ✅ Functional Requirements

MUSTFR-6.1: Patient-initiated ADR report via M1 (gatal · ruam · sesak · pening · etc) — natural language intake
MUSTFR-6.2: Auto cross-ref dgn last 14-day RX history (extend to 30 hari for chronic drugs)
MUSTFR-6.3: Severity triage (anaphylaxis → 999 escalate · sederhana → stop drug + antihistamine · ringan → monitor)
MUSTFR-6.4: 4-question safety check (bibir bengkak · sesak nafas · pening/nadi laju · gatal/ruam) — escalate based on answers
MUSTFR-6.5: Multi-pihak parallel broadcast: prescribing doctor (M4 inbox alert) + pharmacy (M5 block) + admin (M7 follow-up book) + patient allergy registry update
MUSTFR-6.6: Auto-block future RX same drug class for that patient (cross-class reactivity matrix · e.g. penicillin → block all beta-lactams unless explicit override)
MUSTFR-6.7: Cross-clinic propagation kalau M8 enabled · alert klinik lain dlm rangkaian · respect consent
MUSTFR-6.8: ADR severity classification per WHO scale (mild · moderate · severe · life-threatening · fatal)
MUSTFR-6.9: NPRA ADR reporting export · structured form · doctor verify before submit
MUSTFR-6.10: Follow-up booking (next-day OPD) auto-suggested · WhatsApp confirmation
MUSTFR-6.11: Permanent allergy registry update (visible di all M4 encounter · M5 dispense · M2 briefing)
MUSTFR-6.12: Audit trail end-to-end (intake → broadcast → block → registry update)
SHOULDFR-6.13: Photo upload symptom (rash · swelling) — AI describe (no diagnosis)
SHOULDFR-6.14: Naranjo causality assessment (probable · possible · doubtful) untuk doctor reference
SHOULDFR-6.15: Aggregate ADR analytics dashboard (per-drug · per-clinic · trend)

4. ⚙️ Non-Functional Requirements

AspectTargetNotes
Severe escalation latency<5s 999/ED routingCritical safety path
Cross-PA broadcast<30s parallel4 recipients simultaneous
Auto-block re-dispense<5min effectiveCache invalidate
NPRA report generation<10sStructured form fill
Cross-clinic propagation<1minNetwork alert via M8
Token cost / ADR report~5K tokensSeverity + safety check + notify

5. 🗄️ Data Model

TableKey fieldsPurpose
adverse_eventsid, patient_id, reported_at, intake_session_id (M1), suspected_drug_codes[], symptoms[], severity (mild/mod/severe/life-threat/fatal), naranjo_score, status (reported/verified/ resolved/closed)Master ADR record
adr_broadcastsadr_id, recipient_type (doctor/pharmacy/admin/clinic), recipient_id, sent_at, acknowledged_atFR-6.5 audit
adr_blockspatient_id, drug_class, blocked_at, source_adr_id, override_count, override_historyFR-6.6 prescribe block
npra_reportsid, adr_id, doctor_id, prepared_at, submitted_at, npra_ref_no, statusFR-6.9 regulator
allergy_class_matrixdrug_class_a, cross_react_class_b, confidence, sourceCross-class reactivity table (e.g. penicillin ↔ cephalosporin)

6. 🔌 API + MCP

POST   /api/v1/adr/report                      # patient via M1
       Body: { session_id, symptoms, suspected_drug?, severity_self }
       Returns: { adr_id, severity_classified, broadcast_pending, escalation }

GET    /api/v1/adr/{adr_id}                    # detail
POST   /api/v1/adr/{adr_id}/safety-check       # 4-question gate
       Body: { lip_swelling, breathing, dizziness, rash }

POST   /api/v1/adr/{adr_id}/escalate-999       # anaphylaxis path
POST   /api/v1/adr/{adr_id}/broadcast          # internal · trigger 4-channel notify

GET    /api/v1/adr/{adr_id}/npra-form          # structured form fill
POST   /api/v1/adr/{adr_id}/npra-submit        # doctor verify + submit

GET    /api/v1/adr/blocks/{patient_id}         # current blocks
POST   /api/v1/adr/blocks/override             # doctor override (with reason)

GET    /api/v1/adr/dashboard                   # aggregate analytics

# MCP Tools
adr_severity_classify     WHO scale + naranjo
allergy_class_lookup      Cross-react matrix
broadcast_orchestrator    Parallel 4-channel send
npra_form_compose         Structured ADR form
prescribe_block_check     Pre-RX check (M5 calls this)

7. 🔁 State Machine

┌──────────────────┐
│ PATIENT_REPORT   │ from M1 intake
└────────┬─────────┘
         ▼
┌──────────────────┐
│ SAFETY_CHECK     │ 4 questions
└────────┬─────────┘
         ▼
   ┌─────┴─────┬─────────┬───────────┐
   ▼           ▼         ▼           ▼
ANAPHYLAXIS  SEVERE    MODERATE    MILD
   │           │         │           │
   ▼           ▼         ▼           ▼
ESCALATE     ESCALATE  STOP_DRUG   MONITOR
999/ED       OPD       +ANTIHIST   24-48h
   │           │         │           │
   └─────┬─────┴─────────┴───────────┘
         ▼
┌──────────────────┐
│ CROSS_REF_RX     │ last 14-30 days
└────────┬─────────┘
         ▼
┌──────────────────┐
│ BROADCAST_4CH    │ doctor · pharmacy · admin · registry
└────────┬─────────┘
         ▼
┌──────────────────┐
│ AUTO_BLOCK       │ same drug class
└────────┬─────────┘
         ▼
┌──────────────────┐
│ NPRA_PREP        │ if severity ≥ moderate
└────────┬─────────┘
         ▼ (doctor verify)
┌──────────────────┐
│ NPRA_SUBMIT      │ regulator notify
└────────┬─────────┘
         ▼
┌──────────────────┐
│ FOLLOW_UP_BOOK   │ M7 trigger
└────────┬─────────┘
         ▼ (resolved / refractory)
┌──────────────────┐
│ CLOSED           │ permanent registry update
└──────────────────┘

8. 🤖 Agent Specification

M6 mostly orchestration + decision tree. LLM untuk: (a) severity classification natural language, (b) NPRA form auto-fill, (c) patient-friendly explanation BM/EN.

  • Model: Llama 8B (decision tree heavy) untuk classify · Llama 70B untuk NPRA form (clinical quality)
  • Memory: patient RX history (M5 source) · cross-class matrix · Naranjo questionnaire
  • Guardrails: Anaphylaxis = NEVER auto-resolve · always 999 path · Naranjo doctor verify · NPRA submit doctor sign-off mandatory

9. 🎨 UI/UX

  • Patient PWA: ADR intake flow continued from M1 · 4-question safety modal · severity result card · 999 emergency banner if anaphylaxis
  • Doctor Filament: ADR alerts inbox · pesakit yg pernah preskripsi · severity badge · Naranjo verify form · NPRA submit button
  • Pharmacy Filament: Active blocks list per patient · override request inbox
  • Admin Filament: Aggregate dashboard (per-drug ADR rate · trend)
  • Registry visibility: Allergy alert visible di every M4 encounter detail · M5 dispense check · M2 briefing

10. ✔️ Acceptance Criteria

  • AC-6.1: Anaphylaxis detection + 999 escalation <5s pada 10 simulated cases · 100% catch
  • AC-6.2: 4-channel broadcast arrives all recipients <30s
  • AC-6.3: Auto-block effective on M5 within 5 min of ADR report
  • AC-6.4: Cross-class matrix coverage 95% (penicillins · sulfa · NSAIDs · opioids · etc)
  • AC-6.5: NPRA form auto-fill accuracy ≥90% on 20 sample · doctor edit ≤3 fields
  • AC-6.6: Permanent allergy registry visible in all 3 PA contexts (M2/M4/M5)
  • AC-6.7: Override workflow audited · clinical justification mandatory
  • AC-6.8: Doc Zam clinical review 20 ADR scenarios → ≥18 acceptable
  • AC-6.9: No double-counting (same ADR reported via different channels merge)

11. 🧪 Test Plan

TierCasesCoverage
UnitSeverity classifier · 4-q decision tree · cross-class matrix · auto-block logic≥85%
IntegrationEnd-to-end intake → broadcast → block · NPRA form · cross-clinic (M8)100% paths
Clinical20 ADR scenarios (anaphylaxis · severe · moderate · mild) by Doc Zam≥18 acceptable
Cross-class50 drug pairs · expected cross-react validate95% accuracy
Load10 ADR concurrent · broadcast fan-outp99 broadcast <30s

12. 🔗 Dependencies

  • Hard: M1 PSPA (intake channel) · M5 PHPA (RX history · auto-block consumer) · M9 (audit + cross-tenant consent)
  • Soft: M4 DRPA (doctor inbox alert) · M7 ADPA (follow-up booking) · M8 XCCN (cross-clinic propagation)
  • External: NPRA pharmacovigilance reporting interface (form spec · submission API)

13. 🏃 Sprint Allocation

Sprint 3.2 · 15-28 Oct 2026 (2 minggu)
  • Day 1-2: Severity classifier · 4-q safety tree · cross-class matrix seed
  • Day 3-4: M1 intake flow extension untuk ADR · 999 escalation path
  • Day 5-6: 4-channel broadcast orchestrator · idempotency
  • Day 7-8: Auto-block engine · M5 integration · override workflow
  • Day 9-10: NPRA form composer · structured submit · doctor verify UI
  • Day 11: Permanent registry update · M2/M4/M5 visibility
  • Day 12: Cross-clinic propagation (M8 dependency)
  • Day 13: Doc Zam clinical review · iteration
  • Day 14: E2E test · sprint review
Capacity: 2 backend (Python + Laravel) · 1 frontend · clinical SME consult

14. ⚠️ Module-Specific Risks

RiskLikelihoodImpactMitigation
Anaphylaxis miss (severe miss-classified as moderate)Low🔴 Patient death4-q safety check mandatory · over-escalate bias · 10-scenario regression
False positive ADR (block essential drug unnecessarily)Med🟠 Care delayNaranjo causality verify · doctor override · pharmacist consult workflow
Patient over-report (gaming · attention)Med🟢 Resource wastePattern detect · throttle per patient · doctor verify
NPRA form rejection (incomplete data)Med🟢 Compliance gapForm validate before submit · doctor checklist · NPRA spec compliance test
Cross-class block too broad (e.g. all NSAIDs blocked)Med🟠 Limit treatmentClass hierarchy granular · doctor narrow override · cross-react matrix evidence-based
Cross-clinic privacy concernMed🟠 PDPA riskExplicit per-action consent · tenant scope · audit cross-tenant access