# Tıbbi verileri normalleştirme

> Eğitim: Tıbbi verileri birçok kaynaktan tek bir karşılaştırılabilir forma dönüştürme — LOINC araması, UCUM birimleri, ISO tarihleri, referans aralıkları, yeniden denemelerde yinelenen kayıt yok ve Avrupa laboratuvar profiline karşı doğrulama.

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

**Tıbbi verileri normalleştirmek, birçok farklı şekilde gelen değerleri tek bir karşılaştırılabilir forma dönüştürmek anlamına gelir: aynı test için aynı kod, aynı birim sistemi, tek bir formatta tarihler, her değer referans aralığı ve kaynağı ile birlikte ve yinelenen kayıtlar olmadan.** Bu eğitim, veriler HL7 FHIR R4 kaydına ulaşmadan önce bunu nasıl yapacağınızı gösterir: LOINC ve ATC kodlarını arama, UCUM birimlerini kullanma, belirsiz tarihleri reddetme, aralıkları saklama, yeniden denemelerde yinelenenleri önleme ve sonucu Avrupa laboratuvar profiline karşı kontrol etme. Gösterilen her yanıt Anpheros API'sinden gelir.

## Neden Önemlidir

Aynı HbA1c sonucu size "HbA1c 6,4 %", "Hemoglobina glicozilata: 6.4", "Glycated haemoglobin 46 mmol/mol" veya yalnızca bir laboratuvarın anlayabileceği bir laboratuvar kodu olarak ulaşabilir. Bunlar tek bir birimle tek bir kod olana kadar:

- Hastanın zaman içindeki HbA1c grafiği üç ilgisiz çizgi gösterir;
- "HbA1c 6,5 % üzerinde" uyarısı değerlerin ikisini kaçırır;
- Bir yapay zeka modeli tek bir eğilim yerine dört olgu görür;
- Kaydı alan başka bir sistem bunu yorumlayamaz.

Normalleştirme, verinin kayda girdiği noktada, bir kez yapılmalıdır, sonradan okuyan her uygulamada değil.

## Normalleştirilmiş Bir Değer Neleri İçerir

| Kısım | Normalleştirilmiş Form | Örnek |
|---|---|---|
| Ölçülen Şey | Standart bir sistemden bir kod | LOINC `4548-4` (HbA1c), RxNorm `6809` (metformin), ICD-10 `E11` (tip 2 diyabet) |
| Değer | Sayısal olmayan bir sonuç olduğunda yalnızca sayı veya metin | `6.4` |
| Birim | UCUM | `%`, `mg/dL`, `mm[Hg]`, `kg` |
| Ne Zaman | Saat dilimiyle birlikte ISO 8601 tarih-saat, zaman önemli olduğunda saat dilimiyle | `2026-10-01T07:30:00Z` |
| Normal Aralık | Düşük ve yüksek, aynı birimde | `4.0`–`5.6` |
| Kaynak | Kimin ürettiği ve hangi sistemden | `import`, `labx`'den |
| Kimlik | Tekrarı tanınabilir kılan bir şey | Bir idempotency anahtarı veya bir kaynak tanımlayıcısı |

