# FHIR arka ucu ile klinik sistemlerini entegre etme

> Eğitim: Bir kliniğin EMR'sini hastaların FHIR R4 kayıtlarına bağlama — doktor dizini, kayıt numarasına göre eşleştirme, tek bir işlem olarak ziyaret ve doktorun yazar olarak belirtilmesi, laboratuvar raporları, diğer sağlayıcıların verileri ve webhook'lar.

Source: https://developers.anpheros.com/tr/guides/integrate-clinic-systems-fhir

**Bu eğitim, bir kliniğin yazılımını (bir EMR, bir muayenehane yönetim sistemi veya bir randevu aracı) Anpheros'taki hastaların HL7 FHIR R4 kayıtlarına bağlar: klinik ve doktorları dizine kaydedilir, hastalar kliniğin kayıt numarasına göre eşleştirilir, bir ziyaret doktorun yazar olarak belirtildiği tek bir işlem olarak yazılır ve klinik diğer sağlayıcıların eklediği veriler hakkında bilgi edinir.** Her istek, `curl` ücretsiz sandbox'a karşı yapılır ve yanıtlar platformun kendi yanıtlarıdır.

Entegrasyon, kliniğin kaydettiği hastalar için bir proje API anahtarı ve Anpheros kaydı olan kişiler için onayladıkları bir OAuth hibesi ile kliniğin sunucusunda çalışır.

## Nelerin Nelerle Eşleştiği

