Medical coding

Asking for Preferences
Searching the Web

medical coding career 2025 2026 salary outlook certifications

Here's a thorough breakdown of medical coding as a career in 2026:

What is Medical Coding?

Medical coders translate clinical documentation (diagnoses, procedures, symptoms, medications) into standardized alphanumeric codes used for billing, insurance claims, and record-keeping. The three main code sets are:
  • ICD-10-CM - diagnoses
  • CPT (Current Procedural Terminology) - procedures and services
  • HCPCS Level II - supplies, equipment, medications

Career Entry Paths

You do not need a 4-year degree to enter this field. Common routes include:
PathTimeCost
Certificate program (vocational/community college)6-12 months$1,500 - $6,000
Associate's degree (community college)~2 years$5,000 - $15,000
Self-study + certification exam3-9 months$500 - $1,500
Online programs (AAPC, AHIMA)Flexible$2,000 - $4,000

Key Certifications

Certification is the single biggest salary driver in this field. Top credentials:
CredentialIssuing BodyFocus
CPC (Certified Professional Coder)AAPCOutpatient/physician office coding
CCS (Certified Coding Specialist)AHIMAHospital/inpatient coding
CCA (Certified Coding Associate)AHIMAEntry-level, all settings
COC (Certified Outpatient Coder)AAPCOutpatient facility coding
CRC (Certified Risk Adjustment Coder)AAPCRisk adjustment / HCC coding
CBCS (Certified Billing & Coding Specialist)NHABilling + coding combined
AAPC's 2026 Salary Report shows certified coders average $67,260/year vs. $55,721 for non-certified - a 20.7% premium. Those with 3+ certifications average $81,227/year.

Salary Ranges (2026)

LevelAnnual Salary
Entry-level (no cert)$30,000 - $40,000
Certified, early career$45,000 - $55,000
Experienced + certified$60,000 - $70,000
Specialized / senior$75,000 - $85,000+
Top earners (remote, multi-cert)Up to $130,000
Geographic hotspots: California, New York, Alaska pay significantly above average. California coders can earn up to $76,000-$80,000+.

Job Outlook

  • Employment in medical records and health information is projected to grow ~10%+ through 2030 - above average for all occupations.
  • Growth is driven by: aging population, telehealth expansion, payer transparency mandates, and digital claim audits.
  • Remote work is very common - many coders work fully from home, which opens up high-paying markets regardless of where you live.

Specializations (Higher Pay)

Once you have experience, specializing boosts earnings significantly:
  • Risk Adjustment / HCC coding - used by Medicare Advantage plans, high demand
  • Oncology coding - complex, premium pay
  • Cardiology coding - high procedure volume
  • Surgical coding - OR coding, highest complexity
  • Compliance / auditing - reviewing other coders' work

Career Ladder

Entry-level Coder
      ↓
Certified Coder (CPC / CCA)
      ↓
Senior Coder / Specialist
      ↓
Coding Auditor / Compliance Analyst
      ↓
Coding Manager / Director of HIM
      ↓
Revenue Cycle Director / Consultant

Pros & Cons

Pros:
  • Remote-friendly from day one
  • No degree required to start
  • Steady, recession-resistant demand
  • Clear certification path
  • Good work-life balance (mostly desk/remote work)
Cons:
  • Pay ceiling is moderate without specialization
  • Ongoing CE (continuing education) required to maintain certifications
  • Can be repetitive for some personalities
  • Productivity quotas in many roles
  • AI/automation is changing lower-complexity coding (though human oversight remains required)

Where to Start

  1. Take a free intro course - AAPC and AHIMA both offer free resources and sample exams at aapc.com and ahima.org
  2. Study for the CPC exam - AAPC's CPC is the most recognized entry credential
  3. Build a practice ICD-10/CPT codebook - coders use physical codebooks (updated annually) in the exam
  4. Seek an apprenticeship or entry-level billing role - real-world claim experience is key
Let me know if you'd like a deeper dive into any area - certifications, study materials, a specific specialty, or how AI is reshaping the field.

Create a study guide or cheat sheet for ICD-10 and CPT coding basics

Asking for Preferences
Reading File
Reading File
Running Command

ls /home/daytona/workspace/ 2>/dev/null && echo "---" && mkdir -p /home/daytona/…

Writing File

~/medical-coding-guide/build.js

const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "ICD-10 & CPT Coding Basics – Study Guide";
pres.author = "Orris";

