# Nositeľné dáta vo FHIR (Apple Health, Health Connect)

> Získajte dáta z inteligentných hodiniek, prsteňov a váh do FHIR záznamu: ktoré zariadenia sa dostanú do ktorého zdravotného úložiska, tabuľka mapovania LOINC, denné súhrny a otestovaný upsert.

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

**Na získanie údajov z inteligentných hodiniek, prsteňa alebo inteligentnej váhy do lekárskeho záznamu ich prečítajte na telefóne z úložiska zdravia operačného systému — Apple Health na iOS, Health Connect na Android — zhrňte ich na dennej báze, namapujte každú metriku na kód LOINC a jednotku UCUM a zapíšte ich ako FHIR R4 Observations označené ako údaje zo zariadenia.** Čítanie z úložiska zdravia telefónu namiesto z cloudu každého predajcu umožňuje jedinej integrácii pokryť Apple Watch, Galaxy Watch, Pixel Watch, Garmin, Fitbit, Oura a Withings, pokiaľ osoba povolila zdieľanie prostredníctvom aplikácie svojho predajcu. Táto stránka poskytuje dátovú cestu, opakovane použiteľnú mapovaciu tabuľku, validovaný FHIR príklad a kód, ktorý bol spustený na platforme.

## Dátová 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: dáta môže čítať iba aplikácia na telefóne používateľa. Vaša aplikácia ich číta, posiela kompaktné denné hodnoty na váš backend a backend ich zapisuje do záznamu.

## Ktoré zariadenia dosahujú ktorý zdravotný úložisko

Čo každý predajca zdieľa, sa mení s verziami aplikácií; referenciou je vlastná dokumentácia predajcu.

