Старый Python-микросервис, определяет canonical normalizationId биомаркеров. Появился до loinc-harmonization-service (когда команда не знала про LOINC и придумывала свои canonical-имена). Сейчас parallel путь в тренды (ParameterV2Id vs LOINC TrendingGroupId). Целевая судьба — TS-port + merge as fallback внутри LOINC service. См. loinc-unification-direction.
Использование в BloodGPT
- Что делает: raw biomarker name → canonical normalizationId (внутренний справочник, не LOINC)
- Consumers: .NET API, analysis-worker (legacy путь)
- Storage: PostgreSQL + Redis cache
- Deploy: GCP staging EU + AF (мигрировал с Azure Jan 2026), общая нормализация для обоих регионов
- Repo: часть BloodGPT-инфраструктуры, отдельный codebase от LOINC-сервиса
Status и направление
Production-running, parallel с LOINC-сервисом. Mar 20 1:1 (Ильдар + Артур) зафиксировано направление: Ильдар активно портирует Python LLM workflow на TypeScript, target — merge as fallback внутри LOINC service (не полный phase-out). Артур: «TS-вариант выглядит более правильным, чем то, что хранится в базе».
Сервис эволюционирует постоянно — конкретные технические детали (cache schema, queue config, worker tuning) могут устареть быстро. Эта страница описывает общую картину; точечные проблемы — в Slack-тредах и session digests.
Известная история сложностей (для контекста)
С декабря 2025 — хронические stability issues (OOM, 503s, queue backlog, cache consistency). Команда систематически работала над улучшениями: повышение Azure плана, оптимизация памяти, добавление job polling, переезд на GCP, отдельные имена очередей. Многое resolved или обошли через изменения архитектуры; часть могла устареть.
Конкретные эпизоды описаны в Slack-тредах (см. ~/Desktop/loinc-digest/normalization-digest.md, 22 треда) — здесь не дублируем.
Carry-over: при следующей verify-итерации проверить какие из исторических проблем (cache consistency, SampleMaterial mismatch, queue isolation, OOM workers) реально актуальны на 2026-04-26 и какие resolved через эволюцию.
Архитектура → Inngest direction
Сервис использует свой ad-hoc queue (Redis BZPOPMIN, worker pod), job polling, hand-coded fallbacks. Это дублирует функциональность, которую даёт inngest из коробки. Ильдар (Feb 27 2026): «каждый сервис переизобретает очереди — это дело мы изменим». Direction: pipeline-шаги переезжают в Inngest functions inside TS Mastra — параллельно с TS-портом workflow самого нормализатора.
Открытые вопросы
- Точный current status каждой исторической проблемы — carry-over для verify-pass
- Когда retire — зависит от прогресса loinc-unification-direction и cutover criteria
Связанные решения
- loinc-unification-direction — целевое направление (TS-port + merge into LOINC) — active
- cache-invalidation-ownership — кто owns cache consistency между сервисами — contested
Связано
- loinc-harmonization-service — replacement target (merge as fallback)
- loinc — стандарт
- inngest — substrate-кандидат для замены ad-hoc queue-логики
- team-dynamics — transparency / trust обсуждался в контексте этого сервиса (March 12 2026)
- multi-tenant-fhir-storage — нормализация как сервис не была добавлена в ingest для B2B (FDA digest 2026-04-23)
Источники
Источники: 1.
Сноски
-
Mar 20 1:1 (Ильдар + Артур), accessed 2026-05-17, https://github.com/Realai-plus/meeting-digests/blob/main/data/digest/2026/03/2026-03-20T13%3A09%3A00.000Z_Про_портирование_нормализации_01KM5NSEK9TYP3QZM5YYNDSF7Q.md. ↩