# FHIR'da Giyilebilir Veriler (Apple Health, Health Connect)

> Akıllı saat, yüzük ve tartı verilerini bir FHIR kaydına alın: hangi cihazlar hangi sağlık mağazasına ulaşır, bir LOINC eşleme tablosu, günlük özetler ve test edilmiş bir upsert.

Source: https://developers.anpheros.com/tr/guides/wearable-data-fhir

**Akıllı saat, yüzük veya akıllı tartıdan gelen verileri bir tıbbi kayda almak için, bu verileri telefondaki işletim sisteminin sağlık mağazasından — iOS'ta Apple Health, Android'de Health Connect — okuyun, bunları günlük olarak özetleyin, her metriği bir LOINC koduna ve bir UCUM birimine eşleyin ve bunları cihaz verisi olarak işaretlenmiş FHIR R4 Gözlemleri olarak yazın.** Her satıcının bulutundan ziyade telefonun sağlık mağazasından okumak, kişinin satıcı uygulamasının paylaşımına izin vermiş olması koşuluyla, Apple Watch, Galaxy Watch, Pixel Watch, Garmin, Fitbit, Oura ve Withings'i kapsayan tek bir entegrasyon sağlar. Bu sayfa, veri yolunu, yeniden kullanabileceğiniz bir eşleme tablosunu, doğrulanmış bir FHIR örneğini ve platforma karşı çalıştırılan kodu sunar.

## Veri Yolu

```
 watch, ring, scale ──► vendor app (Garmin Connect, Fitbit, Oura, Withings, Samsung Health…)
                              │  shares, with the person's permission
                              ▼
                 Apple Health (iOS)  /  Health Connect (Android)
                              │  your app reads, with the person's permission, on the phone
                              ▼
                 your app ──► your backend ──► FHIR R4 Observations in the person's record
```

Apple Health veya Health Connect'in bir sunucu API'si yoktur: verilere yalnızca kişinin telefonundaki bir uygulama tarafından erişilebilir. Uygulamanız verileri okur, kompakt günlük değerleri arka ucunuza gönderir ve arka uç bunları kayda yazar.

## Hangi cihazlar hangi sağlık mağazasına ulaşır

Her satıcının paylaştığı bilgiler uygulama sürümlerine göre değişir; satıcının kendi belgeleri referanstır.

