Σύντομη απάντηση: Οι βασικοί πόροι FHIR είναι σκόπιμα ευέλικτοι: σχεδόν τα πάντα είναι προαιρετικά και οι περισσότεροι κωδικοί είναι μόνο παραδείγματα, ώστε ένα πρότυπο να ταιριάζει σε κάθε χώρα. Ένα προφίλ είναι ένα StructureDefinition που περιορίζει έναν πόρο για μια συγκεκριμένη χρήση: σε αυτό το πλαίσιο, ο Patient πρέπει να έχει ένα αναγνωριστικό αυτού του τύπου, το Observation.code πρέπει να είναι κωδικός LOINC από αυτήν τη λίστα, αυτό το στοιχείο πρέπει να υποστηρίζεται, εκείνο δεν μπορεί να εμφανιστεί. Μια επέκταση προσθέτει ένα στοιχείο που λείπει από τον βασικό πόρο, αναγνωρίζεται από ένα URL και ορίζεται από το δικό του StructureDefinition. Οι οδηγοί υλοποίησης (US Core, IPS, εθνικοί οδηγοί) είναι συλλογές προφίλ, επεκτάσεων, συνόλων τιμών και παραδειγμάτων. Ένας πόρος δηλώνει ποια προφίλ ισχυρίζεται ότι ακολουθεί στο meta.profile, και ένας επικυρωτής το ελέγχει.
Τι μπορεί να αλλάξει ένα προφίλ
Ένα προφίλ FHIR μπορεί να αλλάξει έναν πόρο μόνο περιορίζοντάς τον: σφίγγοντας την πληθικότητα, επισημαίνοντας στοιχεία ως υποχρεωτικά, διορθώνοντας τιμές ή μοτίβα, συνδέοντας στοιχεία με σύνολα τιμών με μια ισχύ, τεμαχίζοντας λίστες σε ονομαστικά μέρη, περιορίζοντας τύπους επιλογής, προσθέτοντας περιορισμούς FHIRPath και περιορίζοντας στόχους αναφοράς. Ένα προφίλ δεν μπορεί να προσθέσει στοιχεία, να μετονομάσει οτιδήποτε ή να χαλαρώσει την βασική προδιαγραφή.
| Περιορισμός | Τι κάνει | Παράδειγμα |
|---|---|---|
| Πληθικότητα | Κάνει προαιρετικά στοιχεία υποχρεωτικά ή τα απαγορεύει | Patient.identifier 1..*; Patient.photo 0..0 |
| Πρέπει να υποστηρίζεται | Οι δέκτες πρέπει να μπορούν να αποθηκεύουν και να εμφανίζουν το στοιχείο αν αποσταλεί | Το US Core επισημαίνει το birthDate ως must-support |
| Σταθερή τιμή ή μοτίβο | Κλειδώνει ένα στοιχείο σε μία τιμή | Observation.category σταθερό σε vital-signs |
| Δέσμευση | Στοχεύει ένα στοιχείο σε ένα σύνολο τιμών με μια ισχύ | Observation.code δεσμευμένο στη λίστα ζωτικών σημείων, απαιτείται |
| Τεμαχισμός | Χωρίζει μια λίστα σε ονομασμένα μέρη με τους δικούς τους κανόνες | Αρτηριακή πίεση: το συστατικό τεμαχίζεται σε συστολική και διαστολική |
| Περιορισμός τύπου | Περιορίζει μια επιλογή | value[x] περιορισμένο σε valueQuantity |
| Αμετάβλητο | Ένας κανόνας FHIRPath που πρέπει να ισχύει | "effective[x] πρέπει να υπάρχει" ή "value ή dataAbsentReason" |
| Στόχος αναφοράς | Περιορίζει σε τι μπορεί να αναφέρεται μια αναφορά | subject μόνο Patient, και μόνο ασθενείς που συμμορφώνονται με αυτό το προφίλ |
Ένα προφίλ μπορεί μόνο να στενέψει. Δεν μπορεί να προσθέσει στοιχεία (γι' αυτό υπάρχουν οι επεκτάσεις), να μετονομάσει οτιδήποτε ή να χαλαρώσει τον κανόνα του βασικού προτύπου.
Ισχύς δέσμευσης
Το FHIR ορίζει τέσσερις ισχείς δέσμευσης. required: ο κωδικός πρέπει να προέρχεται από το σύνολο τιμών. extensible: χρησιμοποιήστε το σύνολο τιμών εάν μια έννοια ταιριάζει. διαφορετικά, επιτρέπεται ένας άλλος κωδικός. preferred: συνιστάται, δεν επιβάλλεται. example: μόνο για επεξήγηση, που είναι αυτό που έχουν οι περισσότεροι βασικοί πόροι. Η παρερμηνεία του extensible ως required είναι μια κοινή πηγή ψευδών σφαλμάτων επικύρωσης.
Ένα ευανάγνωστο απόσπασμα προφίλ
Ένα προφίλ FHIR είναι ένα StructureDefinition του οποίου η διαφορική λίστα περιέχει μόνο τους περιορισμούς που διαφέρουν από τον βασικό πόρο, ενώ το στιγμιότυπό του (snapshot) παραθέτει κάθε στοιχείο. Το ευανάγνωστο απόσπασμα παρακάτω περιορίζει την παρατήρηση (Observation) σε αρτηριακή πίεση στο σπίτι: ο κωδικός είναι σταθερός στο LOINC 85354-9 και το συστατικό (component) τεμαχίζεται σε ακριβώς ένα συστολικό και ένα διαστολικό μέρος.
Το διαφορικό ενός προφίλ παραθέτει μόνο ό,τι άλλαξε από το βασικό πρότυπο· το στιγμιότυπο παραθέτει τα πάντα. Αυτό το διαφορικό λέει ότι μια παρατήρηση αρτηριακής πίεσης πρέπει να φέρει 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 είναι ένας διακομιστής FHIR R4 που χρησιμοποιεί LOINC για παρατηρήσεις, ATC για φάρμακα και SNOMED CT όπου εφαρμόζεται, και προσφέρει έναν δωρεάν επικυρωτή που ελέγχει τη δομή ενός πόρου έναντι του FHIR R4. Όταν μια κλινική στέλνει πόρους με το meta.profile να έχει οριστεί σε ένα εθνικό προφίλ ή προφίλ IPS, ο ισχυρισμός διατηρείται ώστε ένα σύστημα που ακολουθεί να μπορεί να επικυρώσει έναντι αυτού.
Ο δωρεάν επικυρωτής βρίσκεται στον ιστότοπο των προγραμματιστών. Για τους ίδιους τους οδηγούς, δείτε τους Οδηγούς υλοποίησης FHIR με επεξήγηση.
Σχετικές σελίδες
- Επεξήγηση των οδηγών υλοποίησης FHIR
- CodeableConcept και Coding στο FHIR
- Επεξήγηση του FHIR Observation
- Επεξήγηση του πόρου FHIR Patient
- Επεξήγηση των διακομιστών ορολογίας
- Επικυρωτής FHIR (ιστοσελίδα προγραμματιστών)
Πηγές
- HL7 FHIR R4: Profiling FHIR
- HL7 FHIR R4: Extensibility
- HL7 FHIR R4: StructureDefinition
- HL7 FHIR R4: Terminology bindings
- HL7 FHIR Shorthand
- HL7 FHIR validator
- HL7 FHIR R4: patient-birthPlace extension
Συχνές ερωτήσεις
Μπορεί ένα προφίλ να προσθέσει ένα νέο στοιχείο σε έναν πόρο;
Όχι. Τα προφίλ μόνο περιορίζουν. Νέα δεδομένα μπαίνουν σε μια επέκταση, την οποία το προφίλ μπορεί στη συνέχεια να απαιτήσει ή να απαγορεύσει όπως οποιοδήποτε άλλο στοιχείο.
Τι απαιτεί πραγματικά το must-support;
Ο οδηγός υλοποίησης το ορίζει· συνήθως ότι ένας αποστολέας συμπληρώνει το στοιχείο όταν έχει τα δεδομένα και ένας δέκτης το αποθηκεύει και μπορεί να το εμφανίσει. Δεν καθιστά το στοιχείο υποχρεωτικό.
Αν ένας πόρος δεν έχει meta.profile, είναι άκυρος;
Όχι. Το meta.profile είναι ένας ισχυρισμός, όχι μια απαίτηση. Ένας διακομιστής ή οδηγός μπορεί να το απαιτεί· η βασική προδιαγραφή όχι. Οι επικυρωτές μπορούν να ζητηθούν να ελέγξουν έναντι ενός προφίλ που ο πόρος δεν δηλώνει.
Πώς ξέρω ποιο προφίλ να χρησιμοποιήσω στη χώρα μου;
Κάθε εθνική κοινότητα FHIR δημοσιεύει έναν βασικό οδηγό (US Core, UK Core, nl-core, τα γερμανικά Basisprofile, κ.λπ.)· η σελίδα των οδηγών υλοποίησης εξηγεί πώς να τους βρείτε. Οι διασυνοριακές περιλήψεις χρησιμοποιούν το IPS.
Δοκιμάστε δωρεάν στο sandbox
Η πρώτη σας κλήση FHIR σε 5 λεπτά. Ένα API HL7 FHIR R4 με τη συγκατάθεση του ασθενούς ενσωματωμένη: δοκιμάστε το στο sandbox, στη συνέχεια συνδέστε τη δική σας εφαρμογή ή σύστημα κλινικής.
Δωρεάν · 30 συνθετικοί ασθενείς · χωρίς κάρτα

