Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Πώς να εισαγάγετε εργαστηριακά αποτελέσματα σε αρχείο FHIR
Οδηγός: εισαγωγή εργαστηριακής αναφοράς ως CSV και ως HL7 v2 ORU^R01 σε FHIR R4 Observations με κωδικούς LOINC και εύρη αναφοράς, διαχείριση μη αντιστοιχισμένων δεικτών και επανυποβληθεισών αναφορών, και ανίχνευση κάθε αποτελέσματος στο εργαστήριό του.
Αυτός ο οδηγός παίρνει μια εργαστηριακή αναφορά ως αρχείο CSV και ως μήνυμα HL7 v2 ORU^R01, την εισάγει στο αρχείο HL7 FHIR R4 ενός ασθενούς με ένα αίτημα για το καθένα, και δείχνει τι λαμβάνετε πίσω: Observation πόρους εργαστηρίου με κωδικούς LOINC, εύρη αναφοράς και προέλευση. Καλύπτει επίσης τα δύο προβλήματα που αντιμετωπίζει κάθε εργαστηριακή ενσωμάτωση: δείκτες που δεν μπορούν να αντιστοιχιστούν αυτόματα και αναφορές που αποστέλλονται δύο φορές. Όλα λειτουργούν στην δωρεάν sandbox με έναν συνθετικό ασθενή.
Γιατί τα εργαστηριακά αποτελέσματα είναι δύσκολο να αποθηκευτούν
Μια εργαστηριακή αναφορά φαίνεται απλή: ένας δείκτης, μια τιμή, μια μονάδα, ένα εύρος αναφοράς, μια ημερομηνία. Στην πράξη, κάθε εργαστήριο ονομάζει τους δείκτες με τον δικό του τρόπο ("Hemoglobina glicozilata", "HbA1c", "Glycated haemoglobin"), χρησιμοποιεί κόμματα ή τελείες για τα δεκαδικά ψηφία, γράφει τα εύρη ως 4,0-5,6, <5 ή >3.5, και επανυποβάλλει την ίδια αναφορά όταν κάτι αποτυγχάνει. Αποθηκευμένα ως ελεύθερο κείμενο, αυτά τα αποτελέσματα δεν μπορούν να συγκριθούν με την πάροδο του χρόνου, να απεικονιστούν σε γράφημα, να κοινοποιηθούν σε άλλη εφαρμογή ή να δοθούν σε ένα μοντέλο AI με σιγουριά.
Ένα FHIR record αποθηκεύει κάθε αποτέλεσμα ως Observation με έναν κωδικό LOINC, μια μονάδα UCUM, μια τιμή, ένα εύρος αναφοράς και μια ημερομηνία, και διατηρεί ποιος το έστειλε σε έναν πόρο Provenance. Ο συνδετήρας εργαστηρίου κάνει αυτή τη μετατροπή για εσάς.
lab report (CSV, HL7 v2, JSON)
│ POST /v1/patients/{id}/labs/import
▼
┌──────────────────────────────────────────────┐
│ parse rows → map marker to LOINC → parse │
│ value, unit, range → stable id per row │
└──────────────────────────────────────────────┘
│
▼
Observation (category laboratory) + Provenance (author_type import, source system, report id)
│
├─► the patient's app and every app they consented to
└─► webhooks: resource.created per Observation
Πριν ξεκινήσετε
Χρειάζεστε ένα κλειδί sandbox (sk_test_…) από το platform.anpheros.com/dashboard (Λήψη κλειδιού sandbox). Τα παραδείγματα χρησιμοποιούν curl. τα SDKs έχουν τις ίδιες κλήσεις (labs.importCsv, labs.importHl7, labs.importItems).
export BASE=https://platform.anpheros.com
export KEY=sk_test_…
# Elena Ionescu, a synthetic patient with type 2 diabetes
export PID=$(curl -s "$BASE/fhir/R4/Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|p02" \
-H "Authorization: Bearer $KEY" | jq -r '.entry[0].resource.id')
Βήμα 1: εισαγωγή αναφοράς CSV
Έτσι μπορεί ένα ρουμανικό εργαστήριο να εξάγει μια αναφορά: ερωτηματικά, δεκαδικά κόμματα, ρουμανικά ονόματα στηλών και ημερομηνίες ως DD.MM.YYYY. Ο σύνδεσμος αναγνωρίζει ρουμανικά και αγγλικά ονόματα στηλών.
cat > report.csv <<'EOF'
Analiza;Rezultat;UM;Interval de referinta;Data
Hemoglobina glicozilata (HbA1c);6,9;%;4,0-5,6;01.10.2026
Glicemie;131;mg/dL;70-100;01.10.2026
TSH;2,1;mUI/L;0,4-4,0;01.10.2026
Marker foarte rar;12;U/L;0-20;01.10.2026
EOF
curl -X POST "$BASE/v1/patients/$PID/labs/import" -H "Authorization: Bearer $KEY" \
-H "Content-Type: text/csv" -H "X-Anpheros-Source-System: labx" \
-H "Idempotency-Key: report-2026-10-01-elena" --data-binary @report.csv
Η απόκριση (201):
{"created": 4, "skipped": 0, "unmapped": ["Marker foarte rar"], "warnings": [],
"observations": [
{"id": "ff0bbb44-…", "marker": "Hemoglobina glicozilata (HbA1c)", "code": "4548-4", "system": "http://loinc.org", "value": 6.9, "unit": "%", "date": "2026-10-01"},
{"id": "ebe5522f-…", "marker": "Glicemie", "code": "2345-7", "system": "http://loinc.org", "value": 131.0, "unit": "mg/dL", "date": "2026-10-01"},
{"id": "bace44a8-…", "marker": "TSH", "code": "3016-3", "system": "http://loinc.org", "value": 2.1, "unit": "mUI/L", "date": "2026-10-01"},
{"id": "26fd2270-…", "marker": "Marker foarte rar", "code": "marker_foarte_rar", "system": "urn:anpheros:lab-code", "value": 12.0, "unit": "U/L", "date": "2026-10-01"}]}
Το HbA1c, η γλυκόζη και το TSH αντιστοιχίστηκαν στο LOINC από τα ονόματά τους. Τα δεκαδικά κόμματα έγιναν αριθμοί και τα εύρη έγιναν referenceRange. Μία γραμμή επέστρεψε στο unmapped. Αποθηκεύεται ακόμα, κάτω από τον δικό του κωδικό του εργαστηρίου (urn:anpheros:lab-code) με το ακριβές κείμενο από την αναφορά, οπότε τίποτα δεν χάνεται.
Βήμα 2: Διαχείριση μη αντιστοιχισμένων δεικτών
Ορισμένα ονόματα απαιτούν απόφαση. Το "Glicemie" (γλυκόζη αίματος) είναι ένα καλό παράδειγμα: το LOINC έχει έναν κωδικό για τη γλυκόζη σε ορό ή πλάσμα (2345-7, δείγμα φλεβικού αίματος που λαμβάνεται σε εργαστήριο) και έναν άλλο για τη γλυκόζη σε ολικό αίμα (2339-0, για παράδειγμα από τρύπημα δακτύλου). Σε μια εργαστηριακή αναφορά, ένα απλό "Glicemie" αντιστοιχίζεται σε ορό ή πλάσμα. Ένα όνομα που λέει "capilar", "capillary" ή "sânge integral" αντιστοιχίζεται σε ολικό αίμα:
{"created": 1, "skipped": 0, "unmapped": [], "warnings": [],
"observations": [{"id": "00480a6d-…", "marker": "Glicemie capilara", "code": "2339-0", "system": "http://loinc.org", "value": 140.0, "unit": "mg/dL", "date": "2026-10-02"}]}
Για δείκτες που ο σύνδεσμος δεν αναγνωρίζει, αναζητήστε τον κωδικό:
curl "$BASE/v1/terminology/loinc?q=glucose" -H "Authorization: Bearer $KEY"
{"data": [
{"system": "http://loinc.org", "code": "2339-0", "display": "Glucose [Mass/volume] in Blood", "display_ro": "Glicemie (sânge)", "category": "laboratory", "unit": "mg/dL"},
{"system": "http://loinc.org", "code": "2345-7", "display": "Glucose [Mass/volume] in Serum or Plasma", "display_ro": "Glicemie (ser)", "category": "laboratory", "unit": "mg/dL"}],
"total": 2}
Στη συνέχεια, στείλτε τον κωδικό στη στήλη LOINC. Ένας κωδικός στην αναφορά υπερισχύει πάντα του ονόματος. Διατηρήστε αυτήν την αντιστοίχιση ανά εργαστήριο από την πλευρά σας και προσθέστε τη στήλη σε κάθε αναφορά από αυτό:
Analiza;Rezultat;UM;Interval de referinta;Data;LOINC
Glicemie;99;mg/dL;70-100;04.10.2026;2339-0
Δείκτες που το LOINC δεν καλύπτει καθόλου, όπως το φανταστικό "Marker foarte rar", μπορούν να παραμείνουν κάτω από τον κωδικό του εργαστηρίου. Εμφανίζονται στον ασθενή και περιλαμβάνονται στο αρχείο. Δεν μπορούν να συγκριθούν με αποτελέσματα άλλων εργαστηρίων.
Βήμα 3: αποστολή της ίδιας αναφοράς δύο φορές
Τα εργαστήρια επανεξάγουν αναφορές. Κάθε γραμμή αποκτά ένα σταθερό αναγνωριστικό που δημιουργείται από το αναγνωριστικό της αναφοράς, τον κωδικό, την ημερομηνία και την τιμή, οπότε μια δεύτερη εισαγωγή της ίδιας αναφοράς δεν δημιουργεί τίποτα:
{"created": 0, "skipped": 4, "unmapped": ["Marker foarte rar"], "warnings": [], "observations": []}
Οι γραμμές που άλλαξαν, για παράδειγμα μια διορθωμένη τιμή, εισάγονται ως νέα αποτελέσματα. Η κεφαλίδα Idempotency-Key προσθέτει μια δεύτερη εγγύηση: μια επαναδοκιμή δικτύου με το ίδιο κλειδί επιστρέφει την πρώτη απόκριση αμετάβλητη.
Βήμα 4: εισαγωγή μηνύματος HL7 v2 ORU^R01
Τα περισσότερα συστήματα πληροφοριών εργαστηρίου χρησιμοποιούν HL7 v2. Στείλτε το μήνυμα όπως είναι (κείμενο ER7, τμήματα χωρισμένα με CR ή LF):
MSH|^~\&|LABX|LAB1|ANPHEROS|EHR|202610010930||ORU^R01|MSG00077|P|2.5.1
PID|1||12345||Ionescu^Elena||19850903|F
OBR|1||R-77|24331-1^Lipid panel^LN|||202610010800
OBX|1|NM|2093-3^Cholesterol [Mass/volume] in Serum or Plasma^LN||212|mg/dL|<200|H|||F|||202610010800
OBX|2|NM|2085-9^HDL Cholesterol^LN||52|mg/dL|>40|N|||F|||202610010800
curl -X POST "$BASE/v1/patients/$PID/labs/import" -H "Authorization: Bearer $KEY" \
-H "Content-Type: x-application/hl7-v2+er7" --data-binary @oru.hl7
{"created": 2, "skipped": 0, "unmapped": [], "warnings": [],
"observations": [
{"id": "b562045b-…", "marker": "Cholesterol [Mass/volume] in Serum or Plasma", "code": "2093-3", "system": "http://loinc.org", "value": 212.0, "unit": "mg/dL", "date": "2026-10-01T08:00:00Z"},
{"id": "9b3274e4-…", "marker": "HDL Cholesterol", "code": "2085-9", "system": "http://loinc.org", "value": 52.0, "unit": "mg/dL", "date": "2026-10-01T08:00:00Z"}]}
Το OBX-3 με το σύστημα κωδικοποίησης LN χρησιμοποιείται απευθείας ως LOINC. Το OBX-7 γίνεται το εύρος αναφοράς και το OBX-8 (H, N) η ερμηνεία. Το OBR-3 (R-77) διατηρείται ως το αναγνωριστικό αναφοράς στην προέλευση (provenance). Ο ασθενής είναι αυτός που βρίσκεται στο URL: το τμήμα PID δεν χρησιμοποιείται για την εύρεση ασθενούς, επομένως ένα λανθασμένο PID δεν μπορεί να επισυνάψει αποτελέσματα σε κάποιον άλλο.
Έχετε ήδη αναλυμένα αποτελέσματα; Στείλτε JSON: {"date": "2026-10-01", "origin": "report-77", "items": [{"marker": "Ferritin", "value": 38, "unit": "ng/mL", "ref_low": 15, "ref_high": 150}]}. Η φερριτίνη αντιστοιχίζεται στο LOINC 2276-4.
Βήμα 5: Ανάγνωση των αποτελεσμάτων ως FHIR
curl "$BASE/fhir/R4/Observation?patient=$PID&code=http://loinc.org|4548-4&_sort=-date&_count=1" \
-H "Authorization: Bearer $KEY"
Το εισαγόμενο HbA1c, όπως αποθηκεύτηκε:
{
"resourceType": "Observation",
"id": "62b1b0c0-…",
"meta": {"versionId": "1", "lastUpdated": "2026-10-12T20:05:57.011Z"},
"identifier": [{"system": "urn:anpheros:lab-import", "value": "c52d3cd6449291d34f6bef1516d0ac05"}],
"status": "final",
"category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory"}]}],
"code": {"coding": [{"system": "http://loinc.org", "code": "4548-4", "display": "Hemoglobin A1c/Hemoglobin.total in Blood"}],
"text": "Hemoglobina glicozilata (HbA1c)"},
"subject": {"reference": "Patient/…"},
"effectiveDateTime": "2026-10-01",
"valueQuantity": {"value": 6.9, "unit": "%"},
"referenceRange": [{"low": {"value": 4.0, "unit": "%"}, "high": {"value": 5.6, "unit": "%"}}]
}
Η εμφάνιση LOINC είναι το τυπικό αγγλικό όνομα. Το code.text διατηρεί τη δική του διατύπωση του εργαστηρίου, έτσι ώστε ο ασθενής να βλέπει ακόμα αυτό που ήταν στην έντυπη αναφορά. Για περισσότερες πληροφορίες σχετικά με τους πόρους και την αναζήτηση, ανατρέξτε στον οδηγό FHIR platform και στα FHIR code systems.
Βήμα 6: Έλεγχος του αποστολέα
curl "$BASE/v1/patients/$PID/provenance/Observation/62b1b0c0-…" -H "Authorization: Bearer $KEY"
{"data": [{"version": 1, "activity": "CREATE", "recorded": "2026-10-12T20:05:57.011000Z",
"author_type": "import", "author": "proj_…", "source_system": "labx", "origin_id": null,
"fhir": "Provenance/f15c4fee-…"}], "total": 1}
Το author_type: import και το source_system: labx παραμένουν με την τιμή. Όταν μια εφαρμογή AI διαβάσει αργότερα αυτό το αποτέλεσμα μέσω του context API, θα επισημανθεί ως [import/labx], ώστε το μοντέλο να μπορεί να διακρίνει ένα εργαστηριακό αποτέλεσμα από μια τιμή που εισήγαγε ο ασθενής.
Τι συμβαίνει στη συνέχεια
- Ο ασθενής βλέπει τα αποτελέσματα στην εφαρμογή του. Οποιαδήποτε εφαρμογή έχει λάβει τη συγκατάθεσή του μπορεί να τα διαβάσει, εντός των πεδίων εμβέλειας της (μοντέλο συγκατάθεσης και πρόσβασης).
- Ένα webhook
resource.createdενεργοποιείται για κάθε Observation, ώστε ένας πίνακας ελέγχου κλινικής ή μια περίληψη AI να μπορεί να ενημερωθεί χωρίς polling. - Το
POST /fhir/R4/Observation/$validate?profile=eu-labαναφέρει πώς ένα αποτέλεσμα συγκρίνεται με το προφίλ αναφοράς εργαστηρίου HL7 Europe. - Έως 500 γραμμές ανά αίτημα· τα όρια αναφέρονται στο Όρια και όρια ρυθμού.
Συχνές ερωτήσεις
Ποιες μορφές εργαστηριακών αναφορών μπορούν να εισαχθούν στο FHIR;
CSV με γραμμή κεφαλίδας (αποδεκτά κόμμα, άνω και κάτω τελεία ή tab, δεκαδικό κόμμα), μηνύματα HL7 v2 ORU^R01 και JSON. Οι αναφορές PDF μπορούν να αποθηκευτούν ως έγγραφα· οι τιμές που εξάγονται από αυτές παραπέμπουν πίσω στο έγγραφο.
Τι συμβαίνει με τους δείκτες χωρίς κωδικό LOINC;
Αποθηκεύονται κάτω από τον δικό τους κωδικό του εργαστηρίου με το ακριβές κείμενο από την αναφορά και παρατίθενται στο unmapped. Προσθέστε μια στήλη LOINC για αυτό το εργαστήριο και αντιστοιχίζονται. Ένας κωδικός στην αναφορά έχει πάντα προτεραιότητα έναντι του ονόματος.
Είναι ασφαλές να ξαναστείλετε μια αναφορά;
Ναι. Κάθε γραμμή έχει έναν σταθερό αναγνωριστικό που δημιουργείται από την αναφορά, τον κωδικό, την ημερομηνία και την τιμή, οπότε οι γραμμές που έχουν ήδη εισαχθεί παραλείπονται· οι αλλαγμένες γραμμές εισάγονται ως νέα αποτελέσματα.
Μπορεί ένα εργαστήριο να εισάγει αποτελέσματα για οποιονδήποτε ασθενή;
Όχι. Ένα εργαστήριο εισάγει σε ασθενείς του έργου που δημιούργησε ή των οποίων τα αρχεία μοιράστηκε μαζί του μέσω OAuth. Άλλοι ασθενείς δεν υπάρχουν γι' αυτό (404).
Σχετικά
- API αποτελεσμάτων εργαστηρίου: HL7 v2 και FHIR παραπλεύρως, και τι πρέπει να περιέχει ένα αποτέλεσμα
- Συνδετήρας εργαστηρίου: κάθε όνομα στήλης, πεδίο HL7 και πεδίο απόκρισης
- Διαλειτουργικότητα δεδομένων υγειονομικής περίθαλψης: γιατί οι κωδικοί και η προέλευση καθιστούν τα ανταλλασσόμενα δεδομένα χρήσιμα
- Ενσωματώσεις υγειονομικής περίθαλψης: κλινικές, εργαστήρια, συσκευές και εφαρμογές τρίτων
- API ιατρικών δεδομένων: εγγραφή μεμονωμένων παρατηρήσεων, καταστάσεων και φαρμάκων
- Πώς να δημιουργήσετε μια εφαρμογή τεχνητής νοημοσύνης για την υγειονομική περίθαλψη με backend FHIR: χρήση αυτών των αποτελεσμάτων σε μια απάντηση τεχνητής νοημοσύνης
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card