| Zariadenie alebo aplikácia | Apple Health (iOS) | Health Connect (Android) | Poznámky |
|---|---|---|---|
| Apple Watch | Áno, natívne | — | Všetko, čo hodinky merajú, sa dostane do Apple Health |
| Samsung Galaxy Watch, Samsung Health | — | Čiastočne | Samsung Health rozhoduje, aké typy exportuje a ako často; pozri [Samsung Health](https://developers.anpheros.com/sk/guides/samsung-health-fhir) |
| Pixel Watch, Fitbit | Žiadna oficiálna synchronizácia | Áno, prostredníctvom aplikácie Fitbit ([Pomocník Google](https://support.google.com/fitbit/answer/14506680)) | |
| Garmin | Áno, z Garmin Connect po každej synchronizácii zariadenia | Áno, Garmin Connect podporuje Health Connect na Androide 14 a novšom ([Android Developers, august 2025](https://developer.android.com/health-and-fitness/community/newsletters/2025/08)) | Skóre špecifické pre Garmin, ako napríklad Body Battery, sa nezdieľajú |
| Oura | Áno | Áno ([Oura](https://ouraring.com/blog/data-sharing-partner-integrations/)) | Readiness a ďalšie skóre Oura zostávajú v aplikácii Oura |
| Withings | Áno, prostredníctvom Health Mate | Áno ([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 krvného tlaku, hodinky |

Dva praktické dôsledky. Po prvé, vaša aplikácia závisí od toho, či osoba zapla zdieľanie vo svojej predajcovej aplikácii; onboarding by to mal uviesť. Po druhé, zdravotné úložisko môže obsahovať rovnaké kroky z dvoch zdrojov (telefón a hodinky); čítajte denné súčty samotného úložiska namiesto sčítavania vzoriek, pretože Apple Health a Health Connect už odstraňujú duplicity z prekrývajúcich sa zdrojov.

## Mapovanie typu úložiska zdravia → FHIR Observation

Kódy, ktoré Anpheros Daily používa pri zápise údajov z nositeľných zariadení do FHIR záznamu:

| Metrika | Apple HealthKit | Health Connect | LOINC | UCUM jednotka | Kategória |
|---|---|---|---|---|---|
| Tepová frekvencia | `heartRate` | `HeartRateRecord` | 8867-4 | `/min` | vital-signs |
| Pokojová tepová frekvencia | `restingHeartRate` | `RestingHeartRateRecord` | 40443-4 | `/min` | vital-signs |
| Variabilita srdcovej frekvencie | `heartRateVariabilitySDNN` | `HeartRateVariabilityRmssdRecord` | 80404-7 (iba SDNN) | `ms` | vital-signs |
| Kyslík v krvi (SpO₂) | `oxygenSaturation` | `OxygenSaturationRecord` | 59408-5 | `%` | vital-signs |
| Dychová frekvencia | `respiratoryRate` | `RespiratoryRateRecord` | 9279-1 | `/min` | vital-signs |
| Kroky za deň | `stepCount` | `StepsRecord` | 41950-7 | `{steps}` | activity |
| Aktívna energia | `activeEnergyBurned` | `ActiveCaloriesBurnedRecord` | 41981-2 | `kcal` | activity |
| Dĺžka spánku | `sleepAnalysis` (kategória) | `SleepSessionRecord` | 93832-4; štádiá 93831-6 hlboký, 93830-8 ľahký, 93829-0 REM | `min` | activity |
| Telesná hmotnosť | `bodyMass` | `WeightRecord` | 29463-7 | `kg` | vital-signs |
| Krvný tlak | `bloodPressure` (korelácia) | `BloodPressureRecord` | 85354-9 s 8480-6 a 8462-4 | `mm[Hg]` | vital-signs |
| Glukóza v krvi (glukomer) | `bloodGlucose` | `BloodGlucoseRecord` | 2339-0 | `mg/dL` | vital-signs |
| Telesná teplota | `bodyTemperature` | `BodyTemperatureRecord` | 8310-5 | `Cel` | vital-signs |

Pozrite si riadok variability srdcovej frekvencie: Apple Health ukladá **SDNN**, Health Connect ukladá **RMSSD**. Sú to rôzne štatistiky a nesmú sa zapisovať pod rovnakým kódom. LOINC 80404-7 je SDNN; pre RMSSD používa Anpheros Daily svoj vlastný kódový systém namiesto toho, aby predstieral, že sú tieto dve veci rovnaké.

## Zhrnutia, nie každý vzorok

Hodinky produkujú tisíce vzoriek srdcovej frekvencie denne. Lekársky záznam potrebuje niečo, čo si môže prečítať osoba alebo lekár:

- **Jedna Observation na metrike za deň**, s `effectivePeriod` pokrývajúcimi lokálny deň osoby, denný priemer alebo celok v `valueQuantity` a pre rýchlosti, minimum a maximum ako komponenty.
- **Jemnejšie série zostávajú tam, kde sú užitočné.** Anpheros Daily uchováva 4-hodinové zhrnutia srdcovej frekvencie pre svoje vlastné grafy a zapisuje denné hodnoty do FHIR záznamu.
- **Udalosti sú oddelené.** Upozornenie na nepravidelný rytmus alebo jedno meranie krvného tlaku je samostatná Observation s vlastným časom, nie súčasť denného priemeru.

Denné zhrnutie srdcovej frekvencie ako FHIR R4 (prejde [FHIR R4 validátorom](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)"}
}
```

## Zapisovanie denných hodnôt bez duplikátov

Telefóny synchronizujú dáta niekoľkokrát denne a posledná hodnota dňa sa mení až do polnoci. Každému `Observation` priraďte stabilný identifikátor — osoba, deň, metrika — a aktualizujte ho namiesto vytvárania nového. S Anpheros TypeScript SDK na vašom backend:

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

Spustenie proti lokálnej inštancii platformy s sandbox kľúčom, dve denné hodnoty nasledované neskoršou synchronizáciou krokov toho istého dňa zanechali **dve** `Observations`, pričom kroky boli vo verzii 2 s novou hodnotou a provenance `v1 device apple-health · v2 device`. História si ponecháva skoršiu hodnotu a každý čitateľ vidí, že dáta pochádzajú zo zariadenia, nie od lekára.

V produkcii použite skutočné denné hranice v časovej zóne osoby (príklad vyššie používa UTC pre stručnosť), rovnako ako kód HealthKit a Health Connect na stránkach platformy.

## Čítanie z telefónu

- **iPhone a Apple Watch:** [Apple Health (HealthKit) do FHIR](https://developers.anpheros.com/sk/guides/apple-health-fhir), s kódom Swift pre denné štatistiky.
- **Android, Wear OS, Fitbit, Garmin, Oura, Withings:** [Health Connect do FHIR](https://developers.anpheros.com/sk/guides/health-connect-fhir), s kódom Flutter, ktorý funguje na oboch platformách.
- **Samsung Galaxy Watch a Samsung Health:** [Samsung Health do FHIR](https://developers.anpheros.com/sk/guides/samsung-health-fhir): čo sa dostane do Health Connect a čo potrebuje vlastné SDK od Samsungu.

## Pravidlá, ktorých sa oplatí dodržiavať

- **Čítajte iba to, čo používate**, a žiadajte o každý typ osobitne; ľudia udeľujú čiastočné povolenia.
- **Označte zdroj.** Nositeľné zariadenia pre spotrebiteľov nie sú diagnostické zariadenia. Zapisujte ich dáta ako dáta zariadenia (`author_type: device`) a uveďte, z ktorej aplikácie pochádzajú, aby ich lekár mohol patrične zhodnotiť.
- **Rešpektujte pravidlá platformy.** Pokyny pre recenzie aplikácií spoločnosti Apple (5.1.3) zakazujú používanie zdravotných údajov na reklamu a ukladanie osobných zdravotných informácií v službe iCloud; Google Play vyžaduje vyhlásenie o zdravotných aplikáciách pre aplikácie, ktoré používajú Health Connect.
- **Umožnite ľuďom odpojiť sa** a rozhodnúť sa, či údaje, ktoré už boli skopírované, zostanú v zázname.

## Čo Anpheros robí a nerobí

Platforma Anpheros sa sama o sebe nepripája k Apple Health, Health Connect ani k žiadnemu predajcovskému cloudu: vaša aplikácia číta dáta z telefónu a zapisuje ich cez API. Vlastná aplikácia Anpheros, **Anpheros Daily**, robí presne toto: číta Apple Health na iPhone a Health Connect na Androide, uchováva denné súhrny a zapisuje ich do FHIR záznamu osoby s vyššie uvedenými kódmi. Pripojenie zariadení je súčasťou jej plánov Plus a Max.

## Často kladené otázky

### Ako dostanem dáta z Apple Watch na FHIR server?
Prečítajte si ich na iPhone z Apple Health pomocou HealthKit (neexistuje žiadne serverové API), zhrňte ich na dennej báze a nechajte svoj backend zapísať každú metriku ako Observation s LOINC kódom a UCUM jednotkou, označenú ako dáta zo zariadenia.

### Existuje cloudové API pre Health Connect alebo Apple Health?
Nie. Obe uchovávajú dáta na telefóne; aplikácia nainštalovaná na telefóne si ich prečíta s povolením osoby. Cloudové služby predajcov ako Garmin, Fitbit alebo Oura majú vlastné API, ale čítanie zdravotného úložiska telefónu pokrýva väčšinu z nich jednou integráciou.

### Aký LOINC kód mám použiť pre kroky?
41950-7, "Number of steps in 24 hour Measured", s denným `effectivePeriod`. Pre srdcovú frekvenciu použite 8867-4, pre SpO₂ 59408-5, pre dĺžku spánku 93832-4.

### Mám ukladať každý vzor srdcovej frekvencie vo FHIR?
Zvyčajne nie. Denné zhrnutie s priemerom, minimom a maximom je to, čo si osoba alebo lekár prečíta; jednotlivé údaje patria do záznamu iba vtedy, keď majú samy o sebe význam, napríklad udalosť nepravidelného rytmu.

### Môžem použiť jeden kód pre HRV z Apple Health a Health Connect?
Nie. Apple Health hlási SDNN a Health Connect hlási RMSSD; merajú rôzne veci a potrebujú rôzne kódy.

## Súvisiace

- [API pre nositeľné zariadenia: Fitbit, Garmin, Oura a Withings](https://developers.anpheros.com/sk/guides/wearable-apis)
- [API pre zdravotné trackery](https://developers.anpheros.com/sk/guides/health-tracker-api): ukladanie údajov z trackerov na server so súhlasom
- [Ako vytvoriť aplikáciu osobného zdravotného záznamu](https://developers.anpheros.com/sk/guides/personal-health-record-app)
- [Integrácie v zdravotníctve](https://developers.anpheros.com/sk/guides/healthcare-integrations): zariadenia popri laboratóriách, klinikách a aplikáciách
- [Kódové systémy FHIR](https://developers.anpheros.com/sk/guides/fhir-code-systems): LOINC a UCUM
- [Vysvetlenie pôvodu lekárskych údajov](https://developers.anpheros.com/sk/guides/medical-data-provenance)
- [Ako normalizovať lekárske údaje](https://developers.anpheros.com/sk/guides/normalize-medical-data)
- [Diaľkové monitorovanie pacientov s FHIR](https://developers.anpheros.com/sk/guides/remote-patient-monitoring-fhir): jednotlivé údaje, webhooks a upozornenia
