# FHIR R4 Kullanarak Tıbbi Kayıtları Saklama

> Eğitim: Bir Hasta, bir tansiyon Gözlemi ve bir Durum oluşturun, bir işlem kullanın, arama yapın, geçmişle güncelleme yapın ve köken bilgisini okuyun — her istek curl ile ve gerçek yanıtıyla, ücretsiz sandbox'ta.

Source: https://developers.anpheros.com/tr/guides/store-medical-records-fhir

Bu eğitim, HL7 FHIR R4 kaynakları olarak küçük bir tıbbi kayıt saklar: bir `Patient`, bir tansiyon `Observation` ve bir teşhis olarak bir `Condition`, ardından bir hasta ve bir ölçüm tek bir işlemde bir araya getirilir. Bunları arar, önceki sürümü kaybetmeden teşhisi günceller ve kimin ne yazdığını okur. Her istek, ücretsiz Anpheros sandbox'ına karşı düz bir `curl`'dir ve gösterilen her yanıt API'nin döndürdüğü çıktıdır.

FHIR'a yeni başlıyorsanız, öncelikle kavramlar için [FHIR platformu](https://developers.anpheros.com/tr/guides/fhir) sayfasını okuyun. Bu sayfa uygulamalı kısımdır.

## Kayıtların Başladığı Üç Kaynak

| Kaynak | Neler İçerir | Hangi Kodlarla Kodlanır |
|---|---|---|
| `Patient` | Kaydın kiminle ilgili olduğu: ad, doğum tarihi, cinsiyet, diğer sistemlerden gelen tanımlayıcılar | Sizin tanımlayıcı sistemleriniz |
| `Observation` | Ölçülen veya bildirilen her şey: yaşamsal belirtiler, laboratuvar sonuçları, bir kilo, bir semptom skoru | LOINC, UCUM birimleri |
| `Condition` | Bir teşhis veya sağlık sorunu, zaman içindeki durumuyla birlikte | ICD-10 (Lisans bayrağının arkasında SNOMED CT) |