| Klinik sistemde | FHIR R4'te |
|---|---|
| klinik, departmanları | `Organization` |
| bir doktor veya hemşire | `Practitioner` |
| o klinikte çalışan, uzmanlığı olan o kişi | `PractitionerRole` |
| hasta dosyası ve numarası | `Patient`, klinik sistemindeki bir `identifier` ile |
| bir ziyaret | `Encounter` |
| hayati belirtiler, ziyaret sırasında ölçülen sonuçlar | `Encounter`'e bağlı `Observation` |
| bir teşhis | `Condition` (ICD-10), `verificationStatus` geçici veya kesin olarak |
| bir reçete, mevcut tedavi | `MedicationStatement` (ATC) |
| bir mektup, taburculuk özeti, bir tarama | dosyayla birlikte `DocumentReference` |
| laboratuvar sonuçları | [laboratuvar bağlayıcısı](https://developers.anpheros.com/tr/guides/lab-connector) aracılığıyla `Observation`'e |

## Adım 1: Kliniği ve doktorlarını kaydetme

Dizin kaynaklarının hastası yoktur. Aynı ortamdaki diğer projeler bunları okuyabilir, böylece bir hastanın diğer sağlayıcıları kimin ne yazdığını görebilir, ancak yalnızca sizin projeniz bunları değiştirebilir.

```bash
export BASE=https://platform.anpheros.com/fhir/R4
export KEY=sk_test_…
H=(-H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json")

curl -X POST $BASE/Organization "${H[@]}" -d '{"resourceType": "Organization", "active": true, "name": "Clinica Cardio Nord",
  "identifier": [{"system": "https://clinic.example/org", "value": "CCN"}]}'

curl -X POST $BASE/Practitioner "${H[@]}" -d '{"resourceType": "Practitioner", "active": true,
  "name": [{"family": "Popescu", "given": ["Ana"], "prefix": ["Dr."]}]}'

curl -X POST $BASE/PractitionerRole "${H[@]}" -d '{"resourceType": "PractitionerRole", "active": true,
  "practitioner": {"reference": "Practitioner/'$PRACTITIONER'"},
  "organization": {"reference": "Organization/'$ORG'"},
  "code": [{"text": "Cardiologist"}]}'
```

Döndürülen kimlikleri personel kayıtlarınızın yanında saklayın. Biri ayrıldığında, `PractitionerRole` alanını `"active": false` olarak ayarlayın; geçmiş yazıları isimlerini korur ve artık sisteminiz aracılığıyla işlem yapamazlar.

## Adım 2: Hastaları Eşleştirme

Klinik tarafından kaydedilen hastalar için, `Patient`'ü kliniğin kayıt numarası ile bir tanımlayıcı olarak oluşturun:

```bash
curl -X POST $BASE/Patient "${H[@]}" -d '{"resourceType": "Patient",
  "identifier": [{"system": "https://clinic.example/mrn", "value": "MRN-20981"}],
  "name": [{"family": "Dinu", "given": ["Andrei"]}], "gender": "male", "birthDate": "1968-11-05"}'
```

Bundan sonra, hastayı bu numara ile bulun, asla isim ve doğum tarihi ile değil:

```bash
curl "$BASE/Patient?identifier=https://clinic.example/mrn|MRN-20981" -H "Authorization: Bearer $KEY"
```

**Kişinin zaten bir Anpheros kaydı varsa**, kendi uygulamasından veya başka bir sağlayıcıdan, klinik ikinci bir kayıt oluşturmaz. OAuth ile erişim ister, resepsiyondaki bir tabletten veya ziyaret öncesinde gönderilen bir bağlantı aracılığıyla, **gizli** bir uygulama kullanarak (kliniğin sunucusu gizliliği saklar). Kişi kendi kaydını ve kliniğin ne kadar süreyle erişebileceğini seçer. Adımlar [SMART on FHIR ile hasta onayının nasıl uygulanacağı](https://developers.anpheros.com/tr/guides/smart-on-fhir-backend) bölümünde yer almaktadır; belirtecin `patient` alanı, dosyanızla birlikte saklanacak kimliktir.

## Adım 3: Bir ziyareti tek bir işlem olarak yazma

Bir ziyaret, birbiriyle ilişkili birkaç kaynak üretir. Bunları tek seferde veya hiç depolanmayacakları şekilde `transaction` içinde gönderin ve kimin çalıştığını belirtin: `X-Anpheros-Acting-As` doktorun rolünü adlandırır. Bu, Provenance'da yazar olur, erişim günlüğüne yazılır ve hastaya isimle gösterilir.

```bash
curl -X POST $BASE "${H[@]}" \
  -H "X-Anpheros-Acting-As: PractitionerRole/$ROLE" \
  -H "X-Anpheros-Author-Type: practitioner" \
  -H "X-Anpheros-Source-System: ccn-emr" -d '{
  "resourceType": "Bundle", "type": "transaction",
  "entry": [
    {"fullUrl": "urn:uuid:aa000000-0000-4000-8000-000000000001",
     "resource": {"resourceType": "Encounter", "status": "finished",
       "class": {"system": "http://terminology.hl7.org/CodeSystem/v3-ActCode", "code": "AMB", "display": "ambulatory"},
       "subject": {"reference": "Patient/'$PID'"},
       "serviceProvider": {"reference": "Organization/'$ORG'"},
       "participant": [{"individual": {"reference": "PractitionerRole/'$ROLE'"}}],
       "period": {"start": "2026-10-09T10:00:00Z", "end": "2026-10-09T10:30:00Z"}},
     "request": {"method": "POST", "url": "Encounter"}},
    {"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": "8867-4", "display": "Heart rate"}]},
       "subject": {"reference": "Patient/'$PID'"},
       "encounter": {"reference": "urn:uuid:aa000000-0000-4000-8000-000000000001"},
       "effectiveDateTime": "2026-10-09T10:10:00Z",
       "valueQuantity": {"value": 92, "unit": "/min", "system": "http://unitsofmeasure.org", "code": "/min"}},
     "request": {"method": "POST", "url": "Observation"}},
    {"resource": {"resourceType": "Condition",
       "subject": {"reference": "Patient/'$PID'"},
       "encounter": {"reference": "urn:uuid:aa000000-0000-4000-8000-000000000001"},
       "clinicalStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "active"}]},
       "verificationStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status", "code": "provisional"}]},
       "code": {"coding": [{"system": "http://hl7.org/fhir/sid/icd-10", "code": "I48.0", "display": "Paroxysmal atrial fibrillation"}]}},
     "request": {"method": "POST", "url": "Condition"}}
  ]}'
```

`transaction-response`, Encounter, Observation ve Condition için `201 Created` içerir. Observation ve Condition artık gerçek `Encounter/0ca25459-…`'a işaret eder. Her birinin Provenance'ı doktorun rolünü, kliniği ve kaynak sistemini adlandırır:

```json
"agent": [{"who": {"reference": "PractitionerRole/e6d8c227-…",
                   "identifier": {"system": "https://anpheros.com/fhir/CodeSystem/author-type", "value": "practitioner"}},
           "onBehalfOf": {"reference": "Organization/c3a56a4b-…", "display": "Clinica Cardio Nord"}}],
"entity": [{"role": "source", "what": {"identifier": {"system": "ccn-emr"}}}]
```

Teşhis onaylanana kadar `provisional`'dır. Daha sonra `confirmed` olarak güncelleyin, böylece geçmiş her ikisini de saklar. Her alanın ne anlama geldiği [Tıbbi veri provenance'ı açıklandı](https://developers.anpheros.com/tr/guides/medical-data-provenance) bölümünde açıklanmıştır.

## Adım 4: Laboratuvar Sonuçları ve Belgeler

Kliniğin kendi laboratuvarından alınan sonuçlar veya hastanın getirdiği raporlar, rapor başına tek bir istekte laboratuvar bağlayıcısından geçer:

```bash
curl -X POST "https://platform.anpheros.com/v1/patients/$PID/labs/import" -H "Authorization: Bearer $KEY" \
     -H "Content-Type: x-application/hl7-v2+er7" -H "X-Anpheros-Source-System: ccn-lab" --data-binary @oru.hl7
```

Mektuplar ve taburcu özetleri belgedir: `DocumentReference` aracılığıyla `/v1/patients/{id}/documents` oluşturun ve PDF'yi yükleyin. Orijinal dosya asla değiştirilmez ve ondan çıkarılan değerler ona geri döner. [Bir FHIR kaydına laboratuvar sonuçlarının nasıl aktarılacağı](https://developers.anpheros.com/tr/guides/import-lab-results-fhir) ve [Tıbbi Veri API'si](https://developers.anpheros.com/tr/guides/medical-data-api) bölümlerine bakın.

## Adım 5: Diğer sağlayıcıların yazdıklarını okuyun ve kendi alanınızda kalın

Hastanın rızasıyla, klinik, diğer kliniklerin, laboratuvarların ve hastanın ekledikleri dahil olmak üzere, kapsamı dahilindeki tüm kaydı okur. Yalnızca kendisinin yazdığı şeyi değiştirebilir. Başka bir kuruluşun kaynağını güncelleme veya silme isteği `403` ile yanıtlanır ve orijinali olduğu gibi kalır. Başka bir sağlayıcının yazdığı bir şeyi düzeltmek için kendi kaynağınızı yazın (örneğin, değerlendirmenizi içeren yeni bir `Condition`) ve kaydın her biri kendi yazarıyla birlikte her ikisini de göstermesine izin verin.

Bir ziyaret öncesinde, `GET $BASE/Patient/$PID/$summary` her kaynaktan gelen sorunları, ilaçları, alerjileri ve son yaşamsal belirtileri içeren kaydın Uluslararası Hasta Özetini verir.

## Adım 6: Yeni Verilerden Haberdar Olun

Klinik projesi için bir kez webhook kaydedin:

```bash
curl -X POST https://platform.anpheros.com/v1/webhooks -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
     -d '{"url": "https://ccn.example/anpheros/hook", "events": ["resource.created", "resource.updated", "consent.revoked"]}'
```

Başka bir proje, kliniğinizin erişebileceği bir kayda yazdığında, olay `data.external: true` ve kaynak ile bunu belirtir, böylece EMR'niz yoklama yapmadan "başka bir laboratuvardan yeni sonuçlar" gösterebilir. Bir `consent.revoked` olayı, kişinin kliniğin erişimini geri çektiği anlamına gelir: o kaydın senkronizasyonunu durdurun. İmzalar, yeniden denemeler ve yükler [Webhooks](https://developers.anpheros.com/tr/guides/webhooks) bölümünde ele alınmıştır.

## Hastanın Gördükleri

Hasta, kaydındaki ziyareti, kalp atış hızını ve geçici tanıyı görür; her biri Dr. Ana Popescu tarafından Clinica Cardio Nord'da eklendiği şeklinde işaretlenir. Bağlantılarında, kliniğin uygulaması, bir uygulayıcı hareket halindeyken adı ile birlikte her erişimi listeler. Bu şeffaflık, hastaların bir sonraki kliniğe erişim izni vermeye istekli olmasını sağlar.

## Canlıya Geçiş Kontrol Listesi

- [ ] Organizasyon, Pratisyenler ve Pratisyen Rolleri kaydedildi; ayrılanlar pasif olarak ayarlandı
- [ ] Hastalar kliniğin kimliğiyle eşleştirildi, asla adla değil
- [ ] Mevcut kayıtlar OAuth onayıyla ulaşıldı, kopyalanmadı
- [ ] Klinik personelden gelen her istek `X-Anpheros-Acting-As` taşır
- [ ] Ziyaretler işlem olarak yazıldı; doğru doğrulama durumuna sahip teşhisler
- [ ] Her yazma işleminde kaynak sistem ayarlandı; laboratuvar raporları bağlayıcı aracılığıyla
- [ ] İmza doğrulayan webhook uç noktası; `consent.revoked` işlendi
- [ ] İmzalanmış bir DPA (`sk_live_…` anahtarları) ile üretim projesi; [Fiyatlandırma](https://developers.anpheros.com/tr/guides/pricing) bölümüne bakın

## Sıkça Sorulan Sorular

### Anpheros'un benim EMR'im için hazır bir bağlayıcısı var mı?
Hayır. Belirli EMR'ler veya laboratuvar sistemleri için hazır bağlayıcılar bulunmamaktadır; entegrasyon FHIR R4 ve REST API'lerine karşı oluşturulur, genellikle EMR'nin yanında küçük bir servis olarak. HL7 v2 laboratuvar mesajları olduğu gibi kabul edilir.

### Bir doktor iki klinikte çalışabilir mi?
Evet. Bir `Practitioner`, her kuruluşta bir `PractitionerRole`'e sahip olabilir. `X-Anpheros-Acting-As`'te belirtilen rol, her yazımın hangi klinik için kaydedildiğini belirler.

### Hasta kliniğin erişimini iptal ettiğinde ne olur?
O kayıt için kliniğin çağrıları `401` ile yanıt verir ve bir `consent.revoked` webhook'u gönderilir. Kliniğin yazdığı, kökeniyle birlikte hastanın kaydında kalır; klinik artık onu okuyamaz veya değiştiremez.

## İlgili Konular

- [Sağlık entegrasyonları](https://developers.anpheros.com/tr/guides/healthcare-integrations): tüm entegrasyon desenlerine genel bakış
- [Tıbbi veri kökenbilimi (provenance) açıklaması](https://developers.anpheros.com/tr/guides/medical-data-provenance)
- [SMART on FHIR ile hasta rızası nasıl uygulanır](https://developers.anpheros.com/tr/guides/smart-on-fhir-backend)
- [Laboratuvar sonuçları bir FHIR kaydına nasıl aktarılır](https://developers.anpheros.com/tr/guides/import-lab-results-fhir)
- [Sağlık verisi birlikte çalışabilirliği](https://developers.anpheros.com/tr/guides/interoperability)
