Files
HealthLog/src/lib/medical-citations.ts
T
Marc-André Bombeck 9be30897fa feat(insights): add a cited reference-range backbone and richer metric explainers
Introduce src/lib/reference-ranges.ts: a structured, citation-backed
per-metric reference-range backbone (band + source body + year) with a
deterministic four-state placement helper, read by the UI surfaces. Each
band traces to the medical-citations registry, which gains the supporting
sources (ACC/AHA 2017 and ESC 2024 blood pressure, StatPearls pulse
pressure and mean arterial pressure, ESC/ESH 2018 pulse-wave velocity,
FDA 2024 and StatPearls pulse oximetry, J Gen Intern Med 2019 temperature,
RCP NEWS2 and American Lung Association respiratory rate, visceral-fat
imaging literature, AHA 2024 resting heart rate, ESC/NASPE 1996 HRV,
Wilcox 2000, ACOG 651, Phillips 2017 and CDC 2024 sleep).

Blood pressure keeps ESH 2023 as the labelled default; ACC/AHA 2017 and
ESC 2024 appear only as displayed placement context. Enrich the metric
explainers with concise cited reference bands and a general-guidance
tooltip on every metric page: a darker-skin pulse-oximeter over-read
caveat, device-proxy honesty for readiness/recovery/strain/stress, an
HRV day-to-day-noise note, and a resting-heart-rate clarification. Fill
the empty registry normal ranges, reconcile the steps green floor to
8,000, and tighten the body-temperature band below the fever line. Add
free pulse-pressure and mean-arterial-pressure context on the blood-
pressure detail page, plus cycle-physiology and sleep-hygiene copy across
all six locales. Cycle thresholds carry a verification marker pending an
ACOG source check.
2026-06-18 20:17:04 +02:00

