AnpherosAnpheros PlatformDevelopers

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

Δεδομένα φορητών συσκευών σε FHIR (Apple Health, Health Connect)

Εισαγωγή δεδομένων smartwatch, δαχτυλιδιού και ζυγαριάς σε αρχείο FHIR: ποιες συσκευές φτάνουν σε ποιο health store, ένας πίνακας αντιστοίχισης LOINC, ημερήσιες περιλήψεις και ένα δοκιμασμένο upsert.

Για να λάβετε δεδομένα από ένα smartwatch, δαχτυλίδι ή έξυπνη ζυγαριά σε ένα ιατρικό αρχείο, διαβάστε τα στο τηλέφωνο από το κατάστημα υγείας του λειτουργικού συστήματος — Apple Health σε iOS, Health Connect σε Android — συνοψίστε τα ανά ημέρα, αντιστοιχίστε κάθε μετρική σε έναν κωδικό LOINC και μια μονάδα UCUM, και γράψτε τα ως FHIR R4 Observations που έχουν επισημανθεί ως δεδομένα συσκευής. Η ανάγνωση από το κατάστημα υγείας του τηλεφώνου αντί από το cloud κάθε προμηθευτή επιτρέπει σε μία ενσωμάτωση να καλύψει Apple Watch, Galaxy Watch, Pixel Watch, Garmin, Fitbit, Oura και Withings, εφόσον το άτομο έχει επιτρέψει την κοινή χρήση από την εφαρμογή του προμηθευτή του. Αυτή η σελίδα παρέχει τη διαδρομή δεδομένων, έναν πίνακα αντιστοίχισης που μπορείτε να επαναχρησιμοποιήσετε, ένα επικυρωμένο παράδειγμα FHIR και κώδικα που εκτελέστηκε στην πλατφόρμα.

Η διαδρομή δεδομένων

 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 ούτε το Health Connect διαθέτουν API διακομιστή: τα δεδομένα μπορούν να διαβαστούν μόνο από μια εφαρμογή στο τηλέφωνο του ατόμου. Η εφαρμογή σας τα διαβάζει, στέλνει συμπυκνωμένες ημερήσιες τιμές στο backend σας και το backend τα εγγράφει στο αρχείο.

Ποιες συσκευές φτάνουν σε ποιο health store

Αυτό που μοιράζεται κάθε πωλητής αλλάζει με τις εκδόσεις των εφαρμογών· η τεκμηρίωση του ίδιου του πωλητή είναι η αναφορά.

Συσκευή ή εφαρμογή Apple Health (iOS) Health Connect (Android) Σημειώσεις
Apple Watch Ναι, εγγενώς — Ό,τι μετράει το ρολόι καταλήγει στο Apple Health
Samsung Galaxy Watch, Samsung Health — Μερικώς Το Samsung Health αποφασίζει ποιοι τύποι εξάγονται και πόσο συχνά· δείτε Samsung Health
Pixel Watch, Fitbit Καμία επίσημη συγχρονισμός Ναι, μέσω της εφαρμογής Fitbit (Βοήθεια Google)
Garmin Ναι, από το Garmin Connect μετά από κάθε συγχρονισμό συσκευής Ναι, το Garmin Connect υποστηρίζει Health Connect σε Android 14 και νεότερες εκδόσεις (Android Developers, Αύγουστος 2025) Βαθμολογίες ειδικές για Garmin, όπως το Body Battery, δεν κοινοποιούνται
Oura Ναι Ναι (Oura) Η βαθμολογία Readiness και άλλες βαθμολογίες Oura παραμένουν στην εφαρμογή Oura
Withings Ναι, μέσω Health Mate Ναι (Android Developers blog) Ζυγαριές, πιεσόμετρα, ρολόγια

