AnpherosAnpheros PlatformDevelopers

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

Data z nositelných zařízení ve FHIR (Apple Health, Health Connect)

Dostaňte data z chytrých hodinek, prstenů a vah do FHIR záznamu: která zařízení se dostanou do kterého zdravotního úložiště, tabulka mapování LOINC, denní souhrny a testovaný upsert.

Chcete-li získat data z chytrých hodinek, prstenů nebo chytrých vah do lékařského záznamu, přečtěte si je v telefonu z úložiště zdraví operačního systému — Apple Health na iOS, Health Connect na Androidu — shrňte je denně, namapujte každou metriku na kód LOINC a jednotku UCUM a zapište je jako FHIR R4 Observations označené jako data ze zařízení. Čtení z úložiště zdraví telefonu namísto z cloudu každého dodavatele umožňuje jedné integraci pokrýt Apple Watch, Galaxy Watch, Pixel Watch, Garmin, Fitbit, Oura a Withings, pokud osoba povolila sdílení prostřednictvím své aplikace dodavatele. Tato stránka poskytuje datovou cestu, tabulku mapování, kterou můžete znovu použít, ověřený příklad FHIR a kód, který byl spuštěn na platformě.

Datová cesta

 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 ani Health Connect nemají serverové API: data může číst pouze aplikace v telefonu dané osoby. Vaše aplikace je čte, posílá kompaktní denní hodnoty na váš backend a backend je zapisuje do záznamu.

Která zařízení dosáhnou na které zdravotní úložiště

Co jednotliví dodavatelé sdílejí, se mění s verzemi aplikací; referencí je dokumentace samotného dodavatele.

Zařízení nebo aplikace Apple Health (iOS) Health Connect (Android) Poznámky
Apple Watch Ano, nativně — Vše, co hodinky měří, se ukládá do Apple Health
Samsung Galaxy Watch, Samsung Health — Částečně Samsung Health rozhoduje, jaké typy dat exportuje a jak často; viz Samsung Health
Pixel Watch, Fitbit Žádná oficiální synchronizace Ano, prostřednictvím aplikace Fitbit (Nápověda Google)
Garmin Ano, z Garmin Connect po každé synchronizaci zařízení Ano, Garmin Connect podporuje Health Connect na Androidu 14 a novějším (Android Developers, srpen 2025) Skóre specifická pro Garmin, jako je Body Battery, se nesdílejí
Oura Ano Ano (Oura) Readiness a další skóre Oura zůstávají v aplikaci Oura
Withings Ano, prostřednictvím Health Mate Ano (blog Android Developers) Váhy, monitory krevního tlaku, hodinky

Dva praktické důsledky. Zaprvé, vaše aplikace závisí na tom, zda si osoba zapnula sdílení ve své dodavatelské aplikaci; onboarding by to měl uvádět. Zadruhé, zdravotní úložiště může obsahovat stejné kroky ze dvou zdrojů (telefon a hodinky); čtěte denní součty samotného úložiště, nikoli sčítání vzorků, protože Apple Health a Health Connect již duplicitní překrývající se zdroje odstraňují.

Tabulka mapování: typ úložiště zdraví → FHIR Observation

Kódy, které Anpheros Daily používá při zápisu dat z nositelných zařízení do záznamu FHIR:

Metrika Apple HealthKit Health Connect LOINC Jednotka UCUM Kategorie
Tepová frekvence heartRate HeartRateRecord 8867-4 /min vital-signs
Klidová tepová frekvence restingHeartRate RestingHeartRateRecord 40443-4 /min vital-signs
Variabilita srdeční frekvence heartRateVariabilitySDNN HeartRateVariabilityRmssdRecord 80404-7 (pouze SDNN) ms vital-signs
Kyslík v krvi (SpO₂) oxygenSaturation OxygenSaturationRecord 59408-5 % vital-signs
Dechová frekvence respiratoryRate RespiratoryRateRecord 9279-1 /min vital-signs
Kroky za den stepCount StepsRecord 41950-7 {steps} activity
Aktivní energie activeEnergyBurned ActiveCaloriesBurnedRecord 41981-2 kcal activity
Délka spánku sleepAnalysis (kategorie) SleepSessionRecord 93832-4; fáze 93831-6 hluboký, 93830-8 lehký, 93829-0 REM min activity
Tělesná hmotnost bodyMass 29463-7 WeightRecord kg vital-signs
Krevní tlak bloodPressure (korelace) 85354-9 s 8480-6 a 8462-4 BloodPressureRecord mm[Hg] vital-signs
Krevní glukóza (glukometr) bloodGlucose 2339-0 BloodGlucoseRecord mg/dL vital-signs
Tělesná teplota bodyTemperature 8310-5 BodyTemperatureRecord Cel vital-signs

