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
Saya gatal ruam 2 hari lepas mula amoxicillin · saya buka app · AI tanya 4 soalan keselamatan · cadang stop drug + antihistamine · book follow-up esok.
Bibir bengkak + sesak nafas · AI alert MERAH segera · 999 + ED routing + auto-share pesakit GPS + RX recent details ke ED.
Saya preskripsi semalam · pesakit ngadu hari ni · saya terima notification dgn detail · permanent allergy registered patient profile.
Bila doktor lain preskripsi same drug class minggu depan · M5 auto-block + alert pharmacist + cadang alternative.
ADR severity = severe · system auto-prepare NPRA report · doctor verify + submit · regulator visibility.
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
4. ⚙️ Non-Functional Requirements
| Aspect | Target | Notes |
|---|---|---|
| Severe escalation latency | <5s 999/ED routing | Critical safety path |
| Cross-PA broadcast | <30s parallel | 4 recipients simultaneous |
| Auto-block re-dispense | <5min effective | Cache invalidate |
| NPRA report generation | <10s | Structured form fill |
| Cross-clinic propagation | <1min | Network alert via M8 |
| Token cost / ADR report | ~5K tokens | Severity + safety check + notify |
5. 🗄️ Data Model
| Table | Key fields | Purpose |
|---|---|---|
adverse_events | id, 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_broadcasts | adr_id, recipient_type (doctor/pharmacy/admin/clinic), recipient_id, sent_at, acknowledged_at | FR-6.5 audit |
adr_blocks | patient_id, drug_class, blocked_at, source_adr_id, override_count, override_history | FR-6.6 prescribe block |
npra_reports | id, adr_id, doctor_id, prepared_at, submitted_at, npra_ref_no, status | FR-6.9 regulator |
allergy_class_matrix | drug_class_a, cross_react_class_b, confidence, source | Cross-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
| Tier | Cases | Coverage |
|---|---|---|
| Unit | Severity classifier · 4-q decision tree · cross-class matrix · auto-block logic | ≥85% |
| Integration | End-to-end intake → broadcast → block · NPRA form · cross-clinic (M8) | 100% paths |
| Clinical | 20 ADR scenarios (anaphylaxis · severe · moderate · mild) by Doc Zam | ≥18 acceptable |
| Cross-class | 50 drug pairs · expected cross-react validate | 95% accuracy |
| Load | 10 ADR concurrent · broadcast fan-out | p99 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
- 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
14. ⚠️ Module-Specific Risks
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Anaphylaxis miss (severe miss-classified as moderate) | Low | 🔴 Patient death | 4-q safety check mandatory · over-escalate bias · 10-scenario regression |
| False positive ADR (block essential drug unnecessarily) | Med | 🟠 Care delay | Naranjo causality verify · doctor override · pharmacist consult workflow |
| Patient over-report (gaming · attention) | Med | 🟢 Resource waste | Pattern detect · throttle per patient · doctor verify |
| NPRA form rejection (incomplete data) | Med | 🟢 Compliance gap | Form validate before submit · doctor checklist · NPRA spec compliance test |
| Cross-class block too broad (e.g. all NSAIDs blocked) | Med | 🟠 Limit treatment | Class hierarchy granular · doctor narrow override · cross-react matrix evidence-based |
| Cross-clinic privacy concern | Med | 🟠 PDPA risk | Explicit per-action consent · tenant scope · audit cross-tenant access |