Коротка відповідь: базові ресурси FHIR навмисно гнучкі: майже все є необов'язковим, а більшість кодів — лише приклади, щоб один стандарт підходив для будь-якої країни. Профіль — це StructureDefinition, який звужує ресурс для одного використання: у цьому контексті Patient повинен мати ідентифікатор цього типу, Observation.code повинен бути кодом LOINC з цього списку, цей елемент повинен підтримуватися, а той — не з'являтися. Розширення додає елемент, якого бракує в базовому ресурсі, ідентифікований за URL та визначений власним StructureDefinition. Посібники з впровадження (US Core, IPS, національні посібники) — це колекції профілів, розширень, наборів значень та прикладів. Ресурс вказує, яким профілям він претендує відповідати, у meta.profile, а валідатор перевіряє його.
Що може змінити профіль
Профіль FHIR може змінювати ресурс лише шляхом його звуження: уточнення кардинальності, позначення елементів як обов'язкових для підтримки, фіксації значень або шаблонів, прив'язки елементів до наборів значень із певною силою, розбиття списків на іменовані частини, обмеження типів вибору, додавання інваріантів FHIRPath та обмеження цільових посилань. Профіль не може додавати елементи, перейменовувати щось або послаблювати базову специфікацію.
| Обмеження | Що воно робить | Приклад |
|---|---|---|
| Кардинальність | Робить необов'язкові елементи обов'язковими або забороняє їх | Patient.identifier 1..*; Patient.photo 0..0 |
| Must support | Одержувачі повинні мати можливість зберігати та відображати елемент, якщо він надісланий | US Core позначає birthDate як must-support |
| Фіксоване значення або шаблон | Блокує елемент на одне значення | Observation.category зафіксовано на vital-signs |
| Прив'язка (Binding) | Вказує елемент на набір значень із певною силою | Observation.code прив'язано до списку життєво важливих показників, обов'язково |
| Розбиття (Slicing) | Розділяє список на іменовані частини з власними правилами | Артеріальний тиск: компонент розбито на систолічний та діастолічний |
| Обмеження типу | Обмежує вибір | value[x] обмежено до valueQuantity |
| Інваріант | Правило FHIRPath, яке повинно виконуватися | "effective[x] має бути присутнім" або "value або dataAbsentReason" |
| Ціль посилання (Reference target) | Обмежує, на що може вказувати посилання | subject тільки Patient, і тільки пацієнти, що відповідають цьому профілю |
Профіль може лише звужувати. Він не може додавати елементи (для цього існують розширення), перейменовувати щось або послаблювати базу.
Сила прив'язки (Binding strength)
FHIR визначає чотири сили прив'язки. required (обов'язково): код має надходити з набору значень. extensible (розширюваний): використовуйте набір значень, якщо концепція підходить; інакше дозволено інший код. preferred (бажано): рекомендовано, але не обов'язково. example (приклад): лише для ілюстрації, що мають більшість базових ресурсів. Неправильне тлумачення extensible як required є поширеним джерелом помилок валідації.
Читабельний фрагмент профілю
Профіль FHIR — це StructureDefinition, диференційний список якого містить лише обмеження, що відрізняються від базового ресурсу, тоді як його знімок містить кожен елемент. Читабельний фрагмент нижче обмежує Observation домашнім вимірюванням артеріального тиску: код фіксовано на LOINC 85354-9, а компонент розбито рівно на одну систолічну та одну діастолічну частину.
Диференціал профілю перелічує лише те, що змінилося порівняно з базою; знімок (snapshot) перелічує все. Цей диференціал говорить, що спостереження артеріального тиску повинно містити LOINC 85354-9 і рівно два компоненти:
{
"resourceType": "StructureDefinition",
"url": "https://example.org/fhir/StructureDefinition/bp-home",
"name": "HomeBloodPressure",
"status": "active",
"kind": "resource",
"abstract": false,
"type": "Observation",
"baseDefinition": "http://hl7.org/fhir/StructureDefinition/Observation",
"derivation": "constraint",
"differential": {"element": [
{"id": "Observation.code", "path": "Observation.code",
"patternCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "85354-9"}]}},
{"id": "Observation.component", "path": "Observation.component", "min": 2, "max": "2",
"slicing": {"discriminator": [{"type": "pattern", "path": "code"}], "rules": "closed"}},
{"id": "Observation.component:systolic", "path": "Observation.component", "sliceName": "systolic", "min": 1, "max": "1"},
{"id": "Observation.component:systolic.code", "path": "Observation.component.code",
"patternCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "8480-6"}]}},
{"id": "Observation.component:diastolic", "path": "Observation.component", "sliceName": "diastolic", "min": 1, "max": "1"},
{"id": "Observation.component:diastolic.code", "path": "Observation.component.code",
"patternCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "8462-4"}]}}
]}
}
Профілі рідко пишуться вручну; автори використовують FHIR Shorthand (FSH) з SUSHI або інструменти, такі як Forge та Simplifier, і публікують за допомогою IG Publisher від HL7. Посібники розповсюджуються як пакети (hl7.fhir.us.core#6.1.0, hl7.fhir.uv.ips#1.1.0), які завантажують валідатори та сервери.
Розширення
Розширення — це елемент ключ-значення, розміщений у extension (або modifierExtension, коли він змінює значення ресурсу і його не можна ігнорувати). Його url — це канонічний URL його StructureDefinition; його значення — це типізоване value[x] або вкладені розширення. Місце народження — це розширення HL7 для Patient:
{
"resourceType": "Patient",
"id": "example",
"extension": [{
"url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace",
"valueAddress": {"city": "Lyon", "country": "FR"}
}],
"name": [{"family": "Doe", "given": ["Jane"]}]
}
Правила хорошої практики: шукайте існуюче розширення (реєстр HL7 та національні посібники) перед тим, як визначати власне; надайте йому URL під доменом, який ви контролюєте; визначте його в StructureDefinition, щоб інші могли його валідувати; ніколи не використовуйте розширення для того, що вже охоплює базовий елемент.
meta.profile та валідація
meta.profile — це список канонічних URL, яким FHIR-ресурс претендує на відповідність, але претендувати — це не доводити. Валідатор перевіряє ресурс на відповідність базовій специфікації та кожному заявленому профілю, або профілю, який ви назвете. Референсний валідатор HL7 працює локально з пакетами, а FHIR-сервери надають операцію $validate, яка приймає параметр профілю.
meta.profile перелічує канонічні URL, яким ресурс претендує відповідати. Претензія — це не доказ: валідатор перевіряє ресурс проти базової специфікації та проти кожного заявленого профілю (або проти профілю, який ви просите його використовувати). Референсний валідатор HL7 (validator_cli.jar) працює локально та завантажує пакети; сервери пропонують POST /Observation/$validate?profile=…; IG Publisher валідує всі приклади в посібнику. Ресурс може відповідати кільком профілям одночасно (національний профіль Patient та IPS Patient), якщо вони не суперечать один одному.
Два практичні правила: сервер, який оголошує профіль у своєму CapabilityStatement, повинен відхиляти ресурси, які йому не відповідають; клієнт, який отримує ресурси, не повинен відхиляти невідомі розширення або додаткові елементи, які профіль не заборонив, оскільки базова специфікація їх дозволяє.
В Anpheros
Anpheros Platform — це сервер FHIR R4, який використовує LOINC для спостережень, ATC для медикаментів та SNOMED CT, де це застосовно, і пропонує безкоштовний валідатор, який перевіряє структуру ресурсу відповідно до FHIR R4. Коли клініка надсилає ресурси з meta.profile, встановленим на національний профіль або профіль IPS, претензія зберігається, щоб наступна система могла перевірити її.
Безкоштовний валідатор знаходиться на сайті для розробників. Самі посібники дивіться в розділі Пояснення посібників з впровадження FHIR.
Пов'язані сторінки
- Пояснення посібників з впровадження FHIR
- CodeableConcept та Coding у FHIR
- Пояснення спостереження FHIR
- Пояснення ресурсу FHIR Patient
- Пояснення термінологічних серверів
- Валідатор FHIR (сайт розробника)
Джерела
- HL7 FHIR R4: Профілювання FHIR
- HL7 FHIR R4: Розширюваність
- HL7 FHIR R4: StructureDefinition
- HL7 FHIR R4: Прив'язки термінології
- HL7 FHIR Shorthand
- Валідатор HL7 FHIR
- HL7 FHIR R4: розширення patient-birthPlace
Поширені запитання
Чи може профіль додати новий елемент до ресурсу?
Ні. Профілі лише обмежують. Нові дані додаються в розширення, яке профіль потім може вимагати або забороняти, як і будь-який інший елемент.
Що насправді вимагає must-support?
Посібник з впровадження визначає це; зазвичай це означає, що відправник заповнює елемент, коли має дані, а одержувач зберігає його та може відобразити. Це не робить елемент обов'язковим.
Якщо ресурс не має meta.profile, чи є він недійсним?
Ні. meta.profile — це претензія, а не вимога. Сервер або посібник можуть вимагати його; базова специфікація — ні. Валідаторам можна доручити перевірку за профілем, який ресурс не декларує.
Звідки я знаю, який профіль використовувати у моїй країні?
Кожна національна спільнота FHIR публікує основний посібник (US Core, UK Core, nl-core, німецькі Basisprofile тощо); сторінка посібників з впровадження пояснює, як їх знайти. Міжнародні резюме використовують IPS.
Спробуйте безкоштовно в пісочниці
Перший запит FHIR за 5 хвилин. API стандарту HL7 FHIR R4 з вбудованою згодою пацієнта: спробуйте в пісочниці, а потім підключіть власну програму чи клінічну систему.
Безкоштовно · 30 синтетичних пацієнтів · без картки

