The clinical foundation the blood-test analysis reads from — ranges, their direction and
life stage, your targets, what is read with what, and the words the analysis is assembled from.
108 markers · 966 ranges · 24 clinical notes.
Plus 212 catalogued for recognition only — named so a result is never dropped, with no ranges and no reading. Hidden unless you ask for them.
0 unsaved change(s), held in this browser only.
Save changes writes them back through the site; if that is unavailable the changeset downloads
instead and python3 tools/apply_edits.py marker-lab-changeset.json folds it in.
Markers & ranges
Every range on file for a marker, where it came from, and which one is yours. Star the row you align with; set your own target when none of them is right.
Marker detail
Everything about a marker that is not a range — its unit, panel, aliases, what it depends on, which direction concerns us, and the patient explainer. Add a marker here.
Relationships
Which markers you read together, and why — the sentence that says what the pair means. Add one, retire one, put the reasoning in your own words.
Phrase library
The exact sentences an analysis is allowed to use — one per outcome, plus the modifier lines. Read-only until the wording moves out of code.
Note library
The short clinical points an analysis is allowed to say, and which markers say them. Number-free by design — every figure comes from the resolved band.
Sources & practitioners
Where every range came from, whose work is trusted first — and the home for the ranges you set yourself, with the reason you set them.
Needs your eye
Every doubt the build has, in one place — bad bands, units that will not convert, missing functional ranges, thresholds standing in for a normal range.
Analysis bench
Enter a patient context and some results, and read exactly what the clinician and the patient would read. Nothing you type leaves this browser.
Nothing you type on this screen leaves your browser. Results are
held in this tab's sessionStorage and are gone when the tab closes. They are never
written to the draft buffer, never put in a changeset, never saved to a file and never sent to
any endpoint. No patient data goes in this repo, ever — so use a made-up name or none at all.
This is a bench for judging the wording, not a patient document: nothing patient-facing
publishes without Dr Kirstey's sign-off.
1 · Patient context
The resolver will not run without these. A life stage and an age decide
which rows are even eligible — that is the guard that stops a 54-year-old being scored
against a 15-19 DHEA-S band, and a post-menopausal woman against a follicular FSH band.
2 · Enter results
One result per line: a marker name, then the number, in the marker's canonical unit —
Ferritin 40, TSH: 2.1, Oestradiol 45 pmol/L.
Names are matched against each marker's own name and aliases.
A unit may be given and is checked, never converted — conversion is
marker_core's job and it does not happen in this browser. A unit that is not
the canonical one for that marker stops the line rather than guessing at it.
Anything not recognised is listed as unrecognised with the reason. A discarded
result is worse than an uninterpreted one.
3 · What each side reads
Check your results
What a patient sees after she uploads her report, before any analysis: this is what we read — is it right? Nothing she types leaves her browser.
Nothing here leaves your browser. Your results stay in this tab only. They are not saved
to this site, not sent anywhere, and they are gone when you close the tab.
Your report
We have read your report. Below is what we found. Please check each one
against the paper or PDF in front of you, and tell us if we got something wrong. Your analysis
opens once you have been through them all.
Paste a real report instead
For when the upload is built. Paste the JSON a report reader produces.
It stays in this tab.