// ─── THEME ───────────────────────────────────────────────────────
const C = {
  navy:    "0D1B40",   // dominant dark
  teal:    "007C91",   // accent
  tealLt:  "00A9BF",   // lighter teal
  amber:   "F0A500",   // highlight / warm accent
  white:   "FFFFFF",
  offWhite:"F4F6FA",
  gray:    "4A5568",
  grayLt:  "8898AA",
  red:     "C0392B",
  green:   "1E8449",
  slate:   "1A2B4A",
};

// ─── HELPERS ─────────────────────────────────────────────────────
function titleSlide(title, sub) {
  const s = pres.addSlide();
  // full-bleed dark background
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  // teal left accent bar
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.35, h: 5.625, fill: { color: C.teal } });
  // amber bottom stripe
  s.addShape(pres.ShapeType.rect, { x: 0, y: 5.1, w: 10, h: 0.525, fill: { color: C.amber } });

  s.addText(title, {
    x: 0.7, y: 1.4, w: 8.6, h: 1.3,
    fontSize: 40, bold: true, color: C.white, fontFace: "Calibri",
    align: "left", valign: "middle", margin: 0,
  });
  if (sub) {
    s.addText(sub, {
      x: 0.7, y: 2.8, w: 8.6, h: 0.7,
      fontSize: 18, color: C.tealLt, fontFace: "Calibri",
      align: "left", valign: "top", margin: 0,
    });
  }
  return s;
}

function sectionHeader(label, bgColor) {
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: bgColor || C.slate } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 4.8, w: 10, h: 0.825, fill: { color: C.amber } });
  s.addText(label, {
    x: 0.7, y: 1.6, w: 8.6, h: 2.2,
    fontSize: 36, bold: true, color: C.white, fontFace: "Calibri",
    align: "left", valign: "middle", margin: 0,
  });
  return s;
}

// content slide: title bar + white content area
function contentSlide(title, accent) {
  const s = pres.addSlide();
  // white bg
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.offWhite } });
  // title bar
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.85, fill: { color: accent || C.teal } });
  // left gutter
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0.85, w: 0.12, h: 4.775, fill: { color: C.amber } });
  s.addText(title, {
    x: 0.3, y: 0, w: 9.4, h: 0.85,
    fontSize: 20, bold: true, color: C.white, fontFace: "Calibri",
    align: "left", valign: "middle", margin: 0,
  });
  return s;
}

function addBullets(s, items, opts) {
  const rows = items.map((item, i) => ({
    text: item,
    options: { bullet: { type: "bullet" }, breakLine: i < items.length - 1 },
  }));
  s.addText(rows, {
    x: 0.35, y: 0.95, w: 9.3, h: 4.4,
    fontSize: opts?.fontSize || 15, color: opts?.color || C.gray,
    fontFace: "Calibri", valign: "top",
    paraSpaceBefore: 4, paraSpaceAfter: 4,
  });
}