Věnujte pozornost řádku variability srdeční frekvence: Apple Health ukládá SDNN, Health Connect ukládá RMSSD. Jedná se o různé statistiky a nesmí být zapsány pod stejným kódem. LOINC 80404-7 je SDNN; pro RMSSD používá Anpheros Daily vlastní kódový systém, místo aby předstíral, že jsou tyto dvě hodnoty stejné.

Souhrny, nikoli každý vzorek

Hodinky produkují tisíce vzorků srdeční frekvence denně. Lékařský záznam potřebuje něco, co si může přečíst člověk nebo lékař:

Denní souhrn srdeční frekvence jako FHIR R4 (projde FHIR R4 validátorem):

{
  "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)"}
}

Zápis denních hodnot bez duplicit

Telefony synchronizují data několikrát denně a poslední hodnota dne se mění až do půlnoci. Každému Observation přiřaďte stabilní identifikátor – osoba, den, metrika – a aktualizujte jej místo vytváření nového. Pomocí Anpheros TypeScript SDK na vašem backendu:

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 });
}

Spuštění proti lokální instanci platformy s sandbox klíčem, dvě denní hodnoty následované pozdější synchronizací kroků téhož dne zanechaly dvě Observation, přičemž kroky byly ve verzi 2 s novou hodnotou a provenance v1 device apple-health · v2 device. Historie uchovává dřívější hodnotu a každý čtenář vidí, že data pocházejí ze zařízení, nikoli od klinika.

V produkci používejte skutečné hranice dne v časovém pásmu osoby (příklad výše používá UTC pro stručnost), stejně jako kód HealthKit a Health Connect na stránkách platformy.

Čtení z telefonu

Pravidla, která stojí za to dodržovat

Co Anpheros dělá a nedělá

Platforma Anpheros se sama o sobě nepřipojuje k Apple Health, Health Connect ani k žádnému cloudovému řešení dodavatele: vaše aplikace čte data z telefonu a zapisuje je prostřednictvím API. Vlastní aplikace Anpheros, Anpheros Daily, dělá přesně toto: čte Apple Health na iPhonu a Health Connect na Androidu, udržuje denní souhrny a zapisuje je do FHIR záznamu osoby s výše uvedenými kódy. Připojení zařízení je součástí jejích plánů Plus a Max.

Často kladené dotazy

Jak dostanu data z Apple Watch na FHIR server?

Přečtěte si je na iPhonu z Apple Health pomocí HealthKit (neexistuje žádné serverové API), shrňte je denně a nechte svůj backend zapsat každou metriku jako Observation s LOINC kódem a UCUM jednotkou, označenou jako data ze zařízení.

Existuje cloudové API pro Health Connect nebo Apple Health?

Ne. Obě ukládají data na telefonu; aplikace nainstalovaná na telefonu si je přečte s povolením uživatele. Cloudová řešení dodavatelů, jako jsou Garmin, Fitbit nebo Oura, mají svá vlastní API, ale čtení zdravotního úložiště telefonu pokrývá většinu z nich jedinou integrací.

Jaký LOINC kód mám použít pro kroky?

41950-7, "Number of steps in 24 hour Measured", s denním effectivePeriod. Pro srdeční tep použijte 8867-4, pro SpO₂ 59408-5, pro délku spánku 93832-4.

Mám ukládat každý vzorek srdečního tepu do FHIR?

Obvykle ne. Denní souhrn s průměrem, minimem a maximem je to, co si uživatel nebo lékař přečte; jednotlivá měření patří do záznamu pouze tehdy, když mají sama o sobě význam, například událost nepravidelného rytmu.

Mohu použít jeden kód pro HRV z Apple Health a Health Connect?

Ne. Apple Health hlásí SDNN a Health Connect hlásí RMSSD; měří různé věci a vyžadují různé kódy.

Související

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