İlaçlar (`MedicationStatement`), alerjiler (`AllergyIntolerance`), aşılar ve belgeler aynı deseni izler; [26 desteklenen kaynak türü](https://developers.anpheros.com/tr/guides/fhir), `/fhir/R4/metadata` adresindeki yetenek beyanında listelenmiştir.

## Başlamadan Önce

[platform.anpheros.com/dashboard](https://platform.anpheros.com/dashboard/) adresinden **Get a sandbox key** seçeneği ile bir sandbox anahtarı (`sk_test_…`) alın. Burada oluşturduğunuz hiçbir şey gerçek hasta verisi değildir ve başka projeler tarafından görülemez.

```bash
export BASE=https://platform.anpheros.com/fhir/R4
export KEY=sk_test_…
```

## Adım 1: Bir Hasta oluşturun

```bash
curl -X POST "$BASE/Patient" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" -d '{
  "resourceType": "Patient",
  "identifier": [{"system": "https://clinic.example/mrn", "value": "MRN-10442"}],
  "name": [{"family": "Marin", "given": ["Ioana"]}],
  "gender": "female",
  "birthDate": "1979-04-12"
}'
```

`201 Created`, sunucunun atadığı kimlik ve sürüm ile birlikte:

```json
{"resourceType": "Patient",
 "identifier": [{"system": "https://clinic.example/mrn", "value": "MRN-10442"}],
 "name": [{"family": "Marin", "given": ["Ioana"]}], "gender": "female", "birthDate": "1979-04-12",
 "id": "d09e3942-ed86-4458-b099-fa674ab21b84",
 "meta": {"versionId": "1", "lastUpdated": "2026-10-12T20:16:51.043Z"}}
```

Kendi kimliklerinizi `identifier` içinde, sizin kontrolünüzde olan bir `system` (burada bir kliniğin kayıt numarası) ile saklayın, böylece hastayı her zaman `GET $BASE/Patient?identifier=https://clinic.example/mrn|MRN-10442` ile tekrar bulabilirsiniz. FHIR `id` platforma aittir ve projenize özeldir: başka bir proje aynı kişiyi farklı bir kimlik altında görür.

```bash
export PID=d09e3942-ed86-4458-b099-fa674ab21b84
```

## Adım 2: Bir ölçümü Gözlem (Observation) olarak saklama

Kan basıncı, sistolik ve diyastolik olmak üzere iki bileşeni olan bir gözlemdir ve her birinin kendi LOINC kodu vardır. Kimin ölçtüğünü belirtin: burada evde kullanılan bir cihaz.

```bash
curl -X POST "$BASE/Observation" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
     -H "X-Anpheros-Author-Type: device" -H "Idempotency-Key: bp-2026-10-10-0830" -d '{
  "resourceType": "Observation",
  "status": "final",
  "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-signs"}]}],
  "code": {"coding": [{"system": "http://loinc.org", "code": "85354-9", "display": "Blood pressure panel"}]},
  "subject": {"reference": "Patient/'$PID'"},
  "effectiveDateTime": "2026-10-10T08:30:00Z",
  "component": [
    {"code": {"coding": [{"system": "http://loinc.org", "code": "8480-6"}]},
     "valueQuantity": {"value": 138, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]"}},
    {"code": {"coding": [{"system": "http://loinc.org", "code": "8462-4"}]},
     "valueQuantity": {"value": 88, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]"}}
  ]
}'
```

Yanıt, `id` ve `meta.versionId: "1"` ile saklanan kaynaktır. Kullanılabilir bir kayıt için üç ayrıntı önemlidir:

- **Etiketler değil, Kodlar.** `85354-9`, her FHIR sisteminde "kan basıncı paneli" anlamına gelir; serbest metin "BP" gelmez. Kodları `GET /v1/terminology/loinc?q=blood pressure` ([FHIR kod sistemleri](https://developers.anpheros.com/tr/guides/fhir-code-systems)) ile arayın.
- **UCUM birimleri** (`mm[Hg]`, `kg`, `mg/dL`) `valueQuantity.code` içinde, böylece değerler karşılaştırılabilir ve dönüştürülebilir.
- **`Idempotency-Key`.** Bir zaman aşımı sonrasında yeniden deneme, okumayı iki kez saklamak yerine ilk yanıtı döndürür.

Laboratuvar sonuçları, `category` `laboratory` ve genellikle bir `referenceRange` ile aynı kaynaktır. Tam laboratuvar raporlarını getirmek için, [Bir FHIR kaydına laboratuvar sonuçlarının nasıl aktarılacağı](https://developers.anpheros.com/tr/guides/import-lab-results-fhir) bölümüne bakın.

## Adım 3: Bir tanıyı Durum (Condition) olarak kaydetme

```bash
curl -X POST "$BASE/Condition" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
     -H "X-Anpheros-Author-Type: practitioner" -d '{
  "resourceType": "Condition",
  "subject": {"reference": "Patient/'$PID'"},
  "clinicalStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "active"}]},
  "verificationStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status", "code": "confirmed"}]},
  "code": {"coding": [{"system": "http://hl7.org/fhir/sid/icd-10", "code": "I10", "display": "Essential (primary) hypertension"}]},
  "onsetDateTime": "2026-03-02"
}'
```

`clinicalStatus` (aktif, çözülmüş, remisyonda) ve `verificationStatus` (onaylanmış, geçici) kasıtlı olarak ayrıdır: şüpheli bir tanı, onaylanmış bir tanı ile aynı değildir ve çözülmüş bir sorun hala geçmişin bir parçasıdır.

## Adım 4: Tek bir işlemde ilgili kaynakları oluşturma

Bir hasta ve ilk ölçümü birlikte geldiğinde, örneğin bir klinik sisteminden, bunları bir `transaction` Bundle olarak gönderin. Her şey depolanır veya hiçbir şey depolanmaz. Yeni kaynaklar arasındaki referanslar, sunucunun değiştirdiği geçici `urn:uuid:` kimliklerini kullanır:

```bash
curl -X POST "$BASE" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" -d '{
  "resourceType": "Bundle", "type": "transaction",
  "entry": [
    {"fullUrl": "urn:uuid:9f1c0d1e-0000-4000-8000-000000000001",
     "resource": {"resourceType": "Patient", "name": [{"family": "Stan", "given": ["Mihai"]}], "gender": "male", "birthDate": "1990-02-01"},
     "request": {"method": "POST", "url": "Patient"}},
    {"resource": {"resourceType": "Observation", "status": "final",
       "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-signs"}]}],
       "code": {"coding": [{"system": "http://loinc.org", "code": "29463-7", "display": "Body weight"}]},
       "subject": {"reference": "urn:uuid:9f1c0d1e-0000-4000-8000-000000000001"},
       "effectiveDateTime": "2026-10-10",
       "valueQuantity": {"value": 82.4, "unit": "kg", "system": "http://unitsofmeasure.org", "code": "kg"}},
     "request": {"method": "POST", "url": "Observation"}}
  ]
}'
```

`transaction-response`, her kaynak için bir giriş içerir; bu giriş, `"status": "201 Created"`, `location` ve depolanan kaynağı içerir. Observation'ın `subject`'u artık gerçek `Patient/fad3665a-…`'ye işaret eder.

## Adım 5: Arama

```bash
curl "$BASE/Observation?patient=$PID&code=http://loinc.org|85354-9&date=ge2026-10-01&_sort=-date" \
     -H "Authorization: Bearer $KEY"
```

Eşleşen kaynakları ve `total` içeren bir `searchset` Bundle alırsınız, en yeni önce gelecek şekilde sıralanır. Sıkça kullanacağınız diğer aramalar şunlardır: `Condition?patient=$PID&clinical-status=active`, `Observation?patient=$PID&category=laboratory` ve tüm kayıt için `Patient/$PID/$everything`.

## Adım 6: Geçmişi Kaybetmeden Güncelleme

Hipertansiyon düzelir. Durumu değiştirin ve bitiş tarihini ekleyin ve başkasının yaptığı değişikliği asla üzerine yazmamak için okuduğunuz sürümü `If-Match` ile kullanın:

```bash
curl -X PUT "$BASE/Condition/$CID" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
     -H 'If-Match: W/"1"' -d '{ …the same Condition…, "clinicalStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "resolved"}]}, "abatementDateTime": "2026-10-11" }'
```

`200 OK`, `ETag: W/"2"` ile. Başka bir yazma işlemi önce oraya ulaştıysa, `412` alırsınız ve tekrar okursunuz. Önceki sürüm hala oradadır:

```bash
curl "$BASE/Condition/$CID/_history" -H "Authorization: Bearer $KEY"
```

her iki sürümü de döndürür: `versionId` 2 (`resolved`) ve 1 (`active`). `GET $BASE/Condition/$CID/_history/1` eskini okur. Bir kayıttaki hiçbir şey sessizce üzerine yazılmaz.

## Adım 7: Kimin ne yazdığını görün

Her yazma işlemi bir `Provenance` kaynak oluşturur. Tansiyon ölçümü için:

```bash
curl "$BASE/Provenance?target=Observation/$OBS" -H "Authorization: Bearer $KEY"
```

```json
{"resourceType": "Provenance",
 "target": [{"reference": "Observation/d83d9075-…/_history/1"}],
 "recorded": "2026-10-12T20:16:51.056000Z",
 "activity": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-DataOperation", "code": "CREATE"}]},
 "agent": [{"type": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type", "code": "author"}]},
            "who": {"identifier": {"system": "https://anpheros.com/fhir/CodeSystem/author-type", "value": "device"}, "display": "proj_…"},
            "onBehalfOf": {"identifier": {"system": "https://anpheros.com/fhir/sid/organization", "value": "org_…"}, "display": "…"}}]}
```

Gönderdiğiniz yazar türü (`device`), proje ve kuruluş ile birlikte kaydedilir. Bir yazının arkasındaki klinisyeni adlandırmak için `X-Anpheros-Author-Ref: Practitioner/<id>` gönderin.

## Adım 8: Kayıt bir özet olarak

```bash
curl "$BASE/Patient/$PID/\$summary" -H "Authorization: Bearer $KEY"
```

Uluslararası Bir Hasta Özeti döndürür: bu, `document` Bundle ile başlar ve Problemler, İlaçlar, Alerjiler ve Yaşamsal Bulgular gibi bölümlere sahip, yukarıdaki kaynaklardan oluşturulmuş bir `Composition`'dir. Bu, başka bir sisteme vermek veya bir doktor için yazdırmak üzere olan formattır ([FHIR platformu](https://developers.anpheros.com/tr/guides/fhir)).

## FHIR Olmadan JSON Tercih Edilir mi?

Aynı verilere, `/v1` adresindeki daha basit bir REST görünümü aracılığıyla ve aynı kimliklerle erişilebilir: `POST /v1/patients/{id}/observations`, `{"code": "85354-9", "category": "vital-signs", "effective_at": "…", "components": […]}`'i alır ve aynı FHIR Observation'ı depolar. Kodunuza hangisi uyarsa onu kullanın. [Tıbbi Veri API'sine](https://developers.anpheros.com/tr/guides/medical-data-api) ve [SDK'lara](https://developers.anpheros.com/tr/guides/sdks) bakın.

## Sıkça Sorulan Sorular

### Tıbbi kayıtları saklamanın en iyi yolu nedir?
Kodlanmış, sürümlenmiş ve kimin yazdığına dair kaydı tutulan kaynaklar olarak. HL7 FHIR R4 size yapıyı (Patient, Observation, Condition ve diğerleri), LOINC ve ICD-10 gibi standart kod sistemlerini ve geçmişi sunar; bir FHIR arka ucu ise arama, izin ve köken bilgilerini ekler.

### FHIR kullanmak için bir FHIR sunucusuna ihtiyacım var mı?
FHIR kaynaklarını saklayan, arayan ve kimlerin okuyabileceğini zorunlu kılan bir yere ihtiyacınız var. Kendi açık kaynaklı FHIR sunucunuzu çalıştırabilir veya Anpheros gibi yönetilen birini kullanabilirsiniz; [Anpheros'un diğer FHIR sunucularıyla karşılaştırması](https://developers.anpheros.com/tr/guides/fhir-server-comparison) seçenekleri değerlendirir ve [FHIR'a karşı özel bir tıbbi veritabanı](https://developers.anpheros.com/tr/guides/fhir-vs-custom-database) kendi şemanızı oluşturmayı ele alır.

### Kan basıncını FHIR'da nasıl saklarım?
Bir `Observation` olarak, LOINC `85354-9` koduyla ve iki `component` girdisiyle: sistolik `8480-6` ve diyastolik `8462-4`, her biri `mm[Hg]` cinsinden bir `valueQuantity` ile.

### Saklanan bir kaynağı değiştirebilir miyim?
Evet, `PUT` ve `If-Match` ile. Her değişiklik yeni bir sürüm oluşturur; önceki sürümler `_history` aracılığıyla okunabilir kalır ve Provenance her değişikliği kimin yaptığını kaydeder. Silmeler yumuşaktır ve geçmişi korur.

## İlgili Konular

- [FHIR platformu](https://developers.anpheros.com/tr/guides/fhir): kavramlar, kaynak türleri ve işlemler
- [FHIR kod sistemleri](https://developers.anpheros.com/tr/guides/fhir-code-systems): LOINC, ICD-10, ATC, UCUM
- [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 API'si](https://developers.anpheros.com/tr/guides/medical-data-api): aynı verinin daha basit REST görünümü
- [Ücretsiz FHIR veritabanı ve sandbox](https://developers.anpheros.com/tr/guides/free-fhir-database)