function addTwoCol(s, leftTitle, leftItems, rightTitle, rightItems, lColor, rColor) {
  // left col header
  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 0.95, w: 4.45, h: 0.4, fill: { color: lColor || C.teal } });
  s.addText(leftTitle, { x: 0.25, y: 0.95, w: 4.45, h: 0.4, fontSize: 13, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
  // right col header
  s.addShape(pres.ShapeType.rect, { x: 5.05, y: 0.95, w: 4.7, h: 0.4, fill: { color: rColor || C.navy } });
  s.addText(rightTitle, { x: 5.05, y: 0.95, w: 4.7, h: 0.4, fontSize: 13, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });

  const lRows = leftItems.map((t, i) => ({ text: t, options: { bullet: { type: "bullet" }, breakLine: i < leftItems.length - 1 } }));
  s.addText(lRows, { x: 0.25, y: 1.42, w: 4.45, h: 3.9, fontSize: 13, color: C.gray, fontFace: "Calibri", valign: "top", paraSpaceBefore: 3, paraSpaceAfter: 3 });

  const rRows = rightItems.map((t, i) => ({ text: t, options: { bullet: { type: "bullet" }, breakLine: i < rightItems.length - 1 } }));
  s.addText(rRows, { x: 5.05, y: 1.42, w: 4.7, h: 3.9, fontSize: 13, color: C.gray, fontFace: "Calibri", valign: "top", paraSpaceBefore: 3, paraSpaceAfter: 3 });
}

// ─── TABLE HELPER ─────────────────────────────────────────────────
function addTable(s, rows, colW, yStart) {
  const tableRows = rows.map((row, ri) =>
    row.map(cell => ({
      text: cell,
      options: {
        fontSize: 12,
        bold: ri === 0,
        color: ri === 0 ? C.white : C.gray,
        fill: ri === 0 ? C.navy : (ri % 2 === 0 ? "EAF0FB" : C.white),
        align: "left",
        valign: "middle",
      },
    }))
  );
  s.addTable(tableRows, {
    x: 0.25,
    y: yStart || 1.0,
    colW: colW,
    rowH: 0.38,
    border: { type: "solid", color: "CBD5E0", pt: 0.5 },
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 1 – COVER
// ════════════════════════════════════════════════════════════════
titleSlide(
  "ICD-10 & CPT Coding\nBasics",
  "Study Guide & Cheat Sheet  •  2026 Edition"
);

// ════════════════════════════════════════════════════════════════
// SLIDE 2 – WHAT IS MEDICAL CODING?
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("What Is Medical Coding?", C.teal);
  addBullets(s, [
    "Medical coding converts clinical documentation into standardized alphanumeric codes",
    "Codes are used for billing, insurance reimbursement, research, and public health tracking",
    "Three main code sets: ICD-10-CM (diagnoses), CPT (procedures), and HCPCS Level II (supplies/drugs)",
    "Codes must be supported by documentation — no documentation = no code",
    "The \"Golden Rule\": Code what is documented; do not assume or infer diagnoses",
    "Coders work from the health record — physician notes, lab results, operative reports, discharge summaries",
  ], { fontSize: 15 });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 3 – SECTION HEADER: ICD-10-CM
// ════════════════════════════════════════════════════════════════
sectionHeader("SECTION 1\nICD-10-CM Coding", C.slate);

// ════════════════════════════════════════════════════════════════
// SLIDE 4 – ICD-10 STRUCTURE
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("ICD-10-CM: Code Structure", C.teal);

  // Big code example visual
  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 0.95, w: 9.5, h: 0.7, fill: { color: C.navy } });
  s.addText("J 1 8 . 9", {
    x: 0.25, y: 0.95, w: 9.5, h: 0.7,
    fontSize: 30, bold: true, color: C.amber, fontFace: "Courier New",
    align: "center", valign: "middle", charSpacing: 10, margin: 0,
  });

  const labels = [
    ["Category (3 chars)", "Always a letter + 2 digits\n(e.g. J18 = Pneumonia)"],
    ["Decimal (.)", "Always present from 4th character onward"],
    ["Etiology / Site /\nSeverity (chars 4–6)", "Provide specificity\n(e.g. .9 = unspecified organism)"],
    ["7th Character\n(some codes)", "Extension for fractures, injuries, obstetrics\nA = initial, D = subsequent, S = sequela"],
  ];

  labels.forEach(([lbl, desc], i) => {
    const x = 0.25 + i * 2.38;
    s.addShape(pres.ShapeType.rect, { x, y: 1.72, w: 2.2, h: 0.45, fill: { color: C.tealLt } });
    s.addText(lbl, { x, y: 1.72, w: 2.2, h: 0.45, fontSize: 10, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle", margin: 2 });
    s.addText(desc, { x, y: 2.2, w: 2.2, h: 1.1, fontSize: 10, color: C.gray, fontFace: "Calibri", align: "center", valign: "top", margin: 2 });
  });

  // Key rules below
  s.addText([
    { text: "Valid codes are 3–7 characters.  ", options: { bold: true } },
    { text: "Always code to the highest degree of specificity (most characters).  ", options: {} },
    { text: "Never code unspecified if a specific code is available and supported by documentation.", options: {} },
  ], { x: 0.25, y: 3.45, w: 9.5, h: 0.85, fontSize: 12, color: C.gray, fontFace: "Calibri", valign: "top", margin: 4 });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 5 – ICD-10 CHAPTER OVERVIEW
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("ICD-10-CM: Chapter Overview (Key Chapters)", C.teal);
  addTable(s, [
    ["Chapter", "Code Range", "Description"],
    ["1",  "A00–B99",  "Infectious & Parasitic Diseases"],
    ["2",  "C00–D49",  "Neoplasms"],
    ["4",  "E00–E89",  "Endocrine, Nutritional & Metabolic"],
    ["5",  "F01–F99",  "Mental, Behavioral & Neurodevelopmental"],
    ["9",  "I00–I99",  "Diseases of the Circulatory System"],
    ["10", "J00–J99",  "Diseases of the Respiratory System"],
    ["13", "M00–M99",  "Musculoskeletal & Connective Tissue"],
    ["19", "S00–T88",  "Injury, Poisoning & External Causes"],
    ["21", "Z00–Z99",  "Factors Influencing Health Status (Z-codes)"],
  ], [1.2, 2.0, 5.8], 0.98);
}

// ════════════════════════════════════════════════════════════════
// SLIDE 6 – ICD-10 OFFICIAL GUIDELINES (KEY RULES)
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("ICD-10-CM: Official Coding Guidelines – Key Rules", C.teal);
  addTwoCol(s,
    "Inpatient (UHDDS)",
    [
      "Principal Diagnosis: condition established after study to be chiefly responsible for admission",
      "Code all additional conditions that affect care, management, or length of stay",
      "Uncertain diagnoses (\"possible\", \"probable\") ARE coded as if confirmed",
      "Use POA (Present on Admission) indicators",
      "Symptom codes not coded when integral to a confirmed diagnosis",
      "Sequencing: principal dx first, then complications, then comorbidities",
    ],
    "Outpatient / Physician Office",
    [
      "First-Listed Diagnosis: main reason for the visit",
      "Do NOT code uncertain diagnoses — code signs/symptoms instead",
      "Chronic conditions that affect care should be coded every visit",
      "Code the reason for the encounter, not the chronic disease unless treated",
      "Coding from the Alphabetic Index first, verify in Tabular List",
      "Never code directly from the Index — always verify in Tabular",
    ],
    C.teal, C.navy
  );
}

// ════════════════════════════════════════════════════════════════
// SLIDE 7 – ICD-10 CONVENTIONS
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("ICD-10-CM: Conventions & Notations", C.teal);
  addTable(s, [
    ["Symbol / Notation",     "Meaning"],
    ["NEC – Not Elsewhere Classified", "Specific code not available; use when documentation is specific but no specific code exists"],
    ["NOS – Not Otherwise Specified",  "\"Unspecified\" – use when documentation lacks specificity"],
    ["Includes",               "Conditions classified to that code or category"],
    ["Excludes1",              "Not coded here – mutually exclusive; NEVER use both codes together"],
    ["Excludes2",              "Not included here – both codes MAY be reported together"],
    ["Code Also",              "Two codes may be required to fully describe the condition"],
    ["Code First / Use Additional Code", "Sequencing instruction – indicates mandatory sequencing"],
    ["7th Character Extension",         "Required for certain categories (fractures, obstetrics, injuries)"],
    ["Placeholder X",          "Holds position for a required 7th character (e.g., T36.0X1A)"],
  ], [3.2, 6.3], 0.95);
}

// ════════════════════════════════════════════════════════════════
// SLIDE 8 – ICD-10 Z-CODES & COMMON EXAMPLES
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("ICD-10-CM: Common Codes Quick Reference", C.teal);
  addTable(s, [
    ["Code",        "Description",                            "Category"],
    ["I10",         "Essential (primary) hypertension",       "Circulatory"],
    ["E11.9",       "Type 2 diabetes mellitus, w/o complications", "Endocrine"],
    ["J18.9",       "Pneumonia, unspecified organism",        "Respiratory"],
    ["M54.5",       "Low back pain",                          "Musculoskeletal"],
    ["Z23",         "Encounter for immunization",             "Z-code"],
    ["Z12.11",      "Encounter for breast cancer screening",  "Z-code"],
    ["S72.001A",    "Fracture of femoral neck, initial encounter", "Injury (7th char)"],
    ["F32.9",       "Major depressive disorder, unspecified episode", "Mental Health"],
    ["K92.1",       "Melena",                                 "Digestive"],
    ["R07.9",       "Chest pain, unspecified",                "Sign/Symptom"],
  ], [1.5, 4.5, 3.0], 0.95);
}

