# Πώς να κανονικοποιήσετε ιατρικά δεδομένα

> Οδηγός: μετατρέψτε ιατρικά δεδομένα από πολλές πηγές σε μία συγκρίσιμη μορφή — αναζήτηση LOINC, μονάδες UCUM, ημερομηνίες ISO, εύρη αναφοράς, χωρίς διπλότυπα κατά την επανεκκίνηση και επικύρωση έναντι του ευρωπαϊκού προφίλ εργαστηρίου.

Source: https://developers.anpheros.com/el/guides/normalize-medical-data

**Η κανονικοποίηση ιατρικών δεδομένων σημαίνει τη μετατροπή τιμών που φτάνουν σε πολλές μορφές σε μία συγκρίσιμη μορφή: τον ίδιο κωδικό για την ίδια εξέταση, το ίδιο σύστημα μονάδων, ημερομηνίες σε μία μορφή, κάθε τιμή με το εύρος αναφοράς και την πηγή της, και χωρίς διπλότυπα.** Αυτός ο οδηγός δείχνει πώς να το κάνετε αυτό πριν τα δεδομένα φτάσουν σε ένα αρχείο HL7 FHIR R4: αναζήτηση κωδικών LOINC και ATC, χρήση μονάδων UCUM, απόρριψη ασαφών ημερομηνιών, διατήρηση εύρων, αποφυγή διπλοτύπων κατά την επανεκκίνηση και έλεγχος του αποτελέσματος έναντι του ευρωπαϊκού εργαστηριακού προφίλ. Κάθε απάντηση που εμφανίζεται προέρχεται από το Anpheros API.

## Γιατί είναι σημαντικό

Το ίδιο αποτέλεσμα HbA1c μπορεί να φτάσει σε εσάς ως "HbA1c 6,4 %", "Hemoglobina glicozilata: 6.4", "Glycated haemoglobin 46 mmol/mol" ή μόνο ένας κωδικός εργαστηρίου που κατανοεί ένα μόνο εργαστήριο. Μέχρι να γίνει ένας κωδικός με μία μονάδα:

- ένα γράφημα του HbA1c του ασθενούς με την πάροδο του χρόνου εμφανίζει τρεις άσχετες γραμμές·
- μια ειδοποίηση για "HbA1c πάνω από 6,5 %" χάνει δύο από τις τιμές·
- ένα μοντέλο AI βλέπει τέσσερα γεγονότα αντί για μία τάση·
- ένα άλλο σύστημα που λαμβάνει την εγγραφή δεν μπορεί να την ερμηνεύσει.

Η κανονικοποίηση ανήκει στο σημείο όπου τα δεδομένα εισέρχονται στην εγγραφή, μία φορά, όχι σε κάθε εφαρμογή που τα διαβάζει αργότερα.

## Τι περιέχει μια κανονικοποιημένη τιμή

