@ovok/native 1.7.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/modules/data-sync/index.js +15 -0
- package/lib/commonjs/modules/data-sync/index.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js +25 -19
- package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/managers/data-processor.js +73 -17
- package/lib/commonjs/modules/data-sync/services/managers/data-processor.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js +14 -0
- package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/convert-generic-health-data.js +45 -7
- package/lib/commonjs/modules/data-sync/utils/convert-generic-health-data.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-health-record-sync-id.js +15 -2
- package/lib/commonjs/modules/data-sync/utils/get-health-record-sync-id.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-records-from-health-connect.js +103 -8
- package/lib/commonjs/modules/data-sync/utils/get-records-from-health-connect.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js +66 -23
- package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-total-records-count.js +4 -1
- package/lib/commonjs/modules/data-sync/utils/get-total-records-count.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js +3 -3
- package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js +364 -0
- package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/health-units.js +13 -11
- package/lib/commonjs/modules/data-sync/utils/health-units.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/healthkit-data-types.js +34 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-data-types.js.map +1 -0
- package/lib/commonjs/modules/ui/components/calendar-grid.js +156 -0
- package/lib/commonjs/modules/ui/components/calendar-grid.js.map +1 -0
- package/lib/commonjs/modules/ui/components/calendar.js +137 -0
- package/lib/commonjs/modules/ui/components/calendar.js.map +1 -0
- package/lib/commonjs/modules/ui/components/period-calendar.js +127 -0
- package/lib/commonjs/modules/ui/components/period-calendar.js.map +1 -0
- package/lib/commonjs/modules/ui/index.js +22 -0
- package/lib/commonjs/modules/ui/index.js.map +1 -1
- package/lib/commonjs/modules/ui/utils/calendar-date.js +44 -0
- package/lib/commonjs/modules/ui/utils/calendar-date.js.map +1 -0
- package/lib/module/modules/data-sync/index.js +1 -0
- package/lib/module/modules/data-sync/index.js.map +1 -1
- package/lib/module/modules/data-sync/services/base-health-sync-service.js +25 -19
- package/lib/module/modules/data-sync/services/base-health-sync-service.js.map +1 -1
- package/lib/module/modules/data-sync/services/managers/data-processor.js +74 -18
- package/lib/module/modules/data-sync/services/managers/data-processor.js.map +1 -1
- package/lib/module/modules/data-sync/services/managers/storage-manager.js +14 -0
- package/lib/module/modules/data-sync/services/managers/storage-manager.js.map +1 -1
- package/lib/module/modules/data-sync/utils/convert-generic-health-data.js +45 -7
- package/lib/module/modules/data-sync/utils/convert-generic-health-data.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-health-record-sync-id.js +15 -2
- package/lib/module/modules/data-sync/utils/get-health-record-sync-id.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-records-from-health-connect.js +103 -8
- package/lib/module/modules/data-sync/utils/get-records-from-health-connect.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-samples-from-health.js +66 -22
- package/lib/module/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-total-records-count.js +4 -1
- package/lib/module/modules/data-sync/utils/get-total-records-count.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-total-samples-count.js +2 -2
- package/lib/module/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
- package/lib/module/modules/data-sync/utils/health-data-catalog.js +360 -0
- package/lib/module/modules/data-sync/utils/health-data-catalog.js.map +1 -0
- package/lib/module/modules/data-sync/utils/health-units.js +13 -11
- package/lib/module/modules/data-sync/utils/health-units.js.map +1 -1
- package/lib/module/modules/data-sync/utils/healthkit-data-types.js +26 -0
- package/lib/module/modules/data-sync/utils/healthkit-data-types.js.map +1 -0
- package/lib/module/modules/ui/components/calendar-grid.js +152 -0
- package/lib/module/modules/ui/components/calendar-grid.js.map +1 -0
- package/lib/module/modules/ui/components/calendar.js +133 -0
- package/lib/module/modules/ui/components/calendar.js.map +1 -0
- package/lib/module/modules/ui/components/period-calendar.js +122 -0
- package/lib/module/modules/ui/components/period-calendar.js.map +1 -0
- package/lib/module/modules/ui/index.js +2 -0
- package/lib/module/modules/ui/index.js.map +1 -1
- package/lib/module/modules/ui/utils/calendar-date.js +36 -0
- package/lib/module/modules/ui/utils/calendar-date.js.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/index.d.ts +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts +2 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/convert-data-props.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/data-sync/types/convert-data-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/data-from-provider-result.d.ts +4 -0
- package/lib/typescript/commonjs/src/modules/data-sync/types/data-from-provider-result.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-props.d.ts +6 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-generic-health-data.d.ts +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-generic-health-data.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-health-record-sync-id.d.ts +9 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-health-record-sync-id.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-records-from-health-connect.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts +49 -4
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-records-count.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-data-catalog.d.ts +30 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts +11 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/ui/components/calendar-grid.d.ts +23 -0
- package/lib/typescript/commonjs/src/modules/ui/components/calendar-grid.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/ui/components/calendar.d.ts +32 -0
- package/lib/typescript/commonjs/src/modules/ui/components/calendar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/ui/components/period-calendar.d.ts +16 -0
- package/lib/typescript/commonjs/src/modules/ui/components/period-calendar.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/ui/index.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/ui/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/ui/utils/calendar-date.d.ts +9 -0
- package/lib/typescript/commonjs/src/modules/ui/utils/calendar-date.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/index.d.ts +1 -0
- package/lib/typescript/module/src/modules/data-sync/index.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts +2 -1
- package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts +2 -0
- package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/convert-data-props.d.ts +2 -0
- package/lib/typescript/module/src/modules/data-sync/types/convert-data-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/data-from-provider-result.d.ts +4 -0
- package/lib/typescript/module/src/modules/data-sync/types/data-from-provider-result.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-sync-props.d.ts +6 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-sync-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/convert-generic-health-data.d.ts +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/convert-generic-health-data.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-health-record-sync-id.d.ts +9 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-health-record-sync-id.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-records-from-health-connect.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts +49 -4
- package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-total-records-count.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/health-data-catalog.d.ts +30 -0
- package/lib/typescript/module/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts +11 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/ui/components/calendar-grid.d.ts +23 -0
- package/lib/typescript/module/src/modules/ui/components/calendar-grid.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/ui/components/calendar.d.ts +32 -0
- package/lib/typescript/module/src/modules/ui/components/calendar.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/ui/components/period-calendar.d.ts +16 -0
- package/lib/typescript/module/src/modules/ui/components/period-calendar.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/ui/index.d.ts +2 -0
- package/lib/typescript/module/src/modules/ui/index.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/ui/utils/calendar-date.d.ts +9 -0
- package/lib/typescript/module/src/modules/ui/utils/calendar-date.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* eslint-disable max-lines */
|
|
4
|
+
|
|
5
|
+
import { healthUnitFor } from "./health-units.js";
|
|
6
|
+
const HEALTH_CONNECT_PERMISSION_PREFIX = "android.permission.health.READ_";
|
|
7
|
+
const HEALTH_CONNECT_CODE_SYSTEM = "urn:ovok:health-connect:record-type";
|
|
8
|
+
const HEALTHKIT_CODE_SYSTEM = "urn:ovok:healthkit:sample-type";
|
|
9
|
+
const APPLE_HEALTH_IDENTIFIERS = {
|
|
10
|
+
height: "HKQuantityTypeIdentifierHeight",
|
|
11
|
+
bodyMass: "HKQuantityTypeIdentifierBodyMass",
|
|
12
|
+
bodyTemperature: "HKQuantityTypeIdentifierBodyTemperature",
|
|
13
|
+
systolicBloodPressure: "HKQuantityTypeIdentifierBloodPressureSystolic",
|
|
14
|
+
diastolicBloodPressure: "HKQuantityTypeIdentifierBloodPressureDiastolic",
|
|
15
|
+
heartRate: "HKQuantityTypeIdentifierHeartRate",
|
|
16
|
+
restingHeartRate: "HKQuantityTypeIdentifierRestingHeartRate",
|
|
17
|
+
heartRateVariabilitySDNN: "HKQuantityTypeIdentifierHeartRateVariabilitySDNN",
|
|
18
|
+
respiratoryRate: "HKQuantityTypeIdentifierRespiratoryRate",
|
|
19
|
+
stepCount: "HKQuantityTypeIdentifierStepCount"
|
|
20
|
+
};
|
|
21
|
+
const appleLoincMappings = {
|
|
22
|
+
[APPLE_HEALTH_IDENTIFIERS.height]: {
|
|
23
|
+
code: "8302-2",
|
|
24
|
+
display: "Body height",
|
|
25
|
+
sourceUrl: "https://loinc.org/8302-2",
|
|
26
|
+
modes: ["point"]
|
|
27
|
+
},
|
|
28
|
+
[APPLE_HEALTH_IDENTIFIERS.bodyMass]: {
|
|
29
|
+
code: "29463-7",
|
|
30
|
+
display: "Body weight",
|
|
31
|
+
sourceUrl: "https://loinc.org/29463-7",
|
|
32
|
+
modes: ["point"]
|
|
33
|
+
},
|
|
34
|
+
[APPLE_HEALTH_IDENTIFIERS.bodyTemperature]: {
|
|
35
|
+
code: "8310-5",
|
|
36
|
+
display: "Body temperature",
|
|
37
|
+
sourceUrl: "https://loinc.org/8310-5",
|
|
38
|
+
modes: ["point"]
|
|
39
|
+
},
|
|
40
|
+
[APPLE_HEALTH_IDENTIFIERS.systolicBloodPressure]: {
|
|
41
|
+
code: "8480-6",
|
|
42
|
+
display: "Systolic blood pressure",
|
|
43
|
+
sourceUrl: "https://loinc.org/8480-6",
|
|
44
|
+
modes: ["point"]
|
|
45
|
+
},
|
|
46
|
+
[APPLE_HEALTH_IDENTIFIERS.diastolicBloodPressure]: {
|
|
47
|
+
code: "8462-4",
|
|
48
|
+
display: "Diastolic blood pressure",
|
|
49
|
+
sourceUrl: "https://loinc.org/8462-4",
|
|
50
|
+
modes: ["point"]
|
|
51
|
+
},
|
|
52
|
+
[APPLE_HEALTH_IDENTIFIERS.heartRate]: {
|
|
53
|
+
code: "8867-4",
|
|
54
|
+
display: "Heart rate",
|
|
55
|
+
sourceUrl: "https://loinc.org/8867-4",
|
|
56
|
+
modes: ["point"]
|
|
57
|
+
},
|
|
58
|
+
[APPLE_HEALTH_IDENTIFIERS.restingHeartRate]: {
|
|
59
|
+
code: "40443-4",
|
|
60
|
+
display: "Heart rate --resting",
|
|
61
|
+
sourceUrl: "https://loinc.org/40443-4",
|
|
62
|
+
modes: ["point"]
|
|
63
|
+
},
|
|
64
|
+
[APPLE_HEALTH_IDENTIFIERS.heartRateVariabilitySDNN]: {
|
|
65
|
+
code: "112429-6",
|
|
66
|
+
display: "Heart rate variability SDNN [Time]",
|
|
67
|
+
sourceUrl: "https://loinc.org/112429-6",
|
|
68
|
+
modes: ["point"]
|
|
69
|
+
},
|
|
70
|
+
[APPLE_HEALTH_IDENTIFIERS.respiratoryRate]: {
|
|
71
|
+
code: "9279-1",
|
|
72
|
+
display: "Respiratory rate",
|
|
73
|
+
sourceUrl: "https://loinc.org/9279-1",
|
|
74
|
+
modes: ["point"]
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// HKQuantityTypeIdentifier is type-only from the wrapper's shared native entry
|
|
79
|
+
// point. Keep the 8.7.2 identifiers here so the catalog is complete on Android,
|
|
80
|
+
// Jest, and other entry points where Object.values(enum) is empty.
|
|
81
|
+
const appleQuantityIdentifiers = ["HKQuantityTypeIdentifierBodyMassIndex", "HKQuantityTypeIdentifierBodyFatPercentage", "HKQuantityTypeIdentifierHeight", "HKQuantityTypeIdentifierBodyMass", "HKQuantityTypeIdentifierLeanBodyMass", "HKQuantityTypeIdentifierWaistCircumference", "HKQuantityTypeIdentifierStepCount", "HKQuantityTypeIdentifierDistanceWalkingRunning", "HKQuantityTypeIdentifierDistanceCycling", "HKQuantityTypeIdentifierDistanceWheelchair", "HKQuantityTypeIdentifierBasalEnergyBurned", "HKQuantityTypeIdentifierActiveEnergyBurned", "HKQuantityTypeIdentifierFlightsClimbed", "HKQuantityTypeIdentifierNikeFuel", "HKQuantityTypeIdentifierAppleExerciseTime", "HKQuantityTypeIdentifierPushCount", "HKQuantityTypeIdentifierDistanceSwimming", "HKQuantityTypeIdentifierSwimmingStrokeCount", "HKQuantityTypeIdentifierVO2Max", "HKQuantityTypeIdentifierDistanceDownhillSnowSports", "HKQuantityTypeIdentifierAppleStandTime", "HKQuantityTypeIdentifierHeartRate", "HKQuantityTypeIdentifierBodyTemperature", "HKQuantityTypeIdentifierBasalBodyTemperature", "HKQuantityTypeIdentifierBloodPressureSystolic", "HKQuantityTypeIdentifierBloodPressureDiastolic", "HKQuantityTypeIdentifierRespiratoryRate", "HKQuantityTypeIdentifierRestingHeartRate", "HKQuantityTypeIdentifierWalkingHeartRateAverage", "HKQuantityTypeIdentifierHeartRateVariabilitySDNN", "HKQuantityTypeIdentifierOxygenSaturation", "HKQuantityTypeIdentifierPeripheralPerfusionIndex", "HKQuantityTypeIdentifierBloodGlucose", "HKQuantityTypeIdentifierNumberOfTimesFallen", "HKQuantityTypeIdentifierElectrodermalActivity", "HKQuantityTypeIdentifierInhalerUsage", "HKQuantityTypeIdentifierInsulinDelivery", "HKQuantityTypeIdentifierBloodAlcoholContent", "HKQuantityTypeIdentifierForcedVitalCapacity", "HKQuantityTypeIdentifierForcedExpiratoryVolume1", "HKQuantityTypeIdentifierPeakExpiratoryFlowRate", "HKQuantityTypeIdentifierEnvironmentalAudioExposure", "HKQuantityTypeIdentifierHeadphoneAudioExposure", "HKQuantityTypeIdentifierDietaryFatTotal", "HKQuantityTypeIdentifierDietaryFatPolyunsaturated", "HKQuantityTypeIdentifierDietaryFatMonounsaturated", "HKQuantityTypeIdentifierDietaryFatSaturated", "HKQuantityTypeIdentifierDietaryCholesterol", "HKQuantityTypeIdentifierDietarySodium", "HKQuantityTypeIdentifierDietaryCarbohydrates", "HKQuantityTypeIdentifierDietaryFiber", "HKQuantityTypeIdentifierDietarySugar", "HKQuantityTypeIdentifierDietaryEnergyConsumed", "HKQuantityTypeIdentifierDietaryProtein", "HKQuantityTypeIdentifierDietaryVitaminA", "HKQuantityTypeIdentifierDietaryVitaminB6", "HKQuantityTypeIdentifierDietaryVitaminB12", "HKQuantityTypeIdentifierDietaryVitaminC", "HKQuantityTypeIdentifierDietaryVitaminD", "HKQuantityTypeIdentifierDietaryVitaminE", "HKQuantityTypeIdentifierDietaryVitaminK", "HKQuantityTypeIdentifierDietaryCalcium", "HKQuantityTypeIdentifierDietaryIron", "HKQuantityTypeIdentifierDietaryThiamin", "HKQuantityTypeIdentifierDietaryRiboflavin", "HKQuantityTypeIdentifierDietaryNiacin", "HKQuantityTypeIdentifierDietaryFolate", "HKQuantityTypeIdentifierDietaryBiotin", "HKQuantityTypeIdentifierDietaryPantothenicAcid", "HKQuantityTypeIdentifierDietaryPhosphorus", "HKQuantityTypeIdentifierDietaryIodine", "HKQuantityTypeIdentifierDietaryMagnesium", "HKQuantityTypeIdentifierDietaryZinc", "HKQuantityTypeIdentifierDietarySelenium", "HKQuantityTypeIdentifierDietaryCopper", "HKQuantityTypeIdentifierDietaryManganese", "HKQuantityTypeIdentifierDietaryChromium", "HKQuantityTypeIdentifierDietaryMolybdenum", "HKQuantityTypeIdentifierDietaryChloride", "HKQuantityTypeIdentifierDietaryPotassium", "HKQuantityTypeIdentifierDietaryCaffeine", "HKQuantityTypeIdentifierDietaryWater", "HKQuantityTypeIdentifierSixMinuteWalkTestDistance", "HKQuantityTypeIdentifierWalkingSpeed", "HKQuantityTypeIdentifierWalkingStepLength", "HKQuantityTypeIdentifierWalkingAsymmetryPercentage", "HKQuantityTypeIdentifierWalkingDoubleSupportPercentage", "HKQuantityTypeIdentifierStairAscentSpeed", "HKQuantityTypeIdentifierStairDescentSpeed", "HKQuantityTypeIdentifierUVExposure", "HKQuantityTypeIdentifierAppleMoveTime", "HKQuantityTypeIdentifierAppleWalkingSteadiness", "HKQuantityTypeIdentifierNumberOfAlcoholicBeverages", "HKQuantityTypeIdentifierAtrialFibrillationBurden", "HKQuantityTypeIdentifierUnderwaterDepth", "HKQuantityTypeIdentifierWaterTemperature", "HKQuantityTypeIdentifierAppleSleepingWristTemperature", "HKQuantityTypeIdentifierTimeInDaylight", "HKQuantityTypeIdentifierPhysicalEffort", "HKQuantityTypeIdentifierCyclingSpeed", "HKQuantityTypeIdentifierCyclingPower", "HKQuantityTypeIdentifierCyclingFunctionalThresholdPower", "HKQuantityTypeIdentifierCyclingCadence", "HKQuantityTypeIdentifierEnvironmentalSoundReduction", "HKQuantityTypeIdentifierHeartRateRecoveryOneMinute", "HKQuantityTypeIdentifierRunningGroundContactTime", "HKQuantityTypeIdentifierRunningStrideLength", "HKQuantityTypeIdentifierRunningPower", "HKQuantityTypeIdentifierRunningVerticalOscillation", "HKQuantityTypeIdentifierRunningSpeed", "HKQuantityTypeIdentifierCrossCountrySkiingSpeed", "HKQuantityTypeIdentifierDistanceCrossCountrySkiing", "HKQuantityTypeIdentifierDistancePaddleSports", "HKQuantityTypeIdentifierDistanceRowing", "HKQuantityTypeIdentifierDistanceSkatingSports", "HKQuantityTypeIdentifierEstimatedWorkoutEffortScore", "HKQuantityTypeIdentifierPaddleSportsSpeed", "HKQuantityTypeIdentifierRowingSpeed", "HKQuantityTypeIdentifierWorkoutEffortScore"];
|
|
82
|
+
|
|
83
|
+
// The HealthKit wrapper's native entry point does not export the category and
|
|
84
|
+
// correlation enums at runtime on every platform, so keep their identifiers as
|
|
85
|
+
// explicit catalog data instead of enumerating a platform-specific value.
|
|
86
|
+
const appleCategoryIdentifiers = ["HKCategoryTypeIdentifierSleepAnalysis", "HKCategoryTypeIdentifierAppleStandHour", "HKCategoryTypeIdentifierCervicalMucusQuality", "HKCategoryTypeIdentifierOvulationTestResult", "HKCategoryTypeIdentifierMenstrualFlow", "HKCategoryTypeIdentifierIntermenstrualBleeding", "HKCategoryTypeIdentifierSexualActivity", "HKCategoryTypeIdentifierMindfulSession", "HKCategoryTypeIdentifierHighHeartRateEvent", "HKCategoryTypeIdentifierLowHeartRateEvent", "HKCategoryTypeIdentifierIrregularHeartRhythmEvent", "HKCategoryTypeIdentifierAudioExposureEvent", "HKCategoryTypeIdentifierToothbrushingEvent", "HKCategoryTypeIdentifierLowCardioFitnessEvent", "HKCategoryTypeIdentifierContraceptive", "HKCategoryTypeIdentifierLactation", "HKCategoryTypeIdentifierPregnancy", "HKCategoryTypeIdentifierPregnancyTestResult", "HKCategoryTypeIdentifierProgesteroneTestResult", "HKCategoryTypeIdentifierEnvironmentalAudioExposureEvent", "HKCategoryTypeIdentifierHeadphoneAudioExposureEvent", "HKCategoryTypeIdentifierAppleWalkingSteadinessEvent", "HKCategoryTypeIdentifierHandwashingEvent", "HKCategoryTypeIdentifierAbdominalCramps", "HKCategoryTypeIdentifierAcne", "HKCategoryTypeIdentifierAppetiteChanges", "HKCategoryTypeIdentifierBladderIncontinence", "HKCategoryTypeIdentifierBloating", "HKCategoryTypeIdentifierBreastPain", "HKCategoryTypeIdentifierChestTightnessOrPain", "HKCategoryTypeIdentifierChills", "HKCategoryTypeIdentifierConstipation", "HKCategoryTypeIdentifierCoughing", "HKCategoryTypeIdentifierDiarrhea", "HKCategoryTypeIdentifierDizziness", "HKCategoryTypeIdentifierDrySkin", "HKCategoryTypeIdentifierFainting", "HKCategoryTypeIdentifierFatigue", "HKCategoryTypeIdentifierFever", "HKCategoryTypeIdentifierGeneralizedBodyAche", "HKCategoryTypeIdentifierHairLoss", "HKCategoryTypeIdentifierHeadache", "HKCategoryTypeIdentifierHeartburn", "HKCategoryTypeIdentifierHotFlashes", "HKCategoryTypeIdentifierLossOfSmell", "HKCategoryTypeIdentifierLossOfTaste", "HKCategoryTypeIdentifierLowerBackPain", "HKCategoryTypeIdentifierMemoryLapse", "HKCategoryTypeIdentifierMoodChanges", "HKCategoryTypeIdentifierNausea", "HKCategoryTypeIdentifierNightSweats", "HKCategoryTypeIdentifierPelvicPain", "HKCategoryTypeIdentifierRapidPoundingOrFlutteringHeartbeat", "HKCategoryTypeIdentifierRunnyNose", "HKCategoryTypeIdentifierShortnessOfBreath", "HKCategoryTypeIdentifierSinusCongestion", "HKCategoryTypeIdentifierSkippedHeartbeat", "HKCategoryTypeIdentifierSleepChanges", "HKCategoryTypeIdentifierSoreThroat", "HKCategoryTypeIdentifierVaginalDryness", "HKCategoryTypeIdentifierVomiting", "HKCategoryTypeIdentifierWheezing", "HKCategoryTypeIdentifierBleedingAfterPregnancy", "HKCategoryTypeIdentifierBleedingDuringPregnancy"];
|
|
87
|
+
const appleCorrelationIdentifiers = ["HKCorrelationTypeIdentifierBloodPressure", "HKCorrelationTypeIdentifierFood"];
|
|
88
|
+
const healthConnectLoincMappings = {
|
|
89
|
+
Height: appleLoincMappings[APPLE_HEALTH_IDENTIFIERS.height],
|
|
90
|
+
Weight: appleLoincMappings[APPLE_HEALTH_IDENTIFIERS.bodyMass],
|
|
91
|
+
HeartRate: appleLoincMappings[APPLE_HEALTH_IDENTIFIERS.heartRate],
|
|
92
|
+
RestingHeartRate: appleLoincMappings[APPLE_HEALTH_IDENTIFIERS.restingHeartRate],
|
|
93
|
+
RespiratoryRate: appleLoincMappings[APPLE_HEALTH_IDENTIFIERS.respiratoryRate],
|
|
94
|
+
BodyWaterMass: {
|
|
95
|
+
code: "101683-1",
|
|
96
|
+
display: "Body water mass",
|
|
97
|
+
sourceUrl: "https://loinc.org/101683-1",
|
|
98
|
+
modes: ["point"]
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const appleSupportedSamples = [...appleQuantityIdentifiers.map(identifier => ({
|
|
102
|
+
provider: "apple-health",
|
|
103
|
+
identifier,
|
|
104
|
+
category: "quantity",
|
|
105
|
+
shape: "sample",
|
|
106
|
+
readPermission: identifier,
|
|
107
|
+
readStrategy: "Anchored HealthKit quantity query",
|
|
108
|
+
fhirResource: "Observation",
|
|
109
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
110
|
+
unit: healthUnitFor(identifier) ?? "HealthKit preferred unit",
|
|
111
|
+
loincMapping: appleLoincMappings[identifier]
|
|
112
|
+
})), ...appleCategoryIdentifiers.map(identifier => ({
|
|
113
|
+
provider: "apple-health",
|
|
114
|
+
identifier,
|
|
115
|
+
category: "category",
|
|
116
|
+
shape: "interval",
|
|
117
|
+
readPermission: identifier,
|
|
118
|
+
readStrategy: "Anchored HealthKit category query",
|
|
119
|
+
fhirResource: "Observation",
|
|
120
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
121
|
+
unit: "not applicable"
|
|
122
|
+
})), ...appleCorrelationIdentifiers.map(identifier => ({
|
|
123
|
+
provider: "apple-health",
|
|
124
|
+
identifier,
|
|
125
|
+
category: "correlation",
|
|
126
|
+
shape: "sample",
|
|
127
|
+
readPermission: identifier,
|
|
128
|
+
readStrategy: "Non-anchored HealthKit date-window query",
|
|
129
|
+
fhirResource: "Observation",
|
|
130
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
131
|
+
unit: "record-specific",
|
|
132
|
+
limitation: "This wrapper does not expose a correlation anchor or deleted-sample cursor."
|
|
133
|
+
})), {
|
|
134
|
+
provider: "apple-health",
|
|
135
|
+
identifier: "HKWorkoutTypeIdentifier",
|
|
136
|
+
category: "workout",
|
|
137
|
+
shape: "interval",
|
|
138
|
+
readPermission: "HKWorkoutTypeIdentifier",
|
|
139
|
+
readStrategy: "Anchored HealthKit workout query",
|
|
140
|
+
fhirResource: "Observation",
|
|
141
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
142
|
+
unit: "record-specific"
|
|
143
|
+
}, {
|
|
144
|
+
provider: "apple-health",
|
|
145
|
+
identifier: "HKDataTypeIdentifierHeartbeatSeries",
|
|
146
|
+
category: "series",
|
|
147
|
+
shape: "series",
|
|
148
|
+
readPermission: "HKDataTypeIdentifierHeartbeatSeries",
|
|
149
|
+
readStrategy: "Anchored HealthKit heartbeat-series query",
|
|
150
|
+
fhirResource: "Observation",
|
|
151
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
152
|
+
unit: "count/min"
|
|
153
|
+
}, {
|
|
154
|
+
provider: "apple-health",
|
|
155
|
+
identifier: "HKStateOfMindTypeIdentifier",
|
|
156
|
+
category: "state of mind",
|
|
157
|
+
shape: "sample",
|
|
158
|
+
readPermission: "HKStateOfMindTypeIdentifier",
|
|
159
|
+
readStrategy: "Non-anchored HealthKit date-window query",
|
|
160
|
+
fhirResource: "Observation",
|
|
161
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
162
|
+
unit: "not applicable",
|
|
163
|
+
limitation: "Requires iOS 18 or later; this wrapper does not expose an anchor or deleted-sample cursor."
|
|
164
|
+
}];
|
|
165
|
+
const appleExcludedTypes = [{
|
|
166
|
+
provider: "apple-health",
|
|
167
|
+
identifier: "HKElectrocardiogramType",
|
|
168
|
+
category: "electrocardiogram",
|
|
169
|
+
shape: "series",
|
|
170
|
+
readPermission: "HKObjectType.electrocardiogramType()",
|
|
171
|
+
readStrategy: "not exposed by the pinned wrapper",
|
|
172
|
+
fhirResource: "Observation",
|
|
173
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
174
|
+
unit: "ECG samples",
|
|
175
|
+
limitation: "HealthKit exposes read-only ECG samples, but the pinned wrapper does not expose an ECG query or voltage-series serializer."
|
|
176
|
+
}, ...["AllergyRecord", "ClinicalNoteRecord", "ConditionRecord", "ImmunizationRecord", "LabResultRecord", "MedicationRecord", "ProcedureRecord", "VitalSignRecord", "CoverageRecord"].map(type => ({
|
|
177
|
+
provider: "apple-health",
|
|
178
|
+
identifier: `HKClinicalTypeIdentifier${type}`,
|
|
179
|
+
category: "clinical record",
|
|
180
|
+
shape: "sample",
|
|
181
|
+
readPermission: `HKObjectType.clinicalType(forIdentifier: .${type[0]?.toLowerCase()}${type.slice(1)})`,
|
|
182
|
+
readStrategy: "not exposed by the pinned wrapper",
|
|
183
|
+
fhirResource: "FHIR resource",
|
|
184
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
185
|
+
unit: "FHIR JSON",
|
|
186
|
+
limitation: "HealthKit clinical records contain source FHIR resources and require per-type authorization; the pinned wrapper exposes neither the query nor FHIR-resource serializer."
|
|
187
|
+
})), {
|
|
188
|
+
provider: "apple-health",
|
|
189
|
+
identifier: "HKDocumentTypeIdentifierCDA",
|
|
190
|
+
category: "clinical document",
|
|
191
|
+
shape: "sample",
|
|
192
|
+
readPermission: "HKObjectType.documentType(forIdentifier: .CDA)",
|
|
193
|
+
readStrategy: "not exposed by the pinned wrapper",
|
|
194
|
+
fhirResource: "FHIR resource",
|
|
195
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
196
|
+
unit: "CDA document",
|
|
197
|
+
limitation: "The pinned wrapper does not expose HealthKit document queries or a CDA document importer."
|
|
198
|
+
}, {
|
|
199
|
+
provider: "apple-health",
|
|
200
|
+
identifier: "HKVisionPrescriptionTypeIdentifier",
|
|
201
|
+
category: "vision prescription",
|
|
202
|
+
shape: "sample",
|
|
203
|
+
readPermission: "HKObjectType.visionPrescriptionType()",
|
|
204
|
+
readStrategy: "not exposed by the pinned wrapper",
|
|
205
|
+
fhirResource: "Observation",
|
|
206
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
207
|
+
unit: "prescription-specific",
|
|
208
|
+
limitation: "The pinned wrapper does not expose HealthKit vision-prescription queries or a prescription serializer."
|
|
209
|
+
}, {
|
|
210
|
+
provider: "apple-health",
|
|
211
|
+
identifier: "HKActivitySummaryTypeIdentifier",
|
|
212
|
+
category: "activity summary",
|
|
213
|
+
shape: "sample",
|
|
214
|
+
readPermission: "HKActivitySummaryTypeIdentifier",
|
|
215
|
+
readStrategy: "not exposed by the pinned wrapper",
|
|
216
|
+
fhirResource: "Observation",
|
|
217
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
218
|
+
unit: "record-specific",
|
|
219
|
+
limitation: "The pinned wrapper does not expose an activity-summary query."
|
|
220
|
+
}, {
|
|
221
|
+
provider: "apple-health",
|
|
222
|
+
identifier: "HKAudiogramSampleType",
|
|
223
|
+
category: "audiogram",
|
|
224
|
+
shape: "sample",
|
|
225
|
+
readPermission: "HKAudiogramSampleType",
|
|
226
|
+
readStrategy: "not exposed by the pinned wrapper",
|
|
227
|
+
fhirResource: "Observation",
|
|
228
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
229
|
+
unit: "record-specific",
|
|
230
|
+
limitation: "The pinned wrapper does not expose an audiogram query or serializer."
|
|
231
|
+
}, {
|
|
232
|
+
provider: "apple-health",
|
|
233
|
+
identifier: "HKWorkoutRouteTypeIdentifier",
|
|
234
|
+
category: "workout route",
|
|
235
|
+
shape: "series",
|
|
236
|
+
readPermission: "HKWorkoutRouteTypeIdentifier",
|
|
237
|
+
readStrategy: "getWorkoutRoutes(workoutUUID)",
|
|
238
|
+
fhirResource: "Observation",
|
|
239
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
240
|
+
unit: "geographic coordinates",
|
|
241
|
+
limitation: "The wrapper requires a known workout UUID and the route is not a pageable sample query; routes are excluded from automatic import."
|
|
242
|
+
}];
|
|
243
|
+
const appleCharacteristics = [["HKCharacteristicTypeIdentifierBiologicalSex", "getBiologicalSex"], ["HKCharacteristicTypeIdentifierBloodType", "getBloodType"], ["HKCharacteristicTypeIdentifierDateOfBirth", "getDateOfBirth"], ["HKCharacteristicTypeIdentifierFitzpatrickSkinType", "getFitzpatrickSkinType"], ["HKCharacteristicTypeIdentifierWheelchairUse", "getWheelchairUse"], ["HKCharacteristicTypeIdentifierActivityMoveMode", "not exposed by the pinned wrapper"]].map(([identifier, readStrategy]) => ({
|
|
244
|
+
provider: "apple-health",
|
|
245
|
+
identifier,
|
|
246
|
+
category: "characteristic",
|
|
247
|
+
shape: "characteristic",
|
|
248
|
+
readPermission: identifier,
|
|
249
|
+
readStrategy,
|
|
250
|
+
fhirResource: "Patient",
|
|
251
|
+
sourceCodeSystem: HEALTHKIT_CODE_SYSTEM,
|
|
252
|
+
unit: "not applicable",
|
|
253
|
+
limitation: "Characteristics are not HKSampleType values and are not accepted by dataToSync; they need a separate Patient mapping."
|
|
254
|
+
}));
|
|
255
|
+
const healthConnectRecords = [["ActiveCaloriesBurned", "Activity", "interval", "ACTIVE_CALORIES_BURNED", "kcal"], ["BasalBodyTemperature", "Cycle Tracking", "instantaneous", "BASAL_BODY_TEMPERATURE", "native temperature unit"], ["BasalMetabolicRate", "Body Measurement", "instantaneous", "BASAL_METABOLIC_RATE", "native power unit"], ["BloodGlucose", "Vitals", "instantaneous", "BLOOD_GLUCOSE", "native glucose unit"], ["BloodPressure", "Vitals", "instantaneous", "BLOOD_PRESSURE", "mm[Hg]"], ["BodyFat", "Body Measurement", "instantaneous", "BODY_FAT", "%"], ["BodyTemperature", "Vitals", "instantaneous", "BODY_TEMPERATURE", "native temperature unit"], ["BodyWaterMass", "Body Measurement", "instantaneous", "BODY_WATER_MASS", "kg"], ["BoneMass", "Body Measurement", "instantaneous", "BONE_MASS", "kg"], ["CervicalMucus", "Cycle Tracking", "instantaneous", "CERVICAL_MUCUS", "not applicable"], ["CyclingPedalingCadence", "Activity", "series", "EXERCISE", "rpm"], ["ElevationGained", "Activity", "interval", "ELEVATION_GAINED", "m"], ["ExerciseSession", "Activity", "interval", "EXERCISE", "record-specific"], ["FloorsClimbed", "Activity", "interval", "FLOORS_CLIMBED", "count"], ["HeartRate", "Vitals", "series", "HEART_RATE", "count/min"], ["RestingHeartRate", "Vitals", "instantaneous", "RESTING_HEART_RATE", "count/min"], ["Steps", "Activity", "interval", "STEPS", "count"], ["StepsCadence", "Activity", "series", "STEPS", "steps/min"], ["Distance", "Activity", "interval", "DISTANCE", "m"], ["Height", "Body Measurement", "instantaneous", "HEIGHT", "m"], ["Hydration", "Nutrition", "interval", "HYDRATION", "L"], ["HeartRateVariabilityRmssd", "Vitals", "instantaneous", "HEART_RATE_VARIABILITY", "ms"], ["SexualActivity", "Cycle Tracking", "instantaneous", "SEXUAL_ACTIVITY", "not applicable"], ["Weight", "Body Measurement", "instantaneous", "WEIGHT", "kg"], ["Nutrition", "Nutrition", "interval", "NUTRITION", "record-specific"], ["LeanBodyMass", "Body Measurement", "instantaneous", "LEAN_BODY_MASS", "kg"], ["IntermenstrualBleeding", "Cycle Tracking", "instantaneous", "INTERMENSTRUAL_BLEEDING", "not applicable"], ["Speed", "Activity", "series", "SPEED", "m/s"], ["MenstruationFlow", "Cycle Tracking", "instantaneous", "MENSTRUATION", "not applicable"], ["MenstruationPeriod", "Cycle Tracking", "interval", "MENSTRUATION", "not applicable"], ["SleepSession", "Sleep", "interval", "SLEEP", "min"], ["RespiratoryRate", "Vitals", "instantaneous", "RESPIRATORY_RATE", "count/min"], ["WheelchairPushes", "Activity", "interval", "WHEELCHAIR_PUSHES", "count"], ["Vo2Max", "Activity", "instantaneous", "VO2_MAX", "mL/kg/min"], ["OvulationTest", "Cycle Tracking", "instantaneous", "OVULATION_TEST", "not applicable"], ["TotalCaloriesBurned", "Activity", "interval", "TOTAL_CALORIES_BURNED", "kcal"], ["OxygenSaturation", "Vitals", "instantaneous", "OXYGEN_SATURATION", "%"], ["Power", "Activity", "series", "POWER", "W"]];
|
|
256
|
+
const readPermissionOverrides = {
|
|
257
|
+
CyclingPedalingCadence: "EXERCISE",
|
|
258
|
+
ExerciseSession: "EXERCISE",
|
|
259
|
+
HeartRateVariabilityRmssd: "HEART_RATE_VARIABILITY",
|
|
260
|
+
MenstruationFlow: "MENSTRUATION",
|
|
261
|
+
MenstruationPeriod: "MENSTRUATION",
|
|
262
|
+
StepsCadence: "STEPS"
|
|
263
|
+
};
|
|
264
|
+
const healthConnectCatalog = healthConnectRecords.map(([identifier, category, shape, permission, unit]) => ({
|
|
265
|
+
provider: "health-connect",
|
|
266
|
+
identifier,
|
|
267
|
+
category,
|
|
268
|
+
shape,
|
|
269
|
+
readPermission: `${HEALTH_CONNECT_PERMISSION_PREFIX}${readPermissionOverrides[identifier] ?? permission}`,
|
|
270
|
+
readStrategy: "readRecords pages followed by the Health Connect changes feed",
|
|
271
|
+
fhirResource: "Observation",
|
|
272
|
+
sourceCodeSystem: HEALTH_CONNECT_CODE_SYSTEM,
|
|
273
|
+
unit,
|
|
274
|
+
loincMapping: healthConnectLoincMappings[identifier]
|
|
275
|
+
}));
|
|
276
|
+
const healthConnectSpecialTypes = [{
|
|
277
|
+
provider: "health-connect",
|
|
278
|
+
identifier: "ExerciseRoute",
|
|
279
|
+
category: "route",
|
|
280
|
+
shape: "series",
|
|
281
|
+
readPermission: "per-session Health Connect consent dialog",
|
|
282
|
+
readStrategy: "ExerciseSessionRecord.exerciseRoute / requestExerciseRoute(recordId)",
|
|
283
|
+
fhirResource: "Observation",
|
|
284
|
+
sourceCodeSystem: HEALTH_CONNECT_CODE_SYSTEM,
|
|
285
|
+
unit: "geographic coordinates",
|
|
286
|
+
limitation: "Routes are returned with exercise sessions only when the user grants per-session route access; the SDK does not expose a standalone route selector or requestExerciseRoute flow."
|
|
287
|
+
}];
|
|
288
|
+
const catalogEntries = [...appleSupportedSamples, ...appleExcludedTypes, ...appleCharacteristics, ...healthConnectCatalog, ...healthConnectSpecialTypes];
|
|
289
|
+
const getLoincLimitation = entry => {
|
|
290
|
+
if (entry.provider === "apple-health" && entry.identifier === "HKQuantityTypeIdentifierBodyFatPercentage" || entry.provider === "health-connect" && entry.identifier === "BodyFat") {
|
|
291
|
+
return "Not mapped: LOINC 41982-0 specifies the Measured method, but neither platform record type establishes how the body-fat percentage was derived.";
|
|
292
|
+
}
|
|
293
|
+
if (entry.identifier === APPLE_HEALTH_IDENTIFIERS.stepCount || entry.provider === "health-connect" && entry.identifier === "Steps") {
|
|
294
|
+
return "Not mapped: the default daily-total result is a local-calendar-day count, while LOINC 41950-7 is a 24-hour count rate with UCUM unit {#}/(24.h). The local day can be shorter or longer at daylight-saving transitions; individual source intervals are not asserted to be a 24-hour rate either.";
|
|
295
|
+
}
|
|
296
|
+
if (entry.provider === "health-connect" && entry.identifier === "BloodPressure") {
|
|
297
|
+
return "Not mapped: this is a composite systolic/diastolic record. The importer must emit the paired component Observations (or a correctly coded panel) instead of attaching one code to the serialized record.";
|
|
298
|
+
}
|
|
299
|
+
if (entry.provider === "health-connect" && entry.identifier === "HeartRateVariabilityRmssd") {
|
|
300
|
+
return "Not mapped: this source is RMSSD; it must not be coded as the distinct SDNN measure (LOINC 112429-6).";
|
|
301
|
+
}
|
|
302
|
+
if (entry.provider === "health-connect" && entry.identifier === "BodyTemperature") {
|
|
303
|
+
return "Not mapped: Health Connect exposes temperature as a structured value and includes a measurement location. The generic Observation converter does not yet normalize that value to a numeric UCUM quantity or preserve the location in bodySite.";
|
|
304
|
+
}
|
|
305
|
+
if (entry.provider === "health-connect" && entry.identifier === "SleepSession") {
|
|
306
|
+
return "Not mapped: the current session value is elapsed session duration, not total time asleep; sleep stages can include awake intervals.";
|
|
307
|
+
}
|
|
308
|
+
if (entry.provider === "health-connect" && entry.identifier === "BasalMetabolicRate") {
|
|
309
|
+
return "Not mapped: the source value is power (W), while the matching LOINC candidate is a basal metabolic rate index; these representations are not interchangeable.";
|
|
310
|
+
}
|
|
311
|
+
if (entry.provider === "apple-health" && entry.identifier === "HKQuantityTypeIdentifierBodyMassIndex") {
|
|
312
|
+
return "Not mapped: the HealthKit quantity is dimensionless, while LOINC 39156-5 expects a body-mass-index ratio represented with kg/m2. The importer does not normalize this unit.";
|
|
313
|
+
}
|
|
314
|
+
if (entry.identifier === "BloodGlucose" || entry.identifier === "HKQuantityTypeIdentifierBloodGlucose") {
|
|
315
|
+
return "Not mapped: the platform type alone does not guarantee a compatible specimen, method, and unit combination for one LOINC glucose term.";
|
|
316
|
+
}
|
|
317
|
+
if (entry.category === "characteristic") {
|
|
318
|
+
return "This is a Patient characteristic, not a dated Observation; no Observation LOINC mapping is asserted.";
|
|
319
|
+
}
|
|
320
|
+
if (entry.category === "correlation") {
|
|
321
|
+
return "This is a composite correlation; a single LOINC code could misrepresent its component observations.";
|
|
322
|
+
}
|
|
323
|
+
if (entry.shape === "series") {
|
|
324
|
+
return "This time series needs a clinically reviewed panel or series mapping before a LOINC code can be assigned.";
|
|
325
|
+
}
|
|
326
|
+
if (entry.shape === "sample" && entry.unit === "record-specific") {
|
|
327
|
+
return "This structured sample needs its component/value semantics reviewed before a LOINC code can be assigned.";
|
|
328
|
+
}
|
|
329
|
+
return "No audited LOINC mapping is assigned for this identifier yet; this is not a claim that no valid LOINC term exists. The platform code is retained without asserting LOINC.";
|
|
330
|
+
};
|
|
331
|
+
const HEALTH_DATA_CATALOG = catalogEntries.map(entry => {
|
|
332
|
+
if (!entry.loincMapping) {
|
|
333
|
+
return {
|
|
334
|
+
...entry,
|
|
335
|
+
loincLimitation: getLoincLimitation(entry)
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
return entry.loincMapping.modes.length < 4 ? {
|
|
339
|
+
...entry,
|
|
340
|
+
loincLimitation: `The reviewed mapping applies only to ${entry.loincMapping.modes.join(", ")} mode; other representations retain the platform code.`
|
|
341
|
+
} : entry;
|
|
342
|
+
});
|
|
343
|
+
const getHealthDataCoding = (provider, identifier, mode) => {
|
|
344
|
+
const catalogProvider = provider === "apple-health" ? "apple-health" : "health-connect";
|
|
345
|
+
const entry = HEALTH_DATA_CATALOG.find(candidate => candidate.provider === catalogProvider && candidate.identifier === identifier);
|
|
346
|
+
const mapping = entry?.loincMapping;
|
|
347
|
+
if (mapping?.modes.includes(mode)) {
|
|
348
|
+
return {
|
|
349
|
+
code: mapping.code,
|
|
350
|
+
system: "http://loinc.org",
|
|
351
|
+
display: mapping.display
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
return {
|
|
355
|
+
code: identifier,
|
|
356
|
+
system: entry?.sourceCodeSystem ?? (catalogProvider === "apple-health" ? HEALTHKIT_CODE_SYSTEM : HEALTH_CONNECT_CODE_SYSTEM)
|
|
357
|
+
};
|
|
358
|
+
};
|
|
359
|
+
export { HEALTH_DATA_CATALOG, getHealthDataCoding };
|
|
360
|
+
//# sourceMappingURL=health-data-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["healthUnitFor","HEALTH_CONNECT_PERMISSION_PREFIX","HEALTH_CONNECT_CODE_SYSTEM","HEALTHKIT_CODE_SYSTEM","APPLE_HEALTH_IDENTIFIERS","height","bodyMass","bodyTemperature","systolicBloodPressure","diastolicBloodPressure","heartRate","restingHeartRate","heartRateVariabilitySDNN","respiratoryRate","stepCount","appleLoincMappings","code","display","sourceUrl","modes","appleQuantityIdentifiers","appleCategoryIdentifiers","appleCorrelationIdentifiers","healthConnectLoincMappings","Height","Weight","HeartRate","RestingHeartRate","RespiratoryRate","BodyWaterMass","appleSupportedSamples","map","identifier","provider","category","shape","readPermission","readStrategy","fhirResource","sourceCodeSystem","unit","loincMapping","limitation","appleExcludedTypes","type","toLowerCase","slice","appleCharacteristics","healthConnectRecords","readPermissionOverrides","CyclingPedalingCadence","ExerciseSession","HeartRateVariabilityRmssd","MenstruationFlow","MenstruationPeriod","StepsCadence","healthConnectCatalog","permission","healthConnectSpecialTypes","catalogEntries","getLoincLimitation","entry","HEALTH_DATA_CATALOG","loincLimitation","length","join","getHealthDataCoding","mode","catalogProvider","find","candidate","mapping","includes","system"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/health-data-catalog.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { HKQuantityTypeIdentifier } from "@kingstinct/react-native-healthkit";
|
|
4
3
|
const HEALTH_UNITS = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
4
|
+
HKQuantityTypeIdentifierBodyMass: "kg",
|
|
5
|
+
HKQuantityTypeIdentifierBodyFatPercentage: "%",
|
|
6
|
+
HKQuantityTypeIdentifierBodyTemperature: "degC",
|
|
7
|
+
HKQuantityTypeIdentifierBasalBodyTemperature: "degC",
|
|
8
|
+
HKQuantityTypeIdentifierBloodPressureSystolic: "mmHg",
|
|
9
|
+
HKQuantityTypeIdentifierBloodPressureDiastolic: "mmHg",
|
|
10
|
+
HKQuantityTypeIdentifierBloodGlucose: "mg/dL",
|
|
11
|
+
HKQuantityTypeIdentifierOxygenSaturation: "%",
|
|
12
|
+
HKQuantityTypeIdentifierHeartRate: "count/min",
|
|
13
|
+
HKQuantityTypeIdentifierHeartRateVariabilitySDNN: "ms",
|
|
14
|
+
HKQuantityTypeIdentifierRestingHeartRate: "count/min",
|
|
15
|
+
HKQuantityTypeIdentifierRespiratoryRate: "count/min",
|
|
16
|
+
HKQuantityTypeIdentifierWalkingHeartRateAverage: "count/min"
|
|
15
17
|
};
|
|
16
18
|
export const healthUnitFor = typeIdentifier => HEALTH_UNITS[typeIdentifier];
|
|
17
19
|
//# sourceMappingURL=health-units.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["HEALTH_UNITS","HKQuantityTypeIdentifierBodyMass","HKQuantityTypeIdentifierBodyFatPercentage","HKQuantityTypeIdentifierBodyTemperature","HKQuantityTypeIdentifierBasalBodyTemperature","HKQuantityTypeIdentifierBloodPressureSystolic","HKQuantityTypeIdentifierBloodPressureDiastolic","HKQuantityTypeIdentifierBloodGlucose","HKQuantityTypeIdentifierOxygenSaturation","HKQuantityTypeIdentifierHeartRate","HKQuantityTypeIdentifierHeartRateVariabilitySDNN","HKQuantityTypeIdentifierRestingHeartRate","HKQuantityTypeIdentifierRespiratoryRate","HKQuantityTypeIdentifierWalkingHeartRateAverage","healthUnitFor","typeIdentifier"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/health-units.ts"],"mappings":";;AAKA,MAAMA,YAA8C,GAAG;EACrDC,gCAAgC,EAAE,IAAI;EACtCC,yCAAyC,EAAE,GAAG;EAC9CC,uCAAuC,EAAE,MAAM;EAC/CC,4CAA4C,EAAE,MAAM;EACpDC,6CAA6C,EAAE,MAAM;EACrDC,8CAA8C,EAAE,MAAM;EACtDC,oCAAoC,EAAE,OAAO;EAC7CC,wCAAwC,EAAE,GAAG;EAC7CC,iCAAiC,EAAE,WAAW;EAC9CC,gDAAgD,EAAE,IAAI;EACtDC,wCAAwC,EAAE,WAAW;EACrDC,uCAAuC,EAAE,WAAW;EACpDC,+CAA+C,EAAE;AACnD,CAAC;AAED,OAAO,MAAMC,aAAa,GACxBC,cAAiB,IAEjBf,YAAY,CAACe,cAAc,CAAqC","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const isCategoryIdentifier = typeIdentifier => typeof typeIdentifier === "string" && typeIdentifier.startsWith("HKCategoryTypeIdentifier");
|
|
4
|
+
const isQuantityIdentifier = typeIdentifier => typeof typeIdentifier === "string" && typeIdentifier.startsWith("HKQuantityTypeIdentifier");
|
|
5
|
+
const isCorrelationIdentifier = typeIdentifier => typeof typeIdentifier === "string" && typeIdentifier.startsWith("HKCorrelationTypeIdentifier");
|
|
6
|
+
const unsupportedHealthKitTypeReason = typeIdentifier => {
|
|
7
|
+
switch (typeIdentifier) {
|
|
8
|
+
case "HKActivitySummaryTypeIdentifier":
|
|
9
|
+
return "The pinned HealthKit wrapper does not expose an activity-summary query.";
|
|
10
|
+
case "HKAudiogramSampleType":
|
|
11
|
+
return "The pinned HealthKit wrapper does not expose an audiogram query/serializer.";
|
|
12
|
+
case "HKWorkoutRouteTypeIdentifier":
|
|
13
|
+
return "The wrapper can read routes only when given a workout UUID; it does not expose a route sample query.";
|
|
14
|
+
default:
|
|
15
|
+
return "The pinned HealthKit wrapper does not expose a compatible read query for this type.";
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
class UnsupportedHealthKitDataError extends Error {
|
|
19
|
+
constructor(typeIdentifier, reason) {
|
|
20
|
+
super(`Cannot import ${typeIdentifier}: ${reason}`);
|
|
21
|
+
this.typeIdentifier = typeIdentifier;
|
|
22
|
+
this.name = "UnsupportedHealthKitDataError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export { isCategoryIdentifier, isCorrelationIdentifier, isQuantityIdentifier, UnsupportedHealthKitDataError, unsupportedHealthKitTypeReason };
|
|
26
|
+
//# sourceMappingURL=healthkit-data-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isCategoryIdentifier","typeIdentifier","startsWith","isQuantityIdentifier","isCorrelationIdentifier","unsupportedHealthKitTypeReason","UnsupportedHealthKitDataError","Error","constructor","reason","name"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/healthkit-data-types.ts"],"mappings":";;AAOA,MAAMA,oBAAoB,GACxBC,cAAsC,IAEtC,OAAOA,cAAc,KAAK,QAAQ,IAClCA,cAAc,CAACC,UAAU,CAAC,0BAA0B,CAAC;AAEvD,MAAMC,oBAAoB,GACxBF,cAAsC,IAEtC,OAAOA,cAAc,KAAK,QAAQ,IAClCA,cAAc,CAACC,UAAU,CAAC,0BAA0B,CAAC;AAEvD,MAAME,uBAAuB,GAC3BH,cAAsC,IAEtC,OAAOA,cAAc,KAAK,QAAQ,IAClCA,cAAc,CAACC,UAAU,CAAC,6BAA6B,CAAC;AAE1D,MAAMG,8BAA8B,GAClCJ,cAAsC,IAC3B;EACX,QAAQA,cAAc;IACpB,KAAK,iCAAiC;MACpC,OAAO,yEAAyE;IAClF,KAAK,uBAAuB;MAC1B,OAAO,6EAA6E;IACtF,KAAK,8BAA8B;MACjC,OAAO,sGAAsG;IAC/G;MACE,OAAO,qFAAqF;EAChG;AACF,CAAC;AAED,MAAMK,6BAA6B,SAASC,KAAK,CAAC;EAChDC,WAAWA,CACAP,cAAsB,EAC/BQ,MAAc,EACd;IACA,KAAK,CAAC,iBAAiBR,cAAc,KAAKQ,MAAM,EAAE,CAAC;IAAC,KAH3CR,cAAsB,GAAtBA,cAAsB;IAI/B,IAAI,CAACS,IAAI,GAAG,+BAA+B;EAC7C;AACF;AAEA,SACEV,oBAAoB,EACpBI,uBAAuB,EACvBD,oBAAoB,EACpBG,6BAA6B,EAC7BD,8BAA8B","ignoreList":[]}
|