// ════════════════════════════════════════════════════════════════
// SLIDE 9 – SECTION HEADER: CPT
// ════════════════════════════════════════════════════════════════
sectionHeader("SECTION 2\nCPT Coding", C.navy);

// ════════════════════════════════════════════════════════════════
// SLIDE 10 – CPT OVERVIEW & STRUCTURE
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("CPT: Overview & Structure", C.navy);
  addTwoCol(s,
    "What is CPT?",
    [
      "Current Procedural Terminology – published by AMA",
      "5-digit numeric codes (Category I)",
      "4-digit + F (Category II, performance measures)",
      "4-digit + U/T/M/P/X (Category III, emerging tech)",
      "Updated annually – effective January 1",
      "Used by all payers for outpatient and physician services",
      "Must be linked to a supporting ICD-10-CM diagnosis code",
    ],
    "CPT Code Categories",
    [
      "99xxx: Evaluation & Management (E/M)",
      "00xxx–09xxx: Anesthesia",
      "10xxx–69xxx: Surgery",
      "70xxx–79xxx: Radiology",
      "80xxx–89xxx: Pathology & Laboratory",
      "90xxx–99xxx: Medicine & Immunization",
      "Category II: Quality measures (0001F–9999F)",
      "Category III: Temp emerging tech (0001T–9999T)",
    ],
    C.teal, C.navy
  );
}

