# بيانات الأجهزة القابلة للارتداء في FHIR (Apple Health، Health Connect)

> احصل على بيانات الساعات الذكية والخواتم والموازين في سجل FHIR: أي الأجهزة تصل إلى أي مخزن صحي، جدول تعيين LOINC، ملخصات يومية، وعملية إدراج/تحديث تم اختبارها.

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

**للحصول على بيانات من ساعة ذكية أو خاتم أو ميزان ذكي في سجل طبي، اقرأها على الهاتف من مخزن الصحة الخاص بنظام التشغيل — Apple Health على iOS، و Health Connect على Android — لخصها يوميًا، قم بتعيين كل مقياس إلى رمز LOINC ووحدة UCUM، واكتبها كسجلات FHIR R4 Observations معلمة كبيانات جهاز.** القراءة من مخزن الصحة الخاص بالهاتف بدلاً من سحابة كل بائع تسمح بتكامل واحد يغطي 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 واجهة برمجة تطبيقات للخادم: لا يمكن قراءة البيانات إلا بواسطة تطبيق على هاتف الشخص. يقرأ تطبيقك البيانات، ويرسل قيمًا يومية موجزة إلى الواجهة الخلفية الخاصة بك، وتقوم الواجهة الخلفية بكتابتها في السجل.

## الأجهزة التي تصل إلى أي مخزن صحي

ما يشاركه كل بائع يتغير مع إصدارات التطبيق؛ وثائق البائع الخاصة هي المرجع.