Δύο πρακτικές συνέπειες. Πρώτον, η εφαρμογή σας εξαρτάται από το αν το άτομο έχει ενεργοποιήσει την κοινή χρήση στην εφαρμογή του πωλητή του· η εισαγωγή (onboarding) θα πρέπει να το αναφέρει. Δεύτερον, το health store μπορεί να περιέχει τα ίδια βήματα από δύο πηγές (ένα τηλέφωνο και ένα ρολόι)· διαβάστε τα ημερήσια σύνολα του ίδιου του store αντί να προσθέτετε δείγματα, επειδή το Apple Health και το Health Connect ήδη αφαιρούν διπλότυπες πηγές.

Πίνακας αντιστοίχισης: τύπος καταστήματος υγείας → FHIR Observation

Οι κωδικοί που χρησιμοποιεί το Anpheros Daily κατά την εγγραφή δεδομένων από φορητές συσκευές σε ένα αρχείο FHIR:

Μετρική Apple HealthKit Health Connect LOINC Μονάδα UCUM Κατηγορία
Καρδιακός ρυθμός heartRate HeartRateRecord 8867-4 /min vital-signs
Καρδιακός ρυθμός ηρεμίας restingHeartRate RestingHeartRateRecord 40443-4 /min vital-signs
Μεταβλητότητα καρδιακού ρυθμού heartRateVariabilitySDNN HeartRateVariabilityRmssdRecord 80404-7 (μόνο SDNN) ms vital-signs
Οξυγόνο αίματος (SpO₂) oxygenSaturation OxygenSaturationRecord 59408-5 % vital-signs
Αναπνευστικός ρυθμός respiratoryRate RespiratoryRateRecord 9279-1 /min vital-signs
Βήματα ανά ημέρα stepCount StepsRecord 41950-7 {steps} activity
Ενεργειακή δαπάνη activeEnergyBurned ActiveCaloriesBurnedRecord 41981-2 kcal activity
Διάρκεια ύπνου sleepAnalysis (κατηγορία) SleepSessionRecord 93832-4; στάδια 93831-6 deep, 93830-8 light, 93829-0 REM min activity
Σωματικό βάρος bodyMass WeightRecord 29463-7 kg vital-signs
Αρτηριακή πίεση bloodPressure (συσχέτιση) BloodPressureRecord 85354-9 με 8480-6 και 8462-4 mm[Hg] vital-signs
Γλυκόζη αίματος (μετρητής) bloodGlucose BloodGlucoseRecord 2339-0 mg/dL vital-signs
Θερμοκρασία σώματος bodyTemperature BodyTemperatureRecord 8310-5 Cel vital-signs

Παρατηρήστε τη γραμμή μεταβλητότητας καρδιακού ρυθμού: Το Apple Health αποθηκεύει SDNN, ενώ το Health Connect αποθηκεύει RMSSD. Πρόκειται για διαφορετικές στατιστικές και δεν πρέπει να εγγράφονται κάτω από τον ίδιο κωδικό. Το LOINC 80404-7 είναι SDNN· για RMSSD, το Anpheros Daily χρησιμοποιεί το δικό του σύστημα κωδικοποίησης αντί να προσποιείται ότι τα δύο είναι το ίδιο.

Περιλήψεις, όχι κάθε δείγμα

Ένα ρολόι παράγει χιλιάδες δείγματα καρδιακών παλμών την ημέρα. Ένα ιατρικό αρχείο χρειάζεται κάτι που ένας άνθρωπος ή ένας γιατρός μπορεί να διαβάσει:

Μια ημερήσια περίληψη καρδιακών παλμών ως FHIR R4 (περνάει από τον ελεγκτή FHIR R4):

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

Εγγραφή ημερήσιων τιμών χωρίς διπλότυπα

Τα τηλέφωνα συγχρονίζονται αρκετές φορές την ημέρα, και η τελευταία τιμή μιας ημέρας αλλάζει μέχρι τα μεσάνυχτα. Δώστε σε κάθε Observation ένα σταθερό αναγνωριστικό — άτομο, ημέρα, μετρική — και ενημερώστε το αντί να δημιουργήσετε ένα νέο. Με το Anpheros TypeScript SDK, στο backend σας:

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