// ════════════════════════════════════════════════════════════════
// SLIDE 11 – E/M CODING (MOST COMMON)
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("CPT: Evaluation & Management (E/M) Coding", C.navy);

  s.addShape(pres.ShapeType.rect, { x: 0.25, y: 0.95, w: 9.5, h: 0.38, fill: { color: C.teal } });
  s.addText("E/M Level is determined by Medical Decision Making (MDM) OR Total Time — choose one method", {
    x: 0.25, y: 0.95, w: 9.5, h: 0.38,
    fontSize: 12, bold: true, color: C.white, fontFace: "Calibri",
    align: "center", valign: "middle", margin: 2,
  });

  addTable(s, [
    ["CPT Code",  "Setting",            "Level / Type",              "MDM Complexity",  "Typical Time"],
    ["99202",     "New Pt – Office",    "Level 2",                   "Straightforward", "15–29 min"],
    ["99203",     "New Pt – Office",    "Level 3",                   "Low",             "30–44 min"],
    ["99204",     "New Pt – Office",    "Level 4",                   "Moderate",        "45–59 min"],
    ["99205",     "New Pt – Office",    "Level 5",                   "High",            "60–74 min"],
    ["99212",     "Est. Pt – Office",   "Level 2",                   "Straightforward", "10–19 min"],
    ["99213",     "Est. Pt – Office",   "Level 3",                   "Low",             "20–29 min"],
    ["99214",     "Est. Pt – Office",   "Level 4",                   "Moderate",        "30–39 min"],
    ["99215",     "Est. Pt – Office",   "Level 5",                   "High",            "40–54 min"],
    ["99221–99223","Inpatient Admit",   "Initial Hospital Care",     "Low–High",        "Varies"],
    ["99231–99233","Inpatient",         "Subsequent Hospital Care",  "Straightforward–High","Varies"],
  ], [1.1, 1.7, 1.8, 1.8, 1.5], 1.38);
}