| Cihaz veya uygulama | Apple Health (iOS) | Health Connect (Android) | Notlar |
|---|---|---|---|
| Apple Watch | Evet, yerel olarak | — | Saatin ölçtüğü her şey Apple Health'e kaydedilir |
| Samsung Galaxy Watch, Samsung Health | — | Kısmen | Samsung Health hangi türleri dışa aktaracağına ve ne sıklıkla dışa aktaracağına karar verir; bkz. [Samsung Health](https://developers.anpheros.com/tr/guides/samsung-health-fhir) |
| Pixel Watch, Fitbit | Resmi senkronizasyon yok | Evet, Fitbit uygulaması aracılığıyla ([Google yardımı](https://support.google.com/fitbit/answer/14506680)) | |
| Garmin | Evet, her cihaz senkronizasyonundan sonra Garmin Connect'ten | Evet, Garmin Connect Android 14 ve sonraki sürümlerde Health Connect'i destekler ([Android Developers, Ağustos 2025](https://developer.android.com/health-and-fitness/community/newsletters/2025/08)) | Body Battery gibi Garmin'e özgü puanlar paylaşılmaz |
| Oura | Evet | Evet ([Oura](https://ouraring.com/blog/data-sharing-partner-integrations/)) | Readiness ve diğer Oura puanları Oura uygulamasında kalır |
| Withings | Evet, Health Mate aracılığıyla | Evet ([Android Developers blogu](https://android-developers.googleblog.com/2023/03/withings-reduces-data-sync-code-with--health-and-fitness-api-health-connect.html)) | Tartılar, tansiyon aletleri, saatler |

İki pratik sonuç. Birincisi, uygulamanız kişinin kendi satıcı uygulamasında paylaşımı açmış olmasına bağlıdır; onboarding sürecinde bunu belirtmelidir. İkincisi, sağlık mağazası aynı adımları iki kaynaktan (bir telefon ve bir saat) tutabilir; örnekleri toplamak yerine mağazanın kendi günlük toplamlarını okuyun, çünkü Apple Health ve Health Connect örtüşen kaynakları zaten tekilleştirir.

## Eşleme tablosu: sağlık deposu türü → FHIR Observation

Anpheros Daily'nin giyilebilir verileri bir FHIR kaydına yazarken kullandığı kodlar:

| Metrik | Apple HealthKit | Health Connect | LOINC | UCUM birimi | Kategori |
|---|---|---|---|---|---|
| Nabız | `heartRate` | `HeartRateRecord` | 8867-4 | `/min` | vital-signs |
| İstirahat nabzı | `restingHeartRate` | `RestingHeartRateRecord` | 40443-4 | `/min` | vital-signs |
| Nabız değişkenliği | `heartRateVariabilitySDNN` | `HeartRateVariabilityRmssdRecord` | 80404-7 (yalnızca SDNN) | `ms` | vital-signs |
| Kan oksijeni (SpO₂) | `oxygenSaturation` | `OxygenSaturationRecord` | 59408-5 | `%` | vital-signs |
| Solunum hızı | `respiratoryRate` | `RespiratoryRateRecord` | 9279-1 | `/min` | vital-signs |
| Günlük adım sayısı | `stepCount` | `StepsRecord` | 41950-7 | `{steps}` | activity |
| Aktif enerji | `activeEnergyBurned` | `ActiveCaloriesBurnedRecord` | 41981-2 | `kcal` | activity |
| Uyku süresi | `sleepAnalysis` (kategori) | `SleepSessionRecord` | 93832-4; evreler 93831-6 derin, 93830-8 hafif, 93829-0 REM | `min` | activity |
| Vücut ağırlığı | `bodyMass` | `WeightRecord` | 29463-7 | `kg` | vital-signs |
| Kan basıncı | `bloodPressure` (korelasyon) | `BloodPressureRecord` | 85354-9 ile 8480-6 ve 8462-4 | `mm[Hg]` | vital-signs |
| Kan şekeri (ölçüm cihazı) | `bloodGlucose` | `BloodGlucoseRecord` | 2339-0 | `mg/dL` | vital-signs |
| Vücut sıcaklığı | `bodyTemperature` | `BodyTemperatureRecord` | 8310-5 | `Cel` | vital-signs |

Nabız değişkenliği satırına dikkat edin: Apple Health, **SDNN**'yi, Health Connect ise **RMSSD**'yi depolar. Bunlar farklı istatistiklerdir ve aynı kod altında yazılmamalıdır. LOINC 80404-7 SDNN'dir; RMSSD için Anpheros Daily, ikisinin aynı olduğunu iddia etmek yerine kendi kod sistemini kullanır.

## Özetler, Her Örnek Değil

Bir akıllı saat günde binlerce kalp atış hızı örneği üretir. Bir tıbbi kaydın, bir kişinin veya doktorun okuyabileceği bir şeye ihtiyacı vardır:

- **Metrik başına günde bir Gözlem (Observation)**, kişinin yerel gününü kapsayan `effectivePeriod`, `valueQuantity`'deki günlük ortalama veya toplamı ve oranlar için bileşenler olarak minimum ve maksimum değerleri içerir.
- **Daha ince seriler, kullanışlı oldukları yerde kalır.** Anpheros Daily, kendi grafikleri için 4 saatlik kalp atış hızı özetlerini tutar ve günlük değerleri FHIR kaydına yazar.
- **Olaylar ayrıdır.** Düzensiz ritim bildirimi veya tek bir kan basıncı okuması, günlük ortalamanın bir parçası değil, kendi zamanına sahip kendi Gözlemidir.

FHIR R4 olarak günlük bir kalp atış hızı özeti ( [FHIR R4 doğrulayıcısını](https://developers.anpheros.com/tools/fhir-validator) geçer):

```json
{
  "resourceType": "Observation",
  "status": "final",
  "identifier": [{"system": "https://your-app.test/fhir/sid/daily-wearable", "value": "p-123:2026-10-01:heart_rate"}],
  "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/p-123"},
  "effectivePeriod": {"start": "2026-10-01T00:00:00-04:00", "end": "2026-10-02T00:00:00-04:00"},
  "valueQuantity": {"value": 71.4, "unit": "/min", "system": "http://unitsofmeasure.org", "code": "/min"},
  "component": [
    {"code": {"text": "minimum"}, "valueQuantity": {"value": 52, "unit": "/min", "system": "http://unitsofmeasure.org", "code": "/min"}},
    {"code": {"text": "maximum"}, "valueQuantity": {"value": 138, "unit": "/min", "system": "http://unitsofmeasure.org", "code": "/min"}}
  ],
  "device": {"display": "Apple Watch (via Apple Health)"}
}
```

## Günlük Değerleri Tekrarlamadan Yazma

Telefonlar günde birkaç kez eşitlenir ve bir günün son değeri gece yarısına kadar değişmeye devam eder. Her Observation'a kararlı bir tanımlayıcı verin — kişi, gün, metrik — ve yenisini oluşturmak yerine onu güncelleyin. Anpheros TypeScript SDK ile arka ucunuzda:

```ts
import { Anpheros, apiKey } from '@anpheros/sdk';

const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });

// What the phone sends: one value per metric per local day
type DailyValue = { metric: 'heart_rate' | 'steps'; day: string; value: number; min?: number; max?: number };

const CODES = {
  heart_rate: { code: '8867-4', display: 'Heart rate', unit: '/min', category: 'vital-signs' },
  steps: { code: '41950-7', display: 'Number of steps in 24 hour Measured', unit: '{steps}', category: 'activity' },
} as const;

// One Observation per person, metric and day: re-sending a day updates it instead of adding a copy.
async function upsertDaily(patientId: string, v: DailyValue, source: string) {
  const c = CODES[v.metric];
  const identifier = { system: 'https://your-app.test/fhir/sid/daily-wearable', value: `${patientId}:${v.day}:${v.metric}` };
  const resource: any = {
    resourceType: 'Observation', status: 'final',
    identifier: [identifier],
    category: [{ coding: [{ system: 'http://terminology.hl7.org/CodeSystem/observation-category', code: c.category }] }],
    code: { coding: [{ system: 'http://loinc.org', code: c.code, display: c.display }] },
    subject: { reference: `Patient/${patientId}` },
    effectivePeriod: { start: `${v.day}T00:00:00Z`, end: `${v.day}T23:59:59Z` },
    valueQuantity: { value: v.value, unit: c.unit, system: 'http://unitsofmeasure.org', code: c.unit },
  };
  if (v.min !== undefined && v.max !== undefined) {
    resource.component = [
      { code: { text: 'minimum' }, valueQuantity: { value: v.min, unit: c.unit, system: 'http://unitsofmeasure.org', code: c.unit } },
      { code: { text: 'maximum' }, valueQuantity: { value: v.max, unit: c.unit, system: 'http://unitsofmeasure.org', code: c.unit } },
    ];
  }
  const found = await anpheros.fhir.search('Observation', { identifier: `${identifier.system}|${identifier.value}` });
  const existing = found.entry?.[0]?.resource;
  return existing
    ? anpheros.fhir.update({ ...resource, id: existing.id }, { author_type: 'device' })
    : anpheros.fhir.create(resource, { author_type: 'device', source_system: source });
}
```

Bir sandbox anahtarıyla platformun yerel bir örneğine karşı çalıştırıldığında, iki günlük değer ve ardından aynı günün adımlarının daha sonraki bir eşitlemesi **iki** Observation bıraktı; adımlar biri sürüm 2'de yeni değerle ve `v1 device apple-health · v2 device` provenance ile. Geçmiş önceki değeri tutar ve her okuyucu verinin bir klinisyenden değil, bir cihazdan geldiğini görebilir.

Üretimde, kişinin saat dilimindeki gerçek gün sınırlarını kullanın (yukarıdaki örnek, kısalık için UTC kullanır), platform sayfalarındaki HealthKit ve Health Connect kodunun yaptığı gibi.

## Telefondan Okuma

- **iPhone ve Apple Watch:** [Apple Health (HealthKit) to FHIR](https://developers.anpheros.com/tr/guides/apple-health-fhir), günlük istatistikler için Swift kodu ile.
- **Android, Wear OS, Fitbit, Garmin, Oura, Withings:** [Health Connect to FHIR](https://developers.anpheros.com/tr/guides/health-connect-fhir), her iki platformda da çalışan Flutter kodu ile.
- **Samsung Galaxy Watch ve Samsung Health:** [Samsung Health to FHIR](https://developers.anpheros.com/tr/guides/samsung-health-fhir): Health Connect'e ulaşanlar ve Samsung'un kendi SDK'sını gerektirenler.

## İzlenmesi Gereken Kurallar

- **Sadece kullandığınızı okuyun** ve her tür için ayrı ayrı talep edin; insanlar kısmi izinler verir.
- **Kaynağı etiketleyin.** Tüketici giyilebilir cihazları teşhis cihazları değildir. Verilerini cihaz verisi (`author_type: device`) olarak yazın ve hangi uygulamadan geldiğini belirtin, böylece bir klinisyen bunu buna göre değerlendirebilir.
- **Platform kurallarına uyun.** Apple'ın Uygulama İnceleme Yönergeleri (5.1.3), sağlık verilerini reklam için kullanmayı ve kişisel sağlık bilgilerini iCloud'da saklamayı yasaklar; Google Play, Health Connect'i kullanan uygulamalar için bir sağlık uygulamaları beyanı gerektirir.
- **İnsanların bağlantıyı kesmesine izin verin** ve zaten kopyalanan verilerin kayıtta kalıp kalmayacağına karar vermelerine olanak tanıyın.

## Anpheros'un Yaptıkları ve Yapmadıkları

Anpheros Platformu, kendi başına Apple Health, Health Connect veya herhangi bir satıcı bulutuna bağlanmaz: uygulamanız verileri telefonda okur ve API aracılığıyla yazar. Anpheros'un kendi uygulaması **Anpheros Daily**, tam olarak bunu yapar: iPhone'da Apple Health'i ve Android'de Health Connect'i okur, günlük özetleri tutar ve bunları yukarıdaki kodlarla kişinin FHIR kaydına yazar. Cihazları bağlamak, Plus ve Max planlarının bir parçasıdır.

## Sıkça Sorulan Sorular

### Apple Watch verilerini bir FHIR sunucusuna nasıl alabilirim?
HealthKit ile iPhone'daki Apple Health'ten okuyun (sunucu API'si yoktur), bunları günde bir özetleyin ve arka uç sisteminizin her metriği bir LOINC kodu ve UCUM birimi ile bir Observation olarak kaydetmesini sağlayın, cihaz verisi olarak işaretleyin.

### Health Connect veya Apple Health için bir bulut API'si var mı?
Hayır. Her ikisi de verileri telefonda tutar; telefona yüklenmiş bir uygulama, kişinin izniyle bunları okur. Garmin, Fitbit veya Oura gibi satıcı bulutlarının kendi API'leri vardır, ancak telefonun sağlık deposunu okumak bunların çoğunu tek bir entegrasyonla kapsar.

### Adımlar için hangi LOINC kodunu kullanmalıyım?
41950-7, "24 saat içinde ölçülen adım sayısı", günlük bir `effectivePeriod` ile. Kalp atış hızı için 8867-4, SpO₂ için 59408-5, uyku süresi için 93832-4 kullanın.

### Her kalp atış hızı örneğini FHIR'de saklamalı mıyım?
Genellikle hayır. Ortalama, minimum ve maksimum değerleri içeren günlük bir özet, bir kişinin veya klinisyenin okuduğu şeydir; bireysel okumalar yalnızca kendi başlarına önemli olduklarında, örneğin düzensiz ritim olayı gibi, kayıtta yer almalıdır.

### Apple Health ve Health Connect'ten gelen HRV için tek bir kod kullanabilir miyim?
Hayır. Apple Health SDNN'yi, Health Connect ise RMSSD'yi bildirir; farklı şeyleri ölçerler ve farklı kodlara ihtiyaç duyarlar.

## İlgili Konular

- [Giyilebilir Cihaz API'leri: Fitbit, Garmin, Oura ve Withings](https://developers.anpheros.com/tr/guides/wearable-apis)
- [Sağlık Takip Cihazı API'si](https://developers.anpheros.com/tr/guides/health-tracker-api): takip cihazı verilerini sunucuda, onay ile saklama
- [Kişisel Sağlık Kaydı uygulaması nasıl oluşturulur](https://developers.anpheros.com/tr/guides/personal-health-record-app)
- [Sağlık Hizmetleri Entegrasyonları](https://developers.anpheros.com/tr/guides/healthcare-integrations): laboratuvarlar, klinikler ve uygulamaların yanı sıra cihazlar
- [FHIR Kod Sistemleri](https://developers.anpheros.com/tr/guides/fhir-code-systems): LOINC ve UCUM
- [Tıbbi Veri Köken Bilgisi Açıklaması](https://developers.anpheros.com/tr/guides/medical-data-provenance)
- [Tıbbi Veri Nasıl Normalleştirilir](https://developers.anpheros.com/tr/guides/normalize-medical-data)
- [FHIR ile Uzaktan Hasta İzleme](https://developers.anpheros.com/guides/remote-patient-monitoring-fhir): bireysel okumalar, webhook'lar ve uyarılar
