@ovok/native 1.6.2 → 1.6.3
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/background-sync/android-background-sync.js.map +1 -1
- package/lib/commonjs/modules/background-sync/android-bluetooth-foreground-service.js +12 -1
- package/lib/commonjs/modules/background-sync/android-bluetooth-foreground-service.js.map +1 -1
- package/lib/commonjs/modules/bt-management/components/android-bluetooth-foreground-service.js +12 -1
- package/lib/commonjs/modules/bt-management/components/android-bluetooth-foreground-service.js.map +1 -1
- package/lib/commonjs/modules/bt-management/components/bluetooth-device-picker.js +108 -39
- package/lib/commonjs/modules/bt-management/components/bluetooth-device-picker.js.map +1 -1
- package/lib/commonjs/modules/bt-management/constants/measurement-field-catalog.js +15 -7
- package/lib/commonjs/modules/bt-management/constants/measurement-field-catalog.js.map +1 -1
- package/lib/commonjs/modules/data-sync/components/android/android-health-sync.js.map +1 -1
- package/lib/commonjs/modules/data-sync/components/apple/apple-health-sync.js.map +1 -1
- package/lib/commonjs/modules/data-sync/index.js +11 -0
- package/lib/commonjs/modules/data-sync/index.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/android-health-sync-service.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/apple-health-sync-service.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js +1 -1
- 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 +40 -5
- package/lib/commonjs/modules/data-sync/services/managers/data-processor.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/managers/sync-progress-manager.js.map +1 -1
- package/lib/commonjs/modules/data-sync/types/get-data-from-provider-props.js +4 -0
- package/lib/commonjs/modules/data-sync/types/get-total-count-props.js +4 -0
- package/lib/commonjs/modules/data-sync/types/health-data.js +12 -0
- package/lib/commonjs/modules/data-sync/types/health-data.js.map +1 -0
- package/lib/commonjs/modules/data-sync/types/health-sync-keys.js +39 -0
- package/lib/commonjs/modules/data-sync/types/health-sync-keys.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/convert-generic-health-data.js +232 -0
- package/lib/commonjs/modules/data-sync/utils/convert-generic-health-data.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/convert-records-to-observation.js +27 -10
- package/lib/commonjs/modules/data-sync/utils/convert-records-to-observation.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/convert-samples-to-observation.js +22 -6
- package/lib/commonjs/modules/data-sync/utils/convert-samples-to-observation.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-latest-observation-dates-by-code.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-records-from-health-connect.js +90 -14
- 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 +100 -14
- 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 +12 -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 +21 -17
- package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
- package/lib/commonjs/modules/ui/components/urine-test-result.js +6 -4
- package/lib/commonjs/modules/ui/components/urine-test-result.js.map +1 -1
- package/lib/module/modules/background-sync/android-background-sync.js.map +1 -1
- package/lib/module/modules/background-sync/android-bluetooth-foreground-service.js +12 -1
- package/lib/module/modules/background-sync/android-bluetooth-foreground-service.js.map +1 -1
- package/lib/module/modules/bt-management/components/android-bluetooth-foreground-service.js +12 -1
- package/lib/module/modules/bt-management/components/android-bluetooth-foreground-service.js.map +1 -1
- package/lib/module/modules/bt-management/components/bluetooth-device-picker.js +109 -41
- package/lib/module/modules/bt-management/components/bluetooth-device-picker.js.map +1 -1
- package/lib/module/modules/bt-management/constants/measurement-field-catalog.js +15 -7
- package/lib/module/modules/bt-management/constants/measurement-field-catalog.js.map +1 -1
- package/lib/module/modules/data-sync/components/android/android-health-sync.js.map +1 -1
- package/lib/module/modules/data-sync/components/apple/apple-health-sync.js.map +1 -1
- 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/android-health-sync-service.js.map +1 -1
- package/lib/module/modules/data-sync/services/apple-health-sync-service.js.map +1 -1
- package/lib/module/modules/data-sync/services/base-health-sync-service.js +1 -1
- 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 +40 -5
- package/lib/module/modules/data-sync/services/managers/data-processor.js.map +1 -1
- package/lib/module/modules/data-sync/services/managers/sync-progress-manager.js.map +1 -1
- package/lib/module/modules/data-sync/types/get-data-from-provider-props.js +2 -0
- package/lib/module/modules/data-sync/types/get-total-count-props.js +2 -0
- package/lib/module/modules/data-sync/types/health-data.js +7 -0
- package/lib/module/modules/data-sync/types/health-data.js.map +1 -0
- package/lib/module/modules/data-sync/types/health-sync-keys.js +38 -1
- package/lib/module/modules/data-sync/types/health-sync-keys.js.map +1 -1
- package/lib/module/modules/data-sync/utils/convert-generic-health-data.js +227 -0
- package/lib/module/modules/data-sync/utils/convert-generic-health-data.js.map +1 -0
- package/lib/module/modules/data-sync/utils/convert-records-to-observation.js +28 -11
- package/lib/module/modules/data-sync/utils/convert-records-to-observation.js.map +1 -1
- package/lib/module/modules/data-sync/utils/convert-samples-to-observation.js +23 -7
- package/lib/module/modules/data-sync/utils/convert-samples-to-observation.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-latest-observation-dates-by-code.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-records-from-health-connect.js +92 -16
- 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 +100 -14
- 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 +12 -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 +20 -16
- package/lib/module/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
- package/lib/module/modules/ui/components/urine-test-result.js +6 -4
- package/lib/module/modules/ui/components/urine-test-result.js.map +1 -1
- package/lib/typescript/commonjs/src/modules/background-sync/android-background-sync.d.ts +3 -2
- package/lib/typescript/commonjs/src/modules/background-sync/android-background-sync.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/background-sync/android-bluetooth-foreground-service.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/components/android-bluetooth-foreground-service.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/components/bluetooth-device-picker.d.ts +13 -4
- package/lib/typescript/commonjs/src/modules/bt-management/components/bluetooth-device-picker.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/constants/measurement-field-catalog.d.ts +4 -0
- package/lib/typescript/commonjs/src/modules/bt-management/constants/measurement-field-catalog.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/components/android/android-health-sync.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/components/apple/apple-health-sync.d.ts.map +1 -1
- 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/android-health-sync-service.d.ts +4 -4
- package/lib/typescript/commonjs/src/modules/data-sync/services/android-health-sync-service.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/apple-health-sync-service.d.ts +5 -5
- package/lib/typescript/commonjs/src/modules/data-sync/services/apple-health-sync-service.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/base-health-sync-service.d.ts +1 -3
- 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 +7 -9
- 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/sync-progress-manager.d.ts +6 -6
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/sync-progress-manager.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-sync-props.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-sync-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/convert-data-props.d.ts +6 -2
- 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/get-data-from-provider-props.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/data-sync/types/get-data-from-provider-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/get-total-count-props.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/data-sync/types/get-total-count-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-authorization-status.d.ts +3 -3
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-authorization-status.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-data.d.ts +14 -0
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-data.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-keys.d.ts +19 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-keys.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-props.d.ts +7 -5
- 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/types/sync-progress.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/types/sync-progress.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-generic-health-data.d.ts +9 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-generic-health-data.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-records-to-observation.d.ts +1 -2
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-records-to-observation.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-samples-to-observation.d.ts +1 -2
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-samples-to-observation.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-latest-observation-dates-by-code.d.ts +3 -3
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-latest-observation-dates-by-code.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-latest-valid-start-date.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-latest-valid-start-date.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-records-from-health-connect.d.ts +6 -8
- 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 +20 -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 +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 +3 -8
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/ui/components/urine-test-result.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/background-sync/android-background-sync.d.ts +3 -2
- package/lib/typescript/module/src/modules/background-sync/android-background-sync.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/background-sync/android-bluetooth-foreground-service.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/components/android-bluetooth-foreground-service.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/components/bluetooth-device-picker.d.ts +13 -4
- package/lib/typescript/module/src/modules/bt-management/components/bluetooth-device-picker.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/constants/measurement-field-catalog.d.ts +4 -0
- package/lib/typescript/module/src/modules/bt-management/constants/measurement-field-catalog.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/components/android/android-health-sync.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/components/apple/apple-health-sync.d.ts.map +1 -1
- 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/android-health-sync-service.d.ts +4 -4
- package/lib/typescript/module/src/modules/data-sync/services/android-health-sync-service.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/services/apple-health-sync-service.d.ts +5 -5
- package/lib/typescript/module/src/modules/data-sync/services/apple-health-sync-service.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/services/base-health-sync-service.d.ts +1 -3
- 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 +7 -9
- 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/sync-progress-manager.d.ts +6 -6
- package/lib/typescript/module/src/modules/data-sync/services/managers/sync-progress-manager.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-sync-props.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-sync-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/convert-data-props.d.ts +6 -2
- 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/get-data-from-provider-props.d.ts +2 -0
- package/lib/typescript/module/src/modules/data-sync/types/get-data-from-provider-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/get-total-count-props.d.ts +2 -0
- package/lib/typescript/module/src/modules/data-sync/types/get-total-count-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-authorization-status.d.ts +3 -3
- package/lib/typescript/module/src/modules/data-sync/types/health-authorization-status.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-data.d.ts +14 -0
- package/lib/typescript/module/src/modules/data-sync/types/health-data.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/types/health-sync-keys.d.ts +19 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-sync-keys.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-sync-props.d.ts +7 -5
- 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/types/sync-progress.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/types/sync-progress.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/convert-generic-health-data.d.ts +9 -0
- package/lib/typescript/module/src/modules/data-sync/utils/convert-generic-health-data.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/convert-records-to-observation.d.ts +1 -2
- package/lib/typescript/module/src/modules/data-sync/utils/convert-records-to-observation.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/convert-samples-to-observation.d.ts +1 -2
- package/lib/typescript/module/src/modules/data-sync/utils/convert-samples-to-observation.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-latest-observation-dates-by-code.d.ts +3 -3
- package/lib/typescript/module/src/modules/data-sync/utils/get-latest-observation-dates-by-code.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-latest-valid-start-date.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/utils/get-latest-valid-start-date.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-records-from-health-connect.d.ts +6 -8
- 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 +20 -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 +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 +3 -8
- package/lib/typescript/module/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/ui/components/urine-test-result.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { MeasurementTypeKey } from "@ovok/core";
|
|
4
|
+
/** Health data that is not represented by a core measurement service. */
|
|
5
|
+
var HealthDataType = /*#__PURE__*/function (HealthDataType) {
|
|
6
|
+
HealthDataType["height"] = "height";
|
|
7
|
+
HealthDataType["bodyFatPercentage"] = "body-fat-percentage";
|
|
8
|
+
HealthDataType["bodyMassIndex"] = "body-mass-index";
|
|
9
|
+
HealthDataType["leanBodyMass"] = "lean-body-mass";
|
|
10
|
+
HealthDataType["distance"] = "distance";
|
|
11
|
+
HealthDataType["activeEnergy"] = "active-energy";
|
|
12
|
+
HealthDataType["flightsClimbed"] = "flights-climbed";
|
|
13
|
+
HealthDataType["exerciseMinutes"] = "exercise-minutes";
|
|
14
|
+
HealthDataType["heartRateSummary"] = "heart-rate-summary";
|
|
15
|
+
HealthDataType["sleep"] = "sleep";
|
|
16
|
+
HealthDataType["workout"] = "workout";
|
|
17
|
+
return HealthDataType;
|
|
18
|
+
}(HealthDataType || {});
|
|
19
|
+
const getHealthDataMode = (key, configuredMode) => {
|
|
20
|
+
if (configuredMode) {
|
|
21
|
+
return configuredMode;
|
|
22
|
+
}
|
|
23
|
+
switch (key) {
|
|
24
|
+
case MeasurementTypeKey.stepCount:
|
|
25
|
+
case HealthDataType.distance:
|
|
26
|
+
case HealthDataType.activeEnergy:
|
|
27
|
+
case HealthDataType.flightsClimbed:
|
|
28
|
+
case HealthDataType.exerciseMinutes:
|
|
29
|
+
return "daily-total";
|
|
30
|
+
case MeasurementTypeKey.heartRate:
|
|
31
|
+
case HealthDataType.heartRateSummary:
|
|
32
|
+
return "daily-summary";
|
|
33
|
+
case HealthDataType.sleep:
|
|
34
|
+
case HealthDataType.workout:
|
|
35
|
+
return "session";
|
|
36
|
+
default:
|
|
37
|
+
return "point";
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
export { HealthDataType, getHealthDataMode };
|
|
4
41
|
//# sourceMappingURL=health-sync-keys.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../../../src","sources":["modules/data-sync/types/health-sync-keys.ts"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","HealthDataType","getHealthDataMode","key","configuredMode","stepCount","distance","activeEnergy","flightsClimbed","exerciseMinutes","heartRate","heartRateSummary","sleep","workout"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/types/health-sync-keys.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,YAAY;AAO/C;AAAA,IACKC,cAAc,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA,EAAdA,cAAc;AAsBnB,MAAMC,iBAAiB,GAAGA,CACxBC,GAAkB,EAClBC,cAA+B,KACZ;EACnB,IAAIA,cAAc,EAAE;IAClB,OAAOA,cAAc;EACvB;EAEA,QAAQD,GAAG;IACT,KAAKH,kBAAkB,CAACK,SAAS;IACjC,KAAKJ,cAAc,CAACK,QAAQ;IAC5B,KAAKL,cAAc,CAACM,YAAY;IAChC,KAAKN,cAAc,CAACO,cAAc;IAClC,KAAKP,cAAc,CAACQ,eAAe;MACjC,OAAO,aAAa;IACtB,KAAKT,kBAAkB,CAACU,SAAS;IACjC,KAAKT,cAAc,CAACU,gBAAgB;MAClC,OAAO,eAAe;IACxB,KAAKV,cAAc,CAACW,KAAK;IACzB,KAAKX,cAAc,CAACY,OAAO;MACzB,OAAO,SAAS;IAClB;MACE,OAAO,OAAO;EAClB;AACF,CAAC;AAED,SACEZ,cAAc,EACdC,iBAAiB","ignoreList":[]}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* eslint-disable max-lines */
|
|
4
|
+
|
|
5
|
+
import { isAggregatedHealthData } from "../types/health-data.js";
|
|
6
|
+
import { getHealthObservationDevice } from "./health-observation-device.js";
|
|
7
|
+
const FHIR_UNIT_SYSTEM = "http://unitsofmeasure.org";
|
|
8
|
+
const LOINC_SYSTEM = "http://loinc.org";
|
|
9
|
+
export const convertGenericHealthDataToObservation = async ({
|
|
10
|
+
data,
|
|
11
|
+
patientId,
|
|
12
|
+
mode,
|
|
13
|
+
typeIdentifier: configuredTypeIdentifier,
|
|
14
|
+
typeIdentifierCodes
|
|
15
|
+
}) => {
|
|
16
|
+
const first = data[0];
|
|
17
|
+
if (!first) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
const value = first;
|
|
21
|
+
const typeIdentifier = String(configuredTypeIdentifier ?? value.typeIdentifier ?? value.quantityType ?? value.categoryType ?? value.recordType ?? "health-data");
|
|
22
|
+
const code = typeIdentifierCodes?.[typeIdentifier] ?? typeIdentifier;
|
|
23
|
+
const interval = getInterval(data);
|
|
24
|
+
const measurement = getMeasurement(first, mode, interval);
|
|
25
|
+
if (!measurement || !patientId) {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
const metadata = getMetadata(first);
|
|
29
|
+
const device = getHealthObservationDevice(metadata);
|
|
30
|
+
const observationDate = interval?.start ?? getDate(first);
|
|
31
|
+
const observation = {
|
|
32
|
+
resourceType: "Observation",
|
|
33
|
+
id: getStableObservationId({
|
|
34
|
+
typeIdentifier,
|
|
35
|
+
code,
|
|
36
|
+
interval,
|
|
37
|
+
date: observationDate,
|
|
38
|
+
measurement
|
|
39
|
+
}),
|
|
40
|
+
status: "registered",
|
|
41
|
+
subject: {
|
|
42
|
+
reference: `Patient/${patientId}`
|
|
43
|
+
},
|
|
44
|
+
code: {
|
|
45
|
+
coding: [{
|
|
46
|
+
system: LOINC_SYSTEM,
|
|
47
|
+
code
|
|
48
|
+
}]
|
|
49
|
+
},
|
|
50
|
+
...(device ? {
|
|
51
|
+
device
|
|
52
|
+
} : {}),
|
|
53
|
+
...(interval ? {
|
|
54
|
+
effectivePeriod: {
|
|
55
|
+
start: interval.start.toISOString(),
|
|
56
|
+
end: interval.end.toISOString()
|
|
57
|
+
}
|
|
58
|
+
} : observationDate ? {
|
|
59
|
+
effectiveDateTime: observationDate.toISOString()
|
|
60
|
+
} : {}),
|
|
61
|
+
...measurement
|
|
62
|
+
};
|
|
63
|
+
if (mode === "daily-summary" && isAggregatedHealthData(first)) {
|
|
64
|
+
observation.component = [...(first.minimum === undefined ? [] : [component("Minimum", first.minimum, first.unit)]), ...(first.maximum === undefined ? [] : [component("Maximum", first.maximum, first.unit)])];
|
|
65
|
+
}
|
|
66
|
+
const stageComponents = getSleepStageComponents(data);
|
|
67
|
+
if (stageComponents.length > 0) {
|
|
68
|
+
observation.component = [...(observation.component ?? []), ...stageComponents];
|
|
69
|
+
}
|
|
70
|
+
return [observation];
|
|
71
|
+
};
|
|
72
|
+
const getMeasurement = (value, mode, interval) => {
|
|
73
|
+
const raw = value;
|
|
74
|
+
if (isAggregatedHealthData(value)) {
|
|
75
|
+
const number = value.kind === "daily-summary" ? value.average : value.value;
|
|
76
|
+
return number === undefined ? undefined : {
|
|
77
|
+
valueQuantity: quantity(number, value.unit)
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
if (mode === "session" && interval) {
|
|
81
|
+
return {
|
|
82
|
+
valueQuantity: quantity((interval.end.getTime() - interval.start.getTime()) / 60000, "min")
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const extracted = extractValue(raw);
|
|
86
|
+
return extracted ? {
|
|
87
|
+
valueQuantity: quantity(extracted.value, extracted.unit)
|
|
88
|
+
} : undefined;
|
|
89
|
+
};
|
|
90
|
+
const extractValue = raw => {
|
|
91
|
+
if (typeof raw.quantity === "number") {
|
|
92
|
+
return {
|
|
93
|
+
value: raw.quantity,
|
|
94
|
+
unit: String(raw.unit ?? "1")
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const candidates = [["height", "inMeters", "m"], ["bodyFat", "percentage", "%"], ["mass", "inKilograms", "kg"], ["weight", "inKilograms", "kg"], ["distance", "inMeters", "m"], ["energy", "inKilocalories", "kcal"]];
|
|
98
|
+
for (const [containerKey, valueKey, fallbackUnit] of candidates) {
|
|
99
|
+
const container = raw[containerKey];
|
|
100
|
+
if (typeof container?.[valueKey] === "number") {
|
|
101
|
+
return {
|
|
102
|
+
value: container[valueKey],
|
|
103
|
+
unit: normalizeUnit(String(container.unit ?? fallbackUnit))
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const alternateCandidates = [["height", "value", "m"], ["mass", "value", "kg"], ["weight", "value", "kg"], ["distance", "value", "m"], ["energy", "value", "kcal"]];
|
|
108
|
+
for (const [containerKey, valueKey, fallbackUnit] of alternateCandidates) {
|
|
109
|
+
const container = raw[containerKey];
|
|
110
|
+
if (typeof container?.[valueKey] === "number") {
|
|
111
|
+
return {
|
|
112
|
+
value: container[valueKey],
|
|
113
|
+
unit: normalizeUnit(String(container.unit ?? fallbackUnit))
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const scalarCandidates = [["count", "count"], ["floors", "count"], ["rate", "count/min"], ["beatsPerMinute", "count/min"], ["percentage", "%"], ["vo2MillilitersPerMinuteKilogram", "mL/kg/min"]];
|
|
118
|
+
for (const [key, unit] of scalarCandidates) {
|
|
119
|
+
if (typeof raw[key] === "number") {
|
|
120
|
+
return {
|
|
121
|
+
value: raw[key],
|
|
122
|
+
unit
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return undefined;
|
|
127
|
+
};
|
|
128
|
+
const getInterval = data => {
|
|
129
|
+
const intervals = data.map(item => {
|
|
130
|
+
const raw = item;
|
|
131
|
+
const startValue = raw.startDate ?? raw.startTime ?? 0;
|
|
132
|
+
const start = new Date(startValue);
|
|
133
|
+
const endValue = raw.endDate ?? raw.endTime ?? start;
|
|
134
|
+
const end = new Date(endValue);
|
|
135
|
+
return Number.isNaN(start.getTime()) || Number.isNaN(end.getTime()) ? undefined : {
|
|
136
|
+
start,
|
|
137
|
+
end
|
|
138
|
+
};
|
|
139
|
+
}).filter(Boolean);
|
|
140
|
+
if (intervals.length === 0) {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
start: new Date(Math.min(...intervals.map(({
|
|
145
|
+
start
|
|
146
|
+
}) => start.getTime()))),
|
|
147
|
+
end: new Date(Math.max(...intervals.map(({
|
|
148
|
+
end
|
|
149
|
+
}) => end.getTime())))
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
const getDate = value => {
|
|
153
|
+
const raw = value;
|
|
154
|
+
const date = raw.endDate ?? raw.endTime ?? raw.startDate ?? raw.startTime ?? raw.time;
|
|
155
|
+
if (!date) {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
const parsed = new Date(date);
|
|
159
|
+
return Number.isNaN(parsed.getTime()) ? undefined : parsed;
|
|
160
|
+
};
|
|
161
|
+
const getMetadata = value => {
|
|
162
|
+
const raw = value;
|
|
163
|
+
const metadata = raw.metadata ?? {};
|
|
164
|
+
const sourceRevision = raw.sourceRevision;
|
|
165
|
+
const source = sourceRevision?.source;
|
|
166
|
+
const device = raw.device ?? metadata.device;
|
|
167
|
+
return {
|
|
168
|
+
manufacturer: String(device?.manufacturer ?? metadata.dataOrigin ?? "") || undefined,
|
|
169
|
+
model: typeof device?.model === "string" ? device.model : undefined,
|
|
170
|
+
sourceApp: String(source?.name ?? raw.sourceApp ?? metadata.dataOrigin ?? "") || undefined,
|
|
171
|
+
recordingMethod: typeof metadata.recordingMethod === "number" ? metadata.recordingMethod : undefined
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
const getSleepStageComponents = data => data.flatMap(item => {
|
|
175
|
+
const stages = item.stages ?? [];
|
|
176
|
+
if (stages.length === 0) {
|
|
177
|
+
const raw = item;
|
|
178
|
+
const start = raw.startDate ?? raw.startTime;
|
|
179
|
+
const end = raw.endDate ?? raw.endTime;
|
|
180
|
+
const duration = start && end ? (new Date(end).getTime() - new Date(start).getTime()) / 60000 : 0;
|
|
181
|
+
return Number.isFinite(duration) && duration > 0 && raw.value !== undefined ? [component(`Sleep stage ${String(raw.value)}`, duration, "min")] : [];
|
|
182
|
+
}
|
|
183
|
+
return stages.flatMap(stage => {
|
|
184
|
+
const raw = stage;
|
|
185
|
+
const start = new Date(raw.startTime);
|
|
186
|
+
const end = new Date(raw.endTime);
|
|
187
|
+
const duration = (end.getTime() - start.getTime()) / 60000;
|
|
188
|
+
return Number.isFinite(duration) && duration > 0 ? [component(`Sleep stage ${String(raw.stage)}`, duration, "min")] : [];
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
const component = (label, value, unit) => ({
|
|
192
|
+
code: {
|
|
193
|
+
text: label
|
|
194
|
+
},
|
|
195
|
+
valueQuantity: quantity(value, unit)
|
|
196
|
+
});
|
|
197
|
+
const quantity = (value, unit) => ({
|
|
198
|
+
value,
|
|
199
|
+
unit,
|
|
200
|
+
system: FHIR_UNIT_SYSTEM,
|
|
201
|
+
code: normalizeUnit(unit)
|
|
202
|
+
});
|
|
203
|
+
const normalizeUnit = unit => ({
|
|
204
|
+
kilometers: "km",
|
|
205
|
+
meters: "m",
|
|
206
|
+
miles: "mi",
|
|
207
|
+
kilograms: "kg",
|
|
208
|
+
grams: "g",
|
|
209
|
+
milligrams: "mg",
|
|
210
|
+
kilocalories: "kcal",
|
|
211
|
+
calories: "cal",
|
|
212
|
+
minutes: "min",
|
|
213
|
+
seconds: "s",
|
|
214
|
+
beatsPerMinute: "count/min"
|
|
215
|
+
})[unit] ?? unit;
|
|
216
|
+
const getStableObservationId = ({
|
|
217
|
+
typeIdentifier,
|
|
218
|
+
code,
|
|
219
|
+
interval,
|
|
220
|
+
date,
|
|
221
|
+
measurement
|
|
222
|
+
}) => {
|
|
223
|
+
const time = interval ? `${interval.start.toISOString()}-${interval.end.toISOString()}` : date?.toISOString() ?? "undated";
|
|
224
|
+
const value = measurement.valueQuantity?.value ?? "empty";
|
|
225
|
+
return `health-${[typeIdentifier, code, time, value].join("-").replace(/[^a-zA-Z0-9.-]/g, "-").slice(0, 64)}`;
|
|
226
|
+
};
|
|
227
|
+
//# sourceMappingURL=convert-generic-health-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isAggregatedHealthData","getHealthObservationDevice","FHIR_UNIT_SYSTEM","LOINC_SYSTEM","convertGenericHealthDataToObservation","data","patientId","mode","typeIdentifier","configuredTypeIdentifier","typeIdentifierCodes","first","value","String","quantityType","categoryType","recordType","code","interval","getInterval","measurement","getMeasurement","metadata","getMetadata","device","observationDate","start","getDate","observation","resourceType","id","getStableObservationId","date","status","subject","reference","coding","system","effectivePeriod","toISOString","end","effectiveDateTime","component","minimum","undefined","unit","maximum","stageComponents","getSleepStageComponents","length","raw","number","kind","average","valueQuantity","quantity","getTime","extracted","extractValue","candidates","containerKey","valueKey","fallbackUnit","container","normalizeUnit","alternateCandidates","scalarCandidates","key","intervals","map","item","startValue","startDate","startTime","Date","endValue","endDate","endTime","Number","isNaN","filter","Boolean","Math","min","max","time","parsed","sourceRevision","source","manufacturer","dataOrigin","model","sourceApp","name","recordingMethod","flatMap","stages","duration","isFinite","stage","label","text","kilometers","meters","miles","kilograms","grams","milligrams","kilocalories","calories","minutes","seconds","beatsPerMinute","join","replace","slice"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-generic-health-data.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,18 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { ObservationServiceCreator } from "@ovok/core";
|
|
3
|
+
import { MeasurementTypeKey, ObservationServiceCreator } from "@ovok/core";
|
|
4
|
+
import { convertGenericHealthDataToObservation } from "./convert-generic-health-data.js";
|
|
4
5
|
import { getHealthObservationDevice } from "./health-observation-device.js";
|
|
5
|
-
export const convertRecordsToObservation = async
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
export const convertRecordsToObservation = async props => {
|
|
7
|
+
const {
|
|
8
|
+
data,
|
|
9
|
+
client,
|
|
10
|
+
measurementTypeKey,
|
|
11
|
+
mode = "point"
|
|
12
|
+
} = props;
|
|
13
|
+
if (mode !== "point") {
|
|
14
|
+
return convertGenericHealthDataToObservation({
|
|
15
|
+
...props,
|
|
16
|
+
mode
|
|
17
|
+
});
|
|
18
|
+
}
|
|
10
19
|
const record = data[0];
|
|
11
20
|
if (!record) {
|
|
12
21
|
return [];
|
|
13
22
|
}
|
|
23
|
+
if (!isCoreMeasurementTypeKey(measurementTypeKey)) {
|
|
24
|
+
return convertGenericHealthDataToObservation({
|
|
25
|
+
...props,
|
|
26
|
+
mode
|
|
27
|
+
});
|
|
28
|
+
}
|
|
14
29
|
const service = ObservationServiceCreator.getInstance().getService(measurementTypeKey);
|
|
15
|
-
const
|
|
30
|
+
const typedRecord = record;
|
|
31
|
+
const measurement = service?.convertRecordToMeasurement?.(typedRecord);
|
|
16
32
|
if (!measurement) {
|
|
17
33
|
return [];
|
|
18
34
|
}
|
|
@@ -21,10 +37,10 @@ export const convertRecordsToObservation = async ({
|
|
|
21
37
|
});
|
|
22
38
|
const recordTime = getRecordTime(record);
|
|
23
39
|
const device = getHealthObservationDevice({
|
|
24
|
-
manufacturer:
|
|
25
|
-
model:
|
|
26
|
-
sourceApp:
|
|
27
|
-
recordingMethod:
|
|
40
|
+
manufacturer: typedRecord.metadata?.device?.manufacturer,
|
|
41
|
+
model: typedRecord.metadata?.device?.model,
|
|
42
|
+
sourceApp: typedRecord.metadata?.dataOrigin,
|
|
43
|
+
recordingMethod: typedRecord.metadata?.recordingMethod
|
|
28
44
|
});
|
|
29
45
|
return observationBody.map(observation => ({
|
|
30
46
|
...observation,
|
|
@@ -37,6 +53,7 @@ export const convertRecordsToObservation = async ({
|
|
|
37
53
|
effectiveDateTime: recordTime ?? observation.effectiveDateTime
|
|
38
54
|
}));
|
|
39
55
|
};
|
|
56
|
+
const isCoreMeasurementTypeKey = value => Object.values(MeasurementTypeKey).includes(value);
|
|
40
57
|
const getRecordTime = record => {
|
|
41
58
|
if ("time" in record) {
|
|
42
59
|
return record.time;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ObservationServiceCreator","getHealthObservationDevice","convertRecordsToObservation","data","client","measurementTypeKey","record","service","getInstance","getService","measurement","convertRecordToMeasurement","observationBody","generateObservationBodiesByMeasurement","recordTime","getRecordTime","device","manufacturer","metadata","model","sourceApp","dataOrigin","recordingMethod","map","observation","effectiveDateTime","time","endTime","startTime","undefined"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-records-to-observation.ts"],"mappings":";;AACA,SAASA,yBAAyB,QAAQ,YAAY;
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","ObservationServiceCreator","convertGenericHealthDataToObservation","getHealthObservationDevice","convertRecordsToObservation","props","data","client","measurementTypeKey","mode","record","isCoreMeasurementTypeKey","service","getInstance","getService","typedRecord","measurement","convertRecordToMeasurement","observationBody","generateObservationBodiesByMeasurement","recordTime","getRecordTime","device","manufacturer","metadata","model","sourceApp","dataOrigin","recordingMethod","map","observation","effectiveDateTime","value","Object","values","includes","time","endTime","startTime","undefined"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-records-to-observation.ts"],"mappings":";;AACA,SAASA,kBAAkB,EAAEC,yBAAyB,QAAQ,YAAY;AAK1E,SAASC,qCAAqC,QAAQ,kCAA+B;AACrF,SAASC,0BAA0B,QAAQ,gCAA6B;AAExE,OAAO,MAAMC,2BAA2B,GAAG,MACzCC,KAAgC,IACL;EAC3B,MAAM;IAAEC,IAAI;IAAEC,MAAM;IAAEC,kBAAkB;IAAEC,IAAI,GAAG;EAAQ,CAAC,GAAGJ,KAAK;EAElE,IAAII,IAAI,KAAK,OAAO,EAAE;IACpB,OAAOP,qCAAqC,CAAC;MAAE,GAAGG,KAAK;MAAEI;IAAK,CAAC,CAAC;EAClE;EAEA,MAAMC,MAAM,GAAGJ,IAAI,CAAC,CAAC,CAAC;EAEtB,IAAI,CAACI,MAAM,EAAE;IACX,OAAO,EAAE;EACX;EAEA,IAAI,CAACC,wBAAwB,CAACH,kBAAkB,CAAC,EAAE;IACjD,OAAON,qCAAqC,CAAC;MAAE,GAAGG,KAAK;MAAEI;IAAK,CAAC,CAAC;EAClE;EAEA,MAAMG,OAAO,GAAGX,yBAAyB,CAACY,WAAW,CAAC,CAAC,CAACC,UAAU,CAChEN,kBACF,CAAC;EAED,MAAMO,WAAW,GAAGL,MAAkC;EACtD,MAAMM,WAAW,GAAGJ,OAAO,EAAEK,0BAA0B,GAAGF,WAAW,CAAC;EAEtE,IAAI,CAACC,WAAW,EAAE;IAChB,OAAO,EAAE;EACX;EAEA,MAAME,eAAe,GAAG,MAAMX,MAAM,CAACY,sCAAsC,CAAC;IAC1EH;EACF,CAAC,CAAC;EAEF,MAAMI,UAAU,GAAGC,aAAa,CAACX,MAAkC,CAAC;EAEpE,MAAMY,MAAM,GAAGnB,0BAA0B,CAAC;IACxCoB,YAAY,EAAER,WAAW,CAACS,QAAQ,EAAEF,MAAM,EAAEC,YAAY;IACxDE,KAAK,EAAEV,WAAW,CAACS,QAAQ,EAAEF,MAAM,EAAEG,KAAK;IAC1CC,SAAS,EAAEX,WAAW,CAACS,QAAQ,EAAEG,UAAU;IAC3CC,eAAe,EAAEb,WAAW,CAACS,QAAQ,EAAEI;EACzC,CAAC,CAAC;EAEF,OAAOV,eAAe,CAACW,GAAG,CAAEC,WAAW,KAAM;IAC3C,GAAGA,WAAW;IACd,IAAIR,MAAM,GACN;MAAEA,MAAM,EAAE;QAAE,IAAIQ,WAAW,CAACR,MAAM,IAAI,CAAC,CAAC,CAAC;QAAE,GAAGA;MAAO;IAAE,CAAC,GACxD,CAAC,CAAC,CAAC;IACPS,iBAAiB,EAAEX,UAAU,IAAIU,WAAW,CAACC;EAC/C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAMpB,wBAAwB,GAC5BqB,KAAa,IAEbC,MAAM,CAACC,MAAM,CAAClC,kBAAkB,CAAC,CAACmC,QAAQ,CAACH,KAA2B,CAAC;AAEzE,MAAMX,aAAa,GACjBX,MAAgC,IACT;EACvB,IAAI,MAAM,IAAIA,MAAM,EAAE;IACpB,OAAOA,MAAM,CAAC0B,IAAI;EACpB;EAEA,IAAI,SAAS,IAAI1B,MAAM,EAAE;IACvB,OAAOA,MAAM,CAAC2B,OAAO;EACvB;EAEA,IAAI,WAAW,IAAI3B,MAAM,EAAE;IACzB,OAAOA,MAAM,CAAC4B,SAAS;EACzB;EAEA,OAAOC,SAAS;AAClB,CAAC","ignoreList":[]}
|
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { ObservationServiceCreator } from "@ovok/core";
|
|
3
|
+
import { MeasurementTypeKey, ObservationServiceCreator } from "@ovok/core";
|
|
4
|
+
import { convertGenericHealthDataToObservation } from "./convert-generic-health-data.js";
|
|
4
5
|
import { getHealthObservationDevice } from "./health-observation-device.js";
|
|
5
|
-
export const convertSamplesToObservation = async
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
export const convertSamplesToObservation = async props => {
|
|
7
|
+
const {
|
|
8
|
+
data,
|
|
9
|
+
client,
|
|
10
|
+
measurementTypeKey,
|
|
11
|
+
mode = "point"
|
|
12
|
+
} = props;
|
|
13
|
+
if (mode !== "point") {
|
|
14
|
+
return convertGenericHealthDataToObservation({
|
|
15
|
+
...props,
|
|
16
|
+
mode
|
|
17
|
+
});
|
|
18
|
+
}
|
|
10
19
|
if (data.length === 0) {
|
|
11
20
|
return [];
|
|
12
21
|
}
|
|
22
|
+
if (!isCoreMeasurementTypeKey(measurementTypeKey)) {
|
|
23
|
+
return convertGenericHealthDataToObservation({
|
|
24
|
+
...props,
|
|
25
|
+
mode
|
|
26
|
+
});
|
|
27
|
+
}
|
|
13
28
|
const service = ObservationServiceCreator.getInstance().getService(measurementTypeKey);
|
|
14
29
|
const measurement = service.convertSamplesToMeasurement(data);
|
|
15
30
|
if (!measurement) {
|
|
@@ -19,7 +34,7 @@ export const convertSamplesToObservation = async ({
|
|
|
19
34
|
measurement
|
|
20
35
|
});
|
|
21
36
|
return observationBody.map((observation, index) => {
|
|
22
|
-
const sample = data?.[index]
|
|
37
|
+
const sample = data?.[index];
|
|
23
38
|
const device = sample ? getHealthObservationDevice({
|
|
24
39
|
manufacturer: sample.device?.manufacturer,
|
|
25
40
|
model: sample.device?.model,
|
|
@@ -37,4 +52,5 @@ export const convertSamplesToObservation = async ({
|
|
|
37
52
|
};
|
|
38
53
|
});
|
|
39
54
|
};
|
|
55
|
+
const isCoreMeasurementTypeKey = value => Object.values(MeasurementTypeKey).includes(value);
|
|
40
56
|
//# sourceMappingURL=convert-samples-to-observation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ObservationServiceCreator","getHealthObservationDevice","convertSamplesToObservation","data","client","measurementTypeKey","length","service","getInstance","getService","measurement","convertSamplesToMeasurement","observationBody","generateObservationBodiesByMeasurement","map","observation","index","sample","device","manufacturer","model","sourceApp","sourceRevision","source","name","undefined","effectiveDateTime","endDate","toISOString","startDate"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-samples-to-observation.ts"],"mappings":";;AAKA,SAASA,yBAAyB,QAAgB,YAAY;
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","ObservationServiceCreator","convertGenericHealthDataToObservation","getHealthObservationDevice","convertSamplesToObservation","props","data","client","measurementTypeKey","mode","length","isCoreMeasurementTypeKey","service","getInstance","getService","measurement","convertSamplesToMeasurement","observationBody","generateObservationBodiesByMeasurement","map","observation","index","sample","device","manufacturer","model","sourceApp","sourceRevision","source","name","undefined","effectiveDateTime","endDate","toISOString","startDate","value","Object","values","includes"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-samples-to-observation.ts"],"mappings":";;AAKA,SAASA,kBAAkB,EAAEC,yBAAyB,QAAgB,YAAY;AAIlF,SAASC,qCAAqC,QAAQ,kCAA+B;AACrF,SAASC,0BAA0B,QAAQ,gCAA6B;AAExE,OAAO,MAAMC,2BAA2B,GAAG,MACzCC,KAAgC,IACL;EAC3B,MAAM;IAAEC,IAAI;IAAEC,MAAM;IAAEC,kBAAkB;IAAEC,IAAI,GAAG;EAAQ,CAAC,GAAGJ,KAAK;EAElE,IAAII,IAAI,KAAK,OAAO,EAAE;IACpB,OAAOP,qCAAqC,CAAC;MAAE,GAAGG,KAAK;MAAEI;IAAK,CAAC,CAAC;EAClE;EAEA,IAAIH,IAAI,CAACI,MAAM,KAAK,CAAC,EAAE;IACrB,OAAO,EAAE;EACX;EAEA,IAAI,CAACC,wBAAwB,CAACH,kBAAkB,CAAC,EAAE;IACjD,OAAON,qCAAqC,CAAC;MAAE,GAAGG,KAAK;MAAEI;IAAK,CAAC,CAAC;EAClE;EAEA,MAAMG,OAAO,GAAGX,yBAAyB,CAACY,WAAW,CAAC,CAAC,CAACC,UAAU,CAChEN,kBACF,CAAC;EAED,MAAMO,WAAW,GAAGH,OAAO,CAACI,2BAA2B,CACrDV,IACF,CAAC;EAED,IAAI,CAACS,WAAW,EAAE;IAChB,OAAO,EAAE;EACX;EAEA,MAAME,eAAe,GAAG,MAAMV,MAAM,CAACW,sCAAsC,CAAC;IAC1EH;EACF,CAAC,CAAC;EAEF,OAAOE,eAAe,CAACE,GAAG,CAAC,CAACC,WAAW,EAAEC,KAAK,KAAK;IACjD,MAAMC,MAAM,GAAGhB,IAAI,GAAGe,KAAK,CAA2D;IAEtF,MAAME,MAAM,GAAGD,MAAM,GACjBnB,0BAA0B,CAAC;MACzBqB,YAAY,EAAEF,MAAM,CAACC,MAAM,EAAEC,YAAY;MACzCC,KAAK,EAAEH,MAAM,CAACC,MAAM,EAAEE,KAAK;MAC3BC,SAAS,EAAEJ,MAAM,CAACK,cAAc,EAAEC,MAAM,EAAEC;IAC5C,CAAC,CAAC,GACFC,SAAS;IAEb,OAAO;MACL,GAAGV,WAAW;MACd,IAAIG,MAAM,GACN;QAAEA,MAAM,EAAE;UAAE,IAAIH,WAAW,CAACG,MAAM,IAAI,CAAC,CAAC,CAAC;UAAE,GAAGA;QAAO;MAAE,CAAC,GACxD,CAAC,CAAC,CAAC;MACPQ,iBAAiB,EACfT,MAAM,EAAEU,OAAO,EAAEC,WAAW,CAAC,CAAC,IAC9BX,MAAM,EAAEY,SAAS,EAAED,WAAW,CAAC,CAAC,IAChCb,WAAW,CAACW;IAChB,CAAC;EACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAMpB,wBAAwB,GAC5BwB,KAAa,IAEbC,MAAM,CAACC,MAAM,CAACrC,kBAAkB,CAAC,CAACsC,QAAQ,CAACH,KAA2B,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["generateObservationSearchEntry","code","patientId","provider","searchParams","URLSearchParams","set","encodeURIComponent","request","method","url","toString","getLatestObservationDatesByCode","codes","client","entries","map","bundle","executeBatch","resourceType","type","entry","idx","observationResource","resource","observation","date","effectivePeriod","end","effectiveDateTime"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/get-latest-observation-dates-by-code.ts"],"mappings":";;AAKA,MAAMA,8BAA8B,GAAGA,CACrCC,
|
|
1
|
+
{"version":3,"names":["generateObservationSearchEntry","code","patientId","provider","searchParams","URLSearchParams","set","encodeURIComponent","request","method","url","toString","getLatestObservationDatesByCode","codes","client","entries","map","bundle","executeBatch","resourceType","type","entry","idx","observationResource","resource","observation","date","effectivePeriod","end","effectiveDateTime"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/get-latest-observation-dates-by-code.ts"],"mappings":";;AAKA,MAAMA,8BAA8B,GAAGA,CACrCC,IAAY,EACZC,SAAiB,EACjBC,QAAgB,KACA;EAChB,MAAMC,YAAY,GAAG,IAAIC,eAAe,CAAC,CAAC;EAE1CD,YAAY,CAACE,GAAG,CAAC,MAAM,EAAEL,IAAI,CAAC;EAC9BG,YAAY,CAACE,GAAG,CACd,YAAY,EACZ,2EAA2EH,QAAQ,EACrF,CAAC;EACDC,YAAY,CAACE,GAAG,CAAC,SAAS,EAAE,WAAWC,kBAAkB,CAACL,SAAS,CAAC,EAAE,CAAC;EACvEE,YAAY,CAACE,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC;EAC1CF,YAAY,CAACE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;EAClCF,YAAY,CAACE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;EAE/B,OAAO;IACLE,OAAO,EAAE;MACPC,MAAM,EAAE,KAAK;MACbC,GAAG,EAAE,eAAeN,YAAY,CAACO,QAAQ,CAAC,CAAC;IAC7C;EACF,CAAC;AACH,CAAC;AASD,OAAO,MAAMC,+BAA+B,GAAG,MAAAA,CAAO;EACpDC,KAAK;EACLX,SAAS;EACTY,MAAM;EACNX;AACoC,CAAC,KAAK;EAC1C,MAAMY,OAAO,GAAGF,KAAK,CAACG,GAAG,CAAEf,IAAI,IAC7BD,8BAA8B,CAACC,IAAI,EAAEC,SAAS,EAAEC,QAAQ,CAC1D,CAAC;EAED,MAAMc,MAAM,GAAG,MAAMH,MAAM,CAACI,YAAY,CAAC;IACvCC,YAAY,EAAE,QAAQ;IACtBC,IAAI,EAAE,OAAO;IACbC,KAAK,EAAEN;EACT,CAAC,CAAC;EAEF,OAAO,CAACE,MAAM,CAACI,KAAK,IAAI,EAAE,EAAEL,GAAG,CAAC,CAACK,KAAK,EAAEC,GAAG,KAAK;IAC9C,MAAMC,mBAAmB,GAAGF,KAAK,CAACG,QAAkB;IAEpD,MAAMC,WAAW,GAAGF,mBAAmB,EAAEF,KAAK,GAAG,CAAC,CAAC,EAAEG,QAExC;IAEb,MAAME,IAAI,GACRD,WAAW,EAAEE,eAAe,EAAEC,GAAG,IAAIH,WAAW,EAAEI,iBAAiB;IAErE,OAAO;MACL5B,IAAI,EAAEY,KAAK,CAACS,GAAG,CAAC;MAChBI,IAAI,EAAEA;IACR,CAAC;EACH,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
|
|
@@ -1,31 +1,107 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { addSeconds, subDays } from "date-fns";
|
|
4
|
-
import { readRecords } from "react-native-health-connect";
|
|
3
|
+
import { addSeconds, startOfDay, subDays } from "date-fns";
|
|
4
|
+
import { aggregateGroupByPeriod, readRecords } from "react-native-health-connect";
|
|
5
5
|
export const getRecordsFromHealthConnect = async ({
|
|
6
|
-
startDate: _startDate,
|
|
7
6
|
typeIdentifier,
|
|
7
|
+
startDate: _startDate,
|
|
8
8
|
chunkSize = 5000,
|
|
9
|
-
anchor
|
|
9
|
+
anchor,
|
|
10
|
+
mode = "point"
|
|
10
11
|
}) => {
|
|
11
|
-
|
|
12
|
+
if (mode === "daily-total" || mode === "daily-summary") {
|
|
13
|
+
return getDailyAggregates(typeIdentifier, mode, _startDate);
|
|
14
|
+
}
|
|
15
|
+
const startDate = _startDate ? addSeconds(new Date(_startDate), 1).toISOString() : subDays(new Date(), 30).toISOString();
|
|
12
16
|
const endDate = new Date().toISOString();
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
timeRangeFilter,
|
|
17
|
+
const result = await readRecords(typeIdentifier, {
|
|
18
|
+
timeRangeFilter: {
|
|
19
|
+
operator: "between",
|
|
20
|
+
startTime: startDate,
|
|
21
|
+
endTime: endDate
|
|
22
|
+
},
|
|
20
23
|
pageSize: chunkSize,
|
|
21
|
-
pageToken
|
|
24
|
+
pageToken: anchor
|
|
22
25
|
});
|
|
23
26
|
return {
|
|
24
|
-
data:
|
|
25
|
-
anchor:
|
|
27
|
+
data: result.records,
|
|
28
|
+
anchor: result.pageToken ? {
|
|
26
29
|
typeIdentifier,
|
|
27
|
-
anchor:
|
|
30
|
+
anchor: result.pageToken
|
|
28
31
|
} : undefined
|
|
29
32
|
};
|
|
30
33
|
};
|
|
34
|
+
const getDailyAggregates = async (typeIdentifier, mode, _startDate) => {
|
|
35
|
+
const aggregateType = typeIdentifier;
|
|
36
|
+
const startDate = _startDate ? startOfDay(new Date(_startDate)) : startOfDay(subDays(new Date(), 30));
|
|
37
|
+
const today = startOfDay(new Date());
|
|
38
|
+
const groups = await aggregateGroupByPeriod({
|
|
39
|
+
recordType: aggregateType,
|
|
40
|
+
timeRangeFilter: {
|
|
41
|
+
operator: "between",
|
|
42
|
+
startTime: startDate.toISOString(),
|
|
43
|
+
endTime: today.toISOString()
|
|
44
|
+
},
|
|
45
|
+
timeRangeSlicer: {
|
|
46
|
+
period: "DAYS",
|
|
47
|
+
length: 1
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
const data = groups.flatMap(group => {
|
|
51
|
+
const end = new Date(group.endTime);
|
|
52
|
+
if (end > today) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
const result = group.result;
|
|
56
|
+
const measurement = aggregateMeasurement(typeIdentifier, result, mode);
|
|
57
|
+
if (!measurement) {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
const dataOrigins = result.dataOrigins;
|
|
61
|
+
return [{
|
|
62
|
+
kind: mode,
|
|
63
|
+
typeIdentifier,
|
|
64
|
+
startDate: new Date(group.startTime),
|
|
65
|
+
endDate: end,
|
|
66
|
+
sourceApp: dataOrigins?.[0],
|
|
67
|
+
...measurement
|
|
68
|
+
}];
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
data,
|
|
72
|
+
anchor: undefined
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
const aggregateMeasurement = (typeIdentifier, result, mode) => {
|
|
76
|
+
if (mode === "daily-summary" && typeIdentifier === "HeartRate") {
|
|
77
|
+
const average = numberValue(result.BPM_AVG);
|
|
78
|
+
return average === undefined ? undefined : {
|
|
79
|
+
unit: "count/min",
|
|
80
|
+
average,
|
|
81
|
+
minimum: numberValue(result.BPM_MIN),
|
|
82
|
+
maximum: numberValue(result.BPM_MAX)
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
switch (typeIdentifier) {
|
|
86
|
+
case "Steps":
|
|
87
|
+
return value(numberValue(result.COUNT_TOTAL), "count");
|
|
88
|
+
case "Distance":
|
|
89
|
+
return value(nestedNumber(result.DISTANCE, "inKilometers"), "km");
|
|
90
|
+
case "ActiveCaloriesBurned":
|
|
91
|
+
return value(nestedNumber(result.ACTIVE_CALORIES_TOTAL, "inKilocalories"), "kcal");
|
|
92
|
+
case "FloorsClimbed":
|
|
93
|
+
return value(numberValue(result.FLOORS_CLIMBED_TOTAL), "count");
|
|
94
|
+
case "ExerciseSession":
|
|
95
|
+
return value(scale(nestedNumber(result.EXERCISE_DURATION_TOTAL, "inSeconds"), 1 / 60), "min");
|
|
96
|
+
default:
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const value = (measurement, unit) => measurement === undefined ? undefined : {
|
|
101
|
+
unit,
|
|
102
|
+
value: measurement
|
|
103
|
+
};
|
|
104
|
+
const numberValue = value => typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
105
|
+
const nestedNumber = (value, key) => numberValue(value?.[key]);
|
|
106
|
+
const scale = (value, factor) => value === undefined ? undefined : value * factor;
|
|
31
107
|
//# sourceMappingURL=get-records-from-health-connect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["addSeconds","subDays","readRecords","getRecordsFromHealthConnect","
|
|
1
|
+
{"version":3,"names":["addSeconds","startOfDay","subDays","aggregateGroupByPeriod","readRecords","getRecordsFromHealthConnect","typeIdentifier","startDate","_startDate","chunkSize","anchor","mode","getDailyAggregates","Date","toISOString","endDate","result","timeRangeFilter","operator","startTime","endTime","pageSize","pageToken","data","records","undefined","aggregateType","today","groups","recordType","timeRangeSlicer","period","length","flatMap","group","end","measurement","aggregateMeasurement","dataOrigins","kind","sourceApp","average","numberValue","BPM_AVG","unit","minimum","BPM_MIN","maximum","BPM_MAX","value","COUNT_TOTAL","nestedNumber","DISTANCE","ACTIVE_CALORIES_TOTAL","FLOORS_CLIMBED_TOTAL","scale","EXERCISE_DURATION_TOTAL","Number","isFinite","key","factor"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/get-records-from-health-connect.ts"],"mappings":"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","ignoreList":[]}
|