// ════════════════════════════════════════════════════════════════
// SLIDE 12 – MDM TABLE
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("CPT: Medical Decision Making (MDM) – 2021 Guidelines", C.navy);
  addTable(s, [
    ["MDM Level",        "Problems Addressed",                  "Data Reviewed / Ordered",       "Risk of Complications"],
    ["Straightforward",  "1 minor problem",                     "Minimal or none",               "Minimal risk"],
    ["Low",              "2+ self-limited OR 1 stable chronic", "Limited (labs, imaging ordered)","Low risk (OTC drugs, minor procedures)"],
    ["Moderate",         "1+ chronic illness w/ exacerbation;\nor 1 new undiagnosed problem", "Moderate (review external notes, order tests, independent interpretation)", "Moderate (Rx drugs, minor surgery with risk factors)"],
    ["High",             "1+ chronic illness w/ severe exacerbation; or new problem threatening life/function", "Extensive (independent historian, discussion with other provider)", "High (drug therapy requiring monitoring, elective major surgery, hospitalization)"],
  ], [1.6, 2.3, 2.8, 2.5], 0.95);

  s.addText("Must meet or exceed 2 of 3 MDM elements to select that level", {
    x: 0.25, y: 5.0, w: 9.5, h: 0.45,
    fontSize: 12, bold: true, color: C.teal, fontFace: "Calibri",
    align: "center", valign: "middle", margin: 0,
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 13 – CPT MODIFIERS
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("CPT: Common Modifiers", C.navy);
  addTable(s, [
    ["Modifier", "Meaning",                                                              "Example Use"],
    ["-22",      "Increased procedural services",                                        "Surgery took substantially more time/effort"],
    ["-24",      "Unrelated E/M during postoperative period",                            "Separate problem during global period"],
    ["-25",      "Significant, separately identifiable E/M same day as procedure",       "Office visit + minor procedure same day"],
    ["-26",      "Professional component only",                                          "Radiologist reads film (no equipment ownership)"],
    ["-51",      "Multiple procedures",                                                  "2nd+ procedures, same operative session"],
    ["-57",      "Decision for surgery (initial decision)",                              "E/M visit where surgery was decided"],
    ["-59",      "Distinct procedural service",                                          "Bypasses NCCI edit – different session/site"],
    ["-TC",      "Technical component only",                                             "Facility owns equipment (no professional reading)"],
    ["-RT / -LT","Right / Left side",                                                    "Bilateral structures"],
    ["-50",      "Bilateral procedure",                                                  "Same procedure performed on both sides"],
  ], [1.0, 4.5, 3.7], 0.95);
}

// ════════════════════════════════════════════════════════════════
// SLIDE 14 – CPT SURGERY GLOBAL PERIOD
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("CPT: Surgical Global Period", C.navy);
  addTwoCol(s,
    "Global Period Rules",
    [
      "0-day global: minor procedures (same-day follow-up only)",
      "10-day global: minor surgeries (e.g., excision of skin lesion)",
      "90-day global: major surgeries (includes pre-op 1 day before + 90 post-op days)",
      "Included in global fee: pre-op visit (1 day before), intra-op services, routine post-op visits",
      "NOT included: unrelated E/M visits, treatment of complications, visits for new problems",
      "Use modifier -24 for unrelated E/M in global period",
      "Use modifier -79 for unrelated procedure in global period",
    ],
    "NCCI Edits (National Correct Coding Initiative)",
    [
      "CMS edits that prevent improper unbundling of codes",
      "Column 1 / Column 2: Column 2 is bundled into Column 1 – cannot bill both",
      "Mutually Exclusive Edits: codes that cannot anatomically/clinically be performed together",
      "Override with modifier -59 (or X{ESPU} modifiers) when services are truly separate",
      "Always check NCCI before submitting paired procedure codes",
      "Unbundling = billing separately for components of a procedure that should be one code = fraud risk",
    ],
    C.teal, C.navy
  );
}

// ════════════════════════════════════════════════════════════════
// SLIDE 15 – SECTION HEADER: CODING WORKFLOW
// ════════════════════════════════════════════════════════════════
sectionHeader("SECTION 3\nCoding Workflow & Tips", C.teal);

