🎮ArcadeLab

CHART HUNTER 280: The Medical Coder

by ElectricGalaxy27
435 lines42.4 KB
▶ Play
<!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.