CHART HUNTER 280: The Medical Coder
by ElectricGalaxy27435 lines42.4 KB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>CHART HUNTER 280: The Medical Coder</title>
<style>
:root{
--blue:#0f62d6;
--blue2:#0b4fb0;
--blueLight:#e7f0ff;
--blueMid:#c9ddff;
--bg:#f6f9ff;
--card:#ffffff;
--ink:#12233f;
--muted:#6b7a94;
--ok:#0e9d62;
--bad:#e13b3b;
--line:#d9e4f8;
--yellow:#fff6cc;
}
*{box-sizing:border-box; -webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;height:100dvh;overflow:hidden;background:var(--bg);font-family: ui-sans-system, -apple-system, Segoe UI, Roboto, Helvetica, Arial; color:var(--ink)}
button,input{font:inherit}
#app{height:100dvh;display:flex;flex-direction:column;overflow:hidden}
.top{height:56px;background:var(--card);border-bottom:1.5px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 12px;gap:8px;flex-shrink:0}
.top-left{display:flex;align-items:center;gap:10px;min-width:0}
.badge{width:34px;height:34px;border-radius:10px;background:var(--blue);color:#fff;display:grid;place-items:center;font-weight:800;font-size:14px}
.top-name{font-weight:800;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}
.top-stats{display:flex;gap:6px;align-items:center}
.pill{background:var(--blueLight);border:1px solid var(--blueMid);border-radius:999px;padding:5px 10px;font-weight:700;font-size:12px;letter-spacing:.02em}
.pill.pts{background:#12233f;color:#fff;border-color:#12233f}
.main{flex:1;display:flex;flex-direction:column;overflow:hidden;padding:10px;gap:10px;max-width:900px;width:100%;margin:0 auto}
.card{background:var(--card);border:1.5px solid var(--line);border-radius:18px;box-shadow:0 8px 20px rgba(15,98,214,.08);overflow:hidden}
.hud{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;background:linear-gradient(180deg,#fff,#f3f8ff);border-bottom:1px solid var(--line);gap:8px}
.progress{flex:1;height:10px;background:var(--blueLight);border-radius:999px;overflow:hidden;margin:0 10px}
.progress>div{height:100%;background:var(--blue);width:0%;transition:width .3s}
.level-title{font-weight:900;letter-spacing:.04em;font-size:12px;color:var(--blue2);text-transform:uppercase}
.question-wrap{padding:12px 14px;display:flex;flex-direction:column;gap:10px;overflow:auto;max-height:100%}
.q-head{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}
.patient{font-weight:900;background:#12233f;color:#fff;padding:4px 9px;border-radius:8px;font-size:12px;letter-spacing:.03em}
.hint{font-size:11.5px;color:var(--blue2);background:var(--blueLight);border:1px dashed var(--blueMid);padding:6px 8px;border-radius:10px;line-height:1.25}
.scenario{font-size:14.5px;line-height:1.35;font-weight:600}
.action-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}
.abtn{border:1.5px solid var(--line);background:#fff;border-radius:14px;padding:10px 6px;display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer;transition:.15s;font-weight:800;font-size:12px}
.abtn:active{transform:scale(.98)}
.abtn.active{border-color:var(--blue);background:var(--blueLight);color:var(--blue2)}
.abtn span.ico{font-size:20px}
.clue-panel{min-height:92px;background:#fbfdff;border:1.5px solid var(--line);border-radius:14px;padding:10px 12px;font-size:13px;line-height:1.4;position:relative}
.clue-panel .label{font-size:10px;letter-spacing:.12em;font-weight:900;color:var(--muted);text-transform:uppercase;margin-bottom:4px}
.mark{background:var(--yellow);padding:0 2px;border-radius:3px;font-weight:800}
.search-row{display:flex;gap:8px;align-items:center}
.search-row input{flex:1;border:1.5px solid var(--line);border-radius:12px;padding:10px 12px;font-size:13px;outline:none}
.search-row input:focus{border-color:var(--blue)}
.kwcount{font-size:11px;color:var(--muted);font-weight:700;white-space:nowrap}
.options{display:flex;flex-direction:column;gap:8px;margin-top:2px}
.opt{border:1.5px solid var(--line);background:#fff;border-radius:14px;padding:11px 12px;text-align:left;cursor:pointer;font-size:13.5px;line-height:1.3;display:flex;gap:10px;align-items:flex-start}
.opt:hover{border-color:var(--blueMid)}
.opt.sel{border-color:var(--blue);background:var(--blueLight)}
.opt.correct{border-color:var(--ok);background:#e6f9ee}
.opt.wrong{border-color:var(--bad);background:#ffeaea}
.opt .dot{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--line);display:grid;place-items:center;flex-shrink:0;font-size:12px;font-weight:900;background:#fff}
.opt.sel .dot{background:var(--blue);color:#fff;border-color:var(--blue)}
.btn-primary{background:var(--blue);color:#fff;border:0;border-radius:14px;padding:13px 16px;font-weight:900;font-size:14px;letter-spacing:.02em;cursor:pointer;width:100%;box-shadow:0 6px 14px rgba(15,98,214,.25)}
.btn-primary:disabled{opacity:.5}
.btn-ghost{background:#fff;border:1.5px solid var(--line);border-radius:14px;padding:10px 14px;font-weight:800;font-size:12px;cursor:pointer}
.explain{background:#fffbe6;border:1px solid #f3d86a;border-radius:12px;padding:10px 12px;font-size:12.5px;line-height:1.4;margin-top:6px}
.kw-grid{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.kw{font-size:10px;padding:4px 7px;border-radius:999px;border:1px solid var(--line);background:#fff;color:var(--muted);font-weight:700}
.kw.found{background:var(--blue);color:#fff;border-color:var(--blue)}
.start-screen{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:16px;gap:14px;overflow:auto}
.logo{font-weight:1000;letter-spacing:-.02em;font-size:28px;line-height:.95;text-align:center}
.logo span{display:block}
.logo .sub{font-size:11px;letter-spacing:.22em;color:var(--blue2);margin-top:6px;font-weight:800}
.input-name{width:100%;max-width:360px;border:1.5px solid var(--line);border-radius:14px;padding:13px 14px;font-size:15px}
.role-grid{display:grid;grid-template-columns:1fr;gap:10px;width:100%;max-width:360px}
.role-btn{border:1.5px solid var(--line);background:#fff;border-radius:16px;padding:12px 14px;text-align:left;cursor:pointer}
.role-btn b{display:block;font-size:13px}
.role-btn small{display:block;color:var(--muted);font-size:11.5px;line-height:1.25;margin-top:2px}
.role-btn.active{border-color:var(--blue);background:var(--blueLight);box-shadow:0 0 0 3px rgba(15,98,214,.12)}
.win-screen{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center;gap:12px}
.big{font-size:44px;font-weight:1000}
.foot{font-size:10px;color:var(--muted);text-align:center;padding:4px}
@media(min-width:700px){
.role-grid{grid-template-columns:1fr 1fr 1fr;max-width:700px}
.main{padding:14px}
}
</style>
</head>
<body>
<div id="app">
<div id="startView" class="start-screen">
<div class="logo">
<span>CHART HUNTER</span>
<span style="color:var(--blue)">280</span>
<span class="sub">THE MEDICAL CODER • FILE COMPUTER CHART PROTOCOL</span>
</div>
<div class="card" style="width:100%;max-width:420px;padding:14px">
<div style="font-weight:800;font-size:12px;letter-spacing:.12em;color:var(--muted);margin-bottom:8px">CODER BADGE</div>
<input id="nameInput" class="input-name" placeholder="Enter coder name (e.g., Alex Rivera)" maxlength="20" autocomplete="off">
<div style="height:12px"></div>
<div style="font-weight:800;font-size:12px;letter-spacing:.08em;margin-bottom:8px">SELECT ROLE</div>
<div class="role-grid">
<div class="role-btn" data-role="doctor"><b>🩺 Dr. Steamer</b><small>Diagnoses, treats, orders tests, op notes. Writes doctor's notes, surgical/operative reports.</small></div>
<div class="role-btn" data-role="nurse"><b>💉 Nurse Vyonne</b><small>Vitals, meds, nursing notes. Documents nurse's notes, medication records, lab results flow.</small></div>
<div class="role-btn active" data-role="coder"><b>📚 Custom Coder</b><small>Reads all. Assigns codes using code books/manuals, Encoder, AAPC Codify, CAC. Verifies claim.</small></div>
</div>
<div style="height:14px"></div>
<button id="startBtn" class="btn-primary">ENTER CHART PROTOCOL →</button>
<div style="height:8px"></div>
<div class="foot">280-target structure • 32 demo cases • Need 50 PTS to unlock next level • +10 / -2</div>
</div>
</div>
<div id="gameView" style="display:none;flex:1;flex-direction:column;overflow:hidden">
<div class="top">
<div class="top-left">
<div class="badge">CH</div>
<div class="top-name" id="topName">Coder</div>
<div class="pill" id="topRole">Custom Coder</div>
</div>
<div class="top-stats">
<div class="pill" id="topLvl">LVL 1</div>
<div class="pill pts" id="topPts">0 PTS</div>
</div>
</div>
<div class="main">
<div class="card" style="display:flex;flex-direction:column;overflow:hidden;flex:1">
<div class="hud">
<div class="level-title" id="levelTitle">LEVEL 1 — WHO DOES WHAT?</div>
<div class="progress"><div id="prog"></div></div>
<div style="font-size:11px;font-weight:800;color:var(--muted)" id="qCount">1/8</div>
</div>
<div class="question-wrap" id="qWrap">
<div class="q-head">
<div class="patient" id="patientId">PATIENT #280-01</div>
<div class="hint" id="whereHint">Find it in: Doctor's notes in EHR + ICD-10-CM book</div>
</div>
<div class="scenario" id="scenario">Scenario...</div>
<div class="search-row">
<input id="kwSearch" placeholder="Keyword Hunt: type e.g. Encoder, EHR, chart..." autocomplete="off">
<div class="kwcount" id="kwCount">0/21 found</div>
</div>
<div class="action-row">
<button class="abtn active" data-action="file"><span class="ico">📁</span>Open FILE</button>
<button class="abtn" data-action="computer"><span class="ico">💻</span>Use COMPUTER</button>
<button class="abtn" data-action="chart"><span class="ico">📋</span>Check CHART</button>
</div>
<div class="clue-panel" id="cluePanel">
<div class="label" id="clueLabel">PATIENT FILE / MEDICAL RECORD</div>
<div id="clueText">Click actions to reveal. No walking room to room — vital info is here.</div>
<div class="kw-grid" id="kwGrid"></div>
</div>
<div class="options" id="options"></div>
<div id="explainBox"></div>
<button id="nextBtn" class="btn-primary" style="display:none">NEXT CASE →</button>
<div style="display:flex;gap:8px;margin-top:4px">
<button id="skipBtn" class="btn-ghost">Skip -2</button>
<button id="resetBtn" class="btn-ghost">Reset Level</button>
</div>
</div>
</div>
<div class="foot">FILE = medical record / patient file • COMPUTER = EHR / coding software / Encoder / AAPC Codify / CAC / claim/billing system / EHR coding module • CHART = doctor's notes, nurse's notes, lab results, radiology reports, surgical/operative reports, discharge summaries, medication records</div>
</div>
</div>
<div id="winView" class="win-screen" style="display:none">
<div class="big">🏆 CHART MASTER</div>
<div style="font-weight:800;letter-spacing:.1em;color:var(--blue2)">280 PROTOCOL COMPLETE</div>
<div class="card" style="padding:16px;max-width:420px;width:100%">
<div style="font-size:13px;line-height:1.4">Final Score</div>
<div style="font-size:36px;font-weight:1000" id="finalPts">0</div>
<div style="font-size:12px;color:var(--muted);margin-top:6px" id="finalDetail">32 demo cases cleared • Structure ready for 280</div>
<div style="height:12px"></div>
<div class="kw-grid" id="finalKw"></div>
<div style="height:12px"></div>
<button id="playAgain" class="btn-primary">REPLAY PROTOCOL</button>
</div>
</div>
</div>
<script>
const KEYWORDS = ["ICD-10-CM","CPT","HCPCS","EHR","medical record","patient file","chart","code books/manuals","coding software","EHR coding module","Encoder","AAPC Codify","CAC","claim/billing system","doctor's notes","nurse's notes","lab results","radiology reports","surgical/operative reports","discharge summaries","medication records"];
const QUESTIONS = [
{id:"280-01",level:1,patient:"PATIENT #280-01",scenario:"65yo male, Type 2 diabetes. Who documents the diagnosis 'Type 2 diabetes mellitus with hyperglycemia' so coder can code it?",where:"Find it in: Doctor's notes in EHR + ICD-10-CM book",file:"medical record front sheet: Patient file #280-01, Admit: observation, Insurance verified.",computer:"EHR coding module shows Encoder suggestion pending doctor documentation.",chart:"doctor's notes: 'Assessment: E11.65 Type 2 diabetes with hyperglycemia. Will adjust insulin.' Note signed.",q:"Who is responsible for documenting the diagnosis?",options:["Dr. Steamer - diagnoses, treats, orders tests","Nurse Vyonne - vitals, meds, nursing notes","Custom Coder - reads all, assigns codes","CAC software alone"],correct:0,explain:"Doctor does what: diagnoses, treats, orders tests, writes operative notes. Coder cannot invent diagnosis; must have doctor's notes. Code: ICD-10-CM is why."},
{id:"280-02",level:1,patient:"PATIENT #280-02",scenario:"Post-op day 1, vital signs 138/88, 98.6F, HR 84. Who records this?",where:"Find it in: Nurse's notes + EHR",file:"patient file vitals flow sheet empty until nurse entry.",computer:"EHR vital signs dashboard auto-populated from nursing entry.",chart:"nurse's notes: 08:00 vitals stable, pain 2/10. Patient resting. Medication records: acetaminophen given.",q:"Vital signs documentation belongs to?",options:["Doctor's notes only","Nurse's notes","AAPC Codify","Code books/manuals"],correct:1,explain:"Nurse Vyonne role: vitals, meds, nursing notes. Doctors use vitals but nurses document them."},
{id:"280-03",level:1,patient:"PATIENT #280-03",scenario:"Encounter: routine check. Need to assign E11.9. Who assigns final code?",where:"Find it in: Chart + Code books/manuals or Encoder",file:"medical record shows encounter form unsigned.",computer:"Encoder suggests E11.9 but needs verification. AAPC Codify shows same. CAC flagged uncertain.",chart:"doctor's notes: Type 2 diabetes without complication. No additional documentation.",q:"Who assigns ICD-10-CM code?",options:["Dr. Steamer assigns billing code directly","Nurse Vyonne assigns","Custom Coder reads all, assigns using coding software / code books/manuals","Claim/billing system auto-assigns"],correct:2,explain:"Custom Coder reads all and assigns codes. Tools like Encoder, AAPC Codify, CAC suggest but coder verifies."},
{id:"280-04",level:1,patient:"PATIENT #280-04",scenario:"Left knee arthroscopy with meniscus repair. Who writes operative detail?",where:"Find it in: Surgical/operative reports + EHR",file:"patient file: OR schedule confirms knee scope.",computer:"claim/billing system awaiting CPT from operative report.",chart:"surgical/operative reports: Dr. Steamer - 'Arthroscopic medial meniscus repair, left knee, operative time 45 min.' Detailed technique.",q:"Surgical/operative reports are authored by?",options:["Nurse","Medical coder","Dr. Steamer - op notes","Medication records"],correct:2,explain:"Doctor role includes surgical/operative reports. Coder then translates to CPT = what procedure was done."},
{id:"280-05",level:1,patient:"PATIENT #280-05",scenario:"Med admin: Lisinopril 10mg given. Where is this documented?",where:"Find it in: Medication records in chart",file:"medical record MAR: signature line.",computer:"EHR coding module not relevant for med admin, but EHR shows medication records.",chart:"medication records: 09:00 Lisinopril 10mg PO given, nurse initials. nurse's notes co-sign.",q:"Medication records are maintained by?",options:["Dr. Steamer","Nurse Vyonne - meds, nursing notes","Encoder","ICD-10-CM book"],correct:1,explain:"Nurse documents meds, part of medication records. Coder may review for context but not primary author."},
{id:"280-06",level:1,patient:"PATIENT #280-06",scenario:"Patient presents with chest pain, doctor orders troponin and CT chest. Who orders tests?",where:"Find it in: Doctor's notes + Lab results",file:"patient file order sheet.",computer:"EHR order entry pending.",chart:"doctor's notes: 'Orders: lab results troponin x3, radiology reports CT chest angiography to rule out PE.'",q:"Ordering tests is role of?",options:["Nurse Vyonne","Custom Coder","Dr. Steamer - orders tests","Patient file itself"],correct:2,explain:"Doctor orders tests, treats, diagnoses. Nurse executes and documents results."},
{id:"280-07",level:1,patient:"PATIENT #280-07",scenario:"Coder sees 'possible pneumonia' in ED. Can they code it as inpatient?",where:"Find it in: Discharge summaries + Compliance rules",file:"medical record uncertain diagnosis note.",computer:"CAC suggests J18.9 but flags uncertain.",chart:"doctor's notes: 'Possible pneumonia, awaiting lab results.' discharge summaries: still uncertain.",q:"Uncertain diagnosis rule for inpatient?",options:["Never code uncertain","Code as if established if documented as possible/probable at discharge for inpatient","Always use EHR coding module to auto-code","Use HCPCS instead"],correct:1,explain:"Workflow Boss Verify: inpatient rule - uncertain diagnoses documented as possible/probable at discharge can be coded as if established. Outpatient needs definitive."},
{id:"280-08",level:1,patient:"PATIENT #280-08",scenario:"Who ensures claim accuracy and periodic audits per OIG?",where:"Find it in: Compliance + Claim/billing system",file:"medical record compliance checklist.",computer:"claim/billing system audit report + coding software compliance flags.",chart:"chart review shows coding verified against doctor's notes.",q:"Verification and audit responsibility lies with?",options:["Doctor only","Nurse only","Coder + compliance - CAC suggests but coder verifies, OIG periodic audits","Radiology reports"],correct:2,explain:"Coder verifies, compliance ensures claim accuracy, periodic audits per OIG. CAC suggests but coder verifies."},
{id:"280-09",level:2,patient:"PATIENT #280-09",scenario:"You need E11.65. Where do you look up the official code?",where:"Find it in: ICD-10-CM code books/manuals + Encoder",file:"patient file shows diagnosis list.",computer:"Encoder search: Type 2 diabetes with hyperglycemia -> E11.65. AAPC Codify confirms FY2026 valid.",chart:"doctor's notes provide diagnosis wording.",q:"Official source for ICD-10-CM?",options:["CPT book","ICD-10-CM code books/manuals and coding software like Encoder","Medication records","Nurse's notes alone"],correct:1,explain:"Diagnoses -> ICD-10-CM = why patient encountered. Use code books/manuals or Encoder."},
{id:"280-10",level:2,patient:"PATIENT #280-10",scenario:"Arthroscopic meniscus repair - need CPT 29882. Where to find procedure code?",where:"Find it in: CPT + AAPC Codify + chart",file:"medical record procedure log.",computer:"coding software AAPC Codify: 29882 arthroscopy knee meniscus repair. EHR coding module maps.",chart:"surgical/operative reports detail procedure.",q:"Procedure coding source is?",options:["ICD-10-CM","CPT / HCPCS via coding software","Lab results","Discharge summaries only"],correct:1,explain:"Procedures -> CPT/HCPCS = what was done. Use AAPC Codify or Encoder."},
{id:"280-11",level:2,patient:"PATIENT #280-11",scenario:"Supply: crutches issued. Which code set covers supply?",where:"Find it in: HCPCS + Claim/billing system",file:"patient file DME issue form.",computer:"claim/billing system HCPCS lookup: E0114 crutches. Encoder shows Level II.",chart:"doctor's notes: DME ordered, nurse's notes: crutches fitted.",q:"Crutches coded in?",options:["ICD-10-CM","CPT only","HCPCS Level II","Radiology reports"],correct:2,explain:"HCPCS covers supplies, DME, drugs. CPT is procedures, ICD-10-CM is diagnoses."},
{id:"280-12",level:2,patient:"PATIENT #280-12",scenario:"Where is complete longitudinal history of patient encounters?",where:"Find it in: EHR / medical record / patient file / chart",file:"patient file is the physical folder but now electronic.",computer:"EHR is the electronic system containing medical record.",chart:"chart is general term for all documentation.",q:"Longitudinal record lives in?",options:["Only paper chart","EHR which holds medical record / patient file / chart","Encoder only","CAC only"],correct:1,explain:"EHR = electronic health record, contains medical record, patient file, chart synonyms."},
{id:"280-13",level:2,patient:"PATIENT #280-13",scenario:"You need rapid code suggestion while reading note. What tool?",where:"Find it in: EHR coding module / Encoder / CAC",file:"medical record open.",computer:"EHR coding module highlights terms, CAC auto-suggests codes, Encoder allows search.",chart:"doctor's notes visible in EHR pane.",q:"Real-time coding aid in EHR is?",options:["Code books/manuals only","EHR coding module with CAC and Encoder integration","Lab results","Discharge summaries"],correct:1,explain:"Modern workflow: EHR coding module, CAC (computer-assisted coding) suggests, but coder verifies."},
{id:"280-14",level:2,patient:"PATIENT #280-14",scenario:"Where would you find potassium 5.9 critical value?",where:"Find it in: Lab results in chart",file:"patient file lab tab.",computer:"EHR lab results interface.",chart:"lab results: K+ 5.9 H, critical. Radiology reports negative.",q:"Critical lab value located in?",options:["Doctor's notes only","Lab results","Surgical/operative reports","AAPC Codify"],correct:1,explain:"Lab results are in chart section, part of medical record."},
{id:"280-15",level:2,patient:"PATIENT #280-15",scenario:"Post-discharge summary of hospital course needed for coding history of present illness and final diagnoses.",where:"Find it in: Discharge summaries + chart",file:"medical record discharge tab.",computer:"EHR discharge summaries module.",chart:"discharge summaries: 3-day stay, final diagnoses listed, surgical/operative reports attached.",q:"Best for final diagnoses overview?",options:["Nurse's notes","Discharge summaries","Medication records only","Encoder"],correct:1,explain:"Discharge summaries summarize stay, key for final codes."},
{id:"280-16",level:2,patient:"PATIENT #280-16",scenario:"Final coded encounter goes where for payment?",where:"Find it in: Claim/billing system",file:"patient file billing sheet.",computer:"claim/billing system receives codes from coding software, sends to payer. CAC output flows here.",chart:"chart closed for coding.",q:"Codes translate to payment via?",options:["EHR coding module alone","Claim/billing system","Radiology reports","Nurse's notes"],correct:1,explain:"Claim/billing system is end of workflow, where coding software outputs."},
{id:"280-17",level:3,patient:"PATIENT #280-17",scenario:"FY2026 update effective Oct 1 2025: Patient diabetes documented as 'in remission after bariatric surgery'. New code?",where:"Find it in: ICD-10-CM FY2026 + Doctor's notes",file:"medical record FY2026 addendum.",computer:"Encoder FY2026 update: E11.A Type 2 diabetes in remission. AAPC Codify FY2026 notes.",chart:"doctor's notes: 'T2DM in remission, A1c 5.6 without meds.'",q:"Correct FY2026 ICD-10-CM?",options:["E11.9","E11.A - Type 2 diabetes mellitus in remission (new Oct 1 2025)","E11.65","Use CPT"],correct:1,explain:"FY 2026 updates: E11.A diabetes in remission effective Oct 1 2025. Translation: diagnoses -> ICD-10-CM = why."},
{id:"280-18",level:3,patient:"PATIENT #280-18",scenario:"Patient with calf ulcer with muscle necrosis. New FY2026 detail?",where:"Find it in: ICD-10-CM book L97.311 + surgical/operative reports",file:"patient file wound care.",computer:"EHR coding module: L97.311 ulcer with muscle necrosis update.",chart:"doctor's notes: 'Left calf ulcer with muscle necrosis, debridement performed.' surgical/operative reports: debridement.",q:"FY2026 ulcer code capturing necrosis?",options:["L97.90","L97.311 chronic ulcer calf with muscle necrosis - new specificity","CPT 11042","E11.A"],correct:1,explain:"FY2026: L97.311 ulcer muscle necrosis adds specificity. CPT would be what procedure (debridement)."},
{id:"280-19",level:3,patient:"PATIENT #280-19",scenario:"Coronary angioplasty with 2 drug-eluting stents in same artery LAD. PCI rule 2025-2026?",where:"Find it in: CPT + Encoder + chart",file:"medical record cath lab.",computer:"AAPC Codify: PCI 1 base code per artery, add-on stents. 288 new CPT codes include cardiology clarifications.",chart:"surgical/operative reports / radiology reports: 'PCI LAD with 2 DES.'",q:"PCI coding: 1 base per artery, how many base?",options:["2 bases for 2 stents same artery","1 base per artery + add-on for additional stents in same artery","Use HCPCS only","Use ICD-10-CM"],correct:1,explain:"PCI 1 base per artery rule: one base code per artery treated, additional stents add-on, not duplicate base."},
{id:"280-20",level:3,patient:"PATIENT #280-20",scenario:"2025-2026: 288 new CPT codes include digital health, RPM, AI. Patient on remote patient monitoring with AI analysis.",where:"Find it in: CPT + Coding software",file:"patient file RPM enrollment.",computer:"coding software: new CPT 99091 RPM, AI-augmented analysis codes. Encoder shows digital health section.",chart:"doctor's notes: RPM data reviewed 30 min, AI triage noted. nurse's notes: device education.",q:"RPM + AI analysis belongs to?",options:["ICD-10-CM","New CPT codes for digital health RPM AI (288 new)","HCPCS only","Discharge summaries"],correct:1,explain:"288 new CPT codes digital health RPM AI. Procedures -> CPT = what."},
{id:"280-21",level:3,patient:"PATIENT #280-21",scenario:"Thoracic aortic aneurysm repair, proximal extent Zone 2. New 2025-2026 descriptor?",where:"Find it in: CPT thoracic aorta proximal extent + surgical/operative reports",file:"medical record vascular.",computer:"AAPC Codify thoracic aorta codes now include proximal extent documentation.",chart:"surgical/operative reports: 'TEVAR Zone 2 proximal extent.' radiology reports confirm aneurysm.",q:"Thoracic aorta repair requires?",options:["No zone needed","Document proximal extent (Zone) for CPT thoracic aorta codes","Use only ICD-10-CM","Use medication records"],correct:1,explain:"FY2026: thoracic aorta proximal extent (Zone) required for accurate CPT. Diagnosis ICD-10-CM why, CPT what."},
{id:"280-22",level:3,patient:"PATIENT #280-22",scenario:"Translate: Why patient here = chest pain R07.9, What done = EKG 93000. Which mapping?",where:"Find it in: ICD-10-CM + CPT + Chart",file:"patient file encounter.",computer:"Encoder mapping: why -> ICD-10-CM, what -> CPT/HCPCS. EHR coding module crosswalk.",chart:"doctor's notes chest pain, lab results troponin.",q:"Correct translation?",options:["Chest pain -> CPT, EKG -> ICD-10-CM","Chest pain -> ICD-10-CM (why), EKG -> CPT (what)","Both CPT","Both HCPCS"],correct:1,explain:"Core rule: Diagnoses -> ICD-10-CM = why, Procedures -> CPT/HCPCS = what."},
{id:"280-23",level:3,patient:"PATIENT #280-23",scenario:"Supply J-code for injection. Which code set?",where:"Find it in: HCPCS + Encoder",file:"patient file injection log.",computer:"HCPCS Level II J-code lookup in Encoder.",chart:"medication records: injection given, nurse's notes.",q:"Injection drug coded via?",options:["ICD-10-CM","CPT only","HCPCS Level II J codes","Radiology reports"],correct:2,explain:"HCPCS Level II for drugs, supplies. CPT for administration."},
{id:"280-24",level:3,patient:"PATIENT #280-24",scenario:"Patient with diabetes in remission still needs annual eye exam CPT 92250. Can you code remission and exam?",where:"Find it in: ICD-10-CM + CPT + Doctor's notes",file:"medical record annual.",computer:"claim/billing system: E11.A + CPT 92250 payable if medical necessity.",chart:"doctor's notes: diabetes in remission, screening fundus photo.",q:"Code both?",options:["No","Yes: E11.A why, CPT 92250 what, with medical record support","Only CPT","Only ICD"],correct:1,explain:"Use E11.A for history/reason, CPT for procedure. Need doctor's notes supporting."},
{id:"280-25",level:4,patient:"PATIENT #280-25",scenario:"Workflow step 1: Review. What do you read first?",where:"Find it in: Chart - doctor's notes, nurse's notes, lab results, radiology reports, surgical/operative reports, discharge summaries, medication records",file:"patient file thick.",computer:"EHR aggregates all chart sections.",chart:"doctor's notes, nurse's notes, lab results, radiology reports, surgical/operative reports, discharge summaries, medication records all present.",q:"Review means?",options:["Assign codes immediately","Read notes/labs/surgical reports fully before abstracting","Go to claim/billing system first","Use CAC only"],correct:1,explain:"Review: read notes/labs/surgical - first workflow step."},
{id:"280-26",level:4,patient:"PATIENT #280-26",scenario:"Step 2: Abstract. You see 'Laparoscopic cholecystectomy with cholangiography'. What to pull?",where:"Find it in: Surgical/operative reports + Abstract",file:"medical record op report.",computer:"EHR coding module abstract list.",chart:"surgical/operative reports detailed.",q:"Abstract billable concepts?",options:["Only cholecystectomy","Cholecystectomy + cholangiography - pull both billable concepts","Only medication records","Only ICD-10-CM"],correct:1,explain:"Abstract: pull billable concepts, both procedures are separately reportable if supported."},
{id:"280-27",level:4,patient:"PATIENT #280-27",scenario:"Step 3: Assign. Use code books/manuals or software?",where:"Find it in: Code books/manuals vs Encoder vs AAPC Codify",file:"patient file coding sheet.",computer:"Encoder search cholecystectomy laparoscopic 47562, cholangiography 47563 vs 47562+76000? AAPC Codify guidance.",chart:"surgical/operative reports details.",q:"Best assign method?",options:["Guess","Match concepts to code books/manuals or coding software like Encoder / AAPC Codify","Use nurse's notes only","Use lab results only"],correct:1,explain:"Assign: match abstracted concepts to code books/manuals or software. CAC suggests but coder verifies."},
{id:"280-28",level:4,patient:"PATIENT #280-28",scenario:"Step 4: Verify. CAC suggested E11.65 but documentation says 'diabetes controlled'. What to do?",where:"Find it in: Verify - compliance / claim accuracy",file:"medical record compliance.",computer:"CAC flag, Encoder shows E11.9 vs E11.65. claim/billing system will deny if mismatch.",chart:"doctor's notes: 'diabetes controlled, no hyperglycemia documented today.'",q:"Verify action?",options:["Accept CAC blindly","Query doctor, assign accurate ICD-10-CM - CAC suggests but coder verifies, periodic audits per OIG","Ignore","Code CPT instead"],correct:1,explain:"Verify: compliance/claim accuracy. CAC suggests but coder verifies. OIG expects periodic audits."},
{id:"280-29",level:4,patient:"PATIENT #280-29",scenario:"Final check: Ensure claim/billing system has correct CPT/HCPCS linkage to ICD-10-CM for medical necessity.",where:"Find it in: Claim/billing system + EHR",file:"patient file claim draft.",computer:"claim/billing system edit: diagnosis pointer check, EHR coding module final review.",chart:"chart complete.",q:"Final verification ensures?",options:["Only speed","Compliance + claim accuracy - correct linkage, medical necessity, prevents OIG issues","Only use Encoder","Only check medication records"],correct:1,explain:"Workflow Boss final: Review, Abstract, Assign, Verify ensures compliance, claim accuracy, audit readiness."},
{id:"280-30",level:4,patient:"PATIENT #280-30",scenario:"Audit scenario: OIG audit finds upcoding. What preventive measure?",where:"Find it in: Compliance / Verify",file:"medical record audit log.",computer:"coding software compliance module, claim/billing system audit trail, CAC audit.",chart:"chart shows original documentation vs coded.",q:"Prevent upcoding?",options:["Use CAC only","Periodic audits per OIG, coder verifies all CAC suggestions, document accurately","Code only from discharge summaries","Ignore doctor's notes"],correct:1,explain:"Periodic audits per OIG, CAC suggests but coder verifies, maintain compliance."},
{id:"280-31",level:4,patient:"PATIENT #280-31",scenario:"End-to-end: Patient with diabetes in remission E11.A, calf ulcer L97.311 with necrosis debrided, PCI LAD, RPM. Workflow order?",where:"Find it in: All sources - full chart",file:"patient file complete: medical record includes all.",computer:"EHR coding module, Encoder FY2026, AAPC Codify, CAC, claim/billing system.",chart:"doctor's notes, nurse's notes, lab results, radiology reports, surgical/operative reports, discharge summaries, medication records.",q:"Correct order?",options:["Assign->Review->Verify->Abstract","Review (read notes/labs/surgical) -> Abstract (pull billable) -> Assign (code books/manuals or software) -> Verify (compliance/claim)","Verify first","Use only computer"],correct:1,explain:"Workflow Boss: Review, Abstract, Assign, Verify - the golden path."},
{id:"280-32",level:4,patient:"PATIENT #280-32",scenario:"Final Boss: You have all 21 keywords found? Test comprehensive coding.",where:"Find it in: Full protocol - EHR, medical record, patient file, chart, code books/manuals, coding software, EHR coding module, Encoder, AAPC Codify, CAC, claim/billing system, doctor's notes, nurse's notes, lab results, radiology reports, surgical/operative reports, discharge summaries, medication records + ICD-10-CM, CPT, HCPCS",file:"medical record FINAL.",computer:"EHR coding module, Encoder, AAPC Codify, CAC, claim/billing system, coding software.",chart:"doctor's notes, nurse's notes, lab results, radiology reports, surgical/operative reports, discharge summaries, medication records.",q:"Ultimate tool philosophy?",options:["CAC replaces coder","Coder uses all: EHR + chart + code books/manuals + Encoder/AAPC Codify + verifies CAC for claim/billing compliance","Only doctor's notes","Only CPT book"],correct:1,explain:"Boss cleared: Best coder reads all chart sources, uses code books/manuals and coding software, CAC suggests but coder verifies for claim/billing system accuracy."}
];
let state = { name:"", role:"coder", roleLabel:"Custom Coder", level:1, lvlIndex:0, points:0, totalPoints:0, currentQ:0, selected:null, answered:false, revealed:{file:false, computer:false, chart:false}, foundKW:new Set(), searchTerm:"" };
const els = {};
function $(id){return document.getElementById(id)}
function init(){
els.startView=$("startView"); els.gameView=$("gameView"); els.winView=$("winView");
els.nameInput=$("nameInput"); els.topName=$("topName"); els.topRole=$("topRole"); els.topLvl=$("topLvl"); els.topPts=$("topPts");
els.levelTitle=$("levelTitle"); els.prog=$("prog"); els.qCount=$("qCount");
els.patientId=$("patientId"); els.whereHint=$("whereHint"); els.scenario=$("scenario");
els.clueLabel=$("clueLabel"); els.clueText=$("clueText"); els.kwGrid=$("kwGrid"); els.kwCount=$("kwCount"); els.kwSearch=$("kwSearch");
els.options=$("options"); els.explainBox=$("explainBox"); els.nextBtn=$("nextBtn"); els.skipBtn=$("skipBtn"); els.resetBtn=$("resetBtn");
els.finalPts=$("finalPts"); els.finalDetail=$("finalDetail"); els.finalKw=$("finalKw");
document.querySelectorAll(".role-btn").forEach(b=>{b.addEventListener("click",()=>{
document.querySelectorAll(".role-btn").forEach(x=>x.classList.remove("active"));
b.classList.add("active");
state.role=b.dataset.role;
state.roleLabel=b.querySelector("b").textContent;
});});
$("startBtn").addEventListener("click", startGame);
$("nextBtn").addEventListener("click", nextQuestion);
$("skipBtn").addEventListener("click", skip);
$("resetBtn").addEventListener("click", resetLevel);
$("playAgain").addEventListener("click", ()=>{location.reload()});
document.querySelectorAll(".abtn").forEach(btn=>{
btn.addEventListener("click", ()=>{
document.querySelectorAll(".abtn").forEach(x=>x.classList.remove("active"));
btn.classList.add("active");
const act=btn.dataset.action;
if(act==="file"){state.revealed.file=true; showClue("file");}
if(act==="computer"){state.revealed.computer=true; showClue("computer");}
if(act==="chart"){state.revealed.chart=true; showClue("chart");}
});
});
els.kwSearch.addEventListener("input", (e)=>{
state.searchTerm=e.target.value;
renderClue();
updateFound();
});
renderKwGrid();
}
function startGame(){
let n=els.nameInput.value.trim();
if(!n) n="Coder-"+Math.floor(Math.random()*99+1);
state.name=n;
els.topName.textContent=n;
els.topRole.textContent=state.roleLabel;
els.startView.style.display="none";
els.gameView.style.display="flex";
state.level=1; state.totalPoints=0; state.points=0;
loadLevel(1);
}
function loadLevel(lvl){
state.level=lvl; state.currentQ=0; state.points=0;
state.revealed={file:false,computer:false,chart:false};
const lvlQs=QUESTIONS.filter(q=>q.level===lvl);
if(lvlQs.length===0){ win(); return;}
renderQuestion(); updateHud();
}
function getLevelQs(){return QUESTIONS.filter(q=>q.level===state.level);}
function renderQuestion(){
const lvlQs=getLevelQs();
const q=lvlQs[state.currentQ];
if(!q){
if(state.level<4){
if(state.points>=50){
state.totalPoints+=state.points;
state.level++; loadLevel(state.level); return;
} else {
els.explainBox.innerHTML=`<div class="explain">Need 50 PTS to unlock next level. Current ${state.points} PTS. Replay!</div>`;
return;
}
} else {
state.totalPoints+=state.points; win(); return;
}
}
els.patientId.textContent=q.patient;
els.whereHint.textContent=q.where;
els.scenario.innerHTML=highlightSearch(q.scenario);
state.revealed={file:false,computer:false,chart:false};
state.selected=null; state.answered=false;
els.explainBox.innerHTML="";
els.nextBtn.style.display="none";
showClue("file");
document.querySelectorAll(".abtn").forEach(b=>b.classList.remove("active"));
document.querySelector('[data-action="file"]').classList.add("active");
state.revealed.file=true;
renderOptions(q);
updateHud(); updateFound();
}
function showClue(type){
const lvlQs=getLevelQs(); const q=lvlQs[state.currentQ];
if(!q) return;
let label="", text="";
if(type==="file"){label="PATIENT FILE / MEDICAL RECORD / PATIENT FILE"; text=q.file;}
if(type==="computer"){label="COMPUTER - EHR / ENCODER / AAPC CODIFY / CAC / CLAIM/BILLING / CODING SOFTWARE / EHR CODING MODULE"; text=q.computer;}
if(type==="chart"){label="CHART - DOCTOR'S NOTES, NURSE'S NOTES, LAB RESULTS, RADIOLOGY REPORTS, SURGICAL/OPERATIVE REPORTS, DISCHARGE SUMMARIES, MEDICATION RECORDS"; text=q.chart;}
els.clueLabel.textContent=label;
els.clueText.innerHTML=highlightSearch(text);
KEYWORDS.forEach(kw=>{
if(text.toLowerCase().includes(kw.toLowerCase())) state.foundKW.add(kw);
});
updateFound(); renderKwGrid();
}
function renderClue(){
const active=document.querySelector(".abtn.active");
if(active) showClue(active.dataset.action);
else showClue("file");
}
function highlightSearch(text){
if(!text) return "";
let t=text;
if(state.searchTerm && state.searchTerm.length>=2){
const esc=state.searchTerm.replace(/[.*+?^$\{\}()|[\]\\]/g,'\\$&');
const re=new RegExp('('+esc+')','gi');
t=t.replace(re,'<span class="mark">$1</span>');
}
KEYWORDS.forEach(kw=>{
if(state.foundKW.has(kw)){
const esc=kw.replace(/[.*+?^$\{\}()|[\]\\]/g,'\\$&');
const re=new RegExp('('+esc+')','gi');
t=t.replace(re,(m)=> m.includes('mark')? m : '<span class="mark">'+m+'</span>');
}
});
return t;
}
function renderOptions(q){
els.options.innerHTML="";
q.options.forEach((opt,i)=>{
const div=document.createElement("button");
div.className="opt"+(state.selected===i?" sel":"");
div.innerHTML='<div class="dot">'+(i+1)+'</div><div>'+highlightSearch(opt)+'</div>';
div.addEventListener("click", ()=>{
if(state.answered) return;
state.selected=i;
document.querySelectorAll(".opt").forEach(o=>o.classList.remove("sel"));
div.classList.add("sel");
submitAnswer();
});
els.options.appendChild(div);
});
}
function submitAnswer(){
if(state.selected===null || state.answered) return;
const lvlQs=getLevelQs(); const q=lvlQs[state.currentQ];
state.answered=true;
const correct=q.correct;
const opts=els.options.children;
for(let i=0;i<opts.length;i++){
if(i===correct) opts[i].classList.add("correct");
if(i===state.selected && i!==correct) opts[i].classList.add("wrong");
}
if(state.selected===correct){state.points+=10;} else {state.points=Math.max(0,state.points-2);}
els.explainBox.innerHTML='<div class="explain">'+(state.selected===correct?'<b style="color:var(--ok)">+10 CORRECT</b>':'<b style="color:var(--bad)">-2 INCORRECT</b>')+'<br>'+highlightSearch(q.explain)+'<br><small style="color:var(--muted)">'+q.patient+' • '+q.where+'</small></div>';
els.nextBtn.style.display="block";
updateHud();
}
function nextQuestion(){
const lvlQs=getLevelQs();
state.currentQ++;
if(state.currentQ>=lvlQs.length){
if(state.level<4){
if(state.points>=50){
state.totalPoints+=state.points;
setTimeout(()=>{ state.level++; loadLevel(state.level);}, 600);
} else {
els.explainBox.innerHTML='<div class="explain"><b>Need 50 PTS to unlock next.</b> You have '+state.points+'. <button class="btn-primary" style="margin-top:6px" onclick="loadLevel('+state.level+')">REPLAY LEVEL</button></div>';
els.nextBtn.style.display="none";
return;
}
} else {
state.totalPoints+=state.points; win(); return;
}
} else {
renderQuestion();
}
}
function skip(){
if(state.answered) return;
state.points=Math.max(0,state.points-2);
updateHud();
state.currentQ++;
renderQuestion();
}
function resetLevel(){ state.points=0; state.currentQ=0; renderQuestion(); }
function updateHud(){
const lvlQs=getLevelQs();
els.topLvl.textContent='LVL '+state.level;
els.topPts.textContent=(state.totalPoints+state.points)+' PTS';
const titles=["WHO DOES WHAT?","WHERE TO FIND IT?","TRANSLATION STATION 2025-2026","WORKFLOW BOSS"];
els.levelTitle.textContent='LEVEL '+state.level+' — '+titles[state.level-1];
els.prog.style.width=((state.currentQ/lvlQs.length)*100)+'%';
els.qCount.textContent=(Math.min(state.currentQ+1,lvlQs.length))+'/'+lvlQs.length+' • '+state.points+'/50 unlock';
}
function renderKwGrid(){
els.kwGrid.innerHTML="";
KEYWORDS.forEach(kw=>{
const s=document.createElement("div");
s.className="kw"+(state.foundKW.has(kw)?" found":"");
s.textContent=kw;
els.kwGrid.appendChild(s);
});
updateFound();
}
function updateFound(){ els.kwCount.textContent=state.foundKW.size+'/21 found'; }
function win(){
els.gameView.style.display="none";
els.winView.style.display="flex";
els.finalPts.textContent=state.totalPoints+' PTS';
els.finalDetail.textContent=state.name+' as '+state.roleLabel+' cleared '+QUESTIONS.length+' demo cases • Structure ready for 280 • '+state.foundKW.size+'/21 keywords hunted';
els.finalKw.innerHTML="";
KEYWORDS.forEach(kw=>{
const d=document.createElement("div");
d.className="kw"+(state.foundKW.has(kw)?" found":"");
d.textContent=kw;
els.finalKw.appendChild(d);
});
}
window.addEventListener("DOMContentLoaded", init);
</script>
</body>
</html>
Game Source: CHART HUNTER 280: The Medical Coder
Creator: ElectricGalaxy27
Libraries: none
Complexity: complex (435 lines, 42.4 KB)
The full source code is displayed above on this page.
Remix Instructions
To remix this game, copy the source code above and modify it. Add a ARCADELAB header at the top with "remix_of: chart-hunter-280-the-medical-coder-electricgalaxy27" to link back to the original. Then publish at arcadelab.ai/publish.