// ════════════════════════════════════════════════════════════════
// SLIDE 16 – STEP-BY-STEP CODING WORKFLOW
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("Step-by-Step Coding Workflow", C.teal);

  const steps = [
    ["1", "Read the entire health record", "Never code from a diagnosis list alone — read notes, operative reports, lab results"],
    ["2", "Identify the principal/first-listed diagnosis", "Inpatient: condition after study; Outpatient: reason for encounter"],
    ["3", "Look up in Alphabetic Index (ICD-10) / Index (CPT)", "Never code directly from the index — it is a starting point only"],
    ["4", "Verify in the Tabular List (ICD-10) or code descriptor (CPT)", "Read all notes, includes/excludes, instructional notes"],
    ["5", "Apply sequencing rules", "Code first / Use Additional Code / Code Also instructions"],
    ["6", "Add modifiers if needed (CPT)", "Modifier changes meaning — use only when clinical documentation supports it"],
    ["7", "Link diagnosis to procedure", "Each CPT code must have a supporting ICD-10 code that justifies medical necessity"],
  ];

  steps.forEach(([num, title, desc], i) => {
    const y = 0.98 + i * 0.62;
    s.addShape(pres.ShapeType.rect, { x: 0.25, y, w: 0.42, h: 0.42, fill: { color: C.amber } });
    s.addText(num, { x: 0.25, y, w: 0.42, h: 0.42, fontSize: 14, bold: true, color: C.navy, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
    s.addText(title + "  –  " + desc, { x: 0.75, y: y + 0.02, w: 8.9, h: 0.38, fontSize: 12, color: C.gray, fontFace: "Calibri", valign: "top", margin: 0 });
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 17 – TOP CODING ERRORS TO AVOID
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("Top Coding Errors to Avoid", C.teal);
  addTwoCol(s,
    "ICD-10 Errors",
    [
      "Coding from the Alphabetic Index without verifying in Tabular List",
      "Using 'unspecified' when documentation supports a specific code",
      "Wrong sequencing (principal dx listed second)",
      "Coding signs/symptoms when a definitive diagnosis is documented (outpatient)",
      "Coding uncertain diagnoses in outpatient settings",
      "Omitting required 7th character or placeholder X",
      "Not reading Excludes1/Excludes2 notes before coding",
    ],
    "CPT Errors",
    [
      "Upcoding: using a higher-level code than documentation supports",
      "Downcoding: under-coding to avoid audit — also non-compliant",
      "Unbundling: billing component codes when a comprehensive code exists",
      "Missing modifiers on bilateral or multiple procedures",
      "Billing E/M during global period without modifier",
      "Using outdated CPT codebook (codes change annually)",
      "Linking to a non-supporting diagnosis (medical necessity failure)",
    ],
    C.red, C.navy
  );
}

// ════════════════════════════════════════════════════════════════
// SLIDE 18 – HCPCS LEVEL II OVERVIEW
// ════════════════════════════════════════════════════════════════
{
  const s = contentSlide("HCPCS Level II: Quick Reference", C.teal);
  addBullets(s, [
    "HCPCS (Healthcare Common Procedure Coding System) Level II covers supplies, DME, drugs, ambulance, and non-physician services not in CPT",
    "Format: 1 letter + 4 digits  (e.g., A4206, J0696, G0283)",
    "A-codes: Medical/surgical supplies, ambulance (A0000–A9999)",
    "B-codes: Enteral/parenteral therapy",
    "E-codes: Durable Medical Equipment (DME) – wheelchairs, crutches, etc.",
    "G-codes: CMS-defined professional services (preventive care, telehealth)",
    "J-codes: Drugs administered by non-oral methods (injections, infusions) – e.g., J0696 = Ceftriaxone",
    "L-codes: Orthotics and prosthetics",
    "Q-codes: Temporary codes assigned by CMS",
    "Used primarily for Medicare and Medicaid billing; some commercial payers require them too",
  ], { fontSize: 13.5 });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 19 – QUICK REFERENCE CHEAT CARD
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.navy } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.7, fill: { color: C.amber } });
  s.addText("QUICK REFERENCE CHEAT CARD", {
    x: 0, y: 0, w: 10, h: 0.7,
    fontSize: 18, bold: true, color: C.navy, fontFace: "Calibri",
    align: "center", valign: "middle", charSpacing: 3, margin: 0,
  });

  const boxes = [
    { x: 0.2, y: 0.8, w: 3.0, h: 4.65, color: C.slate, title: "ICD-10-CM", items: [
      "3–7 alphanumeric characters",
      "Letter + 2 digits = category",
      "Decimal after 3rd character",
      "Code to highest specificity",
      "NEC = specific, no code",
      "NOS = unspecified",
      "Excludes1 = never together",
      "Excludes2 = may use both",
      "7th char: A=initial D=subseq S=sequela",
      "Outpt: no uncertain dx",
      "Inpt: uncertain dx ok",
    ]},
    { x: 3.45, y: 0.8, w: 3.0, h: 4.65, color: C.slate, title: "CPT Codes", items: [
      "5-digit numeric codes",
      "99xxx = E/M",
      "10xxx–69xxx = Surgery",
      "70xxx–79xxx = Radiology",
      "80xxx–89xxx = Path/Lab",
      "90xxx–99xxx = Medicine",
      "E/M: MDM or Time method",
      "2/3 MDM elements needed",
      "Global 0/10/90 days",
      "Modifier -25: E/M + procedure",
      "Modifier -59: distinct service",
    ]},
    { x: 6.7, y: 0.8, w: 3.1, h: 4.65, color: C.slate, title: "Key Rules", items: [
      "Always verify Index → Tabular",
      "Documentation drives codes",
      "Medical necessity: DX supports CPT",
      "No code = no documentation",
      "Link every CPT to ICD-10",
      "Specificity > unspecified",
      "NCCI edits prevent unbundling",
      "Global period: watch modifiers",
      "POA indicators for inpatient",
      "Annual updates: Jan 1 each year",
      "CPC exam uses AMA CPT + ICD-10",
    ]},
  ];

  boxes.forEach(box => {
    s.addShape(pres.ShapeType.rect, { x: box.x, y: box.y, w: box.w, h: box.h, fill: { color: box.color } });
    s.addShape(pres.ShapeType.rect, { x: box.x, y: box.y, w: box.w, h: 0.38, fill: { color: C.teal } });
    s.addText(box.title, { x: box.x, y: box.y, w: box.w, h: 0.38, fontSize: 13, bold: true, color: C.white, fontFace: "Calibri", align: "center", valign: "middle", margin: 0 });
    const rows = box.items.map((t, i) => ({ text: t, options: { bullet: { type: "bullet" }, breakLine: i < box.items.length - 1 } }));
    s.addText(rows, { x: box.x + 0.05, y: box.y + 0.42, w: box.w - 0.1, h: box.h - 0.45, fontSize: 11, color: "D0DCF0", fontFace: "Calibri", valign: "top", paraSpaceBefore: 2, paraSpaceAfter: 2 });
  });
}

