feat(labs): add the Laborwerte page, navigation, and OpenAPI contract

A dedicated /labs page hosts manual entry and a per-analyte view: the
four essentials (biomarker, value, unit, date) stay visible, the
reference range, panel grouping and note sit under an optional section.
Results group by analyte with a small inline trend once an analyte has
two or more readings. The reference-range badge is deliberately neutral
and calm — an out-of-range value reads as a quiet directional marker, not
an alarming red.

Adds the labs section toggle to the health-record export panel, the /labs
nav entries, the /api/labs OpenAPI routes, and the labs copy across all
six locales.
This commit is contained in:
Marc-André Bombeck committed 2026-06-14 23:39:52 +02:00
1 parent fbecb6b5c8
commit 72fb51c257
19 files changed
+1690 -24

No files matched your search

@@ -56,6 +56,7 @@ interface SectionState {
compliance: boolean;
mood: boolean;
bmi: boolean;
labs: boolean;
}
const DEFAULT_SECTIONS: SectionState = {
@@ -76,6 +77,7 @@ const DEFAULT_SECTIONS: SectionState = {
compliance: true,
mood: false, // privacy default
bmi: true,
labs: true,
};
function buildSelectionSections(s: SectionState) {
@@ -102,6 +104,7 @@ function buildSelectionSections(s: SectionState) {
medications: { list: s.medList, compliance: s.compliance },
mood: s.mood,
bmi: s.bmi,
labs: s.labs,
};
}
@@ -411,6 +414,11 @@ export function HealthRecordExportPanel() {
checked={sections.mood}
onToggle={() => toggle("mood")}
/>
<ToggleRow
label={t("settings.healthRecord.labs")}
checked={sections.labs}
onToggle={() => toggle("labs")}
/>
</div>
{isPdfLike && (