AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

FHIR Formatında Giyilebilir Cihaz Verileri (Apple Health, Health Connect)

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

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
Pixel Watch, Fitbit Resmi senkronizasyon yok Evet, Fitbit uygulaması aracılığıyla (Google yardımı)
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) Body Battery gibi Garmin'e özgü puanlar paylaşılmaz
Oura Evet Evet (Oura) Readiness ve diğer Oura puanları Oura uygulamasında kalır
Withings Evet, Health Mate aracılığıyla Evet (Android Developers blogu) 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:

FHIR R4 olarak günlük bir kalp atış hızı özeti ( FHIR R4 doğrulayıcısını geçer):

{
  "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:

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

İzlenmesi Gereken Kurallar

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

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy