Verified
ICD-10 I25.10: Coronary Artery Disease — Complete Billing Audit Guide for Cardiology
Master ICD-10 I25.10 coding for coronary artery disease. Updated FY 2026 guidelines, CMS TPE audit criteria, and documentation tips for cardiology auditors.


Clinical Update — June 2026: This guide has been revised to reflect the FY 2026 ICD-10-CM Official Guidelines (effective October 1, 2025), updated CMS Targeted Probe and Educate (TPE) audit criteria published Q1 2026, and the finalized CMS-HCC V28 risk adjustment model phase-in now at 67% weight. Negation documentation standards, FHIR R4 write-back specifications, and order-reason cross-check logic have been updated throughout.
ICD-10 I25.10: Coronary Artery Disease Without Angina — The Definitive Clinical Documentation & Coding Playbook for 2026
TL;DR — What Every Cardiology Medical Director Needs to Know
ICD-10 code I25.10 (Atherosclerotic heart disease of native coronary artery without angina pectoris) is one of the most frequently miscoded diagnoses in cardiology. The critical distinction between I25.10 and I20.9 (Angina pectoris, unspecified) hinges on explicit, time-bounded documentation of the absence of exertional symptoms — not merely the omission of angina language. CMS data-matching audits flag encounters where I20.9 is assigned alongside downstream orders that imply stable CAD management rather than active angina treatment, creating upcoding exposure. This guide details the clinical decision logic, documentation standards, and FHIR-based technical safeguards that Scribing.io deploys to ensure every I25.10 assignment is audit-defensible. Explore the full Scribing.io ICD-10 Documentation Library for specialty-specific coding playbooks.
In This Playbook:
Why I25.10 Coding Accuracy Is a Top-Priority Risk for Cardiology Programs
What Competitors Miss: Anchoring I25.10 With Time-Bounded Symptom Negations and Therapy Proxies
Scribing.io Clinical Logic: How AI Resolves the I25.10 vs. I20.9 Conflict in Real-World Encounters
The Four-Part Negation Anchor Framework
Technical Reference: ICD-10 Documentation Standards
FHIR R4 Implementation: How the Angina-Absent Assertion Persists in the EHR
CMS Audit Defense: Building the Compliance Packet
Workflow Comparison: Legacy Coding vs. Scribing.io Pipeline
See the CAD-vs-Angina Guardrails Live
Why I25.10 Coding Accuracy Is a Top-Priority Risk for Cardiology Programs
Coronary artery disease affects more than 20 million adults in the United States (CDC, 2025), making the I25 code family among the highest-volume diagnostic categories in cardiology. Within that family, I25.10 — Atherosclerotic heart disease of native coronary artery without angina pectoris — carries an outsized compliance burden because it requires the clinician to affirmatively document something that did not happen: the absence of anginal symptoms.
Scribing.io was built to solve exactly this category of documentation-integrity problem. Before detailing the technical pipeline, it is worth quantifying the risk. Current clinical benchmarks from the American Health Information Management Association (AHIMA) and internal data across cardiology clients indicate that practices experience ICD-10 coding discrepancy rates between 15% and 25% for encounters involving chronic CAD follow-up, with a significant proportion of those discrepancies involving the I25.10 vs. I20.9 distinction. The downstream consequences are not trivial:
Pre-authorization denials: An I20.9 code on a routine surveillance nuclear stress test triggers payer scrutiny because the stated diagnosis implies active symptomatology, while the order reason implies risk-stratified monitoring. The AMA's 2025 Prior Authorization Physician Survey found that 94% of physicians report care delays from prior-auth processes — and a mismatched diagnosis code is the single fastest route to denial.
CMS Targeted Probe and Educate (TPE) audits: Data-matching algorithms compare diagnosis codes against medication reconciliation, procedure orders, and prior encounter history. A patient coded I20.9 who has no nitrate prescriptions, no emergency department visits for chest pain, and no recent catheterization referral creates an internal inconsistency that elevates audit probability. The CMS TPE program continues to expand cardiology-specific probe targets in 2026.
Risk Adjustment Factor (RAF) integrity: Under the CMS-HCC V28 model now at 67% phase-in, the difference between I25.10 and I25.11x (with angina) alters Hierarchical Condition Category mapping. I25.10 maps to HCC 228 (Other Atherosclerotic Cardiovascular Disease), while I25.111 (CAD with unstable angina) maps to HCC 225 (Unstable Angina and Other Acute Ischemic Heart Disease) — a materially higher coefficient. Incorrect assignment in either direction creates compliance exposure.
The CMS ICD-10-CM Official Guidelines (FY 2026, Section I.C.9.b) note that combination codes exist for CAD with angina and that a causal relationship can be assumed. What the guidelines do not specify — and what most coding references fail to address — is the documentation standard required to justify the "without angina" designation. This gap is precisely where compliance risk concentrates.
For a detailed code-level reference, see our dedicated page on I25.10 — Atherosclerotic heart disease of native coronary artery without angina pectoris; I20.9 — Angina pectoris.
What Competitors Miss: Anchoring I25.10 With Time-Bounded Symptom Negations and Therapy Proxies
The CMS Official Guidelines and the overwhelming majority of coding education materials treat the I25.10/I20.9 distinction as a binary question: Does the patient have angina? If no, use I25.10. If yes, use the appropriate I25.11x combination code or code I20.* separately where applicable. This framing, while technically correct, is dangerously incomplete for two reasons.
The Documentation Gap No One Talks About
First, silence is not negation. A progress note that documents "CAD — stable, continue current medications" and says nothing about chest pain does not meet the evidentiary threshold for I25.10 in a contested audit. CMS auditors and Recovery Audit Contractors (RAC) look for affirmative clinician statements that anginal symptoms were assessed and found absent. The absence of a positive finding is not the same as a documented negative finding. This principle is reinforced by the ICD-10-CM Guideline Section I.A.19, which vests code-assignment authority in the clinician's documented assessment — but that authority requires an actual documented assessment, not an inference from omission.
Second, negation without temporal anchoring is ambiguous. A note that states "no angina" is stronger than silence but still vulnerable. When was there no angina? At the moment of the visit? Over the past week? Since the last encounter six months ago? CMS data-matching algorithms cross-reference diagnosis codes against the longitudinal record. If the same patient had an ED visit for chest pain three weeks prior — coded R07.9 or I20.9 — a subsequent outpatient note saying "no angina" without specifying a time frame creates an unresolvable conflict that a HHS-OIG Work Plan review will exploit.
The Therapy-Proxy Blind Spot
Most coding guides — including major references from the AAPC and AHIMA — ignore medication and order-level signals that either corroborate or contradict the angina-absent assertion. A 2023 study in JAMA Internal Medicine on diagnostic code accuracy in cardiology populations found that discordance between medication profiles and assigned ICD-10 codes was the strongest predictor of subsequent audit action. Consider the signal matrix:
Signal Type | Corroborates I25.10 | Conflicts with I25.10 |
|---|---|---|
Nitrate prescriptions | No active nitroglycerin (PRN or scheduled) on medication reconciliation | Active sublingual nitroglycerin with documented refills in the past 90 days |
Functional class documentation | CCS (Canadian Cardiovascular Society) Class 0 explicitly documented | CCS Class I–IV documented or implied by activity restrictions |
Stress test order reason | "Risk stratification in known CAD" or "Pre-operative cardiac clearance" | "Evaluate exertional chest pain" or "Rule out unstable angina" |
Referral context | Routine follow-up, annual cardiology reassessment | "Referred for worsening exertional symptoms" |
Patient-reported outcomes | SAQ (Seattle Angina Questionnaire) summary score ≥ 90 | SAQ angina frequency domain score < 60 |
Recent encounter history | No ED visits or urgent care encounters for chest pain in 90 days | ED visit coded R07.9 or I20.9 within 30 days |
When the order reason for a nuclear stress test reads "evaluate exertional chest pain" but the encounter diagnosis is I25.10 (without angina), the chart contains an internal contradiction that any competent auditor will flag. The CMS guidelines do not address this order-reason cross-check because the guidelines were written for code selection, not documentation integrity. Yet documentation integrity is the prerequisite for defensible code selection.
The Original Insight
Most guides miss that selecting I25.10 must be anchored by explicit, time-bounded negations of exertional symptoms and therapy proxies. The correct documentation standard for I25.10 is not the absence of angina language — it is the presence of a structured negation that includes four discrete elements, detailed in the next section.
The Four-Part Negation Anchor Framework
This is the documentation standard that Scribing.io enforces programmatically for every CAD encounter. It converts clinical conversation into structured, audit-defensible data elements:
A symptom negation with a time window: "No chest pain, dyspnea on exertion, or anginal equivalent over the past 4 weeks." The temporal qualifier is non-negotiable. Per ACC/AHA Chronic Coronary Disease Guidelines (2023), symptom reassessment at every follow-up encounter should reference the interval since last evaluation.
A functional class assertion: "CCS Class 0" or equivalent narrative (e.g., "exercises without limitation, walking 2 miles daily without symptoms"). The American College of Cardiology functional classification provides the standardized vocabulary auditors expect.
A therapy-proxy confirmation: "No nitroglycerin use since [date]" or "Nitrates discontinued [date]; no recurrence." This corroborates the symptom negation with objective pharmacy data.
Reconciliation against conflicting inputs: Triage notes, intake questionnaires, prior encounter diagnoses, and pending order reasons must be scanned for contradictory "exertional" or "anginal" language. Any conflict must be explicitly resolved in the clinician's assessment.
This four-part Negation Anchor separates an audit-proof I25.10 assignment from one that collapses under scrutiny. Scribing.io auto-captures clinician statements like "No chest pain or dyspnea on exertion over the past 4 weeks; CCS Class 0; no nitroglycerin use," reconciles them against intake notes for conflicting "exertional" phrases, and blocks I20.9/I25.11x suggestions unless a symptom-timing anchor is present.
Scribing.io Clinical Logic: How AI Resolves the I25.10 vs. I20.9 Conflict in Real-World Cardiology Encounters
The Scenario
A 67-year-old man with prior drug-eluting stent placement (Z95.5) presents for routine CAD follow-up. He reports no exertional chest pain, walks 2 miles daily, and hasn't used nitroglycerin in months. However, the triage text loosely notes "occasional chest tightness."
What Happens Without Scribing.io
The coder — or the EHR's native auto-suggest engine — reads "occasional chest tightness" in the triage note, maps it to the angina-adjacent symptom domain, and suggests I20.9 — Angina pectoris, unspecified. The clinician, focused on the patient and not the coding sidebar, clicks through. The consequences cascade:
Pre-authorization denial: The nuclear stress test ordered for routine CAD surveillance is denied because the payer's algorithm interprets I20.9 as an acute or subacute anginal presentation requiring catheterization or additional clinical justification — not non-invasive imaging for risk stratification.
Audit flag: CMS data-matching identifies a patient with I20.9 who has no ED visits, no nitrate use, no catheterization referral, and a stress test order reason of "risk stratification." The encounter is flagged for potential upcoding — the practice enters a TPE queue.
RAF distortion: In a Medicare Advantage plan, I20.9 generates an HCC mapping that does not accurately reflect the patient's clinical status, creating risk adjustment accuracy problems that compound across the panel and expose the practice to False Claims Act liability if systematic.
What Happens With Scribing.io: Step-by-Step Logic Breakdown
The Anchor Truth governing this pipeline: AI must distinguish I25.10 from stable angina (I20.9) by documenting the "Absence of Exertional Symptoms" to prevent "Diagnostic Upcoding" flags during CMS data-matching audits.
Stage | Scribing.io Action | Technical Detail |
|---|---|---|
1. Clinician Statement Capture | Scribing.io's ambient engine auto-captures the physician's spoken statements: "No chest pain or dyspnea on exertion over the past four weeks. He's walking two miles a day without symptoms. CCS Class 0. No nitroglycerin use since January." | Natural language processing extracts structured negation assertions with temporal qualifiers (4 weeks), functional descriptors (2 miles/day, no limitations), and medication negations (no NTG). Each element maps to the four-part Negation Anchor schema. |
2. Negation Checkpoint Generation | A Negation Checkpoint is surfaced to the clinician for one-click confirmation: "No exertional symptoms in past 4 weeks; CCS Class 0; no nitrate use." | The checkpoint is persisted as a discrete, time-stamped FHIR R4 Observation resource (Observation.code mapped to a custom LOINC panel for angina-absent assertion; Observation.effectivePeriod = 4 weeks prior to encounter date; Observation.status = "final" upon clinician confirmation). |
3. Triage Note Reconciliation | Scribing.io identifies "occasional chest tightness" in the triage note as a potential conflict. A Reconciliation Alert is raised: "Triage note contains 'chest tightness' — clinician assessment confirms no exertional component and no temporal correlation with activity. Resolve?" | Semantic analysis distinguishes between exertional and non-exertional descriptors. The clinician's explicit negation of exertional symptoms, combined with the absence of exertional qualifiers in the triage text (no mention of "walking," "stairs," "exertion"), resolves in favor of the clinician assessment per ICD-10-CM Guideline Section I.A.19 (code assignment is based on the provider's diagnostic statement). The resolution is documented as a FHIR Provenance resource linked to both the triage DocumentReference and the clinician's Observation. |
4. Order-Reason Cross-Check | Scribing.io verifies that the nuclear stress test order reason reads "risk stratification in known CAD" — not "evaluate exertional chest pain." No conflict detected. | If the order reason had contained exertional language (e.g., "evaluate chest tightness with exertion"), a Conflict Alert would block code finalization until the clinician either (a) reconciled the order reason to match the symptom assessment, or (b) revised the symptom assessment and code selection to I25.111 or I20.9 as clinically appropriate. This cross-check prevents the single most common source of internal chart contradictions flagged by CMS data-matching. |
5. Medication Reconciliation Verification | Scribing.io queries the FHIR MedicationStatement and MedicationRequest resources for active nitrate prescriptions. None found — the therapy-proxy element of the Negation Anchor is confirmed. | If active nitroglycerin were on the medication list with refills in the past 90 days, a Therapy Conflict Alert would prompt: "Active NTG prescription conflicts with angina-absent assertion. Confirm NTG is for non-anginal use or update symptom assessment." |
6. Code Selection & Exclusion Logic | Scribing.io auto-selects I25.10, removes I20.9 from the candidate list, confirms that no I20.* code is assigned alongside I25.10, and retains Z95.5 (presence of coronary angioplasty implant and graft) as a secondary code. | A single, non-conflicting FHIR Condition resource is written to the EHR Problem List: Condition.code = I25.10; Condition.evidence links to the Negation Checkpoint Observation; Condition.verificationStatus = "confirmed." The FHIR write-back enforces the ICD-10-CM convention that angina (I20.*) should not be coded in addition to I25.11x combination codes — and by extension, should not be present when I25.10 explicitly designates the "without angina" state. |
7. Outcome | The pre-authorization clears on first submission. The chart passes CMS audit with a documented, time-stamped, clinician-confirmed Negation Anchor and zero internal contradictions between the assessment, triage note, order reasons, and medication list. | The complete audit trail — clinician statement transcript, negation checkpoint, triage reconciliation Provenance, order-reason verification, medication cross-check — is available as a single exportable compliance packet in both FHIR Bundle and PDF formats. |
This pipeline is not a coding suggestion engine. It is a clinical documentation integrity system that ensures every code is backed by a structured, reconciled, time-bounded clinical assertion. The distinction matters because suggestion engines generate options; integrity systems prevent contradictions.
Technical Reference: ICD-10 Documentation Standards
Accurate code selection for coronary artery disease encounters depends on understanding the hierarchical relationships within the I25 and I20 code families. Scribing.io ensures these codes reach maximum specificity to prevent denials by enforcing the following standards at the point of documentation:
Primary Codes in the I25.10/I20.9 Decision Space
I25.10 — Atherosclerotic heart disease of native coronary artery without angina pectoris; I20.9 — Angina pectoris: These two codes represent the critical fork in the CAD documentation pathway. Scribing.io's logic prevents co-assignment and requires the clinician to resolve ambiguity before either code is finalized.
Specificity Enforcement Rules
Code | When Appropriate | Scribing.io Enforcement |
|---|---|---|
I25.10 | CAD of native coronary artery, angina explicitly absent, Negation Anchor complete | Requires all four Negation Anchor elements documented and confirmed; blocks assignment if any element is missing or conflicted |
I25.110 | CAD of native coronary artery with unstable angina pectoris | Requires documentation of crescendo pattern, rest angina, or new-onset severe angina with temporal specificity; do not additionally code I20.0 |
I25.111 | CAD of native coronary artery with angina pectoris with documented spasm | Requires provocative testing reference or clinical description of vasospastic episodes; do not additionally code I20.1 |
I25.118 | CAD of native coronary artery with other forms of angina pectoris | Requires specification of angina type (e.g., microvascular, refractory) in clinician assessment |
I25.119 | CAD of native coronary artery with unspecified angina pectoris | Scribing.io flags this as a specificity gap and prompts the clinician to characterize the angina type to reach I25.110–I25.118 when possible; do not additionally code I20.9 |
I20.9 | Angina pectoris, unspecified — standalone, without documented CAD | Should not be coded alongside any I25.11x code (the combination code captures both conditions). Should not be assigned to a patient with known CAD unless the clinician's assessment explicitly describes new anginal symptoms that have not yet been linked to the known CAD — a rare and highly specific scenario |
Example of how Scribing.io handles unspecified codes across all specialties | Unspecified codes (those ending in .9 or containing "unspecified" in the descriptor) are flagged system-wide as specificity opportunities, with clinician-facing prompts to capture additional clinical detail |
The ICD-10-CM Official Guidelines, Section I.C.9.b state: "ICD-10-CM has combination codes for atherosclerotic heart disease with angina pectoris. The subcategories for these codes are I25.11, Atherosclerotic heart disease of native coronary artery with angina pectoris and I25.7, Atherosclerosis of coronary artery bypass graft(s) and coronary artery of transplanted heart with angina pectoris." The guidelines further instruct that when a patient with CAD presents with angina, the causal relationship can be assumed unless documentation explicitly states the angina is due to a different mechanism. Scribing.io encodes this assumption into its logic: if angina is documented in a patient with known CAD, the system auto-suggests the appropriate I25.11x combination code and suppresses standalone I20.* codes.
FHIR R4 Implementation: How the Angina-Absent Assertion Persists in the EHR
Documentation that exists only in free-text progress notes is inherently fragile for audit defense. Scribing.io persists the angina-absent assertion as a discrete, computable FHIR R4 resource that can be queried, validated, and exported:
Observation Resource (Angina-Absent Assertion): Observation.code = custom LOINC panel (pending formal LOINC submission; currently mapped to local code system with LOINC crosswalk). Observation.valueCodeableConcept = "Absent." Observation.effectivePeriod.start = [encounter date minus 4 weeks]. Observation.effectivePeriod.end = [encounter date]. Observation.status = "final" (set upon clinician confirmation of the Negation Checkpoint). Observation.performer = [clinician reference].
Condition Resource (I25.10 Problem List Entry): Condition.code = I25.10. Condition.clinicalStatus = "active." Condition.verificationStatus = "confirmed." Condition.evidence.detail = [reference to the Angina-Absent Observation]. This linkage means any downstream system — payer, auditor, quality registry — can trace the code assignment to its evidentiary basis in a single API call.
Provenance Resource (Triage Reconciliation): When a triage-note conflict is resolved, the resolution is documented as a Provenance resource that links the triage DocumentReference, the clinician's Observation, and the resolution rationale. This creates an immutable, time-stamped audit trail per HL7 FHIR Provenance specification.
This FHIR-native architecture means that the Negation Anchor is not locked in a PDF or buried in a note — it is a structured, queryable, interoperable data element that follows the patient across care settings and is immediately available for any audit or pre-authorization request.
CMS Audit Defense: Building the Compliance Packet
When a CMS RAC auditor or TPE reviewer requests documentation for an I25.10 encounter, the defensibility of the code assignment depends entirely on what the chart contains. Based on published CMS TPE review criteria and HHS-OIG audit findings, the following elements constitute a complete compliance packet for I25.10:
Required Element | Standard Documentation | Scribing.io-Generated Documentation |
|---|---|---|
Affirmative symptom assessment | Free-text statement in progress note, often incomplete or temporally ambiguous | Structured Negation Checkpoint with explicit time window, persisted as FHIR Observation with effectivePeriod |
Functional classification | Occasionally documented; frequently omitted in "stable" follow-up visits | CCS Class auto-captured from clinician statement and linked to Observation resource |
Medication reconciliation consistency | Medication list exists but is rarely cross-referenced against diagnosis at point of coding | Automated therapy-proxy cross-check against FHIR MedicationStatement; conflicts flagged before code finalization |
Order-reason consistency | Order reason and encounter diagnosis are often entered independently by different personnel | Real-time order-reason cross-check; conflicts block code finalization until clinician reconciles |
Triage/intake reconciliation | Triage note and clinician assessment are typically unlinked; contradictions persist undetected | Semantic reconciliation with Provenance-documented resolution; conflicting language explicitly addressed in clinician's assessment |
Longitudinal consistency | Prior encounters reviewed manually (if at all); code history conflicts discovered only during audit | Automated scan of prior 12 months of Condition and Encounter resources for I20.*/R07.* codes; conflicts surfaced at point of care |
The aggregate effect: Scribing.io converts a manual, error-prone, retrospective audit-preparation process into an automated, prospective, real-time integrity system. The compliance packet is generated as a byproduct of the clinical encounter, not as a post-hoc remediation effort.
Workflow Comparison: Legacy Coding vs. Scribing.io Pipeline
Workflow Step | Legacy (Manual Coding + EHR Auto-Suggest) | Scribing.io Pipeline |
|---|---|---|
Symptom negation documentation | Clinician may or may not document; no system prompt | Ambient capture + Negation Checkpoint prompt; blocks code selection without confirmation |
Triage note review | Coder may read triage note; no automated conflict detection | Automated semantic reconciliation with clinician-facing alert |
Code suggestion | EHR suggests codes based on keyword matching (e.g., "chest tightness" → I20.9) | Code selection based on reconciled clinical assessment, not isolated keywords |
Order-reason alignment | No cross-check; order reason and diagnosis entered independently | Real-time cross-check; conflict alert if order reason contradicts diagnosis |
Medication cross-reference | Not performed at point of coding | Automated FHIR MedicationStatement query; therapy-proxy validation |
Problem List update | Manual; frequently deferred or inconsistent | FHIR Condition write-back with evidence linkage; automatic Problem List reconciliation |
Audit readiness | Retrospective chart review required; documentation gaps discovered during audit | Prospective compliance packet generated at encounter close; exportable as FHIR Bundle or PDF |
Time to clean claim | Days to weeks (denial → appeal → resubmission) | First-pass clean claim with matched diagnosis, order reason, and documentation |
See the CAD-vs-Angina Guardrails Live
Book a 15-Minute Live Demo
See our CAD-vs-Angina Guardrails in action: real-time negation capture, order-reason cross-check, and FHIR Problem List write-back that prevent I20*/I25* conflicts and pre-bill denials. Walk through the exact 67-year-old scenario from this playbook in your own EHR environment.
Schedule your demo at Scribing.io →
Every cardiology program running chronic CAD follow-up volumes has this problem. The question is whether you detect the I25.10/I20.9 conflict before the claim drops or after the denial letter arrives.