Hangi kod sisteminin hangi kaynak türüyle eşleştiği [FHIR kod sistemleri](https://developers.anpheros.com/tr/guides/fhir-code-systems) bölümünde listelenmiştir.

## Adım 1: Kodu Bulma

Platformun terminolojisini İngilizce veya Rumence adıyla ya da kısaltmasıyla arayın:

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

Her ikisi de aynı kavramı döndürür:

```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}
```

İlaçlar için [Anpheros Search](https://developers.anpheros.com/tr/guides/anpheros-search), maddeyi ad veya marka ile bulur ve RxNorm bileşen kodunu ve EMA ürün numaralarını verir:

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

`unit` alanı, testin beklediği birim LOINC'dir. Aldığınızı kontrol etmek için kullanın. Her kaynaktan kendi adlarından kodlara eşlemeyi kaynak başına bir kez oluşturun ve entegrasyonunuzda saklayın. Yazma zamanında tahmin etmeyin: bir ad belirsiz olduğunda ve kaynaktan hiçbir şey bunu çözmediğinde, eşlenmemiş bırakın ve kaynaktan sorun. [Laboratuvar sonuçlarını bir FHIR kaydına nasıl aktarılır](https://developers.anpheros.com/tr/guides/import-lab-results-fhir) eşlenmemiş laboratuvar işaretçilerinin nasıl saklandığını ve raporlandığını gösterir.

## Adım 2: Kodlar, birimler ve aralıklarla yazma

```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-…"}
```

Yalnızca kodu gönderdiğinizde, platform standart LOINC adını hem REST API'de hem de FHIR API'de (`/fhir/R4`) doldurur, böylece her uygulama aynı `display`'yi okur. Kendi gönderdiğiniz bir `display` olduğu gibi saklanır.

Orijinal ifadeyi de koruyun. Bir laboratuvar raporu için, FHIR Observation'daki `code.text`, laboratuvarın adını ("Hemoglobina glicozilata (HbA1c)") LOINC kodlamasının yanında tutar. Hasta hala kağıt raporunu tanır ve eşleme sorgulanırsa hiçbir şey kaybolmaz.

## Adım 3: Birimler

UCUM kodlarını kullanın: `mg/dL`, `mmol/L`, `%`, `mm[Hg]`, `kg`, `cm`, `/min`, `Cel`. Hataların çoğunu önleyen iki kural vardır:

- **Sessizce dönüştürmeyin.** Bir laboratuvar glukozu `mmol/L` cinsinden bildirirse ve uygulamanız `mg/dL` cinsinden gösterirse, laboratuvarın ölçtüğünü saklayın ve gösterirken dönüştürün. Saklanan değer, rapora izlenebilir kalır.
- **Birimleri kodla kontrol edin.** LOINC kodları spesifiktir: `%` cinsinden HbA1c, `4548-4`'dir, `mmol/mol` cinsinden HbA1c ise farklı bir LOINC kodudur. Birimin kodun beklenen birimiyle eşleşmediği bir değer, bir dönüştürme sorunu değil, bir eşleme hatasıdır.

Anpheros sizin için birimleri dönüştürmez; gönderdiğiniz birimi saklar.

## Adım 4: Tarihler

Tarihleri yazmadan önce, kaynağın bilinen formatını kullanarak ISO 8601'e dönüştürün. `01.10.2026`, Romanya ve birçok Avrupa ülkesinde 1 Ekim anlamına gelirken, `10/01/2026` yalnızca Amerika Birleşik Devletleri'nde 1 Ekim anlamına gelir. API, tahmin etmek yerine ISO olmayan herhangi bir şeyi reddeder:

```json
{"error": {"type": "invalid", "message": "Input should be a valid datetime or date, invalid character in year (at effective_at)", "field": "effective_at"}}
```

Laboratuvar bağlayıcısı bir istisnadır: Avrupa'dan bir rapor okuduğunu bildiği için `DD.MM.YYYY` ve `DD/MM/YYYY`'ü kabul eder.

Günün saatinin önemli olduğu ölçümler (kan basıncı, glukoz, ilaç dozları) için saati saat dilimiyle birlikte gönderin. Bükreş'te 23:30'da alınan bir ölçüm, UTC'de önceki güne denk gelir ve hasta bunu aldığı gün olarak bekler.

## Adım 5: Tekrarlanan Kayıtlar

Tekrarlanan kayıtlar, yeniden denemelerden, aynı raporun iki kez gönderilmesinden ve iki farklı yoldan gelen aynı değerden kaynaklanabilir.

- **Yeniden Denemeler:** Değeri kaynakta tanımlayan bir `Idempotency-Key` gönderin, örneğin rapor kimliği ve test. Aynı anahtarla aynı isteği tekrar göndermek ilk yanıtı döndürür ve yeni bir şey depolamaz. SDK'lar her oluşturmaya bir ekler.
- **Aynı Rapor İki Kez:** Laboratuvar bağlayıcısı, rapordan, koddann, tarihten ve değerden satır başına kararlı bir tanımlayıcı oluşturur ve zaten içe aktarılmış satırları atlar.
- **İki Farklı Yol:** Kaynak sistemin kendi kimliğini `X-Anpheros-Origin-Id` (veya FHIR kaynaklarında `identifier` içinde) saklayın ve başka bir yoldan geri gelebilecek değerleri yazmadan önce bu kimliği arayın.

## Adım 6: Bir profile karşı kontrol etme

Laboratuvar sonuçları için, platforma HL7 Europe laboratuvar rapor profiline ne kadar uyduğunu sormadan önce ona güvenmeyin:

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

Bu normalleştirilmemiş sonuç, kesin bir liste alır:

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

Her sorun yukarıdaki adımlardan birine karşılık gelir. Her kaynaktan gelen gerçek örneklerle entegrasyon testlerinizde `$validate`'yi çalıştırın.

## Adım 7: Kaynağı Korumak

Normalleştirme, bir değerin nasıl yazıldığını değiştirir, nereden geldiğini asla değiştirmez. Her yazma işlemiyle birlikte `author_type` (`device`, `import`, `practitioner`, `patient`) ve `X-Anpheros-Source-System` gönderin. Bu, bir doktorun, denetçinin veya yapay zeka modelinin bir laboratuvar sonucunu evde girilen bir değerden ayırt etmesini sağlar. [Tıbbi Veri Kökeni Açıklaması](https://developers.anpheros.com/tr/guides/medical-data-provenance) bölümüne bakın.

## Kontrol Listesi

- [ ] Her kaynak için, entegrasyonunuzda tutulan isimlerinden LOINC / ATC / ICD-10'a bir eşleme
- [ ] Belirsiz isimler eşlenmemiş olarak kalır ve raporlanır, asla tahmin edilmez
- [ ] UCUM birimleri, kodla eşleşen; sessiz dönüşüm yok
- [ ] ISO 8601 tarihleri, zamanın önemli olduğu yerlerde saat dilimleri ile
- [ ] Laboratuvar değerleriyle birlikte referans aralıkları saklanır
- [ ] Orijinal ifade saklanır (`code.text`)
- [ ] Her yazma işleminde idempotency anahtarları veya kaynak kimlikleri
- [ ] Her yazma işleminde `author_type` ve kaynak sistem
- [ ] Laboratuvar sonuçları için testlerde `$validate`

## Sıkça Sorulan Sorular

### Tıbbi veri normalizasyonu nedir?
Farklı kaynaklardan gelen sağlık verilerini tek bir standart forma dönüştürmektir: paylaşılan kodlar (testler ve ölçümler için LOINC, teşhisler için ICD-10, ilaçlar için ATC), UCUM birimleri, ISO tarihleri, referans aralıkları ve kaydedilmiş bir kaynak, böylece farklı sistemlerden gelen değerler karşılaştırılabilir, birleştirilebilir ve değiştirilebilir.

### Tüm değerleri tek bir birime dönüştürmeli miyim?
Kaynak tarafından ölçülen birimi, geçerli bir UCUM birimi olduğu ve kodla eşleştiği sürece saklayın ve görüntüleme veya analiz sırasında dönüştürün. Bu, saklanan her değerin orijinal raporuna izlenebilirliğini korur.

### Normalizasyon tamamen otomatik olabilir mi?
Çoğunlukla. Kaynaktaki kodlar, bilinen adlar ve iyi biçimlendirilmiş birimler otomatik olarak eşlenebilir. Belirsiz adlar ve bilinmeyen yerel kodlar, kaynak başına bir kez insan kararı gerektirir, sonrasında eşleme otomatik olur.

## İlgili Konular

- [FHIR kod sistemleri](https://developers.anpheros.com/tr/guides/fhir-code-systems)
- [Laboratuvar sonuçlarını bir FHIR kaydına nasıl aktarılır](https://developers.anpheros.com/tr/guides/import-lab-results-fhir)
- [Tıbbi veri kökenbilimi (provenance) açıklaması](https://developers.anpheros.com/tr/guides/medical-data-provenance)
- [Sağlık verisi birlikte çalışabilirliği](https://developers.anpheros.com/tr/guides/interoperability)
- [Tıbbi veri API'si](https://developers.anpheros.com/tr/guides/medical-data-api)
