fix(labs): store the catalog slug as a marker's analyte key

The matcher stored the registry entry's key, so LDL and HDL markers were
recorded as total-cholesterol. The key now names what the marker is (the
catalog slug, or a registry-only key for an analyte with no seed), and the
registry resolves ldl and hdl to the cholesterol entry for the conversion as
before. A key already written in the old form is rewritten by the same fill
step that brings a stale key in line with its name, the first time a reading
needs it. The OpenAPI descriptions say what the key is and that it follows
the marker's name and unit.
This commit is contained in:
Marc-André Bombeck committed 2026-10-14 19:18:49 +02:00
1 parent cd1449e63e
commit 07f09e1b61
11 files changed
+91 -33

No files matched your search

+11 -9
View File
@@ -68258,9 +68258,9 @@ components:
anyOf:
- type: string
- type: "null"
description: The analyte the matched marker is (the unit-conversion registry's key, e.g. `fasting-glucose`), or null
when the marker does not exist yet or its name matches none. With `markerUnit` it tells a client whether a
row in another unit can be converted on commit.
description: The analyte the matched marker is (the catalog slug, e.g. `fasting-glucose` or `ldl`, or a registry-only
key such as `urea`), or null when the marker does not exist yet or its name matches none. With `markerUnit`
it tells a client whether a row in another unit can be converted on commit.
duplicateOf:
anyOf:
- type: string
@@ -68439,12 +68439,14 @@ components:
- createdAt
- updatedAt
additionalProperties: false
description: A user-scoped catalog marker. `context` is the decrypted per-marker note (or null); `hasContext` flags its
presence. `analyteKey` is the analyte the marker was recognised as (the unit-conversion registry's key, e.g.
`fasting-glucose`), or null when its name matches none; a reading in another unit is converted only for a marker
that has one. `hidden` drops the marker from the active catalog list and the lab-entry pickers without deleting
it (its readings and unit/range survive). A `LabResult` linking this marker resolves its unit + reference bounds
from here.
description: "A user-scoped catalog marker. `context` is the decrypted per-marker note (or null); `hasContext` flags its
presence. `analyteKey` is the analyte the marker was recognised as: the catalog slug its name belongs to (e.g.
`fasting-glucose`, `ldl`, `hdl`), or a key of the unit-conversion registry for an analyte with no catalog seed
(e.g. `urea`, `uric-acid`), or null when its name matches none. It is derived from `name` and `unit`, never
chosen: it is set on create and re-derived (or cleared) when an update changes either. A reading in another unit
is converted only for a marker that has one. `hidden` drops the marker from the active catalog list and the
lab-entry pickers without deleting it (its readings and unit/range survive). A `LabResult` linking this marker
resolves its unit + reference bounds from here."
CreateBiomarkerResponse:
type: object
properties: