Лабораторные диапазоны (low/normal/high) для конкретного биомаркера. Один из входов для interpretation на параметре (не “source of truth” — для non-quantitative параметров их вообще нет; и interpretation может быть передана нам уже готовой в interpretation-поле). Поверх interpretation — parameter-triage-codes (action-level).
Где живут в данных
FHIR Observation.referenceRange[] — массив low/high/appliesTo/age. Spec поддерживает multi-tier (по полу, возрасту, риск-группе). У нас в production текущий рендер сводится к одной паре min/max, остальное теряется.
Источники range
В порядке приоритета:
- Лабораторный input (PDF / JSON / HL7) — primary. Лаба указывает диапазон рядом со значением.
- LLM fallback — если явного диапазона в input нет, промпт просит LLM вывести популяционный.
Carry-over (повторный запрос): прочитать актуальный prompt fallback-логики и выписать конкретику — что спрашивает, какие источники приоритизирует, как handle multi-tier. Это повторяющееся в ревью wiki требование, пока не выполнено.
Multi-tier ranges
Лаба может прислать набор диапазонов на один параметр: general / CVD-high-risk / pregnancy / age-stratified. Текущая упрощающая редукция к одному min/max — lossy. См. multi-tier-range-storage.
Связанный аспект — выбор tier по профилю пациента (если у пациента ССЗ/диабет — использовать соответствующий риск-tier). Возможно уже частично в актуальном промпте.
Региональная вариабельность
EU и US гайдлайны расходятся в значениях. Apo-B threshold: EU 65 mg/dL vs US 70 mg/dL. Cyprus лаба использовала US guideline — не зафиксировано в нашей системе как region-aware decision. См. region-aware-ranges.
5% borderline zone
Жёлтая UX-зона ±5% от границы для индикации “близко к норме”. Захардкожено константой. См. 5-percent-borderline-zone (initial removal Apr 17 → reversed на следующем daily). Параллельная research-линия — сделать % настраиваемым per-org (RFC-004), см. custom-reference-ranges.
Custom ranges per lab
Лаборатории имеют собственные каталоги параметров с инструмент-специфичными / регион-специфичными диапазонами. Сейчас мы их игнорируем и определяем через AI. См. custom-reference-ranges (research stage, BG-925 / RFC-028 — скоро в имплементацию).
Failure modes
Risk-tier как general (Cyprus lab pattern)
Лаба указала только high-risk threshold (e.g. Apo-B <70 для CVD-risk), система применила как общий → ложный “high” для пациента без заявленных рисков. Будет исправлено (in plan), не блокер.
Lab status vs derived interpretation conflict
Лаба может прислать одновременно range и status (e.g. Hb: 130 g/L (130-160), status: low). Математически 130 в норме, статус говорит “low”. Разные источники истины расходятся.
Решение (текущее): trust lab status как truth (лаба — медицинский источник), рендер визуала из value (по диапазону). Возможный визуальный конфликт UI: текст “low” + зелёная зона. Возможно нужен tooltip для пользователя. См. lab-status-vs-derived-interpretation.
Carry-over: HDL 85 + стрелочка вверх + красный в Cyprus тесте Васи — ответ от создателя теста ожидается, Ильдар пришлёт.
Missing range → variable LLM interpretation
Без явного диапазона non-deterministic интерпретация. Один и тот же тест может get разные результаты в разных прогонах.
Carry-over: систематически такое происходит — но насколько серьёзная это проблема, отдельно не оценено. Требует research-итерации.
Открытые вопросы
- Прочитать актуальный fallback prompt (см. carry-over в “Источники range”) — повторный запрос.
- HL7 как input source — упомянут наряду с PDF/JSON, pipeline отдельный, не описан. Найти код, найти session — сделаем позже, не сейчас. См. → hl7-input-pipeline (placeholder).
- Mayo Clinic source — заменить generic homepage на specific Apo-B / lipids guideline URL.
- Severity non-deterministic LLM interpretation — насколько большая проблема (research-вопрос).
Связанные решения
- multi-tier-range-storage — где хранить multi-tier (raw text vs FHIR native) — contested
- region-aware-ranges — детектировать регион лаборатории — open
- 5-percent-borderline-zone — keep as marketing UX after reversal (initial Apr 17 → reversed на следующем дейлике) — active
- lab-status-vs-derived-interpretation — trust lab status, рендер из value — active
Связано
- parameter-range-type-prompt — Langfuse prompt
parameter_range_type: range_type enum + interpretationN/H/L/A - parameter-triage-codes — action-level поверх interpretation
- fhir-observation — FHIR контейнер value +
referenceRange[] - loinc — LOINC code определяет допустимые units
- custom-reference-ranges — admin/lab-managed ranges (research stage; скоро implementation)
- hl7-input-pipeline — HL7 input pipeline (placeholder)
- 100-percent-accuracy-debate — system-level accuracy / error compounding / positioning (placeholder)
Источники
Сноски
-
2026-04-17 digest “эти липопротеины б” (Ильдар + Артур + Катя, 55 мин), accessed 2026-05-17, https://github.com/Realai-plus/meeting-digests/blob/main/data/digest/2026/04/2026-04-17T10%3A01%3A00.000Z_эти_липопротеины_б_01KPDE5R6GGZJ8MTZ0W7H2S3R2.md — primary source. ↩
-
FHIR R4
Observation.referenceRange, accessed 2026-05-17, https://hl7.org/fhir/R4/observation-definitions.html#Observation.referenceRange. ↩ -
Mayo Clinic clinical labs (carry-over: заменить на specific Apo-B / lipids guideline URL), accessed 2026-05-17, https://www.mayocliniclabs.com/. ↩