// ════════════════════════════════════════════════════════════════
// SLIDE 20 – CLOSING / EXAM TIPS
// ════════════════════════════════════════════════════════════════
{
  const s = pres.addSlide();
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.slate } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.35, h: 5.625, fill: { color: C.amber } });
  s.addShape(pres.ShapeType.rect, { x: 0, y: 4.9, w: 10, h: 0.725, fill: { color: C.teal } });

  s.addText("Exam & Practice Tips", {
    x: 0.7, y: 0.4, w: 9, h: 0.7,
    fontSize: 26, bold: true, color: C.amber, fontFace: "Calibri", align: "left", valign: "middle", margin: 0,
  });

  const tips = [
    "Use a CURRENT codebook — ICD-10 and CPT update every January 1. Expired codes = claim denials.",
    "Alphabetic Index is your starting point only. ALWAYS verify the code in the Tabular List / full descriptor.",
    "For CPC exam: bring tabbed codebooks. Time management is the biggest challenge — ~5.5 hours for 100 questions.",
    "Practice with real operative notes and office visit documentation, not just memorizing code numbers.",
    "Understand conventions first: Excludes1 vs. Excludes2, Code First, Use Additional Code — they appear on every exam.",
    "For E/M: Master the 2021 MDM table. Know the 3 elements (problems, data, risk) and the 2-of-3 rule cold.",
    "Flag denial patterns: CO-4 (procedure inconsistent with modifier), CO-11 (dx inconsistent with procedure), PR-96 (not covered).",
  ];

  const tRows = tips.map((t, i) => ({ text: t, options: { bullet: { type: "bullet" }, breakLine: i < tips.length - 1 } }));
  s.addText(tRows, {
    x: 0.7, y: 1.18, w: 9.05, h: 3.55,
    fontSize: 13.5, color: "D0DCF0", fontFace: "Calibri",
    valign: "top", paraSpaceBefore: 5, paraSpaceAfter: 5,
  });

  s.addText("Good luck — and always code what is documented!", {
    x: 0, y: 4.9, w: 10, h: 0.725,
    fontSize: 14, bold: true, color: C.white, fontFace: "Calibri",
    align: "center", valign: "middle", margin: 0,
  });
}

// ─── WRITE FILE ──────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/medical-coding-guide/ICD10_CPT_Study_Guide.pptx" })
  .then(() => console.log("Done: ICD10_CPT_Study_Guide.pptx"))
  .catch(e => { console.error(e); process.exit(1); });
Running Command

cd /home/daytona/workspace/medical-coding-guide && node build.js

Running Command

ls -lh /home/daytona/workspace/medical-coding-guide/ICD10_CPT_Study_Guide.pptx

Your study guide is ready! Download it here:

ICD10 CPT Study Guide

Presentation · PPTX


Here's what's inside the 20-slide deck (navy/teal/amber color scheme):
SlideContent
1Cover slide
2What is Medical Coding?
ICD-10 Section
3Section header
4Code structure breakdown (J18.9 visual example + 4 structural components)
5Chapter overview table (A00–Z99 key chapters)
6Official Guidelines - Inpatient vs. Outpatient rules
7Conventions reference table (NEC, NOS, Excludes1/2, Code First, placeholder X)
8Common codes quick reference (I10, E11.9, Z-codes, fracture 7th chars, etc.)
CPT Section
9Section header
10CPT overview + all 6 code ranges
11E/M code table (99202–99215 + inpatient codes) with MDM levels and time
12Full MDM table (Straightforward → High) with 2-of-3 rule
13Common modifiers (-22, -25, -51, -57, -59, -TC, -50, etc.)
14Surgical global periods + NCCI edits / unbundling rules
Workflow & Tips
15Section header
167-step coding workflow (numbered visual steps)
17Top coding errors to avoid - ICD-10 vs. CPT
18HCPCS Level II overview (A/E/G/J/L/Q codes)
19Cheat card slide - all 3 systems in one visual panel
20Exam & practice tips (CPC exam, denial codes, study advice)
This is a shared conversation. Sign in to Orris to start your own chat.