LOINC Tranche F Stratum-Subset Ledger: Tumour Markers and Somatic Biomarker Tests
Date: 2026-10-16
Scope: projects/LOINC_DIAGNOSTICS.md Phase 3, Tranche F, biomarker-stratum
subset — entries whose own somatic biomarker is central to how the entry is
diagnosed. Most of the 27 are the design-decisions §3a L4 promoted strata
(EGFR-mutant NSCLC, HER2-positive breast cancer, MSI-H colorectal cancer, and
similar), whose promotion into a separate entry is justified by a distinct
diagnostic pathway. Five are not: APL_PML_RARA, NPM1_Mutant_AML,
Glioblastoma_IDH_Wildtype, Anaplastic_Large_Cell_Lymphoma and
Alveolar_Rhabdomyosarcoma are WHO/ICC-defined molecular or histologic
entities, which §3a treats as the default entry level rather than a
promoted stratum — no promotion-justification question applies to them, and
Finding 1 below is scoped accordingly. This ledger covers the four batches
that worked through the subset.
PRs: #14622 (batch 1), #14629 (batch 2), #14632 (batch 3), #14642
(batch 4), as of each batch PR's head commit on 2026-10-16 — all four were
still open and unmerged at that time, so a reader checking this after any of
them merges should treat the table below as a snapshot of that date, not of
current main.
Durable: entries examined and their outcome
27 stratum entries were examined across the four batches; 26 carry at least
one binding, and one (BRCA_Mutant_Prostate_Cancer) carries none.
| Entry | Outcome | Code(s) |
|---|---|---|
| ALK_Rearranged_NSCLC | Bound (IHC + FISH); NGS left unbound | LOINC:47303-3, LOINC:78205-2 |
| APL_PML_RARA | Bound | LOINC:21551-7 |
| BRAF_V600E_Mutant_NSCLC | Bound (tissue + plasma, two rows) | LOINC:58415-1, LOINC:93690-6 |
| BRAF_V600_Mutant_Melanoma | Bound (molecular + VE1 IHC, two rows) | LOINC:97025-1, LOINC:85299-6 |
| Anaplastic_Large_Cell_Lymphoma | Bound | LOINC:47303-3 |
| Alveolar_Rhabdomyosarcoma | Bound | LOINC:93807-6 |
| HER2_Positive_Breast_Cancer | Bound (IHC + FISH, two rows) | LOINC:85319-2, LOINC:49683-6 |
| MSI_High_Colorectal_Cancer | Bound (panel + 4-protein IHC + TMB, six rows) | LOINC:81711-4, LOINC:81691-8/92/93/94, LOINC:94076-7 |
| EGFR_Mutant_NSCLC | Bound | LOINC:21665-5 |
| FLT3_Mutant_AML | Bound (ITD + TKD, two rows) | LOINC:79210-1, LOINC:92843-2 |
| NPM1_Mutant_AML | Bound (molecular); IHC row declined | LOINC:54448-6 |
| IDH_Mutant_AML | Bound (D-2-HG + molecular, two rows) | LOINC:79305-9, LOINC:95772-0 |
| ER_Positive_Breast_Cancer | Bound (ER + PR, two rows); Genomic Assays row declined | LOINC:85337-4, LOINC:85339-0 |
| HER2_Positive_Gastric_Cancer | Bound (IHC + FISH, two rows) | LOINC:18474-7, LOINC:49683-6 |
| HER2_Positive_Colorectal_Cancer | Bound (IHC + FISH + NGS, three rows) | LOINC:18474-7, LOINC:49683-6, LOINC:42783-1 |
| KRAS_G12C_Mutant_NSCLC | Bound, with a recorded precision gap | LOINC:21702-6 |
| Glioblastoma_IDH_Wildtype | Bound | LOINC:60252-4 |
| MSI_High_Endometrial_Cancer | Bound (4-protein IHC + panel, five rows) | LOINC:81691-8/92/93/94, LOINC:81711-4 |
| BRAF_Mutant_Thyroid_Cancer | Bound (two rows) | LOINC:LP14697-4, LOINC:58415-1 |
| BRAF_V600E_Mutant_Colorectal_Cancer | Bound (molecular + VE1 IHC + MSI panel, three rows) | LOINC:58415-1, LOINC:85299-6, LOINC:81711-4 |
| BRCA_Mutant_Prostate_Cancer | Declined entirely | — |
| HPV_Positive_Head_and_Neck_Cancer | Bound (p16); HPV DNA/RNA row declined | LOINC:49556-4 |
| HPV_Negative_Head_and_Neck_Cancer | Bound (p16 + EGFR, two rows) | LOINC:49556-4, LOINC:32581-1 |
| NTRK_Fusion_Positive_Cancer | Bound | LOINC:93813-4 |
| RET_Rearranged_NSCLC | Bound | LOINC:90927-5 |
| ROS1_Rearranged_NSCLC | Bound | LOINC:81747-8 |
| Triple_Negative_Breast_Cancer | Bound (five rows) | LOINC:85337-4, LOINC:85339-0, LOINC:85319-2, LOINC:49683-6, LOINC:105302-4, LOINC:50995-0 |
Every code above was read directly from the branch that carries it
(origin/loinc-f-batch1 through loinc-f-batch4), each at the head commit
it carried on 2026-10-16. All four batch PRs were still open as of that
date (see Scope above), so a code listed here can drift from what actually
merges; re-check the table against each batch's merged content once it
lands, rather than trusting this snapshot indefinitely.
Structural finding 1: most L4 strata examined have no diagnosis: section — but six of the 27 entries do, and five of the 27 are not L4 strata
Two counts are both correct here, because they describe different
populations: zero of the 21 entries in batches 2-4 carry a diagnosis:
section; six of the full 27-entry examined set do, and all six are in batch
1. Read either number only against its own stated population; the two are
not in tension. (Batch membership is not a cause of either count: every
diagnosis: section in this subset predates this tranche's curation and was
already on main before any batch touched its entry, so which batch an
entry landed in says nothing about why it does or does not carry one.)
Checking the six against this ledger's own classification (see Scope above)
rules out a tidier story: three of the six — ALK_Rearranged_NSCLC,
BRAF_V600E_Mutant_NSCLC, BRAF_V600_Mutant_Melanoma — are themselves §3a
L4 promoted biomarker strata, not WHO/ICC default-level entities; and two
entries without a diagnosis: section — NPM1_Mutant_AML,
Glioblastoma_IDH_Wildtype — are themselves non-L4 WHO/ICC entities. So
"WHO/ICC entity versus promoted stratum" does not cleanly separate the
diagnosis-bearing entries from the rest either; it predicts correctly for 22
of the 27, with these five as counter-examples in both directions.
What is worth carrying forward is narrower and still real, because it does not depend on any classification this ledger could get wrong: among the 22 entries that are genuinely §3a L4 promoted strata — whose promotion is justified by "a distinct first-line therapy or diagnostic pathway" — three record that pathway structurally and nineteen do not, with no clean line separating the two groups by anything this ledger classified. If this ledger needs a sentence on why no clean line emerges, the honest one is that this ledger's own classification does not explain the variation — not that some other variable does. Whether the split reflects under-curation of the nineteen, or a promotion criterion applied on clinical judgement that was never meant to require structural backing, is a §3a question for whoever revisits the ladder — not a LOINC one, and not one this ledger answers.
The six, with each row's presence value where the row sets one:
| Entry | First diagnosis: row |
presence |
|---|---|---|
ALK_Rearranged_NSCLC |
Tumor ALK fusion testing | REQUIRED_FOR_SUBTYPE_ASSIGNMENT |
BRAF_V600E_Mutant_NSCLC |
Histologic NSCLC diagnosis with BRAF V600E confirmation | REQUIRED_FOR_SUBTYPE_ASSIGNMENT |
BRAF_V600_Mutant_Melanoma |
Clinicopathologic cutaneous melanoma diagnosis | REQUIRED |
APL_PML_RARA |
Morphologic Suspicion of APL | not set on this row |
Anaplastic_Large_Cell_Lymphoma |
Tissue Morphology and Immunohistochemistry | not set on this row |
Alveolar_Rhabdomyosarcoma |
Histologic and immunohistochemical classification | not set on this row |
Two of these (ALK_Rearranged_NSCLC, BRAF_V600E_Mutant_NSCLC) mark the
stratum-defining test REQUIRED_FOR_SUBTYPE_ASSIGNMENT — the entry already
records, structurally, that this test is how the stratum is assigned. All six
entries' new LOINC codes landed on the diagnosis[].measurements slot
CLAUDE.md's LOINC Codes section names as the natural home for exactly this
case — confirmed by reading each batch-1 diff against main directly
(git diff origin/main origin/loinc-f-batch1 -- kb/disorders/<name>.yaml) —
not on biochemical[].loinc_term. So wherever a diagnosis: row already
existed to attach to, the batches used it correctly; there is no binding here
that needs to be moved onto measurements. biochemical[].loinc_term was only ever the
fallback for an entry with no diagnosis: row to attach to (see
EGFR_Mutant_NSCLC, confirmed the same way), which is the actual shape of
the gap this finding is about.
The remaining three of the six (APL_PML_RARA, Anaplastic_Large_Cell_Lymphoma,
Alveolar_Rhabdomyosarcoma) are not design-decisions §3a L4 promoted strata at
all — see the Scope note above — so no promotion-justification question
applies to them; their diagnosis: sections exist simply because WHO/ICC
molecular/histologic entities normally carry one, independent of this
tranche's work. Their new LOINC codes also landed on diagnosis[].measurements,
for the same reason as the other three.
That leaves 21 of the 27 entries (27 minus the six above) with no
diagnosis: section at all. Two of those 21 — NPM1_Mutant_AML and
Glioblastoma_IDH_Wildtype — are themselves non-L4 WHO/ICC default-level
entities (the same set named in the Scope note above), so no
promotion-justification question applies to them either; their lacking a
diagnosis: section is simply a gap in the entry, unrelated to this
tranche's work.
That leaves the remaining 19 of the 27 entries — L4 promoted strata with
no diagnosis: section — where the finding as originally intended does hold:
these are the entries whose promotion into a separate entry (rather than a
has_subtypes row on the parent) is justified by having "a distinct
first-line therapy or diagnostic pathway," and the pathway that justifies the
promotion is not recorded anywhere structurally in the promoted entry — it
survives only as free-text biochemical[] notes, with no diagnosis_term,
no measurements, and no reference_ranges cut-off.
BRCA_Mutant_Prostate_Cancer is the sharpest instance among those 19: its
only biochemical row is PSA, the prostate-cancer-wide monitoring marker, not
a test for the BRCA mutation that defines its own stratum. A working,
Monarch-KG-resolvable LOINC code for combined BRCA1/2 testing exists
(LOINC:50995-0, bound without difficulty on Triple_Negative_Breast_Cancer
in the same batch), so this is not a LOINC coverage gap — the entry simply
never wrote a diagnostic-test row for the biomarker that defines it. This is
the exact failure mode the tranche's diagnostic-pathway check was designed
to surface, and it would not have been visible from reading the entry's
genetic: section alone, since that section describes the mutation's
biology without ever stating how it is tested for.
Structural finding 2: LOINC has no Part-level identity code for any gene rearrangement
The Monarch KG search API (q=gene rearrangements,
category=biolink:ClinicalMeasurement) returns 98 results as of 2026-10-16,
fully enumerated (limit=100 against a reported total of 98); zero carry
a LP/LG Part or panel prefix. This covers every gene family this subset
touched (ALK, RET, ROS1, NTRK1/2/3, FOXO1, PML::RARA, ERBB2). Unlike an
enzyme-activity assay,
where the method is incidental and a Part-level code is the correct
identity, a fusion/rearrangement biomarker has no method-free identity
available at all — FISH-specific and molecular-genetics-specific codes
are the only options LOINC provides. Two consequences worth carrying
forward for any future rearrangement-biomarker tranche work:
- Do not spend time searching for a Part code for a rearrangement family; none exists, and the search only costs time.
- LOINC codes some break-apart FISH probes by cytogenetic locus rather than
gene symbol in the code's own label (
ROS1_Rearranged_NSCLCbindsLOINC:81747-8, labelled "Chromosome region 6q22 rearrangements," not "ROS1"). Confirm the mapping by searching the gene symbol directly and checking that the locus-named code is the one returned, rather than assuming a gene-symbol-free label means the code is for something else.
Three narrower findings worth recording
- A LOINC code names what was measured, not the result. Two pairs in
this subset are each other's complement on the same test:
HPV_Positive_Head_and_Neck_Cancer/HPV_Negative_Head_and_Neck_Cancerbind the identical p16 IHC code (LOINC:49556-4), andTriple_Negative_Breast_Cancerreuses the identical breast-specimen ER/PR/HER2 codes bound on the positive-stratum entries. In both cases the entries differ in what the test returns, not in which test was run, and binding the same code on both sides is correct, not a collision to avoid. - An organ-specific LOINC label is a real trap, and it runs in both
directions.
LOINC:85319-2("HER2 [Presence] in Breast cancer specimen...") is correct onHER2_Positive_Breast_CancerandTriple_Negative_Breast_Cancer, both genuinely breast cancer, and would have been wrong onHER2_Positive_Gastric_CancerandHER2_Positive_Colorectal_Cancer, which bound the tissue-genericLOINC:18474-7instead because gastric and colorectal HER2 IHC are scored by different criteria than breast (the ToGA scheme, and proposed HERACLES criteria, respectively) — a real clinical difference, not only a coding one. Check what a candidate code's own label names before reusing it across organs, in either direction. - "Mutually exclusive with X" in an entry's own text means X is a
differential, not that entry's own test.
RET_Rearranged_NSCLCandROS1_Rearranged_NSCLCboth matched the candidate pool on EGFR, ALK, ROS1/RET, and KRAS; both rows state outright that their own fusion is "mutually exclusive" with those other drivers, which settles that those genes are exclusionary differentials rather than this entry's own diagnostic pathway. Reading the row's own framing resolved both cases; neither needed a comprehensive-panel binding.
A fourth, narrower technical finding: HPV_Positive_Head_and_Neck_Cancer's
HPV DNA/RNA row could not be bound at all, not because LOINC lacks a code —
its own NLM Clinical Table index carries dozens of high-risk HPV DNA and
E6/E7 mRNA codes — but because none of them resolve against the Monarch KG,
the authority this repository validates LOINC codes against. This is a
coverage gap in the KG's current LOINC ingestion rather than an absence from
LOINC itself, and is worth re-checking once the KG catches up.
What remains unexamined
This ledger covers only the biomarker-stratum subset of tranche F. The
tranche's own scoping (projects/LOINC_DIAGNOSTICS.md, tranche F row) is
broader — "tumour markers and somatic biomarker tests" generally — and a
substantially larger population of non-stratum cancer entries in kb/
(histologic-entity and molecularly-defined-entity level, per the
design-decisions §3a ladder) has not been examined by this subset's
candidate pool at all. Whoever extends this tranche to that population
should expect the same two structural findings to recur only partially:
many of those entries are histologic-entity-level (L2/L3) rather than
biomarker-stratum (L4), so the "no diagnosis: section despite a stated
diagnostic-pathway justification" finding is specific to the L4 promotion
rule and may not generalize, while the rearrangement-family Part-code
finding is a fact about LOINC and will recur anywhere a fusion biomarker is
curated.