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:
- 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ı 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
- iPhone ve Apple Watch: Apple Health (HealthKit) to FHIR, günlük istatistikler için Swift kodu ile.
- Android, Wear OS, Fitbit, Garmin, Oura, Withings: Health Connect to FHIR, her iki platformda da çalışan Flutter kodu ile.
- Samsung Galaxy Watch ve Samsung Health: Samsung Health to 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
- Sağlık Takip Cihazı API'si: takip cihazı verilerini sunucuda, onay ile saklama
- Kişisel Sağlık Kaydı uygulaması nasıl oluşturulur
- Sağlık Hizmetleri Entegrasyonları: laboratuvarlar, klinikler ve uygulamaların yanı sıra cihazlar
- FHIR Kod Sistemleri: LOINC ve UCUM
- Tıbbi Veri Köken Bilgisi Açıklaması
- Tıbbi Veri Nasıl Normalleştirilir
- FHIR ile Uzaktan Hasta İzleme: bireysel okumalar, webhook'lar ve uyarılar
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card