ICD-10 + CDT Medical Records: Why Vapi Can't Match CallSphere Healthcare
CallSphere ships ICD-10 medical records, CDT/CPT-coded services, and a prescription table. Vapi has none of it. The clinical data layer comparison.
TL;DR
A voice AI for healthcare needs more than a friendly voice — it needs a clinical data layer. CallSphere Healthcare ships with ICD-10-coded medical records, CPT and CDT-coded services, prescription tracking, and structured agent interactions, all wired to the voice agent's tool calls. Vapi.ai has none of this. Vapi is a voice infrastructure platform; the clinical schema, coding standards, and provider-billing alignment are all problems you solve yourself. This post details what each coding standard does, why it matters for voice AI, and the entity model CallSphere uses to keep voice conversations clinically coherent.
Why Voice AI Needs Clinical Coding Standards
When a clinic books an appointment, the slot is not just "Tuesday at 2pm." It is "Tuesday at 2pm for D1110 Adult Prophylaxis" or "Tuesday at 2pm for 99213 Established Patient Visit, Level 3." Those codes are the bridge between voice scheduling and downstream billing, payer alignment, provider scheduling rules, and EHR interoperability.
Without coding, a voice agent that books appointments produces clean-looking calendars and dirty-looking accounts receivable. The hygienist shows up to the room and the chart says "cleaning"; she does not know if the patient is due for a basic prophy or a periodontal maintenance, the front desk has to call back, and the practice loses 15 minutes per visit.
Three coding standards matter most for outpatient voice AI:
- ICD-10-CM — diagnoses. ~70,000 codes. Used on claims, in problem lists, and in clinical notes.
- CPT — procedures (medical). ~10,000 codes. Used for billing E/M visits, procedures, and labs.
- CDT — procedures (dental). ~750 codes. Maintained by the ADA. Used for every billed dental service in the U.S.
A voice agent that doesn't know about these is a chatbot that pretends to be a clinic.
Vapi's Clinical Data Layer: There Isn't One
Vapi's data model is "whatever you put in your webhook response." The platform has no notion of patients, no notion of diagnoses, no notion of services. That isn't a defect — it is the explicit positioning of the product. Vapi is voice infrastructure; clinical data is your problem.
What that means in practice:
- You design the patient table.
- You design the medical_records table and decide whether to use ICD-10 (you should).
- You design the services table and decide whether to use CPT and CDT (you should).
- You design the prescriptions table and decide on RxNorm/NDC.
- You write each tool that lets the agent read or write to those tables.
- You handle ICD-10 mid-year code changes (every October).
- You handle the CDT annual update (every January).
- You handle CPT updates (multiple times per year).
For a generalist team, that is a 6-12 month buildout before the first claim is filed cleanly.
CallSphere Healthcare's Clinical Data Layer
CallSphere ships the schema. Tables include:
- medical_records — patient_id, provider_id, encounter_date, icd10_codes (array), chief_complaint, assessment, plan, free-text note.
- prescriptions — patient_id, provider_id, drug_name, dose, frequency, refills, status (active/discontinued).
- services — name, cpt_code, cdt_code, default_duration_minutes, default_price.
- appointments — patient_id, provider_id, service_id (FK), start, end, status.
- patient_insurance — patient_id, payer_name, member_id, group_id, eligibility_cached_at.
That schema is referenced by the 14 voice tools. get_services returns services with their CPT/CDT codes. schedule_appointment writes the service_id into the appointment row. The provider's printed schedule the next morning is coded correctly because the voice agent never wrote a free-text "cleaning" — it wrote a structured pointer to D1110.
See AI Voice Agents Handle Real Calls
Book a free demo or calculate how much you can save with AI voice automation.
Comparison Table
| Clinical capability | Vapi.ai | CallSphere Healthcare |
|---|---|---|
| Patient demographics table | DIY | Built-in |
| ICD-10-CM medical records | DIY | Built-in |
| Prescription table | DIY | Built-in |
| CPT-coded services | DIY | Built-in |
| CDT-coded dental services | DIY | Built-in |
| Insurance / eligibility | DIY | Built-in |
| Provider schedules | DIY | Built-in |
| Encounter notes (chief complaint, assessment, plan) | DIY | Built-in |
| Annual code update process | DIY | Built-in |
| Voice tools coded against schema | DIY | 14 tools |
| Practice-level isolation (multi-tenant) | DIY | Built-in |
Medical Record Entity Diagram
erDiagram
PRACTICES ||--o{ PROVIDERS : employs
PRACTICES ||--o{ PATIENTS : registers
PRACTICES ||--o{ SERVICES : offers
PROVIDERS ||--o{ PROVIDER_SCHEDULES : has
PROVIDERS ||--o{ APPOINTMENTS : sees
PATIENTS ||--o{ PATIENT_INSURANCE : holds
PATIENTS ||--o{ APPOINTMENTS : books
PATIENTS ||--o{ MEDICAL_RECORDS : owns
PATIENTS ||--o{ PRESCRIPTIONS : prescribed
SERVICES ||--o{ APPOINTMENTS : type_of
APPOINTMENTS ||--o{ MEDICAL_RECORDS : results_in
MEDICAL_RECORDS ||--o{ PRESCRIPTIONS : may_include
PRACTICES {
uuid id PK
text name
text type "medical or dental"
}
PATIENTS {
uuid id PK
text first_name
text last_name
date date_of_birth
text phone
}
MEDICAL_RECORDS {
uuid id PK
uuid patient_id FK
uuid provider_id FK
date encounter_date
text[] icd10_codes
text chief_complaint
text assessment
text plan
}
PRESCRIPTIONS {
uuid id PK
uuid patient_id FK
text drug_name
text dose
text frequency
int refills
text status
}
SERVICES {
uuid id PK
text name
text cpt_code
text cdt_code
int duration_minutes
numeric price
}
Worked Example: Dental Hygiene Recall vs Periodontal Maintenance
A returning patient calls. They are between D1110 (Adult Prophylaxis) and D4910 (Periodontal Maintenance) depending on their last cleaning history and insurance benefits.
A voice agent that doesn't know CDT codes will book a "cleaning." The next morning, the hygienist starts a D1110, then mid-procedure realizes the patient was last seen for active perio therapy and is in maintenance. Two outcomes: (1) the practice undercharges; (2) the insurance claim is denied for code mismatch.
A CallSphere voice agent calls get_services, sees both codes with their criteria, calls get_patient_appointments to look at the last visit type, and either schedules D4910 or escalates to staff if the data is ambiguous. The hygienist's room is set up correctly. The claim files cleanly. The patient is happy.
That is the practical value of having a clinically-coded schema sitting under the voice agent.
Migration / Decision Section
If you are evaluating Vapi for a clinic and the question on the table is "can we replicate this?" — yes, you can. The honest cost is roughly:
- 6-12 months of engineering for the clinical data layer.
- Annual recurring effort to track ICD-10, CPT, and CDT updates.
- A clinical informaticist on staff or on retainer to validate code mappings.
- A QA loop that catches mis-coded appointments before they hit billing.
Most clinic operators choose to skip that path. A voice AI that produces clean billing data on day one is worth more than the cost difference, because every dirty claim costs $25 to rework and every coding error compounds across thousands of monthly visits.
FAQ
Why does the voice agent need to know CPT/CDT codes?
Because the calendar entry it creates is the upstream of every billing and claim downstream. A coded calendar produces clean revenue. An uncoded calendar produces a billing manager rebuilding the day every morning.
How are ICD-10 updates handled?
CallSphere ships an annual update (October 1, when CMS publishes new ICD-10-CM) and rolls deprecated codes through a documented migration path. Existing records keep their historical codes; new records use the active set.
Can I use SNOMED CT or LOINC?
SNOMED CT is supported as an optional vocabulary on enterprise plans. LOINC is used where lab data is in scope. Most outpatient practices live primarily in ICD-10 + CPT/CDT.
What about RxNorm and NDC for prescriptions?
The prescriptions table captures drug_name, dose, frequency, and refills. RxNorm/NDC tagging is supported on enterprise plans for practices that need formulary alignment or e-prescribing integration.
Does the voice agent ever generate clinical notes?
The agent does not author clinical assessments — that is a provider responsibility. It does write structured chief complaint and reason-for-visit fields, captured during the voice intake, that the provider reviews and signs off on inside the dashboard.
How does CallSphere prevent the agent from offering services not in the practice's catalog?
Services are scoped to the practice. get_services only returns rows where practice_id matches the inbound call's tenant. The agent cannot offer a service the practice does not actually deliver.
See the entity model wired to a real voice agent at /demo. Healthcare details at /industries/healthcare.
Try CallSphere AI Voice Agents
See how AI voice agents work for your industry. Live demo available -- no signup required.