Skip to content

Warn that Limited Data Set does not scrub an 835, and fix the suite counts - #9

Merged
IPerception merged 2 commits into
mainfrom
fix/835-lds-warning-and-stale-docs
Sep 8, 2026
Merged

Warn that Limited Data Set does not scrub an 835, and fix the suite counts#9
IPerception merged 2 commits into
mainfrom
fix/835-lds-warning-and-stale-docs

Conversation

@IPerception

Copy link
Copy Markdown
Owner

The 835 gap

docs/835-validation.md already recorded that an 835 handed through Limited
Data Set
comes back byte-identical — its patient identifiers sit directly
inside loop 2100 (NM1*QC, NM1*IL), outside the PERSON_LOOPS the rule
targets, so scrubLoop never reaches one. The doc called that "worth stating
loudly in the app's own UI copy: silence here would hand a user a file they
believe is scrubbed."

It was stated in the guide panel only. At the point of use the app said nothing:
load an 835, click Create Limited Data Set, download an unchanged file, and
nothing on screen distinguishes that from a successful scrub.

What changed:

  • A caution in the Limited Data Set card (#deidRemit), shown by
    syncRunButton() whenever has835() is true of the loaded file. It names the
    reason rather than just the outcome.
  • The post-run message names the reason too. An 835 previously fell through to
    the generic "No patient loops found — nothing to strip", which reads as
    already clean.
  • The button stays enabled. Disabling it would read as "not yet", where the
    truth is "never, by design".

docs/835-validation.md now records that this is said, and where.

Doc drift

  • README.md said eight browser suites; the runner reports nine.
  • web/PERFORMANCE.md said four, and named an outdated subset — both predate
    the tree, claims, validate, deid and render suites landing.

Verification

Covered in render.mjs (section [5]) rather than the static lint, because the
failure mode is stale state — the caution not clearing when an 837 is loaded
over an 835 is the same bug pointed the other way. The test also asserts the
output is genuinely byte-identical to the input, so that claim is now pinned by
a test and not only by prose.

node web/tests/all.mjs     # 9 suites pass; render.mjs 26 checks, up from 19
python -m unittest         # 11 tests pass

Not yet exercised in a real browser — the DOM shim can't report how the caution
reads in the card or whether the 2.2s toast is long enough.

🤖 Generated with Claude Code

The rule is a no-op on a remittance advice: an 835's patient identifiers sit
directly inside loop 2100 (NM1*QC, NM1*IL), outside the PERSON_LOOPS the rule
targets, so the file comes back byte-identical. That was stated only in the
guide panel, so at the point of use the app was silent -- a user could run it,
download an unchanged file, and believe it was scrubbed.

Say it where the action is instead: a caution in the Limited Data Set card,
shown by syncRunButton whenever has835 is true of the loaded file, and a
post-run message naming the reason rather than the generic "no patient loops
found", which reads as "already clean" on an 835.

The button stays enabled. Disabling it would read as "not yet", where the
truth is "never, by design".

Covered in render.mjs rather than the static lint, because the failure mode is
stale state: the caution not clearing when an 837 is loaded over an 835 is the
same bug pointed the other way. The test also asserts the output really is
byte-identical, so that claim is pinned by a test and not only by prose.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01AfabdBfKu77QsNYVZkc3nn
The runner reports nine suites. The README said eight, and PERFORMANCE.md said
four and named an outdated subset of them -- both predate the tree, claims,
validate, deid and render suites landing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01AfabdBfKu77QsNYVZkc3nn
@IPerception
IPerception merged commit a8ab4ae into main Sep 8, 2026
1 check passed
IPerception added a commit that referenced this pull request Sep 8, 2026
The rail footer is the single place the version is written; release.mjs derives
the tag and the asset filename from it. v1.1.0 predates the 835 Limited Data Set
warning (#9), so a holder of that download has the silent no-op.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Claude-Session: https://claude.ai/code/session_01AfabdBfKu77QsNYVZkc3nn
@IPerception
IPerception deleted the fix/835-lds-warning-and-stale-docs branch September 8, 2026 01:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant