The visit ends.
The care loop doesn't.
Anusaran is a multilingual AI care companion that prepares the patient, assists the doctor, and holds every test, result, medicine and follow-up until the next safe action is taken.
Hindi + English
Doctor · patient · WhatsApp
Signed clinical record
Human approval, always
Not another
ambient scribe.
A scribe's job ends when the note is written. In outpatient care, that is when risk begins: tests are still pending, results return later, instructions are forgotten, and the ordering doctor may never see what happened next.
Build an agent scoped to the visit, not merely the conversation.
Anusaran creates the note, but its real product is the durable list of commitments created by that note—and the evidence-backed decisions needed to close them.
The note is crowded.
The risk is delayed.
Indian OPDs already have scribe products. The defensible gap is continuity: turning each order and instruction into a durable, owned workflow after the patient leaves.
Useful, increasingly available, and finished when documentation is complete.
Drafts like a scribe, then keeps running for a week to close every commitment the clinician created.
Planning figures are carried over from the supplied OPD direction brief; verify the underlying studies before using them as external clinical or commercial claims.
A result becomes a decision—not another notification.
- Day 0 · 11:40Doctor signs the visit and a medication plan. The system opens a result-review loop.
- Day 1 · Result arrivesA renal marker crosses a configured safety rule. The active prescription is re-evaluated.
- Doctor WhatsAppAn evidence-linked decision card arrives with safe, pre-drafted options—not an autonomous order.
- One tap after reviewThe signed decision becomes a Hindi or English patient message and voice note.
One visit. Three moments.
No abandoned promises.
The workflow deliberately touches the contested consultation as lightly as possible and does its best work before and after it.
Patient arrives prepared
Phone OTP, consent, five Hindi/English voice questions, medicine photos and prior reports produce a concise pre-consult brief.
- WhatsApp or patient PWA
- Restricted red-flag screen
- No diagnosis or advice
Doctor thinks, AI documents
Saaras transcribes code-mixed speech. Structured fields carry timestamps and source evidence. The doctor resolves warnings and signs.
- Zero-click audio capture
- Evidence-linked draft
- Human signature gate
Every loop gets an owner
Orders, results, medication reviews and follow-ups persist across restarts. Exceptions return to the doctor as decision cards.
- Durable OpenLoop records
- Hindi/English reminders
- Escalate, never prescribe
Meet people where
the work already happens.
Four interfaces share one authorization model, one record, and one care-loop engine.
Doctor dashboard
Today's queue, patient roster, unsigned notes, results requiring review, overdue loops and consent history—ranked by action required.
Patient companion
Approved notes, simpler explanations, prescriptions, reports, reminders and audio playback—never an unapproved AI draft.
No new app required
Intake, voice notes, reminders, result uploads and human handoff. Sensitive records open behind authenticated links.
Fits the existing EMR
Use official APIs first, FHIR/HL7 second, structured export third, and browser-assisted entry only as a transitional fallback.
Deterministic spine.
Agentic nodes.
State transitions are code. Models operate only inside bounded nodes with typed inputs, typed outputs and auditable evidence.
CHANNELS
Doctor dashboardPatient PWAWhatsAppEMR sidecarPLATFORM
FastAPI gatewayConsent + RBACVisit state machineCare-loop engineINTELLIGENCE
OpenAI Responses APISaaras STTBulbul TTSSafety rulesDATA + INTEROP
PostgreSQL + RedisEncrypted object storeFHIR / ABDMAppend-only ledgerAstryx behind product-owned wrappers, TanStack Query, React Hook Form and Zod.
Pydantic contracts, SQLAlchemy 2, Alembic migrations and generated OpenAPI clients.
Redis queue for the MVP; durable OpenLoop schema designed for production workflow migration.
ECS/Fargate, RDS, ElastiCache, S3, Cognito, KMS, Secrets Manager and WAF.
Consent→S1
Intake→S2
Chart→S3
Consult→S4
Draft→S5
Verify→S6
Sign→S7
Loops→S8
Resolve
Six bounded jobs.
Not six autonomous minds.
Split components only when context, latency, failure cost or lifetime is materially different.
Intake companion
Uses waiting time to collect the complaint, duration, medicines, allergies, old reports and a restricted red-flag screen. Never diagnoses or advises.
PreConsultBriefChart assembler
Builds a short, sourced view of prior visits, trends, active medicines and confirmed OCR candidates. Retrieval code, not a free-roaming agent.
ChartContextDocumentation agent
Converts the diarised transcript into a structured encounter. Every field carries evidence; missing information remains empty.
EncounterDraftVerifier
Sees the source and draft, not the generator rationale. Produces typed findings, combined with deterministic medication and identity rules.
VerifierFinding[]Care-loop agent
Holds every test, result, titration, follow-up and red-flag watch until its success condition is met or a human takes ownership.
OpenLoop[]Care companion
Explains signed instructions, runs approved check-ins and speaks Hindi or English. It escalates uncertainty instead of improvising care.
PatientMessageWrite the schemas
before the interface.
These contracts make provenance, abstention and resumability properties of the system rather than prompt requests.
EncounterDraft {
visit_id
locale_primary: "hi-IN" | "en-IN"
soap: { s, o, a, p }
fields: [{
path, value,
evidence: {
segment_id, t0, t1, speaker,
verbatim_source
},
confidence,
confirm_required
}]
orders[]
prescriptions[]
}OpenLoop {
visit_id, patient_id
type: "lab_pending" | "result_review"
| "follow_up" | "red_flag_watch"
clinical_question
active_rx_snapshot[]
due_by
owner: "patient" | "clinician" | "system"
success_condition
escalation_policy
status: "open" | "nudged" | "satisfied"
| "escalated" | "abandoned"
}VerifierFinding {
code: "UNSUPPORTED" | "CONTRADICTION"
| "OMISSION_CRITICAL" | "RX_RISK"
| "ORDER_UNMAPPED" | "SPEAKER_UNCERTAIN"
severity: "blocking" | "warn" | "info"
field_path
message
evidence_refs[]
}LedgerEntry {
visit_id, timestamp
actor_id, actor_type
model_id, prompt_version
input_hash, output_hash
findings[]
clinician_delta
override_reason
latency_ms
}One source of truth.
Every channel is a view.
PostgreSQL owns clinical state. WhatsApp, dashboards and the sidecar never maintain separate patient truth.
usersdoctor_profilespatient_profilesclinicsclinic_membershipscare_relationshipsconsentsappointmentsencountersrecordingstranscript_segmentsclinical_note_versionsprescriptionscare_plansopen_loopspatient_check_insalertsmessagesmodel_runsaudit_events/v1/encountersCreate a consent-bound visit/v1/encounters/{id}/recordingsUpload encrypted chunks/v1/encounters/{id}/completeQueue final transcription/v1/encounters/{id}/draft-noteFetch evidence-linked draft/v1/encounters/{id}/signCreate immutable signed version/v1/doctors/me/patientsAuthorized patient roster/v1/doctors/me/alertsException-first clinical inbox/v1/patients/me/timelinePatient-visible approved history/v1/follow-upsCreate durable commitment/v1/webhooks/twilio/whatsappValidated inbound channelauthenticated AND correct_role AND active_clinic_membership AND active_care_relationship AND sufficient_consentWarm enough to trust.
Clear enough to audit.
The companion can feel human without pretending to be one.
Code-mixed transcription, timestamps, batch diarisation.
Bounded tools, approved context, strict schemas.
Hindi and Indian English, consistent calm voice.
“Namaste, main aapke clinic ka AI care assistant hoon. Main aapko doctor ki instructions samjha sakta hoon.”
- Short responses
- Natural pauses
- Patient can interrupt
- Always identifies as AI
Unsupported is a state.
Abstention is a feature.
A better prompt is not a safety system. Safety comes from representation, permissions, deterministic gates and human ownership.
Evidence required
No transcript span or chart pointer means the field fails validation.
Catalogue-bound
Drugs and tests resolve against the clinic's real formulary and master.
Critical confirmation
Drug, dose, frequency, allergy, order and uncertain speaker always require review.
Independent checks
Typed AI critique is combined with deterministic medication and identity rules.
Doctor signs
No prescription or change reaches the patient without a registered practitioner.
Immutable history
Drafts, edits, signatures, overrides and model versions remain auditable.
Build the record first.
Earn the companion later.
The exciting voice experience sits on top of a reliable signed record, consent model and durable workflow.
Doctor copilot
Identity, patient registration, consent, recording, Saaras transcription, structured notes, evidence review and signature.
SHIP: safe documentation loopTwo dashboards
Doctor exception inbox, patient timeline, approved notes, prescriptions, reports, permissions and audit history.
SHIP: longitudinal recordCare loops + WhatsApp
Durable tasks, reminders, result ingestion, voice notes, patient check-ins and clinician decision cards.
SHIP: closed-loop careVoice companion
Streaming speech, interruption, language preference and carefully scoped tools over approved care plans.
SHIP: the Baymax feelingRelease gates
One prompt to start
the implementation.
This brief contains the product surfaces, stack, invariants and release order. Copy it into Astra, then build Phase 1 before opening the scope.
Build Anusaran, an India-first AI care-loop platform for outpatient clinics. PRODUCT - Core wedge: an OPD agent scoped to the visit, not just the conversation. It drafts the note, then keeps every test, result, dose review and follow-up alive until resolved. - Doctor dashboard: today's queue, patient roster, drafts awaiting signature, open loops, result-review cards, messages, and consent history. - Patient PWA: approved visit timeline, prescriptions, reports, reminders, Hindi/English explanations, audio playback, and an AI care companion. - WhatsApp companion: pre-visit intake, voice notes, reminders, result uploads, structured check-ins, and human escalation. - EMR sidecar: consultation recording, evidence-linked transcript, structured note review, and safe export into an existing EMR. STACK - Frontend: Next.js, TypeScript, React 19, Astryx design system, TanStack Query, React Hook Form, Zod. - Backend: Python 3.12, FastAPI, uv, Pydantic, SQLAlchemy 2, Alembic. - Data: PostgreSQL, Redis, S3-compatible encrypted storage. - Workflows: Celery for MVP; design OpenLoop state for later Temporal migration. - Identity: Amazon Cognito; roles and record authorization enforced in PostgreSQL and FastAPI. - Clinical AI: OpenAI Python SDK using the Responses API and strict structured outputs. - Speech: Sarvam Saaras v3 for Hindi-English code-mixed STT; Sarvam Bulbul v3 for Hindi/Indian-English TTS. - Messaging: Twilio WhatsApp for MVP. - Deployment: Docker on AWS ECS/Fargate in Mumbai, RDS, ElastiCache, S3, KMS, Secrets Manager, WAF, OpenTelemetry and Sentry. NON-NEGOTIABLES - A visit is a deterministic S0–S8 state machine: consent, intake, chart, consult, draft, verify, sign, loops, resolve. - Every clinical field must reference transcript or chart evidence. - Preserve the original-language evidence span beside every translated field. - Drug, dose, frequency, allergies, orders and speaker uncertainty always require explicit verification. - Resolve drugs and tests against each clinic's catalogue; never let a model persist a raw drug or test string as clinical truth. - Only doctor-signed records are official or patient-visible. - The AI never independently diagnoses, prescribes, stops medicine, or handles emergencies. - Store immutable note versions and an append-only audit ledger. - Patient access is based on consent and care relationships; a doctor never 'owns' a patient. - WhatsApp is a channel; PostgreSQL remains the source of truth. - Emit ABDM-compatible FHIR R4 resources for OP consultation, prescription and diagnostic reports. OPD MONEY SHOT - A medicine is continued during the visit. A renal result returns the next day and crosses a configured safety threshold. The Loop agent re-evaluates the result against the signed prescription, creates a clinician decision card with evidence and pre-drafted options, and waits. Only after the doctor approves does the patient receive a Hindi/English message or voice note. DELIVER IN PHASES 1. Doctor copilot: auth, patient registration, consent, recording, STT, structured note, evidence review, signature. 2. Dashboards: doctor exception inbox and patient timeline. 3. Care loops: durable tests, results, medications, follow-ups and escalation cards. 4. WhatsApp: text/voice intake, reminders, uploads and human handoff. 5. Voice companion: streaming STT/TTS, interruption, preferences and approved-care-plan tools. Start as a modular monolith. Generate OpenAPI types for the frontend. Include migrations, tests, seed fixtures, audit events, tenant isolation, retry/idempotency logic, and synthetic Hindi-English consultation fixtures.