AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Як нормалізувати медичні дані

Посібник: перетворіть медичні дані з багатьох джерел в одну порівнянну форму — пошук LOINC, одиниці UCUM, дати ISO, референтні діапазони, відсутність дублікатів при повторній спробі та валідація за європейським лабораторним профілем.

Нормалізація медичних даних означає перетворення значень, які надходять у різних формах, в одну порівнянну форму: однаковий код для одного й того ж тесту, однакова система одиниць вимірювання, дати в одному форматі, кожне значення з його діапазоном посилань та його джерелом, і без дублікатів. Цей посібник показує, як це зробити перед тим, як дані потраплять до запису HL7 FHIR R4: пошук кодів LOINC та ATC, використання одиниць UCUM, відхилення неоднозначних дат, збереження діапазонів, уникнення дублікатів при повторних спробах та перевірка результату за європейським лабораторним профілем. Кожна показана відповідь надходить з Anpheros API.

Чому це важливо

Той самий результат HbA1c може надійти до вас як "HbA1c 6,4 %", "Гемоглобін глікований: 6.4", "Glycated haemoglobin 46 mmol/mol" або лише лабораторний код, який розуміє одна лабораторія. Доки вони не стануть одним кодом з однією одиницею вимірювання:

Нормалізація повинна відбуватися в момент надходження даних до запису, один раз, а не в кожному додатку, який згодом їх читає.

Що містить нормалізоване значення

Частина Нормалізована форма Приклад
Що вимірювалося код зі стандартної системи LOINC 4548-4 (HbA1c), RxNorm 6809 (метформін), ICD-10 E11 (цукровий діабет 2 типу)
Значення число або текст, тільки якщо результат не є числовим 6.4
Одиниця вимірювання UCUM %, mg/dL, mm[Hg], kg
Коли дата-час за стандартом ISO 8601, із зазначенням часового поясу, якщо час має значення 2026-10-01T07:30:00Z
Нормальний діапазон нижнє та верхнє значення в тій самій одиниці вимірювання 4.0–5.6
Джерело хто його створив і з якої системи import з labx
Ідентифікатор щось, що робить повторний запис впізнаваним ключ ідемпотентності або ідентифікатор джерела

Яка кодова система відповідає якому типу ресурсу, перелічено в розділі Кодові системи FHIR.

Крок 1: знайдіть код

Шукайте термінологію платформи за англійською або румунською назвою, або за скороченням:

curl "https://platform.anpheros.com/v1/terminology/loinc?q=hba1c" -H "Authorization: Bearer $KEY"
curl "https://platform.anpheros.com/v1/terminology/loinc?q=hemoglobina%20glicozilata" -H "Authorization: Bearer $KEY"

Обидва повертають однакове поняття:

{"data": [{"system": "http://loinc.org", "code": "4548-4", "display": "Hemoglobin A1c/Hemoglobin.total in Blood",
           "display_ro": "Hemoglobină glicozilată (HbA1c)", "category": "laboratory", "unit": "%"}], "total": 1}

Для ліків, Anpheros Search знаходить речовину за назвою або брендом і надає її RxNorm ingredient code та EMA product numbers:

curl "https://platform.anpheros.com/v1/search?q=metformin&type=treatment" -H "Authorization: Bearer $KEY"

Поле unit — це одиниця, яку LOINC очікує для цього тесту. Використовуйте його, щоб перевірити, що ви отримали. Створіть зіставлення від власних назв кожного джерела до кодів один раз, для кожного джерела, і зберігайте його у своїй інтеграції. Не вгадуйте під час запису: коли назва неоднозначна, і ніщо у джерелі не вирішує її, залиште її незіставленою та запитайте джерело. Як імпортувати лабораторні результати до запису FHIR показує, як зберігаються та повідомляються незіставлені лабораторні маркери.

Крок 2: запис із кодами, одиницями вимірювання та діапазонами

curl -X POST "https://platform.anpheros.com/v1/patients/$PID/observations" -H "Authorization: Bearer $KEY" \
     -H "Content-Type: application/json" -H "Idempotency-Key: lab-77-hba1c" -d '{
  "code": "4548-4", "category": "laboratory",
  "value": 6.4, "unit": "%", "effective_at": "2026-10-01T07:30:00Z",
  "reference_range": {"low": 4.0, "high": 5.6},
  "author_type": "import"
}'
{"id": "3296315c-…", "code": "4548-4", "system": "http://loinc.org", "display": "Hemoglobin A1c/Hemoglobin.total in Blood",
 "category": "laboratory", "effective_at": "2026-10-01T07:30:00Z", "value": 6.4, "unit": "%",
 "reference_range": {"low": 4.0, "high": 5.6}, "status": "final", "fhir": "Observation/3296315c-…"}

Коли ви надсилаєте лише код, платформа заповнює стандартну назву LOINC, як у REST API, так і в FHIR API (/fhir/R4), тому кожна програма читає одне й те саме display. display, який ви надсилаєте самостійно, зберігається як є.

