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

> Získejte data z chytrých hodinek, prstenů a vah do záznamu FHIR: která zařízení dosahují na které zdravotní úložiště, tabulka mapování LOINC, denní souhrny a otestovaný upsert.

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

**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](https://developers.anpheros.com/cs/guides/samsung-health-fhir) |
| Pixel Watch, Fitbit | Žádná oficiální synchronizace | Ano, prostřednictvím aplikace Fitbit ([Nápověda Google](https://support.google.com/fitbit/answer/14506680)) | |
| 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](https://developer.android.com/health-and-fitness/community/newsletters/2025/08)) | Skóre specifická pro Garmin, jako je Body Battery, se nesdílejí |
| Oura | Ano | Ano ([Oura](https://ouraring.com/blog/data-sharing-partner-integrations/)) | Readiness a další skóre Oura zůstávají v aplikaci Oura |
| Withings | Ano, prostřednictvím Health Mate | Ano ([blog Android Developers](https://android-developers.googleblog.com/2023/03/withings-reduces-data-sync-code-with--health-and-fitness-api-health-connect.html)) | 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ř:

- **Jedna Observation na metriku za den**, s `effectivePeriod` pokrývající místní den osoby, denní průměr nebo celkový součet v `valueQuantity` a pro rychlosti, minimum a maximum jako komponenty.
- **Jemnější série zůstávají tam, kde jsou užitečné.** Anpheros Daily uchovává 4hodinové souhrny srdeční frekvence pro své vlastní grafy a zapisuje denní hodnoty do FHIR záznamu.
- **Události jsou oddělené.** Upozornění na nepravidelný rytmus nebo jedno měření krevního tlaku je vlastní Observation s vlastním časem, nikoli součást denního průměru.

Denní souhrn srdeční frekvence jako FHIR R4 (projde [FHIR R4 validátorem](https://developers.anpheros.com/tools/fhir-validator)):

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

## 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:

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

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

- **iPhone a Apple Watch:** [Apple Health (HealthKit) do FHIR](https://developers.anpheros.com/cs/guides/apple-health-fhir), s kódem Swift pro denní statistiky.
- **Android, Wear OS, Fitbit, Garmin, Oura, Withings:** [Health Connect do FHIR](https://developers.anpheros.com/cs/guides/health-connect-fhir), s kódem Flutter, který funguje na obou platformách.
- **Samsung Galaxy Watch a Samsung Health:** [Samsung Health do FHIR](https://developers.anpheros.com/cs/guides/samsung-health-fhir): co se dostane do Health Connect a co vyžaduje vlastní SDK od Samsungu.

## Pravidla, která stojí za to dodržovat

- **Čtěte pouze to, co používáte**, a žádejte o každý typ zvlášť; lidé udělují částečná oprávnění.
- **Označte zdroj.** Spotřebitelská nositelná zařízení nejsou diagnostické přístroje. Zapisujte jejich data jako data zařízení (`author_type: device`) a uveďte, ze které aplikace pocházejí, aby je lékař mohl náležitě zvážit.
- **Dodržujte pravidla platformy.** Pokyny pro revizi aplikací společnosti Apple (5.1.3) zakazují používání zdravotních dat pro reklamu a ukládání osobních zdravotních informací v iCloudu; Google Play vyžaduje prohlášení o zdravotních aplikacích pro aplikace, které používají Health Connect.
- **Umožněte lidem odpojení** a rozhodnutí, zda již zkopírovaná data zůstanou v záznamu.

## 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í

- [API pro nositelná zařízení: Fitbit, Garmin, Oura a Withings](https://developers.anpheros.com/cs/guides/wearable-apis)
- [API pro sledování zdraví](https://developers.anpheros.com/cs/guides/health-tracker-api): ukládání dat ze sledovacích zařízení na server se souhlasem
- [Jak vytvořit aplikaci pro osobní zdravotní záznamy](https://developers.anpheros.com/cs/guides/personal-health-record-app)
- [Integrace ve zdravotnictví](https://developers.anpheros.com/cs/guides/healthcare-integrations): zařízení vedle laboratoří, klinik a aplikací
- [Kódovací systémy FHIR](https://developers.anpheros.com/cs/guides/fhir-code-systems): LOINC a UCUM
- [Vysvětlení původu lékařských dat](https://developers.anpheros.com/cs/guides/medical-data-provenance)
- [Jak normalizovat lékařská data](https://developers.anpheros.com/cs/guides/normalize-medical-data)
- [Monitorování pacientů na dálku s FHIR](https://developers.anpheros.com/cs/guides/remote-patient-monitoring-fhir): jednotlivá měření, webhooks a upozornění