| الجهاز أو التطبيق | Apple Health (iOS) | Health Connect (Android) | ملاحظات |
|---|---|---|---|
| Apple Watch | نعم، أصليًا | — | كل ما يقيسه الجهاز يصل إلى Apple Health |
| Samsung Galaxy Watch، Samsung Health | — | جزئيًا | يقرر Samsung Health أنواع البيانات التي يصدرها وعدد مرات تكرارها؛ انظر [Samsung Health](https://developers.anpheros.com/ar/guides/samsung-health-fhir) |
| Pixel Watch، Fitbit | لا يوجد مزامنة رسمية | نعم، من خلال تطبيق Fitbit ([مساعدة Google](https://support.google.com/fitbit/answer/14506680)) | |
| Garmin | نعم، من Garmin Connect بعد كل مزامنة للجهاز | نعم، يدعم Garmin Connect Health Connect على Android 14 والإصدارات الأحدث ([Android Developers، أغسطس 2025](https://developer.android.com/health-and-fitness/community/newsletters/2025/08)) | لا تتم مشاركة الدرجات الخاصة بـ Garmin مثل Body Battery |
| Oura | نعم | نعم ([Oura](https://ouraring.com/blog/data-sharing-partner-integrations/)) | تبقى درجات Readiness ودرجات Oura الأخرى في تطبيق Oura |
| Withings | نعم، من خلال Health Mate | نعم ([مدونة Android Developers](https://android-developers.googleblog.com/2023/03/withings-reduces-data-sync-code-with--health-and-fitness-api-health-connect.html)) | الموازين، أجهزة قياس ضغط الدم، الساعات |

نتيجة عملية. أولاً، يعتمد تطبيقك على قيام الشخص بتشغيل المشاركة في تطبيق البائع الخاص به؛ يجب أن يذكر ذلك عند الإعداد. ثانيًا، قد يحتوي المخزن الصحي على نفس الخطوات من مصدرين (هاتف وساعة)؛ اقرأ الإجماليات اليومية للمخزن بدلاً من جمع العينات، لأن Apple Health و Health Connect يقومان بالفعل بإزالة التكرارات من المصادر المتداخلة.

## جدول الربط: نوع مخزن الصحة ← ملاحظة FHIR

الأكواد التي يستخدمها 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 عميق، 93830-8 خفيف، 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 نظام الأكواد الخاص به بدلاً من الادعاء بأن الاثنين متماثلان.

## ملخصات، وليس كل عينة

تنتج الساعة آلاف عينات معدل ضربات القلب يوميًا. يحتاج السجل الطبي إلى شيء يمكن للشخص أو الطبيب قراءته:

- **ملاحظة واحدة لكل مقياس في اليوم**، مع `effectivePeriod` تغطي اليوم المحلي للشخص، والمتوسط اليومي أو الإجمالي في `valueQuantity`، وبالنسبة للمعدلات، الحد الأدنى والأقصى كمكونات.
- **تبقى السلاسل الدقيقة حيث تكون مفيدة.** تحتفظ Anpheros Daily بملخصات معدل ضربات القلب لمدة 4 ساعات لرسومها البيانية الخاصة وتكتب القيم اليومية إلى سجل FHIR.
- **الأحداث منفصلة.** إشعار عدم انتظام النظم أو قراءة واحدة لضغط الدم هو ملاحظة خاصة به بوقت خاص به، وليس جزءًا من متوسط يومي.

ملخص يومي لمعدل ضربات القلب بصيغة FHIR R4 (يجتاز [مدقق FHIR R4](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)"}
}
```

## كتابة القيم اليومية بدون تكرار

تتزامن الهواتف عدة مرات في اليوم، وتتغير القيمة الأخيرة لليوم حتى منتصف الليل. امنح كل Observation معرفًا ثابتًا — الشخص، اليوم، المقياس — وقم بتحديثه بدلاً من إنشاء واحد جديد. باستخدام Anpheros TypeScript SDK، على الواجهة الخلفية الخاصة بك:

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

عند التشغيل مقابل نسخة محلية من المنصة باستخدام مفتاح sandbox، فإن قيمتين يوميتين متبوعتين بمزامنة لاحقة لخطوات نفس اليوم تركت **ملاحظتين** (Observations)، الملاحظة الخاصة بالخطوات في الإصدار 2 بالقيمة الجديدة، والمصدر (provenance) `v1 device apple-health · v2 device`. يحتفظ السجل بالقيمة السابقة، ويمكن لكل قارئ رؤية أن البيانات جاءت من جهاز، وليس من طبيب.

في بيئة الإنتاج، استخدم حدود اليوم الحقيقية في المنطقة الزمنية للشخص (يستخدم المثال أعلاه UTC للاختصار)، كما يفعل كود HealthKit و Health Connect في صفحات المنصة.

## القراءة على الهاتف

- **iPhone و Apple Watch:** [Apple Health (HealthKit) إلى FHIR](https://developers.anpheros.com/ar/guides/apple-health-fhir)، مع كود Swift للإحصائيات اليومية.
- **Android و Wear OS و Fitbit و Garmin و Oura و Withings:** [Health Connect إلى FHIR](https://developers.anpheros.com/ar/guides/health-connect-fhir)، مع كود Flutter الذي يعمل على كلا النظامين.
- **Samsung Galaxy Watch و Samsung Health:** [Samsung Health إلى FHIR](https://developers.anpheros.com/ar/guides/samsung-health-fhir): ما يصل إلى Health Connect وما يحتاج إلى SDK الخاص بـ Samsung.

## قواعد جديرة بالاتباع

- **اقرأ فقط ما تستخدمه**، واطلب كل نوع على حدة؛ يمنح الأشخاص أذونات جزئية.
- **ضع علامة على المصدر.** الأجهزة القابلة للارتداء من المستهلك ليست أجهزة تشخيصية. اكتب بياناتها كبيانات جهاز (`author_type: device`) وحدد التطبيق الذي جاءت منه، حتى يتمكن الطبيب من تقييمها وفقًا لذلك.
- **احترم قواعد المنصة.** تمنع إرشادات مراجعة التطبيقات من Apple (5.1.3) استخدام البيانات الصحية للإعلان وتخزين المعلومات الصحية الشخصية في iCloud؛ تتطلب Google Play إعلانًا للتطبيقات الصحية للتطبيقات التي تستخدم Health Connect.
- **اسمح للأشخاص بالانفصال** وتحديد ما إذا كانت البيانات التي تم نسخها بالفعل ستبقى في السجل.

## ما يفعله وما لا يفعله Anpheros

منصة Anpheros لا تتصل بـ Apple Health أو Health Connect أو أي سحابة بائع بمفردها: تطبيقك يقرأ البيانات على الهاتف ويكتبها عبر الـ API. تطبيق Anpheros الخاص، **Anpheros Daily**، يفعل ذلك بالضبط: يقرأ Apple Health على iPhone و Health Connect على Android، ويحتفظ بملخصات يومية ويكتبها في سجل FHIR الخاص بالشخص بالرموز المذكورة أعلاه. ربط الأجهزة هو جزء من خطط Plus و Max الخاصة بها.

## أسئلة متكررة

### كيف أحصل على بيانات Apple Watch في خادم FHIR؟
اقرأها على iPhone من Apple Health باستخدام HealthKit (لا يوجد واجهة برمجة تطبيقات للخادم)، ولخصها يوميًا، واجعل الواجهة الخلفية الخاصة بك تكتب كل مقياس كملاحظة (Observation) مع رمز LOINC ووحدة UCUM، مع وضع علامة عليها كبيانات جهاز.

### هل توجد واجهة برمجة تطبيقات سحابية لـ Health Connect أو Apple Health؟
لا. كلاهما يحتفظ بالبيانات على الهاتف؛ يقرأها تطبيق مثبت على الهاتف بإذن الشخص. تمتلك سحابات الموردين مثل Garmin أو Fitbit أو Oura واجهات برمجة تطبيقات خاصة بها، ولكن قراءة مخزن صحة الهاتف تغطي معظمها بتكامل واحد.

### ما هو رمز 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؛ كلاهما يقيس أشياء مختلفة ويتطلب رموزًا مختلفة.

## ذات الصلة

- [واجهات برمجة تطبيقات الأجهزة القابلة للارتداء: Fitbit، Garmin، Oura، و Withings](https://developers.anpheros.com/ar/guides/wearable-apis)
- [واجهة برمجة تطبيقات متتبع الصحة](https://developers.anpheros.com/ar/guides/health-tracker-api): تخزين بيانات المتتبع على خادم، بموافقة
- [كيفية بناء تطبيق سجل صحي شخصي](https://developers.anpheros.com/ar/guides/personal-health-record-app)
- [تكاملات الرعاية الصحية](https://developers.anpheros.com/ar/guides/healthcare-integrations): أجهزة بجانب المختبرات والعيادات والتطبيقات
- [أنظمة أكواد FHIR](https://developers.anpheros.com/ar/guides/fhir-code-systems): LOINC و UCUM
- [شرح مصدر البيانات الطبية](https://developers.anpheros.com/ar/guides/medical-data-provenance)
- [كيفية تطبيع البيانات الطبية](https://developers.anpheros.com/ar/guides/normalize-medical-data)
- [مراقبة المرضى عن بعد باستخدام FHIR](https://developers.anpheros.com/ar/guides/remote-patient-monitoring-fhir): قراءات فردية، خطافات الويب، وتنبيهات
