Claim GuardSimulation Lab Simulation Open console
Internal validation · synthetic data only

Claim Guard Simulation Lab

Before we touch the partner clinic, we rehearse the whole pilot here. A stand-in for the clinic's legacy web HIS, with a simulated payer that rejects claims using real NPHIES codes, runs next to our browser extension. The extension reads the claim form, checks it against 14 rules, and sends anonymous events to our console. From the console we move each rule from silent to warn to block and measure precision against real outcomes. We check that nothing identifying leaves the browser. The kill switch stays within reach the whole time.

Live status
Clinic HISchecking…
Extensionchecking…
Consolechecking…
Pilot phase

The three components

Each runs on its own. Hosted for internal testing on siyada.pro (synthetic data only). To run it locally, use sim/run_all.sh.

01 · clinic side

Clinic HIS

The staff's claim form: a legacy ASP.NET-style page over plain HTTP. It has a Fill demo claim toolbar (clean, random, or one planted defect per rule) and a simulated payer that adjudicates about 2.5 s after submit.

https://sim-his.siyada.pro
02 · in the browser

Claim Guard extension

A Chrome MV3 extension. It reads the form through the field map, runs R01–R14 in the page, shows red-pen notes in English and Arabic, and blocks the legacy form.submit() path when a rule is at block. Only anonymous events leave the browser.

load unpacked · see steps below
03 · our side

Provider console

Our view as the provider. It shows KPIs, precision and recommendations per rule, and the tier controls that are pushed live to every extension. It also has the kill switch, a live event feed, and the privacy audit of exactly what was received.

https://claimguard.siyada.pro

Install the extension (Chrome)

  1. Open chrome://extensions (paste it in the address bar).
  2. Turn on Developer mode (top-right toggle).
  3. Click Load unpacked and select the folder below. Or download the .zip, unzip it, and select the unzipped folder.
  4. Pin Claim Guard, open its popup, and pick this workstation's role (front desk, nurse, physician, coder or billing).
  5. Open the claim form. A form recognised event shows up in the console's live feed.
claimguard-extension (the folder inside the downloaded .zip)

Good to know

  1. The extension refreshes its config from the console on every HIS page load and at least every 30 s. After changing a tier, reload the claim form to see it at once.
  2. Events are queued in the extension's service worker and flushed in batches every few seconds, so the feed lags a moment.
  3. Everything is synthetic. The HIS demo-fill generates fake patients, and the console never receives them anyway.
  4. Use Reset events in the console between runs. Your rule tiers are kept.

Edge in IE mode does not run extensions. The real clinic rollout uses a managed-policy force-install in Chrome or Edge (Chromium).

Guided walkthrough: the pilot in five steps

This follows the real clinic plan: listen first, then advise, then stop only what is certain. The buttons change the live config directly.

1

Silent phase 1 · weeks 1–4

  1. Set every rule to silent.
  2. In the HIS, click Fill demo claim → Random (or a specific defect) and Submit claim. Repeat 10–20 times.
  3. Watch the console's Live feed: check, then submit, then the payer outcome a few seconds later.
Open live feed
Expect
  • Staff see nothing: no notes, no dialog.
  • Rules still fire and are logged as open at submit.
  • Rejections start labeling each rule's precision.
2

Warn phase 2

  1. Switch rules to warn (the button below sets all 14).
  2. Reload the claim form. Fill a claim with defects and edit fields.
  3. Red-pen notes appear next to the right fields, in English and Arabic, while you type. Fix one and submit.
Open claim form
Expect
  • Nothing is ever blocked.
  • Fixed rules show up as fixed on the submit event.
  • “Estimated SAR protected” starts to grow.
3

Block phase 3 · certain rules only

  1. Set R03 (prior authorization missing) to block.
  2. Reload the form and fill the R03 scenario (MRI knee with no pre-auth reference). Click Submit claim.
  3. A blocking dialog appears. Fix jumps to the pre-auth field. Submit anyway requires a reason.
Expect
  • The dialog also catches the legacy __doPostBackform.submit() path.
  • An override logs an override event with its reason.
  • R08, R12 and R14 can never be set to block (max_tier is warn).
4

Kill switch safety

  1. Turn the kill switch on.
  2. Reload the claim form and submit a defective claim. Nothing appears and nothing blocks.
  3. Turn it off again. Behaviour returns on the next config refresh.
Expect
  • The extension becomes fully passive, sending only a heartbeat.
  • The console shows a red banner while the switch is on.
5

Read precision & recommendations decide

  1. Run a larger batch. The end-to-end runner in sim/runner can submit dozens of claims.
  2. Open Rules. Each rule needs n ≥ 5 labeled claims before it is judged. It needs ≥ 90% precision with n ≥ 8 to earn block, and ≥ 60% to earn warn.
  3. Click a recommendation to apply it. Check Privacy: it should read 0 violations.
Expect
  • Certain rules (R03, R04, R10, R11) head toward block.
  • R08 (unspecified ICD, a 30% denial rate) gets flagged to demote.
  • Recall stays below 100%: some payer rejections (noise codes) are invisible to any rule.

Validation experiment: latest run

The runner drives the real HIS and the real extension in Chrome through simulated claims, with a simple model of how staff react, in three phases. Payer outcomes come from the simulated adjudicator. Re-run it with node runner/run.mjs.

Loading…

Architecture

What runs where, and the only two things that cross the clinic boundary.

Clinic LAN · patient data stays here Provider (us) Staff browser (Chrome) front desk · nurse · physician · coder · billing HIS claim page form#aspnetForm · __doPostBack Claim Guard extension reads DOM → R01–R14 + risk model red-pen notes · blocking dialog local only: salted hashes · token map SIM HIS :8700 · plain HTTP claims + patients (synthetic) simulated payer NPHIES codes, ~2.5 s form.submit() page + outcome Provider console :8702 · SQLite event store · stats · precision rule tiers · kill switch privacy audit · this hub never sees names, IDs, dates, amounts anonymous events (batched) role · payer · band · rule ids config: tiers · kill switch · threshold
clinic LAN traffic (unchanged) outbound: anonymous events only inbound: config polled by the extension