| Μέρος | Κανονικοποιημένη μορφή | Παράδειγμα |
|---|---|---|
| Τι μετρήθηκε | ένας κωδικός από ένα τυπικό σύστημα | 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](https://developers.anpheros.com/el/guides/fhir-code-systems).

## Βήμα 1: Εύρεση του κωδικού

Αναζητήστε την ορολογία της πλατφόρμας με αγγλικό ή ρουμανικό όνομα, ή με συντομογραφία:

```bash
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"
```

Και τα δύο επιστρέφουν την ίδια έννοια:

```json
{"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](https://developers.anpheros.com/el/guides/anpheros-search) βρίσκει την ουσία με όνομα ή εμπορική ονομασία και δίνει τον κωδικό RxNorm ingredient και τους αριθμούς προϊόντος EMA:

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

Το πεδίο `unit` είναι η μονάδα που αναμένει το LOINC για αυτήν τη δοκιμή. Χρησιμοποιήστε το για να ελέγξετε τι λάβατε. Δημιουργήστε τη χαρτογράφηση από τα ονόματα του κάθε πηγαίου συστήματος σε κωδικούς μία φορά, ανά πηγή, και κρατήστε την στην ενσωμάτωσή σας. Μην μαντεύετε κατά τη στιγμή της εγγραφής: όταν ένα όνομα είναι αμφίσημο και τίποτα στην πηγή δεν το ξεκαθαρίζει, αφήστε το χωρίς χαρτογράφηση και ρωτήστε την πηγή. Το [Πώς να εισάγετε αποτελέσματα εργαστηρίου σε ένα αρχείο FHIR](https://developers.anpheros.com/el/guides/import-lab-results-fhir) δείχνει πώς διατηρούνται και αναφέρονται οι δείκτες εργαστηρίου χωρίς χαρτογράφηση.

## Βήμα 2: Γράψτε με κωδικούς, μονάδες και εύρη

```bash
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"
}'
```

```json
{"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`. Δύο κανόνες αποτρέπουν τα περισσότερα σφάλματα:

- **Μην μετατρέπετε σιωπηλά.** Εάν ένα εργαστήριο αναφέρει γλυκόζη σε `mmol/L` και η εφαρμογή σας εμφανίζει `mg/dL`, αποθηκεύστε αυτό που μέτρησε το εργαστήριο και μετατρέψτε το κατά την εμφάνισή του. Η αποθηκευμένη τιμή παραμένει ανιχνεύσιμη στην αναφορά.
- **Ελέγξτε τη μονάδα σε σχέση με τον κωδικό.** Οι κωδικοί LOINC είναι συγκεκριμένοι: HbA1c σε `%` είναι `4548-4`, ενώ HbA1c σε `mmol/mol` είναι ένας διαφορετικός κωδικός LOINC. Μια τιμή της οποίας η μονάδα δεν ταιριάζει με την αναμενόμενη μονάδα του κωδικού είναι σφάλμα αντιστοίχισης, όχι πρόβλημα μετατροπής.

Το Anpheros δεν μετατρέπει μονάδες για εσάς· αποθηκεύει τη μονάδα που στέλνετε.

## Βήμα 4: ημερομηνίες

Μετατρέψτε τις ημερομηνίες σε ISO 8601 πριν από την εγγραφή, χρησιμοποιώντας την γνωστή μορφή της πηγής. Το `01.10.2026` είναι 1 Οκτωβρίου στη Ρουμανία και σε πολλές ευρωπαϊκές χώρες, αλλά το `10/01/2026` είναι 1 Οκτωβρίου μόνο στις Ηνωμένες Πολιτείες. Το API απορρίπτει οτιδήποτε δεν είναι ISO, αντί να μαντεύει:

```json
{"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: Όχι διπλότυπα

Τα διπλότυπα προκύπτουν από επαναλήψεις, από την ίδια αναφορά που στάλθηκε δύο φορές και από την ίδια τιμή που φτάνει μέσω δύο διαδρομών.

- **Επαναλήψεις:** στείλτε ένα `Idempotency-Key` που αναγνωρίζει την τιμή στην πηγή, για παράδειγμα το αναγνωριστικό της αναφοράς και το τεστ. Η αποστολή του ίδιου αιτήματος ξανά με το ίδιο κλειδί επιστρέφει την πρώτη απόκριση και δεν αποθηκεύει τίποτα νέο. Τα SDK προσθέτουν ένα σε κάθε δημιουργία.
- **Η ίδια αναφορά δύο φορές:** ο σύνδεσμος εργαστηρίου δημιουργεί ένα σταθερό αναγνωριστικό ανά γραμμή από την αναφορά, τον κωδικό, την ημερομηνία και την τιμή, και παραλείπει γραμμές που έχουν ήδη εισαχθεί.
- **Δύο διαδρομές:** αποθηκεύστε το δικό αναγνωριστικό του συστήματος πηγής με `X-Anpheros-Origin-Id` (ή στο `identifier` στους πόρους FHIR), και αναζητήστε το πριν γράψετε τιμές που μπορεί να επιστρέψουν μέσω άλλης διαδρομής.

## Βήμα 6: Έλεγχος έναντι προφίλ

Για εργαστηριακά αποτελέσματα, ρωτήστε την πλατφόρμα πώς ένα resource συγκρίνεται με το προφίλ αναφοράς εργαστηρίου της HL7 Europe, προτού βασιστείτε σε αυτό:

```bash
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": "%"}
}'
```

Αυτό το μη-κανονικοποιημένο αποτέλεσμα λαμβάνει μια ακριβή λίστα:

```json
{"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` με κάθε εγγραφή. Αυτό επιτρέπει σε έναν γιατρό, έναν ελεγκτή ή ένα μοντέλο ΤΝ να διακρίνει ένα εργαστηριακό αποτέλεσμα από μια τιμή που πληκτρολογήθηκε στο σπίτι. Δείτε [Επεξήγηση προέλευσης ιατρικών δεδομένων](https://developers.anpheros.com/el/guides/medical-data-provenance).

## Λίστα Ελέγχου

- [ ] Κάθε πηγή έχει αντιστοίχιση από τα ονόματά της σε LOINC / ATC / ICD-10, διατηρημένη στην ενσωμάτωσή σας
- [ ] Ασαφή ονόματα παραμένουν χωρίς αντιστοίχιση και αναφέρονται, ποτέ δεν υποτίθενται
- [ ] Μονάδες UCUM, που ταιριάζουν με τον κωδικό· καμία σιωπηρή μετατροπή
- [ ] Ημερομηνίες ISO 8601, με ζώνες ώρας όπου η ώρα έχει σημασία
- [ ] Εύρη αναφοράς διατηρούνται με τιμές εργαστηρίου
- [ ] Αρχική διατύπωση διατηρείται (`code.text`)
- [ ] Κλειδιά ιδεοδυναμίας ή αναγνωριστικά πηγής σε κάθε εγγραφή
- [ ] `author_type` και σύστημα πηγής σε κάθε εγγραφή
- [ ] `$validate` σε δοκιμές για εργαστηριακά αποτελέσματα

## Συχνές ερωτήσεις

### Τι είναι η κανονικοποίηση ιατρικών δεδομένων;
Η μετατροπή δεδομένων υγείας από διαφορετικές πηγές σε μία τυπική μορφή: κοινοί κωδικοί (LOINC για εξετάσεις και μετρήσεις, ICD-10 για διαγνώσεις, ATC για φάρμακα), μονάδες UCUM, ημερομηνίες ISO, εύρη αναφοράς και καταγεγραμμένη πηγή, ώστε οι τιμές από διαφορετικά συστήματα να μπορούν να συγκριθούν, να συνδυαστούν και να ανταλλαχθούν.

### Πρέπει να μετατρέψω όλες τις τιμές σε μία μονάδα;
Αποθηκεύστε τη μονάδα στην οποία μέτρησε η πηγή, εφόσον είναι έγκυρη μονάδα UCUM που αντιστοιχεί στον κωδικό, και μετατρέψτε κατά την εμφάνιση ή την ανάλυση. Αυτό διατηρεί κάθε αποθηκευμένη τιμή ανιχνεύσιμη στην αρχική της αναφορά.

### Μπορεί η κανονικοποίηση να είναι πλήρως αυτόματη;
Συνήθως. Οι κωδικοί στην πηγή, τα γνωστά ονόματα και οι καλά διαμορφωμένες μονάδες μπορούν να αντιστοιχιστούν αυτόματα. Οι αμφίσημες ονομασίες και οι άγνωστοι τοπικοί κωδικοί απαιτούν μία ανθρώπινη απόφαση ανά πηγή, μετά την οποία η αντιστοίχιση είναι αυτόματη.

## Σχετικά

- [Συστήματα κώδικα FHIR](https://developers.anpheros.com/el/guides/fhir-code-systems)
- [Πώς να εισάγετε εργαστηριακά αποτελέσματα σε ένα αρχείο FHIR](https://developers.anpheros.com/el/guides/import-lab-results-fhir)
- [Επεξήγηση προέλευσης ιατρικών δεδομένων](https://developers.anpheros.com/el/guides/medical-data-provenance)
- [Διαλειτουργικότητα δεδομένων υγειονομικής περίθαλψης](https://developers.anpheros.com/el/guides/interoperability)
- [API ιατρικών δεδομένων](https://developers.anpheros.com/el/guides/medical-data-api)
