Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Viselhető eszközök adatai FHIR-ben (Apple Health, Health Connect)
Szerezz okosóra, gyűrű és mérleg adatokat FHIR rekordba: mely eszközök melyik egészségügyi tárolóhoz jutnak el, egy LOINC leképezési táblázat, napi összefoglalók és egy tesztelt upsert.
Az okosóráról, gyűrűről vagy okosmérlegről származó adatok orvosi rekordba való beviteléhez olvassa be azokat a telefonról az operációs rendszer egészségügyi tárolójából – iOS alatt az Apple Health, Android alatt a Health Connect –, naponta összefoglalja azokat, minden mért értéket leképez egy LOINC kódra és egy UCUM egységre, majd FHIR R4 Observation dokumentumként írja be, eszközadatként megjelölve. A telefon egészségügyi tárolójából való olvasás az egyes gyártók felhője helyett lehetővé teszi, hogy egyetlen integráció fedje le az Apple Watch, Galaxy Watch, Pixel Watch, Garmin, Fitbit, Oura és Withings eszközöket, feltéve, hogy a személy engedélyezte a gyártói alkalmazásuk megosztását. Ez az oldal bemutatja az adatútvonalat, egy újrafelhasználható leképezési táblázatot, egy validált FHIR példát és a platform ellen futtatott kódot.
Az adatút
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
Sem az Apple Health, sem a Health Connect nem rendelkezik szerver API-val: az adatokat csak az adott személy telefonján futó alkalmazás olvashatja. Az Ön alkalmazása elolvassa az adatokat, tömörített napi értékeket küld a backendjére, és a backend ezeket rögzíti a rekordba.
Mely eszközök mely egészségügyi tárolókat érnek el
Az egyes gyártók által megosztott adatok az alkalmazás verzióival változnak; a gyártó saját dokumentációja a mérvadó.
| Eszköz vagy alkalmazás | Apple Health (iOS) | Health Connect (Android) | Megjegyzések |
|---|---|---|---|
| Apple Watch | Igen, natívan | — | Minden, amit az óra mér, az Apple Health-be kerül |
| Samsung Galaxy Watch, Samsung Health | — | Részben | A Samsung Health dönti el, hogy milyen típusokat exportál és milyen gyakran; lásd: Samsung Health |
| Pixel Watch, Fitbit | Nincs hivatalos szinkronizálás | Igen, a Fitbit alkalmazáson keresztül (Google súgó) | |
| Garmin | Igen, a Garmin Connect-ből minden eszköz szinkronizálás után | Igen, a Garmin Connect támogatja a Health Connect-et Android 14-től és újabbaktól (Android Developers, 2025. augusztus) | A Garmin-specifikus pontszámok, mint például a Body Battery, nem kerülnek megosztásra |
| Oura | Igen | Igen (Oura) | A Readiness és más Oura pontszámok az Oura alkalmazásban maradnak |
| Withings | Igen, a Health Mate-en keresztül | Igen (Android Developers blog) | Mérlegek, vérnyomásmérők, órák |
Két gyakorlati következmény. Először is, az alkalmazásod attól függ, hogy az illető bekapcsolta-e a megosztást a gyártói alkalmazásban; az onboardingnak ezt jeleznie kell. Másodszor, az egészségügyi tároló két forrásból (telefon és óra) is tartalmazhatja ugyanazokat a lépéseket; olvasd el a tároló saját napi összesítését a minták összeadása helyett, mert az Apple Health és a Health Connect már automatikusan eltávolítja az átfedő forrásokat.
Leképezési táblázat: egészségtároló típusa → FHIR Observation
Az Anpheros Daily által használt kódok, amikor viselhető eszközök adatait FHIR rekordba írja:
| Metrika | Apple HealthKit | Health Connect | LOINC | UCUM egység | Kategória |
|---|---|---|---|---|---|
| Pulzus | heartRate |
HeartRateRecord |
8867-4 | /min |
vital-signs |
| Nyugalmi pulzus | restingHeartRate |
RestingHeartRateRecord |
40443-4 | /min |
vital-signs |
| Pulzusszám-variabilitás | heartRateVariabilitySDNN |
HeartRateVariabilityRmssdRecord |
80404-7 (csak SDNN) | ms |
vital-signs |
| Véroxigén (SpO₂) | oxygenSaturation |
OxygenSaturationRecord |
59408-5 | % |
vital-signs |
| Légzésszám | respiratoryRate |
RespiratoryRateRecord |
9279-1 | /min |
vital-signs |
| Lépésszám naponta | stepCount |
StepsRecord |
41950-7 | {steps} |
activity |
| Aktív energia | activeEnergyBurned |
ActiveCaloriesBurnedRecord |
41981-2 | kcal |
activity |
| Alvás időtartama | sleepAnalysis (kategória) |
SleepSessionRecord |
93832-4; szakaszok 93831-6 mély, 93830-8 könnyű, 93829-0 REM | min |
activity |
| Testtömeg | bodyMass |
29463-7 | WeightRecord |
kg |
vital-signs |
| Vérnyomás | bloodPressure (korreláció) |
BloodPressureRecord |
85354-9 8480-6 és 8462-4 értékekkel | mm[Hg] |
vital-signs |
| Vércukor (mérőeszköz) | bloodGlucose |
BloodGlucoseRecord |
2339-0 | mg/dL |
vital-signs |
| Testhőmérséklet | bodyTemperature |
BodyTemperatureRecord |
8310-5 | Cel |
vital-signs |
Figyelje meg a pulzusszám-variabilitás sort: az Apple Health az SDNN-t tárolja, a Health Connect pedig az RMSSD-t. Ezek különböző statisztikák, és nem írhatók ugyanaz alá a kód alá. A LOINC 80404-7 az SDNN; az RMSSD esetében az Anpheros Daily saját kódrendszerét használja ahelyett, hogy azt színlelné, hogy a kettő ugyanaz.
Összegzések, nem minden minta
Egy okosóra naponta több ezer pulzusmintát rögzít. Egy orvosi dokumentumhoz viszont olyan információra van szükség, amit egy ember vagy egy orvos el tud olvasni:
- Egy megfigyelés (Observation) metrikánként naponta, amely
effectivePeriodtartalmazza a személy helyi napját, a napi átlagot vagy összegetvalueQuantity, és a pulzusmérés esetén a minimum és maximum értékeket komponensekként. - Finomabb sorozatok ott maradnak, ahol hasznosak. Az Anpheros Daily 4 órás pulzusösszegzéseket tart meg saját grafikonjaihoz, és a napi értékeket írja be a FHIR rekordba.
- Események külön kezelendők. Egy szabálytalan ritmusra vonatkozó értesítés vagy egyetlen vérnyomásmérés a saját idejével egy különálló megfigyelés (Observation), nem része a napi átlagnak.
Napi pulzusösszegzés FHIR R4 formátumban (ez átmegy a FHIR R4 validátoron):
{
"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)"}
}
Napi értékek írása ismétlődések nélkül
A telefonok naponta többször szinkronizálnak, és a nap utolsó értéke éjfélig változik. Minden Observation-nek adjon egy stabil azonosítót – személy, nap, metrika – és frissítse azt az új létrehozása helyett. Az Anpheros TypeScript SDK használatával, a backend-en:
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 });
}
A platform helyi példányán futtatva egy sandbox kulccsal, két napi érték, majd a nap azonos lépéseinek későbbi szinkronizálása két Observation-t eredményezett, a lépések pedig a 2-es verzióban az új értékkel és a v1 device apple-health · v2 device származási adattal. A történet megőrzi a korábbi értéket, és minden olvasó láthatja, hogy az adatok eszközről származnak, nem pedig egy orvostól.
Éles környezetben használja a valós nap határokat a személy időzónájában (a fenti példa rövidség kedvéért UTC-t használ), ahogy azt a platform oldalain található HealthKit és Health Connect kód is teszi.
Olvasás telefonról
- iPhone és Apple Watch: Apple Health (HealthKit) FHIR-re, Swift kóddal a napi statisztikákhoz.
- Android, Wear OS, Fitbit, Garmin, Oura, Withings: Health Connect FHIR-re, Flutter kóddal, amely mindkét platformon működik.
- Samsung Galaxy Watch és Samsung Health: Samsung Health FHIR-re: mi kerül be a Health Connectbe, és mihez szükséges a Samsung saját SDK-ja.
Betartandó szabályok
- Csak azt olvasd el, amit használsz, és minden típushoz külön kérj engedélyt; az emberek részleges engedélyeket adnak.
- Címkézd meg a forrást. A fogyasztói viselhető eszközök nem diagnosztikai eszközök. Az adataikat eszközadatként (
author_type: device) rögzítsd, és jelöld meg, melyik alkalmazásból származnak, hogy a klinikus megfelelően tudja értékelni azokat. - Tartsd be a platform szabályait. Az Apple App Review Guidelines (5.1.3) tiltja az egészségügyi adatok reklámozási célú felhasználását és a személyes egészségügyi információk iCloudban történő tárolását; a Google Play megköveteli az egészségügyi alkalmazások nyilatkozatát a Health Connect-et használó alkalmazások esetében.
- Engedd az embereknek a leválasztást és azt, hogy eldöntsék, a már kimásolt adatok megmaradnak-e a rekordban.
Mit csinál és mit nem csinál az Anpheros
Az Anpheros Platform önmagában nem csatlakozik az Apple Healthhez, a Health Connecthez vagy bármely gyártói felhőhöz: az Ön alkalmazása leolvassa az adatokat a telefonról, és az API-n keresztül írja azokat. Az Anpheros saját alkalmazása, az Anpheros Daily, pontosan ezt teszi: leolvassa az Apple Health-et iPhone-on és a Health Connect-et Androidon, napi összefoglalókat készít, és azokat a személy FHIR rekordjába írja a fenti kódokkal. Az eszközök csatlakoztatása a Plus és Max csomagok részét képezi.
Gyakran ismételt kérdések
Hogyan vihetek Apple Watch adatokat FHIR szerverre?
Olvassa be az iPhone-on az Apple Health-ből a HealthKit segítségével (nincs szerver API), naponta összesítse, és a backend írja meg az egyes mérőszámokat egy Observation-ként LOINC kóddal és UCUM egységgel, eszközadatként megjelölve.
Van felhő API a Health Connect vagy az Apple Health számára?
Nem. Mindkettő az adatok telefonon tartja; a telefonra telepített alkalmazás az ember engedélyével olvassa be. A gyártók felhői, mint a Garmin, Fitbit vagy Oura, saját API-kkal rendelkeznek, de a telefon egészségügyi tárolójának olvasása egy integrációval lefedi a legtöbbet.
Melyik LOINC kódot használjam a lépésekhez?
41950-7, "Number of steps in 24 hour Measured", napi effectivePeriod-el. Pulzushoz használja a 8867-4-et, SpO₂-hoz az 59408-5-öt, alvásidőtartamhoz a 93832-4-et.
Tároljak minden pulzusmintát FHIR-ben?
Általában nem. A napi összefoglaló átlaggal, minimummal és maximummal az, amit egy ember vagy orvos olvas; az egyedi mérések csak akkor tartoznak a rekordba, ha önmagukban is számítanak, mint például egy szabálytalan ritmusú esemény.
Használhatok egy kódot az HRV-hez az Apple Health és a Health Connect esetében?
Nem. Az Apple Health SDNN-t jelent, a Health Connect pedig RMSSD-t; különböző dolgokat mérnek és különböző kódokat igényelnek.
Kapcsolódó tartalmak
- Viselhető eszközök API-jai: Fitbit, Garmin, Oura és Withings
- Egészségkövető API: követőadatok tárolása szerveren, hozzájárulással
- Személyes egészségügyi nyilvántartási alkalmazás készítése
- Egészségügyi integrációk: eszközök, laborok, klinikák és alkalmazások mellett
- FHIR kódrendszerek: LOINC és UCUM
- Az orvosi adatok eredetének magyarázata
- Orvosi adatok normalizálása
- Távfelügyeleti betegellátás FHIR-rel: egyedi mérések, webhookok és riasztások
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card