498 lines
19 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Single source of truth for medical guideline citations.
*
* Every threshold, every range, every "ESC/ESH says…" statement in the
* code or AI prompts MUST reference one of the entries below — either
* by importing the constant directly or by quoting the same `name` and
* `url` in a comment above the value.
*
* Adding a new citation:
* 1. Verify the source against THREE independent reputable references
* (guideline document + WHO/fachgesellschaft + peer-reviewed paper
* or government publication is the gold standard).
* 2. Capture the publication URL so the truthfulness drift-test can
* re-resolve it.
* 3. Document any caveat ("BIA-derived, not DEXA-equivalent",
* "pediatric only", "treated cohort only") inline so consumers
* can decide whether the citation applies to their use case.
*
* Drift-test (`src/lib/__tests__/medical-citations.test.ts`) asserts
* that every CITATIONS entry has a non-empty url + caveat field.
*/
export interface Citation {
/** Stable id used to reference this citation in code. */
readonly id: string;
/** Human-readable name shown in UI ("source" attribution). */
readonly name: string;
/** Year of publication. */
readonly year: number;
/** Stable URL to the source document. */
readonly url: string;
/** One-sentence caveat about scope or limitation. */
readonly caveat: string;
}
export const CITATIONS = {
/**
* 2023 ESH Guidelines for the management of arterial hypertension.
* The last joint ESC/ESH guideline was 2018; ESH published 2023
* standalone (ESC withdrew from the joint authoring). Targets that
* HealthLog uses (SBP 120-129 / DBP 70-79 for <65; SBP 130-139 / DBP
* 70-79 for ≥65) are unchanged from 2018 to 2023.
*/
ESH_2023_HYPERTENSION: {
id: "esh-2023-hypertension",
name: "ESH 2023",
year: 2023,
url: "https://journals.lww.com/jhypertension/fulltext/2023/12000/2023_esh_guidelines_for_the_management_of_arterial.2.aspx",
caveat: "Pure-hypertension guideline; not a joint ESC document since 2023.",
},
/**
* Saint-Maurice PF, et al. "Association of daily step count and step
* intensity with mortality among US adults." JAMA. 2020.
* The paper reports continued dose-response benefit (HR 0.49 at 8k
* vs 4k, HR 0.35 at 12k vs 4k) — NOT a plateau. The plateau-shaped
* finding belongs to Paluch 2022 Lancet Public Health (PMID
* 35247352, age-stratified meta-analysis). WHO 2020 PA guidelines
* publish minutes per week, NOT a step quota — DO NOT cite WHO
* for a step number.
*/
STEPS_SAINT_MAURICE_2020: {
id: "steps-saint-maurice-2020",
name: "Saint-Maurice JAMA 2020",
year: 2020,
url: "https://jamanetwork.com/journals/jama/fullarticle/2763292",
caveat:
"U.S. adult cohort, observational; benefit accumulates strongly through ~12k steps/day (continued dose-response, not a plateau).",
},
/**
* WHO 2020 Guidelines on Physical Activity and Sedentary Behaviour.
* Adults: 150-300 min/wk moderate OR 75-150 min/wk vigorous activity.
* Cite this document for activity time, NOT for steps.
*/
WHO_2020_PA: {
id: "who-2020-physical-activity",
name: "WHO 2020 Physical Activity",
year: 2020,
url: "https://www.who.int/publications/i/item/9789240015128",
caveat: "Publishes minutes/week, not a step quota.",
},
/**
* BTS Emergency Oxygen Guideline 2017 — explicit treatment target
* 94-98% saturation (88-92% for chronic hypercapnia risk). Used as
* comparison anchor for HealthLog's consumer band.
*/
BTS_2017_OXYGEN: {
id: "bts-2017-emergency-oxygen",
name: "BTS 2017 Emergency Oxygen",
year: 2017,
url: "https://thorax.bmj.com/content/72/Suppl_1/ii1",
caveat: "Hospital emergency context, not consumer monitoring.",
},
/**
* NICE NG115 — Chronic obstructive pulmonary disease in over 16s:
* diagnosis and management. Recommends ≤92% SpO2 as escalation
* threshold ("call provider").
*/
NICE_NG115_COPD: {
id: "nice-ng115-copd",
name: "NICE NG115",
year: 2018,
url: "https://www.nice.org.uk/guidance/ng115",
caveat: "COPD-focused; useful as the 'call provider' floor.",
},
/**
* ADA Standards of Medical Care in Diabetes — 2024 (§6 Glycemic
* Targets). Pre-prandial 80-130 mg/dL, post-prandial <180 mg/dL.
* No published adult bedtime target — ISPAD 2022 publishes 80-140
* for pediatric T1D.
*/
ADA_2024_GLYCEMIC: {
id: "ada-2024-glycemic",
name: "ADA 2024 Standards of Care",
year: 2024,
url: "https://diabetesjournals.org/care/article/47/Supplement_1/S111/153957",
caveat:
"Pre-prandial 80-130, post-prandial <180; no published adult bedtime target.",
},
/**
* ISPAD Clinical Practice Consensus Guidelines 2022 — pediatric
* T1D bedtime target 80-140 mg/dL. NOT validated for adults.
*/
ISPAD_2022_PEDIATRIC: {
id: "ispad-2022-pediatric",
name: "ISPAD 2022",
year: 2022,
url: "https://onlinelibrary.wiley.com/doi/10.1111/pedi.13455",
caveat: "Pediatric T1D context; not validated for adult use.",
},
/**
* ACE (American Council on Exercise) body-fat percentage standards.
* Essential fat: M 2-5% / F 10-13%. Athletes: M 6-13% / F 14-20%.
* Fitness: M 14-17% / F 21-24%. Acceptable: M 18-24% / F 25-31%.
* Obese: M 25%+ / F 32%+. Source widely cited; ACE bases the bands
* on Heyward & Wagner "Applied Body Composition Assessment".
*/
ACE_BODY_FAT: {
id: "ace-body-fat-standards",
name: "ACE Body-Fat Standards",
year: 2009,
url: "https://www.acefitness.org/resources/everyone/blog/112/what-are-the-guidelines-for-percentage-of-body-fat-loss/",
caveat:
"Reference categories; clinical decisions should use DEXA or hydrostatic.",
},
/**
* AASM 2015 — adults need 7+ hours of sleep on a regular basis.
* 9+ hours acceptable for young adults, less for older adults.
*/
AASM_2015_SLEEP: {
id: "aasm-2015-adult-sleep",
name: "AASM 2015 Adult Sleep Duration",
year: 2015,
url: "https://aasm.org/resources/pdf/pressroom/adult-sleep-duration-consensus.pdf",
caveat: "Target ≥7h adults; older adults may need slightly less.",
},
/**
* Watson PE, et al. "Total body water volumes for adult males and
* females estimated from simple anthropometric measurements." Am J
* Clin Nutr. 1980. Establishes the canonical TBW (L) equations
* referenced by Withings hydration estimates.
*/
WATSON_1980_TBW: {
id: "watson-1980-tbw",
name: "Watson 1980 TBW formula",
year: 1980,
url: "https://pubmed.ncbi.nlm.nih.gov/6986753/",
caveat:
"Original anthropometric TBW equations; predictive, not measurement.",
},
/**
* ICRP Publication 89 (2002) — Reference values for adult human TBW
* (~42 L male, ~29 L female). Used as bounds for plausibility checks.
*/
ICRP_89_REFERENCE_MAN: {
id: "icrp-89-reference-man",
name: "ICRP 89 Reference Man",
year: 2002,
url: "https://www.icrp.org/publication.asp?id=ICRP%20Publication%2089",
caveat:
"Reference values for an idealised adult; individual variation broad.",
},
// ── v1.18.6 — reference-range backbone sources ──
/**
* AHA — All About Heart Rate (resting + target heart rates), 2024.
* Normal adult resting 60–100 bpm; endurance athletes benignly 40–60.
* Consumer-facing orientation; symptomatic concern is the trigger for
* care, not the number alone.
*/
AHA_2024_RHR: {
id: "aha-2024-rhr",
name: "AHA 2024 Heart Rate",
year: 2024,
url: "https://www.heart.org/en/health-topics/high-blood-pressure/the-facts-about-high-blood-pressure/all-about-heart-rate-pulse",
caveat:
"General adult band; a trained heart can sit 40–60, and a new low with dizziness/fainting is the concern, not the number alone.",
},
/**
* StatPearls/NIH — Pulse Oximetry (2023). Healthy adult room-air SpO₂
* 95–100% (bulk 96–99%); mild hypoxaemia 91–94%; clinically significant
* <90%. Consumer wrist/finger optical readers are wellness-grade
* (±2–4%) and a single low reading is often artefact.
*/
STATPEARLS_PULSE_OX: {
id: "statpearls-pulse-ox",
name: "StatPearls Pulse Oximetry",
year: 2023,
url: "https://www.ncbi.nlm.nih.gov/books/NBK470348/",
caveat:
"Healthy room-air band; consumer optical SpO₂ is ±2–4% and a single low reading is often artefact — sustained runs are the signal.",
},
/**
* 2017 ACC/AHA Guideline for the Prevention, Detection, Evaluation and
* Management of High Blood Pressure in Adults. Lowers the US disease
* line: Normal <120/<80; Elevated 120–129/<80; Stage 1 130–139 or
* 80–89; Stage 2 ≥140 or ≥90. Surfaced only as the stricter COMPARISON
* anchor next to the shipped ESH default — never the labelled band.
*/
ACC_AHA_2017_BP: {
id: "acc-aha-2017-bp",
name: "ACC/AHA 2017",
year: 2017,
url: "https://www.ahajournals.org/doi/10.1161/HYP.0000000000000065",
caveat:
"US guideline; labels 130–139/80–89 as Stage 1 — a stricter line than the ESH default, shown for placement only.",
},
/**
* 2024 ESC Guidelines for the management of elevated blood pressure and
* hypertension. Adds an "Elevated" diagnostic band (120–139/70–89) and a
* treated SBP target of 120–129. Disease line stays ≥140/90 office.
* Displayed as context alongside the ESH 2023 default.
*/
ESC_2024_BP: {
id: "esc-2024-bp",
name: "ESC 2024",
year: 2024,
url: "https://academic.oup.com/eurheartj/article/45/38/3912/7741010",
caveat:
"European; introduces an 'Elevated' 120–139/70–89 band and a treated 120–129 target — context, not the shipped classification.",
},
/**
* StatPearls/NCBI — Physiology, Pulse Pressure (NBK482408). PP = SBP −
* DBP; ~40 mmHg typical at rest, wide ≳60 mmHg marks large-artery
* stiffening, narrow ≲25 mmHg can accompany low stroke volume. A
* "discuss with a clinician" signal, not a diagnosis.
*/
STATPEARLS_PULSE_PRESSURE: {
id: "statpearls-pulse-pressure",
name: "StatPearls Pulse Pressure",
year: 2023,
url: "https://www.ncbi.nlm.nih.gov/books/NBK482408/",
caveat:
"Educational physiology reference; PP is a discussion prompt, never a standalone diagnosis.",
},
/**
* StatPearls/NCBI — Physiology, Mean Arterial Pressure (NBK538226).
* MAP ≈ (SBP + 2·DBP)/3; resting band ~70–100 mmHg, ~60 mmHg the
* conventional organ-perfusion floor — an acute-care concept, NOT a
* consumer self-alarm threshold.
*/
STATPEARLS_MAP: {
id: "statpearls-map",
name: "StatPearls Mean Arterial Pressure",
year: 2023,
url: "https://www.ncbi.nlm.nih.gov/books/NBK538226/",
caveat:
"The ~60 mmHg floor is an acute-care perfusion concept, not a consumer alarm threshold.",
},
/**
* 2018 ESC/ESH Guidelines for the management of arterial hypertension.
* Source of the carotid-femoral PWV >10 m/s organ-damage cut-off and
* the BP grade bands still widely cited. The PWV number is European;
* AHA/ACC do not enshrine an equivalent consumer PWV threshold.
*/
ESC_ESH_2018_PWV: {
id: "esc-esh-2018-pwv",
name: "ESC/ESH 2018",
year: 2018,
url: "https://academic.oup.com/eurheartj/article/39/33/3021/5079119",
caveat:
"cf-PWV >10 m/s is the European clinical reference; consumer PWV / vascular-age estimates are proxies, not clinical cf-PWV.",
},
/**
* US FDA — pulse-oximeter accuracy and limitations (Feb 2024 advisory
* committee review + safety communication). Oximeters can overestimate
* true saturation in people with darker skin, roughly 3× more often
* than in lighter-skinned patients (occult hypoxaemia).
*/
FDA_2024_PULSE_OX: {
id: "fda-2024-pulse-ox",
name: "FDA 2024 Pulse Oximeter Review",
year: 2024,
url: "https://www.fda.gov/medical-devices/safety-communications/pulse-oximeter-accuracy-and-limitations-fda-safety-communication",
caveat:
"Documents over-reading in darker skin; a single near-normal reading is not a clearance — confirm when concerned.",
},
/**
* "Normal Body Temperature: A Systematic Review" — J Gen Intern Med,
* 2019. Population oral-equivalent mean ~36.6 °C (normal ~35.7–37.4 °C),
* superseding the conventional 37.0 °C set point. Fever ≥38.0 °C oral.
*/
JGIM_2019_TEMPERATURE: {
id: "jgim-2019-temperature",
name: "J Gen Intern Med 2019",
year: 2019,
url: "https://link.springer.com/article/10.1007/s11606-019-05148-7",
caveat:
"Oral-equivalent mean; sites differ by up to ~1 °C — tag the measurement site before comparing.",
},
/**
* Royal College of Physicians — National Early Warning Score 2 (NEWS2),
* 2017. Respiratory-rate scoring: highest-risk ≤8 and ≥25/min. A
* hospital deterioration tool, not a consumer alarm.
*/
RCP_2017_NEWS2: {
id: "rcp-2017-news2",
name: "RCP NEWS2 2017",
year: 2017,
url: "https://www.rcp.ac.uk/improving-care/resources/national-early-warning-score-news-2/",
caveat:
"Hospital deterioration score; the ≥25/min cutoff is clinical context, not a self-monitoring alarm.",
},
/**
* American Lung Association — resting respiratory rate reference
* (12–20 breaths/min for healthy adults). Consumer-facing vital-sign
* orientation.
*/
ALA_RESPIRATORY_RATE: {
id: "ala-respiratory-rate",
name: "American Lung Association",
year: 2024,
url: "https://www.lung.org/lung-health-diseases/how-lungs-work/breathing-rate",
caveat:
"General adult resting band; rates run higher in children and shift with activity, fever and emotion.",
},
/**
* Peer-reviewed visceral-adipose-tissue imaging literature (2014–2025):
* CT/MRI/DXA VAT area >~100 cm² increased-risk, >~160 cm² high-risk.
* Ethnicity-dependent; the consumer scale "rating" is NOT a cm² value.
*/
VAT_IMAGING_THRESHOLD: {
id: "vat-imaging-threshold",
name: "VAT imaging literature",
year: 2025,
url: "https://pubmed.ncbi.nlm.nih.gov/24008002/",
caveat:
"Imaging cm² thresholds; the consumer scale 'visceral fat rating' is a separate unitless scale, not interchangeable.",
},
/**
* Wilcox AJ, Dunson D, Baird DD. "The timing of the 'fertile window' in
* the menstrual cycle." BMJ, 2000. The 6-day fertile window ends on
* ovulation day; ovulation timing is highly variable even in regular
* cyclers.
*/
WILCOX_2000_FERTILE_WINDOW: {
id: "wilcox-2000-fertile-window",
name: "Wilcox BMJ 2000",
year: 2000,
url: "https://www.bmj.com/content/321/7271/1259",
caveat:
"Fertile-window timing is highly variable; calendar estimates approximate and are not a contraceptive method.",
},
/**
* ACOG Committee Opinion 651 (2015) — "Menstruation in Girls and
* Adolescents: Using the Menstrual Cycle as a Vital Sign." Adult cycle
* 24–38 days, bleeding ~5 days (up to ~7).
*
* NEEDS-VERIFY ACOG — the cycle-length / bleeding-duration figures cited
* in the `insights.subPage.explainer.cycleEducationBody` copy, and any
* "when to see a clinician" thresholds (cycle <21 / >35, amenorrhea ≥3
* months, heavy bleeding >7 days), must be confirmed against the live
* ACOG FAQ before shipping that copy to users (automated fetch was
* rate-limited during research).
*/
ACOG_CO651_2015: {
id: "acog-co651-2015",
name: "ACOG CO 651 2015",
year: 2015,
url: "https://www.acog.org/clinical/clinical-guidance/committee-opinion/articles/2015/12/menstruation-in-girls-and-adolescents-using-the-menstrual-cycle-as-a-vital-sign",
caveat:
"Cycle as a vital sign; exact clinician-consultation thresholds should be confirmed against the live ACOG FAQ.",
},
/**
* Phillips AJK, et al. "Irregular sleep/wake patterns are associated
* with poorer academic performance and delayed circadian and sleep/wake
* timing." Sci Rep, 2017 — origin of the Sleep Regularity Index (SRI).
* UK Biobank (Windred 2023/24) tied higher regularity to lower mortality.
*/
PHILLIPS_2017_SRI: {
id: "phillips-2017-sri",
name: "Phillips Sci Rep 2017",
year: 2017,
url: "https://www.nature.com/articles/s41598-017-03171-4",
caveat:
"Sleep-regularity construct; no universal good/bad threshold — present as a personal trend.",
},
/**
* US CDC — About Sleep / tips for better sleep (2024). Evidence-based
* sleep-hygiene behaviours (consistent schedule, morning light, dim
* evenings, caffeine timing, cool dark room).
*/
CDC_2024_SLEEP: {
id: "cdc-2024-sleep",
name: "CDC 2024 Sleep",
year: 2024,
url: "https://www.cdc.gov/sleep/about/index.html",
caveat: "General sleep-hygiene guidance; individual needs vary.",
},
/**
* WHO — Obesity: preventing and managing the global epidemic (TRS 894),
* 2000. The BMI classification still in use: underweight <18.5, normal
* 18.5–24.9, overweight 25.0–29.9, obesity ≥30. Asian-population risk
* rises at lower cut-offs (WHO 2004).
*/
WHO_2000_BMI: {
id: "who-2000-bmi",
name: "WHO 2000 BMI",
year: 2000,
url: "https://www.who.int/publications/i/item/WHO_TRS_894",
caveat:
"Population screen, not a diagnosis; Asian-population risk rises at lower cut-offs and BMI does not distinguish muscle from fat.",
},
/**
* WHO/IDF — Definition and Diagnosis of Diabetes Mellitus and
* Intermediate Hyperglycaemia, 2006. Impaired fasting glucose floor of
* 110 mg/dL (vs ADA's 100); the diabetes line (≥126) is shared.
*/
WHO_IDF_2006_GLUCOSE: {
id: "who-idf-2006-glucose",
name: "WHO/IDF 2006",
year: 2006,
url: "https://www.who.int/publications/i/item/definition-and-diagnosis-of-diabetes-mellitus-and-intermediate-hyperglycaemia",
caveat:
"Sets the impaired-fasting-glucose floor at 110 mg/dL; the diabetes threshold (≥126) is shared with ADA.",
},
/**
* ESC/NASPE Task Force — Heart Rate Variability: Standards of
* Measurement, Physiological Interpretation and Clinical Use.
* Circulation / Eur Heart J, 1996. Defines SDNN/RMSSD norms and the
* prognostic 24-h SDNN bands; day-to-day swings of ~±10% are routine.
*/
ESC_NASPE_1996_HRV: {
id: "esc-naspe-1996-hrv",
name: "ESC/NASPE HRV Standards 1996",
year: 1996,
url: "https://www.ahajournals.org/doi/10.1161/01.CIR.93.5.1043",
caveat:
"Clinical 24-h SDNN norms are NOT interchangeable with an overnight wearable RMSSD; only the personal trend is meaningful.",
},
} as const satisfies Record<string, Citation>;
export type CitationId = keyof typeof CITATIONS;
/** Returns the URL for the given citation id. */
export function citationUrl(id: CitationId): string {
return CITATIONS[id].url;
}
/**
* Returns a localized "source: NAME (YEAR)" string for UI use.
* Locale-agnostic for now (English-first); German UI consumers can
* format the year via `Intl.NumberFormat` if needed but the citation
* name itself is canonical and not translated.
*/
export function citationLabel(id: CitationId): string {
const c = CITATIONS[id];
return `${c.name} (${c.year})`;
}