Η εκτέλεση σε μια τοπική παρουσία της πλατφόρμας με ένα κλειδί sandbox, δύο ημερήσιες τιμές που ακολουθούνται από έναν μεταγενέστερο συγχρονισμό των βημάτων της ίδιας ημέρας άφησαν δύο Observations, το ένα για τα βήματα στην έκδοση 2 με τη νέα τιμή, και την προέλευση v1 device apple-health · v2 device. Το ιστορικό διατηρεί την προηγούμενη τιμή, και κάθε αναγνώστης μπορεί να δει ότι τα δεδομένα προήλθαν από μια συσκευή, όχι από έναν κλινικό ιατρό.

Στην παραγωγή, χρησιμοποιήστε τα πραγματικά όρια της ημέρας στη ζώνη ώρας του ατόμου (το παραπάνω παράδειγμα χρησιμοποιεί UTC για συντομία), όπως κάνουν ο κώδικας HealthKit και Health Connect στις σελίδες της πλατφόρμας.

Ανάγνωση από το τηλέφωνο

Κανόνες που αξίζει να ακολουθήσετε

Τι κάνει και τι δεν κάνει το Anpheros

Η Πλατφόρμα Anpheros δεν συνδέεται αυτόματα με το Apple Health, το Health Connect ή οποιοδήποτε cloud προμηθευτή: η εφαρμογή σας διαβάζει τα δεδομένα στο τηλέφωνο και τα γράφει μέσω του API. Η δική του εφαρμογή Anpheros, η Anpheros Daily, κάνει ακριβώς αυτό: διαβάζει το Apple Health στο iPhone και το Health Connect στο Android, διατηρεί ημερήσιες περιλήψεις και τις γράφει στο αρχείο FHIR του ατόμου με τους παραπάνω κωδικούς. Η σύνδεση συσκευών αποτελεί μέρος των προγραμμάτων Plus και Max.

Συχνές Ερωτήσεις

Πώς μπορώ να εισαγάγω δεδομένα από το Apple Watch σε έναν διακομιστή FHIR;

Διαβάστε τα στο iPhone από το Apple Health με το HealthKit (δεν υπάρχει API διακομιστή), συνοψίστε τα ανά ημέρα και κάντε το backend σας να γράψει κάθε μετρική ως Observation με κωδικό LOINC και μονάδα UCUM, επισημασμένη ως δεδομένα συσκευής.

Υπάρχει cloud API για το Health Connect ή το Apple Health;

Όχι. Και τα δύο διατηρούν δεδομένα στο τηλέφωνο· μια εφαρμογή εγκατεστημένη στο τηλέφωνο τα διαβάζει με την άδεια του ατόμου. Cloud παρόχων όπως της Garmin, Fitbit ή Oura έχουν τα δικά τους API, αλλά η ανάγνωση του καταστήματος υγείας του τηλεφώνου καλύπτει τα περισσότερα από αυτά με μία ενσωμάτωση.

Ποιον κωδικό LOINC πρέπει να χρησιμοποιήσω για τα βήματα;

41950-7, "Number of steps in 24 hour Measured", με ημερήσιο effectivePeriod. Για τον καρδιακό ρυθμό χρησιμοποιήστε 8867-4, για SpO₂ 59408-5, για τη διάρκεια ύπνου 93832-4.

Πρέπει να αποθηκεύσω κάθε δείγμα καρδιακού ρυθμού στο FHIR;

Συνήθως όχι. Μια ημερήσια σύνοψη με μέσο όρο, ελάχιστο και μέγιστο είναι αυτό που διαβάζει ένα άτομο ή κλινικός· μεμονωμένες μετρήσεις ανήκουν στο αρχείο μόνο όταν έχουν σημασία από μόνες τους, όπως ένα γεγονός ακανόνιστου ρυθμού.

Μπορώ να χρησιμοποιήσω έναν κωδικό για HRV από το Apple Health και το Health Connect;

Όχι. Το Apple Health αναφέρει SDNN και το Health Connect αναφέρει RMSSD· μετρούν διαφορετικά πράγματα και χρειάζονται διαφορετικούς κωδικούς.

Σχετικά

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