Зберігайте також оригінальне формулювання. Для лабораторного звіту code.text у FHIR Observation містить назву лабораторії ("Hemoglobina glicozilata (HbA1c)") поруч із кодуванням LOINC. Пацієнт все ще впізнає свій паперовий звіт, і нічого не втрачається, якщо зіставлення колись буде поставлено під сумнів.

Крок 3: одиниці вимірювання

Використовуйте коди UCUM: mg/dL, mmol/L, %, mm[Hg], kg, cm, /min, Cel. Два правила запобігають більшості помилок:

Anpheros не конвертує одиниці вимірювання для вас; він зберігає одиницю, яку ви надсилаєте.

Крок 4: дати

Перетворіть дати до формату ISO 8601 перед записом, використовуючи відомий формат джерела. 01.10.2026 — це 1 жовтня в Румунії та багатьох європейських країнах, але 10/01/2026 — це 1 жовтня лише в Сполучених Штатах. API відхиляє все, що не є ISO, замість того, щоб вгадувати:

{"error": {"type": "invalid", "message": "Input should be a valid datetime or date, invalid character in year (at effective_at)", "field": "effective_at"}}

Виняток становить лабораторний конектор: він приймає DD.MM.YYYY та DD/MM/YYYY, оскільки знає, що читає європейський звіт.

Для вимірювань, де важливий час доби (артеріальний тиск, глюкоза, дози ліків), надсилайте час із його часовим поясом. Показання о 23:30 в Бухаресті припадають на попередній день за UTC, і пацієнт очікує їх у день, коли вони були зроблені.

Крок 5: відсутність дублікатів

Дублікати виникають через повторні спроби, надсилання одного й того ж звіту двічі та надходження одного й того ж значення двома шляхами.

Крок 6: перевірка за профілем

Для лабораторних результатів запитайте платформу, наскільки ресурс відповідає профілю HL7 Europe для лабораторних звітів, перш ніж покладатися на нього:

curl -X POST "https://platform.anpheros.com/fhir/R4/Observation/\$validate?profile=eu-lab" -H "Authorization: Bearer $KEY" \
     -H "Content-Type: application/fhir+json" -d '{
  "resourceType": "Observation", "status": "final",
  "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory"}]}],
  "code": {"text": "HbA1c"}, "subject": {"reference": "Patient/'$PID'"},
  "valueQuantity": {"value": 6.4, "unit": "%"}
}'

Цей ненормалізований результат отримує точний список:

{"resourceType": "OperationOutcome", "issue": [
  {"severity": "error", "code": "invalid", "diagnostics": "Observation.code must carry a LOINC coding.", "expression": ["Observation.code"]},
  {"severity": "error", "code": "required", "diagnostics": "Observation.effective[x] is required.", "expression": ["Observation.effective"]},
  {"severity": "warning", "code": "business-rule", "diagnostics": "valueQuantity should carry a UCUM system and code.", "expression": ["Observation.valueQuantity"]},
  {"severity": "warning", "code": "informational", "diagnostics": "No referenceRange: interpretation will need the laboratory's ranges.", "expression": ["Observation.referenceRange"]},
  {"severity": "information", "code": "informational", "diagnostics": "No performer (laboratory) recorded.", "expression": ["Observation.performer"]},
  {"severity": "information", "code": "informational", "diagnostics": "No issued time (when the laboratory released the result).", "expression": ["Observation.issued"]}]}

Кожна проблема відповідає одному з наведених вище кроків. Запустіть $validate у своїх інтеграційних тестах з реальними зразками з кожного джерела.

Крок 7: збереження джерела

Нормалізація змінює спосіб запису значення, але ніколи не його походження. Надсилайте author_type (device, import, practitioner, patient) та X-Anpheros-Source-System з кожним записом. Це дозволяє лікарю, аудитору або моделі ШІ відрізнити лабораторний результат від значення, введеного вдома. Див. Пояснення походження медичних даних.

Чеклист

Часті запитання

Що таке нормалізація медичних даних?

Перетворення медичних даних з різних джерел в одну стандартну форму: спільні коди (LOINC для тестів та вимірювань, ICD-10 для діагнозів, ATC для медикаментів), одиниці UCUM, дати ISO, референтні діапазони та записане джерело, щоб значення з різних систем можна було порівнювати, комбінувати та обмінювати.

Чи слід перетворювати всі значення в одну одиницю?

Зберігайте одиницю, в якій вимірювало джерело, доки вона є дійсною одиницею UCUM, що відповідає коду, і перетворюйте під час відображення або аналізу. Це дозволяє відстежувати кожне збережене значення до його початкового звіту.

Чи може нормалізація бути повністю автоматичною?

Здебільшого. Коди у джерелі, відомі назви та добре сформовані одиниці можуть бути відображені автоматично. Неоднозначні назви та невідомі локальні коди потребують одноразового рішення людини для кожного джерела, після чого відображення стає автоматичним.

Пов'язане

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy