FHIR

Profile i rozszerzenia FHIR: jak przewodnik implementacji ogranicza zasób i jak go walidować

Profil FHIR (StructureDefinition) zawęża zasób bazowy: elementy, must-support, kody, slicing, bindings, invariants. Rozszerzenie uzupełnia brakujące elementy. Dowiedz się, jak publikować profile, co oznacza meta.profile i jak działają walidatory, z przykładami.

autor Opublikowano 6 min czytania

Krótka odpowiedź: podstawowe zasoby FHIR są celowo elastyczne: prawie wszystko jest opcjonalne, a większość kodów to tylko przykłady, dzięki czemu jeden standard pasuje do każdego kraju. Profil to StructureDefinition, który doprecyzowuje zasób dla jednego zastosowania: w tym kontekście Patient musi mieć identyfikator tego typu, Observation.code musi być kodem LOINC z tej listy, ten element musi być obsługiwany, tamten nie może się pojawić. Rozszerzenie dodaje element, którego brakuje w podstawowym zasobie, identyfikowany przez adres URL i definiowany przez własny StructureDefinition. Przewodniki implementacyjne (US Core, IPS, krajowe przewodniki) to zbiory profili, rozszerzeń, zestawów wartości i przykładów. Zasób wskazuje, które profile deklaruje w meta.profile, a walidator sprawdza go.

Co profil może zmienić

Profil FHIR może zmienić zasób jedynie poprzez jego zawężenie: ustalenie kardynalności, oznaczenie elementów jako wymagane do obsługi, ustalenie wartości lub wzorców, powiązanie elementów z zestawami wartości z określoną siłą, podział list na nazwane części, ograniczenie typów wyboru, dodanie niezmiennych FHIRPath i ograniczenie celów odniesienia. Profil nie może dodawać elementów, zmieniać nazw ani rozluźniać podstawowej specyfikacji.

Ograniczenie Co robi Przykład
Kardynalność Sprawia, że opcjonalne elementy stają się wymagane lub je zabrania Patient.identifier 1..*; Patient.photo 0..0
Musi być obsługiwane Odbiorcy muszą być w stanie przechowywać i wyświetlać element, jeśli zostanie wysłany US Core oznacza birthDate jako „must-support”
Stała wartość lub wzorzec Blokuje element na jedną wartość Observation.category ustawione na vital-signs
Powiązanie Wskazuje element na zestaw wartości z określonym poziomem siły Observation.code powiązane z listą parametrów życiowych, wymagane
Krojenie (Slicing) Dzieli listę na nazwane części z własnymi zasadami Ciśnienie krwi: komponent podzielony na skurczowe i rozkurczowe
Ograniczenie typu Ogranicza wybór value[x] ograniczone do valueQuantity
Niezmiennik (Invariant) Reguła FHIRPath, która musi być spełniona „effective[x] musi być obecne” lub „value lub dataAbsentReason”
Cel referencji Ogranicza, do czego może wskazywać referencja subject tylko do Patient, i tylko do pacjentów zgodnych z tym profilem

Profil może tylko zawężać. Nie może dodawać elementów (do tego służą rozszerzenia), zmieniać nazw ani rozluźniać podstawowych zasad.

Siła powiązania

FHIR definiuje cztery siły powiązania. required (wymagane): kod musi pochodzić z zestawu wartości. extensible (rozszerzalne): użyj zestawu wartości, jeśli koncepcja pasuje; w przeciwnym razie dozwolony jest inny kod. preferred (preferowane): zalecane, ale nie egzekwowane. example (przykład): tylko ilustracyjne, co jest typowe dla większości podstawowych zasobów. Błędne odczytanie extensible jako required jest częstym źródłem fałszywych błędów walidacji.

Czytelny fragment profilu

Profil FHIR to StructureDefinition, którego lista różnicowa zawiera tylko ograniczenia różniące się od podstawowego zasobu, podczas gdy jego migawka zawiera każdy element. Czytelny fragment poniżej ogranicza Observation do pomiaru ciśnienia krwi w domu: kod jest ustalony na LOINC 85354-9, a komponent jest podzielony na dokładnie jedną część skurczową i jedną rozkurczową.

Różnica (differential) profilu wymienia tylko to, co zostało zmienione w stosunku do podstawy; migawka (snapshot) wymienia wszystko. Ta różnica mówi, że obserwacja ciśnienia krwi musi zawierać LOINC 85354-9 i dokładnie dwa komponenty:

{
  "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"}]}}
  ]}
}

Profile rzadko pisze się ręcznie; autorzy używają FHIR Shorthand (FSH) z SUSHI lub narzędzi takich jak Forge i Simplifier, a publikują za pomocą IG Publisher HL7. Przewodniki są dystrybuowane jako pakiety (hl7.fhir.us.core#6.1.0, hl7.fhir.uv.ips#1.1.0), które walidatory i serwery ładują.

Rozszerzenia

Rozszerzenie to element klucz-wartość umieszczony w extension (lub modifierExtension, gdy zmienia znaczenie zasobu i nie wolno go ignorować). Jego url to kanoniczny adres URL jego StructureDefinition; jego wartość to jedna z typowanych value[x] lub zagnieżdżone rozszerzenia. Miejsce urodzenia to rozszerzenie zdefiniowane przez HL7 na zasobie Patient:

{
  "resourceType": "Patient",
  "id": "example",
  "extension": [{
    "url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace",
    "valueAddress": {"city": "Lyon", "country": "FR"}
  }],
  "name": [{"family": "Doe", "given": ["Jane"]}]
}

Zasady dobrej praktyki: przed zdefiniowaniem własnego rozszerzenia poszukaj istniejącego (rejestr HL7 i krajowe przewodniki); nadaj mu adres URL w domenie, którą kontrolujesz; zdefiniuj je w StructureDefinition, aby inni mogli je walidować; nigdy nie używaj rozszerzenia do czegoś, co już pokrywa podstawowy element.

meta.profile i walidacja

meta.profile to lista kanonicznych adresów URL, do których zasób FHIR deklaruje zgodność, a deklaracja nie jest dowodem. Walidator sprawdza zasób w odniesieniu do podstawowej specyfikacji i każdego zadeklarowanego profilu, lub w odniesieniu do profilu, który nazwiesz. Walidator referencyjny HL7 działa lokalnie z pakietami, a serwery FHIR udostępniają operację $validate, która akceptuje parametr profilu.

meta.profile wymienia kanoniczne adresy URL, do których zasób deklaruje zgodność. Deklaracja nie jest dowodem: walidator sprawdza zasób względem podstawowej specyfikacji i względem każdego zadeklarowanego profilu (lub względem profilu, o który poprosisz). Walidator referencyjny HL7 (validator_cli.jar) działa lokalnie i ładuje pakiety; serwery oferują POST /Observation/$validate?profile=…; IG Publisher waliduje wszystkie przykłady w przewodniku. Zasób może być zgodny z kilkoma profilami jednocześnie (krajowy profil Patient i IPS Patient), o ile się nie wykluczają.

Dwie praktyczne zasady: serwer, który deklaruje profil w swoim CapabilityStatement, powinien odrzucać zasoby, które go nie spełniają; klient, który odbiera zasoby, nie powinien odrzucać nieznanych rozszerzeń ani dodatkowych elementów, których profil nie zabronił, ponieważ podstawowa specyfikacja na to pozwala.

W Anpheros

Anpheros Platform to serwer FHIR R4, który używa LOINC dla obserwacji, ATC dla leków i SNOMED CT tam, gdzie to możliwe, oraz oferuje darmowy walidator, który sprawdza strukturę zasobu w odniesieniu do FHIR R4. Kiedy klinika wysyła zasoby z meta.profile ustawionym na profil krajowy lub IPS, deklaracja jest zachowywana, dzięki czemu systemy niższego poziomu mogą ją walidować.

Darmowy walidator znajduje się na stronie dla deweloperów. Same przewodniki można znaleźć w Przewodnikach implementacji FHIR wyjaśnionych.

Powiązane strony

Źródła

Najczęstsze pytania

Czy profil może dodać nowy element do zasobu?

Nie. Profile tylko ograniczają. Nowe dane trafiają do rozszerzenia, które profil może następnie wymagać lub zabraniać, jak każdy inny element.

Czego dokładnie wymaga „must-support”?

Definiuje to przewodnik implementacyjny; zazwyczaj oznacza to, że nadawca wypełnia element, gdy posiada dane, a odbiorca je przechowuje i może wyświetlić. Nie czyni to elementu obowiązkowym.

Czy zasób bez meta.profile jest nieprawidłowy?

Nie. meta.profile to deklaracja, a nie wymóg. Serwer lub przewodnik może go wymagać; podstawowa specyfikacja nie. Walidatory mogą być poproszone o sprawdzenie względem profilu, którego zasób nie deklaruje.

Skąd mam wiedzieć, który profil użyć w moim kraju?

Każda krajowa społeczność FHIR publikuje podstawowy przewodnik (US Core, UK Core, nl-core, niemieckie Basisprofile itd.); strona przewodników implementacyjnych wyjaśnia, jak je znaleźć. Międzynarodowe podsumowania wykorzystują IPS.

Anpheros Platform

Wypróbuj za darmo w sandboksie

Pierwsze wywołanie FHIR w 5 minut. API HL7 FHIR R4 z wbudowaną zgodą pacjenta: wypróbuj w piaskownicy, a następnie połącz własną aplikację lub system kliniczny.

Za darmo · 30 syntetycznych pacjentów · bez karty

Ten poradnik ma charakter informacyjny i nie zastępuje konsultacji lekarskiej. Decyzje dotyczące zdrowia podejmuj z lekarzem. W nagłym wypadku zadzwoń pod lokalny numer alarmowy (112 w Europie).
Napisane przez
Zespół Anpheros

Anpheros tworzy dokumentację medyczną, nad którą pacjent ma kontrolę i którą może udostępniać dowolnej klinice, na platformie HL7 FHIR R4, z siedzibą w UE. Te przewodniki pomogą Ci zrozumieć i uporządkować informacje o Twoim zdrowiu; nie zastępują one wizyty u lekarza.

O Anpheros →