Skip to content

Judge the four OMOP concepts on Chronic Lyme disease - #80

Merged
KrishnaTO merged 1 commit into
mainfrom
chronic-lyme-omop-judgment
Aug 31, 2026
Merged

Judge the four OMOP concepts on Chronic Lyme disease#80
KrishnaTO merged 1 commit into
mainfrom
chronic-lyme-omop-judgment

Conversation

@KrishnaTO

Copy link
Copy Markdown
Owner

Follow-up to #78, which left this pair explicitly open. The commit was pushed about a minute after #78 merged, so it never became part of it.

The disease is not Lyme disease

ARI:0001065 is Post-Treatment Lyme Disease Syndrome. Its confirmed cross-references are MeSH D000077342 "Post-Lyme Disease Syndrome", MONDO:0700280, NCIt C119039 and UMLS C3890422, and its synonyms include PTLDS and post-treatment Lyme disease syndrome. The curator had already rejected DOID:11729 and icd10cm:A69.2 — both plain "Lyme disease" — and recorded no term in SNOMED.

That last judgment is what settles the OMOP question. Resolved against the local Athena vocabulary in data/2-databases:

OMOP Resolves to Verdict
19137845 MeSH D000077342 Post-Lyme Disease Syndrome confirmed — it is the term already confirmed
440638 SNOMED 23502006 Lyme disease flagged wrong
4141757 SNOMED 33937009 Lyme arthritis flagged wrong
37365579 absent from every local vocabulary file, in every column left unjudged

The two flagged concepts are the active infection and one of its manifestations — SNOMED concepts wearing an OMOP id. Storing them contradicted the curator's own "no term in SNOMED" finding. I also checked the full SNOMED Lyme list in the release: it is entirely active-infection concepts and manifestations, with nothing for the post-treatment syndrome, so that finding holds.

ARI_DXCODE went too

ARI_DXCODE held 23502006 and 33937009 — the SNOMED codes behind the two rejected OMOP concepts. Flagging only the OMOP form would have left the same two concepts on the disease under a second property, which is the exact failure mode remove-false-xref-mappings called out. Both SNOMED codes are flagged as well and the property is now empty.

That also clears one standing dxcode-without-snomed warning: 6 → 5.

37365579 is deliberately untouched

It resolves in no local vocabulary file. An id nobody can look up is not an id anybody can rule on, and dropping it would be precisely the unreviewed deletion #78 added check_deletions to prevent. It stays stored and unreviewed until someone can check it against Athena.

Unrelated bug this surfaced

Recording the judgment tripped date-future. The app stamps mapping_date in UTC; the check compared it against date.today(), the local date. An evening publish anywhere west of UTC read as tomorrow's work. CI runners are UTC so CI never saw it — a curator in Toronto running the validator after 20:00 would have. Now compared UTC to UTC.

Verification

python .github/scripts/validate_mappings.py              # 0 errors, 5 warnings
python .github/scripts/validate_mappings.py --since main # 0 errors, 0 warnings

The five remaining warnings are the standing dxcode-without-snomed debt. check_deletions passes: every id removed here has a predicate_modifier: Not row behind it, which is the check working as intended on its first real use.

Advances #23.

🤖 Generated with Claude Code

ARI:0001065 is Post-Treatment Lyme Disease Syndrome, not Lyme disease. Its
confirmed cross-references are MeSH D000077342 "Post-Lyme Disease Syndrome",
MONDO:0700280, NCIt C119039 and UMLS C3890422; the curator had already rejected
DOID:11729 and icd10cm:A69.2, both plain "Lyme disease", and recorded that
SNOMED has no term for it.

Resolved the four stored OMOP concepts against the local Athena vocabulary:

  19137845  MeSH D000077342 Post-Lyme Disease Syndrome  -> confirmed
  440638    SNOMED 23502006 Lyme disease                -> flagged wrong
  4141757   SNOMED 33937009 Lyme arthritis              -> flagged wrong
  37365579  absent from every local vocabulary file     -> left unjudged

The two flagged concepts are the active infection and one of its manifestations.
Storing them contradicted the curator's own "no term in SNOMED" finding, since
both are SNOMED concepts wearing an OMOP id.

ARI_DXCODE held 23502006 and 33937009, the SNOMED codes behind those two
concepts, so both are flagged as SNOMED too and the property is now empty --
otherwise the same rejected concepts would survive under a second property.
That clears one dxcode-without-snomed warning, 6 -> 5.

37365579 is left stored and unreviewed rather than dropped. An id that resolves
nowhere is not an id anybody can rule on, and removing it would be exactly the
unreviewed deletion this branch adds a check against. It needs Athena.

Also fixes a latent bug the new row surfaced: date-future compared a UTC
mapping_date against the local date, so an evening publish west of UTC read as
tomorrow. CI runners are UTC and never saw it; curators running the validator
locally would have.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@KrishnaTO
KrishnaTO merged commit 1066fc8 into main Aug 31, 2026
1 check passed
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