@ovok/native 1.12.1 → 1.13.0

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.
Files changed (53) hide show
  1. package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js +7 -5
  2. package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js.map +1 -1
  3. package/lib/commonjs/modules/data-sync/services/managers/data-processor.js +4 -5
  4. package/lib/commonjs/modules/data-sync/services/managers/data-processor.js.map +1 -1
  5. package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js +12 -5
  6. package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js.map +1 -1
  7. package/lib/commonjs/modules/data-sync/types/health-sync-batch-error.js +18 -0
  8. package/lib/commonjs/modules/data-sync/types/health-sync-batch-error.js.map +1 -1
  9. package/lib/commonjs/modules/data-sync/utils/identify-imported-observations.js +70 -0
  10. package/lib/commonjs/modules/data-sync/utils/identify-imported-observations.js.map +1 -0
  11. package/lib/module/modules/data-sync/services/base-health-sync-service.js +7 -5
  12. package/lib/module/modules/data-sync/services/base-health-sync-service.js.map +1 -1
  13. package/lib/module/modules/data-sync/services/managers/data-processor.js +4 -5
  14. package/lib/module/modules/data-sync/services/managers/data-processor.js.map +1 -1
  15. package/lib/module/modules/data-sync/services/managers/storage-manager.js +12 -5
  16. package/lib/module/modules/data-sync/services/managers/storage-manager.js.map +1 -1
  17. package/lib/module/modules/data-sync/types/health-sync-batch-error.js +18 -0
  18. package/lib/module/modules/data-sync/types/health-sync-batch-error.js.map +1 -1
  19. package/lib/module/modules/data-sync/utils/identify-imported-observations.js +65 -0
  20. package/lib/module/modules/data-sync/utils/identify-imported-observations.js.map +1 -0
  21. package/lib/typescript/commonjs/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
  22. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts +2 -2
  23. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
  24. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts +7 -2
  25. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
  26. package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-batch-error.d.ts.map +1 -1
  27. package/lib/typescript/commonjs/src/modules/data-sync/utils/identify-imported-observations.d.ts +25 -0
  28. package/lib/typescript/commonjs/src/modules/data-sync/utils/identify-imported-observations.d.ts.map +1 -0
  29. package/lib/typescript/module/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
  30. package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts +2 -2
  31. package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
  32. package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts +7 -2
  33. package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
  34. package/lib/typescript/module/src/modules/data-sync/types/health-sync-batch-error.d.ts.map +1 -1
  35. package/lib/typescript/module/src/modules/data-sync/utils/identify-imported-observations.d.ts +25 -0
  36. package/lib/typescript/module/src/modules/data-sync/utils/identify-imported-observations.d.ts.map +1 -0
  37. package/package.json +3 -3
  38. package/lib/commonjs/modules/data-sync/utils/generate-observation-entry.js +0 -108
  39. package/lib/commonjs/modules/data-sync/utils/generate-observation-entry.js.map +0 -1
  40. package/lib/commonjs/modules/data-sync/utils/save-bundle-observations.js +0 -100
  41. package/lib/commonjs/modules/data-sync/utils/save-bundle-observations.js.map +0 -1
  42. package/lib/module/modules/data-sync/utils/generate-observation-entry.js +0 -103
  43. package/lib/module/modules/data-sync/utils/generate-observation-entry.js.map +0 -1
  44. package/lib/module/modules/data-sync/utils/save-bundle-observations.js +0 -95
  45. package/lib/module/modules/data-sync/utils/save-bundle-observations.js.map +0 -1
  46. package/lib/typescript/commonjs/src/modules/data-sync/utils/generate-observation-entry.d.ts +0 -21
  47. package/lib/typescript/commonjs/src/modules/data-sync/utils/generate-observation-entry.d.ts.map +0 -1
  48. package/lib/typescript/commonjs/src/modules/data-sync/utils/save-bundle-observations.d.ts +0 -11
  49. package/lib/typescript/commonjs/src/modules/data-sync/utils/save-bundle-observations.d.ts.map +0 -1
  50. package/lib/typescript/module/src/modules/data-sync/utils/generate-observation-entry.d.ts +0 -21
  51. package/lib/typescript/module/src/modules/data-sync/utils/generate-observation-entry.d.ts.map +0 -1
  52. package/lib/typescript/module/src/modules/data-sync/utils/save-bundle-observations.d.ts +0 -11
  53. package/lib/typescript/module/src/modules/data-sync/utils/save-bundle-observations.d.ts.map +0 -1
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ import { OBSERVATION_SYNC_ID_SYSTEM, OBSERVATION_SYNC_PROVIDER_SYSTEM } from "./fhir-systems.js";
4
+ import { getHealthRecordIdentifier } from "./get-health-record-sync-id.js";
5
+ import { isDailyAggregateMode } from "./is-daily-aggregate-mode.js";
6
+ const getObservationCode = observation => observation.code?.coding?.map(coding => `${coding.system ?? ""}|${coding.code ?? ""}`).join("~") || observation.code?.text || "unknown";
7
+ const getObservationTime = observation => {
8
+ if (observation.effectivePeriod) {
9
+ return `${observation.effectivePeriod.start ?? ""}:${observation.effectivePeriod.end ?? ""}`;
10
+ }
11
+ return observation.effectiveDateTime?.slice(0, 19) ?? "unknown";
12
+ };
13
+ const getStableObservationId = ({
14
+ observation,
15
+ provider,
16
+ sourceId,
17
+ bodyIndex
18
+ }) => observation.id && !sourceId ? `${provider}:${observation.id}` : [provider, sourceId ?? getObservationTime(observation), getObservationCode(observation), bodyIndex].join(":");
19
+ const syncIdentifier = value => ({
20
+ system: OBSERVATION_SYNC_ID_SYSTEM,
21
+ value
22
+ });
23
+
24
+ /**
25
+ * Names each imported observation for good: by its provider, by a sync id that stays the same when the source value
26
+ * changes, and by the record it came from. Core's `saveObservationGroups` finds an earlier import by the sync id, so a
27
+ * read of the same source again saves nothing new, or writes over a total that grew.
28
+ */
29
+ const identifyImportedObservations = ({
30
+ groupedObservationBodies,
31
+ provider,
32
+ groupedObservationSyncIds,
33
+ groupedRecordIds,
34
+ mode
35
+ }) => groupedObservationBodies.map((observationBodies, groupIndex) => {
36
+ const recordId = groupedRecordIds?.[groupIndex];
37
+ return observationBodies.map((observationBody, bodyIndex) => {
38
+ const syncId = getStableObservationId({
39
+ observation: observationBody,
40
+ provider,
41
+ sourceId: groupedObservationSyncIds?.[groupIndex],
42
+ bodyIndex
43
+ });
44
+
45
+ // A day's total saved before sync ids named their source carries its old id; naming the total by that id as
46
+ // well is what lets the save find it and write over it.
47
+ const legacySyncId = isDailyAggregateMode(mode) && observationBody.id ? `${provider}:${observationBody.id}` : undefined;
48
+ return {
49
+ ...observationBody,
50
+ identifier: [...(observationBody.identifier || []), {
51
+ system: OBSERVATION_SYNC_PROVIDER_SYSTEM,
52
+ value: provider
53
+ }, syncIdentifier(syncId), ...(legacySyncId && legacySyncId !== syncId ? [syncIdentifier(legacySyncId)] : []), ...(recordId ? [getHealthRecordIdentifier(provider, recordId)] : [])],
54
+ device: {
55
+ ...(observationBody.device ?? {}),
56
+ identifier: {
57
+ system: OBSERVATION_SYNC_PROVIDER_SYSTEM,
58
+ value: provider
59
+ }
60
+ }
61
+ };
62
+ });
63
+ });
64
+ export { getStableObservationId, identifyImportedObservations };
65
+ //# sourceMappingURL=identify-imported-observations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["OBSERVATION_SYNC_ID_SYSTEM","OBSERVATION_SYNC_PROVIDER_SYSTEM","getHealthRecordIdentifier","isDailyAggregateMode","getObservationCode","observation","code","coding","map","system","join","text","getObservationTime","effectivePeriod","start","end","effectiveDateTime","slice","getStableObservationId","provider","sourceId","bodyIndex","id","syncIdentifier","value","identifyImportedObservations","groupedObservationBodies","groupedObservationSyncIds","groupedRecordIds","mode","observationBodies","groupIndex","recordId","observationBody","syncId","legacySyncId","undefined","identifier","device"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/identify-imported-observations.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"base-health-sync-service.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/data-sync/services/base-health-sync-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AASjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,CAAC,eAAe,SAAS,MAAM,EAAE,iBAAiB,IAAI;IACjF,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,OAAO,EAAE,CACP,KAAK,EAAE,wBAAwB,CAAC,eAAe,CAAC,KAC7C,OAAO,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACjF,CAAC;AAEF,8BAAsB,qBAAqB,CACzC,WAAW,SACT,sBAAsB,CAAC,YAAY,CAAC,GAAG,oBAAoB,CAAC,YAAY,CAAC,EAC3E,eAAe,SAAS,MAAM,EAC9B,iBAAiB,GAAG,OAAO;IAkBzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IAErD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAI5B;gBAGA,KAAK,EAAE,gBAAgB,CAAC,WAAW,CAAC,EACnB,OAAO,EAAE,iBAAiB,CAAC,eAAe,EAAE,iBAAiB,CAAC;IAyBjF,2EAA2E;IAC9D,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YAQzB,OAAO;IA6BR,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAKjD,cAAc;YAUd,oBAAoB;YA0BpB,mBAAmB;YAqBnB,cAAc;IAsH5B,OAAO,CAAC,yBAAyB;CAGlC"}
1
+ {"version":3,"file":"base-health-sync-service.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/data-sync/services/base-health-sync-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AASjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,CAAC,eAAe,SAAS,MAAM,EAAE,iBAAiB,IAAI;IACjF,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,OAAO,EAAE,CACP,KAAK,EAAE,wBAAwB,CAAC,eAAe,CAAC,KAC7C,OAAO,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACjF,CAAC;AAEF,8BAAsB,qBAAqB,CACzC,WAAW,SACT,sBAAsB,CAAC,YAAY,CAAC,GAAG,oBAAoB,CAAC,YAAY,CAAC,EAC3E,eAAe,SAAS,MAAM,EAC9B,iBAAiB,GAAG,OAAO;IAkBzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IAErD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAI5B;gBAGA,KAAK,EAAE,gBAAgB,CAAC,WAAW,CAAC,EACnB,OAAO,EAAE,iBAAiB,CAAC,eAAe,EAAE,iBAAiB,CAAC;IAyBjF,2EAA2E;IAC9D,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YAQzB,OAAO;IA6BR,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAKjD,cAAc;YAUd,oBAAoB;YA0BpB,mBAAmB;YAqBnB,cAAc;IA0H5B,OAAO,CAAC,yBAAyB;CAGlC"}
@@ -8,8 +8,8 @@ import { GetDataFromProviderProps } from "../../types/get-data-from-provider-pro
8
8
  import { GetTotalCountProps } from "../../types/get-total-count-props";
9
9
  import { HealthProvider } from "../../types/health-provider";
10
10
  import { HealthSyncKey } from "../../types/health-sync-keys";
11
- import { generateObservationEntry } from "../../utils/generate-observation-entry";
12
11
  import { getLatestValidStartDate } from "../../utils/get-latest-valid-start-date";
12
+ import { identifyImportedObservations } from "../../utils/identify-imported-observations";
13
13
  import { StorageManager } from "./storage-manager";
14
14
  export declare class DataProcessor<TDataToSync extends AndroidHealthSyncProps["dataToSync"] | AppleHealthSyncProps["dataToSync"], TTypeIdentifier extends string, TDataFromProvider> {
15
15
  private client;
@@ -38,7 +38,7 @@ export declare class DataProcessor<TDataToSync extends AndroidHealthSyncProps["d
38
38
  anchor: string;
39
39
  }>;
40
40
  }>;
41
- generateObservationEntries(observationBodies: Observation[][], observationSyncIds?: Array<string | undefined>, observationRecordIds?: Array<string | undefined>, mode?: Parameters<typeof generateObservationEntry>[0]["mode"]): import("@medplum/fhirtypes").BundleEntry<Observation>[];
41
+ identifyObservations(observationBodies: Observation[][], observationSyncIds?: Array<string | undefined>, observationRecordIds?: Array<string | undefined>, mode?: Parameters<typeof identifyImportedObservations>[0]["mode"]): Observation[][];
42
42
  getLatestValidStartDate(latestObservationDates: Array<{
43
43
  code: string | undefined;
44
44
  date: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"data-processor.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/data-sync/services/managers/data-processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-processor.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/data-sync/services/managers/data-processor.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Bundle, Observation } from "@medplum/fhirtypes";
2
2
  import { OvokClient } from "@ovok/core";
3
3
  import { HealthProvider } from "../../types/health-provider";
4
- import { saveBundleObservations } from "../../utils/save-bundle-observations";
4
+ import { HealthDataMode } from "../../types/health-sync-keys";
5
5
  export declare class StorageManager {
6
6
  private client;
7
7
  private provider;
@@ -24,7 +24,12 @@ export declare class StorageManager {
24
24
  */
25
25
  private readonly inMemoryAnchors;
26
26
  constructor(client: OvokClient, provider: HealthProvider);
27
- saveObservations(entries: Parameters<typeof saveBundleObservations>[0]["entries"]): Promise<Bundle<Observation>>;
27
+ /**
28
+ * Saves a page of imported readings, each group one reading with its main observation first. An observation is
29
+ * created once per sync id, or with a mode that replaces, written over the one saved under it. The record id stays
30
+ * out of that check: all of a reading's observations share it.
31
+ */
32
+ saveObservations(groups: Observation[][], mode?: HealthDataMode): Promise<Bundle<Observation>>;
28
33
  /** Deletes the observations imported from records the provider reports deleted. */
29
34
  deleteObservations(recordIds: string[], patientId: string): Promise<void>;
30
35
  saveAnchor(typeIdentifier: string, anchor: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/data-sync/services/managers/storage-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,qBAAa,cAAc;IAqBvB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IArBlB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;gBAGnD,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,cAAc;IAG5B,gBAAgB,CACpB,OAAO,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAC/D,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAO/B,mFAAmF;IAC7E,kBAAkB,CACtB,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAsBhB,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAYxD,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQrD,OAAO,CAAC,SAAS;IAIjB,WAAW,CACT,OAAO,EAAE,KAAK,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GACzD,IAAI;CAKR"}
1
+ {"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/data-sync/services/managers/storage-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAK9D,qBAAa,cAAc;IAqBvB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IArBlB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;gBAGnD,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,cAAc;IAGlC;;;;OAIG;IACG,gBAAgB,CACpB,MAAM,EAAE,WAAW,EAAE,EAAE,EACvB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAO/B,mFAAmF;IAC7E,kBAAkB,CACtB,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAsBhB,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAYxD,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQrD,OAAO,CAAC,SAAS;IAIjB,WAAW,CACT,OAAO,EAAE,KAAK,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GACzD,IAAI;CAKR"}
@@ -1 +1 @@
1
- {"version":3,"file":"health-sync-batch-error.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/data-sync/types/health-sync-batch-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,cAAM,oBAAqB,SAAQ,KAAK;aAKpB,MAAM,CAAC,EAAE,MAAM;aACf,OAAO,CAAC,EAAE,gBAAgB;IAL5C,SAAgB,IAAI,0BAA0B;gBAG5C,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,OAAO,CAAC,EAAE,gBAAgB,YAAA;CAI7C;AAED,QAAA,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,KAmB3C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"health-sync-batch-error.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/data-sync/types/health-sync-batch-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,cAAM,oBAAqB,SAAQ,KAAK;aAKpB,MAAM,CAAC,EAAE,MAAM;aACf,OAAO,CAAC,EAAE,gBAAgB;IAL5C,SAAgB,IAAI,0BAA0B;gBAG5C,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,OAAO,CAAC,EAAE,gBAAgB,YAAA;CAI7C;AAsBD,QAAA,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,KA2B3C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Observation } from "@medplum/fhirtypes";
2
+ import { HealthProvider } from "../types/health-provider";
3
+ import { HealthDataMode } from "../types/health-sync-keys";
4
+ type IdentifyImportedObservationsProps = {
5
+ groupedObservationBodies: Observation[][];
6
+ provider: HealthProvider;
7
+ groupedObservationSyncIds?: Array<string | undefined>;
8
+ /** Each group's source record, which a deletion of that record finds it by. */
9
+ groupedRecordIds?: Array<string | undefined>;
10
+ mode?: HealthDataMode;
11
+ };
12
+ declare const getStableObservationId: ({ observation, provider, sourceId, bodyIndex, }: {
13
+ observation: Observation;
14
+ provider: HealthProvider;
15
+ sourceId?: string;
16
+ bodyIndex: number;
17
+ }) => string;
18
+ /**
19
+ * Names each imported observation for good: by its provider, by a sync id that stays the same when the source value
20
+ * changes, and by the record it came from. Core's `saveObservationGroups` finds an earlier import by the sync id, so a
21
+ * read of the same source again saves nothing new, or writes over a total that grew.
22
+ */
23
+ declare const identifyImportedObservations: ({ groupedObservationBodies, provider, groupedObservationSyncIds, groupedRecordIds, mode, }: IdentifyImportedObservationsProps) => Observation[][];
24
+ export { getStableObservationId, identifyImportedObservations };
25
+ //# sourceMappingURL=identify-imported-observations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identify-imported-observations.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/data-sync/utils/identify-imported-observations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAM3D,KAAK,iCAAiC,GAAG;IACvC,wBAAwB,EAAE,WAAW,EAAE,EAAE,CAAC;IAC1C,QAAQ,EAAE,cAAc,CAAC;IACzB,yBAAyB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEtD,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB,CAAC;AAiBF,QAAA,MAAM,sBAAsB,GAAI,iDAK7B;IACD,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,KAAG,MAQa,CAAC;AAOlB;;;;GAIG;AACH,QAAA,MAAM,4BAA4B,GAAI,4FAMnC,iCAAiC,KAAG,WAAW,EAAE,EAqChD,CAAC;AAEL,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"base-health-sync-service.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/data-sync/services/base-health-sync-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AASjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,CAAC,eAAe,SAAS,MAAM,EAAE,iBAAiB,IAAI;IACjF,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,OAAO,EAAE,CACP,KAAK,EAAE,wBAAwB,CAAC,eAAe,CAAC,KAC7C,OAAO,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACjF,CAAC;AAEF,8BAAsB,qBAAqB,CACzC,WAAW,SACT,sBAAsB,CAAC,YAAY,CAAC,GAAG,oBAAoB,CAAC,YAAY,CAAC,EAC3E,eAAe,SAAS,MAAM,EAC9B,iBAAiB,GAAG,OAAO;IAkBzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IAErD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAI5B;gBAGA,KAAK,EAAE,gBAAgB,CAAC,WAAW,CAAC,EACnB,OAAO,EAAE,iBAAiB,CAAC,eAAe,EAAE,iBAAiB,CAAC;IAyBjF,2EAA2E;IAC9D,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YAQzB,OAAO;IA6BR,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAKjD,cAAc;YAUd,oBAAoB;YA0BpB,mBAAmB;YAqBnB,cAAc;IAsH5B,OAAO,CAAC,yBAAyB;CAGlC"}
1
+ {"version":3,"file":"base-health-sync-service.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/data-sync/services/base-health-sync-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AASjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,CAAC,eAAe,SAAS,MAAM,EAAE,iBAAiB,IAAI;IACjF,QAAQ,EAAE,cAAc,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,OAAO,EAAE,CACP,KAAK,EAAE,wBAAwB,CAAC,eAAe,CAAC,KAC7C,OAAO,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC;IACzE,OAAO,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACjF,CAAC;AAEF,8BAAsB,qBAAqB,CACzC,WAAW,SACT,sBAAsB,CAAC,YAAY,CAAC,GAAG,oBAAoB,CAAC,YAAY,CAAC,EAC3E,eAAe,SAAS,MAAM,EAC9B,iBAAiB,GAAG,OAAO;IAkBzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IAErD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAI5B;gBAGA,KAAK,EAAE,gBAAgB,CAAC,WAAW,CAAC,EACnB,OAAO,EAAE,iBAAiB,CAAC,eAAe,EAAE,iBAAiB,CAAC;IAyBjF,2EAA2E;IAC9D,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YAQzB,OAAO;IA6BR,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAMzB,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAKjD,cAAc;YAUd,oBAAoB;YA0BpB,mBAAmB;YAqBnB,cAAc;IA0H5B,OAAO,CAAC,yBAAyB;CAGlC"}
@@ -8,8 +8,8 @@ import { GetDataFromProviderProps } from "../../types/get-data-from-provider-pro
8
8
  import { GetTotalCountProps } from "../../types/get-total-count-props";
9
9
  import { HealthProvider } from "../../types/health-provider";
10
10
  import { HealthSyncKey } from "../../types/health-sync-keys";
11
- import { generateObservationEntry } from "../../utils/generate-observation-entry";
12
11
  import { getLatestValidStartDate } from "../../utils/get-latest-valid-start-date";
12
+ import { identifyImportedObservations } from "../../utils/identify-imported-observations";
13
13
  import { StorageManager } from "./storage-manager";
14
14
  export declare class DataProcessor<TDataToSync extends AndroidHealthSyncProps["dataToSync"] | AppleHealthSyncProps["dataToSync"], TTypeIdentifier extends string, TDataFromProvider> {
15
15
  private client;
@@ -38,7 +38,7 @@ export declare class DataProcessor<TDataToSync extends AndroidHealthSyncProps["d
38
38
  anchor: string;
39
39
  }>;
40
40
  }>;
41
- generateObservationEntries(observationBodies: Observation[][], observationSyncIds?: Array<string | undefined>, observationRecordIds?: Array<string | undefined>, mode?: Parameters<typeof generateObservationEntry>[0]["mode"]): import("@medplum/fhirtypes").BundleEntry<Observation>[];
41
+ identifyObservations(observationBodies: Observation[][], observationSyncIds?: Array<string | undefined>, observationRecordIds?: Array<string | undefined>, mode?: Parameters<typeof identifyImportedObservations>[0]["mode"]): Observation[][];
42
42
  getLatestValidStartDate(latestObservationDates: Array<{
43
43
  code: string | undefined;
44
44
  date: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"data-processor.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/data-sync/services/managers/data-processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-processor.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/data-sync/services/managers/data-processor.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Bundle, Observation } from "@medplum/fhirtypes";
2
2
  import { OvokClient } from "@ovok/core";
3
3
  import { HealthProvider } from "../../types/health-provider";
4
- import { saveBundleObservations } from "../../utils/save-bundle-observations";
4
+ import { HealthDataMode } from "../../types/health-sync-keys";
5
5
  export declare class StorageManager {
6
6
  private client;
7
7
  private provider;
@@ -24,7 +24,12 @@ export declare class StorageManager {
24
24
  */
25
25
  private readonly inMemoryAnchors;
26
26
  constructor(client: OvokClient, provider: HealthProvider);
27
- saveObservations(entries: Parameters<typeof saveBundleObservations>[0]["entries"]): Promise<Bundle<Observation>>;
27
+ /**
28
+ * Saves a page of imported readings, each group one reading with its main observation first. An observation is
29
+ * created once per sync id, or with a mode that replaces, written over the one saved under it. The record id stays
30
+ * out of that check: all of a reading's observations share it.
31
+ */
32
+ saveObservations(groups: Observation[][], mode?: HealthDataMode): Promise<Bundle<Observation>>;
28
33
  /** Deletes the observations imported from records the provider reports deleted. */
29
34
  deleteObservations(recordIds: string[], patientId: string): Promise<void>;
30
35
  saveAnchor(typeIdentifier: string, anchor: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/data-sync/services/managers/storage-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,qBAAa,cAAc;IAqBvB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IArBlB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;gBAGnD,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,cAAc;IAG5B,gBAAgB,CACpB,OAAO,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAC/D,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAO/B,mFAAmF;IAC7E,kBAAkB,CACtB,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAsBhB,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAYxD,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQrD,OAAO,CAAC,SAAS;IAIjB,WAAW,CACT,OAAO,EAAE,KAAK,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GACzD,IAAI;CAKR"}
1
+ {"version":3,"file":"storage-manager.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/data-sync/services/managers/storage-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAK9D,qBAAa,cAAc;IAqBvB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IArBlB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;gBAGnD,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,cAAc;IAGlC;;;;OAIG;IACG,gBAAgB,CACpB,MAAM,EAAE,WAAW,EAAE,EAAE,EACvB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAO/B,mFAAmF;IAC7E,kBAAkB,CACtB,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAsBhB,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAYxD,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQrD,OAAO,CAAC,SAAS;IAIjB,WAAW,CACT,OAAO,EAAE,KAAK,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GACzD,IAAI;CAKR"}
@@ -1 +1 @@
1
- {"version":3,"file":"health-sync-batch-error.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/data-sync/types/health-sync-batch-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,cAAM,oBAAqB,SAAQ,KAAK;aAKpB,MAAM,CAAC,EAAE,MAAM;aACf,OAAO,CAAC,EAAE,gBAAgB;IAL5C,SAAgB,IAAI,0BAA0B;gBAG5C,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,OAAO,CAAC,EAAE,gBAAgB,YAAA;CAI7C;AAED,QAAA,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,KAmB3C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"health-sync-batch-error.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/data-sync/types/health-sync-batch-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,cAAM,oBAAqB,SAAQ,KAAK;aAKpB,MAAM,CAAC,EAAE,MAAM;aACf,OAAO,CAAC,EAAE,gBAAgB;IAL5C,SAAgB,IAAI,0BAA0B;gBAG5C,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,OAAO,CAAC,EAAE,gBAAgB,YAAA;CAI7C;AAsBD,QAAA,MAAM,iBAAiB,GAAI,OAAO,OAAO,KAAG,KA2B3C,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Observation } from "@medplum/fhirtypes";
2
+ import { HealthProvider } from "../types/health-provider";
3
+ import { HealthDataMode } from "../types/health-sync-keys";
4
+ type IdentifyImportedObservationsProps = {
5
+ groupedObservationBodies: Observation[][];
6
+ provider: HealthProvider;
7
+ groupedObservationSyncIds?: Array<string | undefined>;
8
+ /** Each group's source record, which a deletion of that record finds it by. */
9
+ groupedRecordIds?: Array<string | undefined>;
10
+ mode?: HealthDataMode;
11
+ };
12
+ declare const getStableObservationId: ({ observation, provider, sourceId, bodyIndex, }: {
13
+ observation: Observation;
14
+ provider: HealthProvider;
15
+ sourceId?: string;
16
+ bodyIndex: number;
17
+ }) => string;
18
+ /**
19
+ * Names each imported observation for good: by its provider, by a sync id that stays the same when the source value
20
+ * changes, and by the record it came from. Core's `saveObservationGroups` finds an earlier import by the sync id, so a
21
+ * read of the same source again saves nothing new, or writes over a total that grew.
22
+ */
23
+ declare const identifyImportedObservations: ({ groupedObservationBodies, provider, groupedObservationSyncIds, groupedRecordIds, mode, }: IdentifyImportedObservationsProps) => Observation[][];
24
+ export { getStableObservationId, identifyImportedObservations };
25
+ //# sourceMappingURL=identify-imported-observations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identify-imported-observations.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/data-sync/utils/identify-imported-observations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAM3D,KAAK,iCAAiC,GAAG;IACvC,wBAAwB,EAAE,WAAW,EAAE,EAAE,CAAC;IAC1C,QAAQ,EAAE,cAAc,CAAC;IACzB,yBAAyB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAEtD,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB,CAAC;AAiBF,QAAA,MAAM,sBAAsB,GAAI,iDAK7B;IACD,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,KAAG,MAQa,CAAC;AAOlB;;;;GAIG;AACH,QAAA,MAAM,4BAA4B,GAAI,4FAMnC,iCAAiC,KAAG,WAAW,EAAE,EAqChD,CAAC;AAEL,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ovok/native",
3
- "version": "1.12.1",
3
+ "version": "1.13.0",
4
4
  "description": "React native component sdk for OVOK",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -107,7 +107,7 @@
107
107
  "@medplum/react-hooks": "3.2.23",
108
108
  "@opentelemetry/api": "^1.9.1",
109
109
  "@opentelemetry/api-logs": "^0.222.0",
110
- "@ovok/core": "^0.4.35",
110
+ "@ovok/core": "^0.4.42",
111
111
  "@react-native-community/datetimepicker": "^9.1.0",
112
112
  "@react-native-community/netinfo": "^12.0.1",
113
113
  "@react-native-google-signin/google-signin": "^16.1.2",
@@ -189,7 +189,7 @@
189
189
  "@kingstinct/react-native-healthkit": "*",
190
190
  "@opentelemetry/api": "^1.9.1",
191
191
  "@opentelemetry/api-logs": "^0.222.0",
192
- "@ovok/core": ">=0.4.27",
192
+ "@ovok/core": ">=0.4.42",
193
193
  "@react-native-community/datetimepicker": "*",
194
194
  "@react-native-community/netinfo": "*",
195
195
  "@react-native-google-signin/google-signin": "*",
@@ -1,108 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getStableObservationId = exports.generateObservationEntry = void 0;
7
- var _fhirSystems = require("./fhir-systems.js");
8
- var _getHealthRecordSyncId = require("./get-health-record-sync-id.js");
9
- var _isDailyAggregateMode = require("./is-daily-aggregate-mode.js");
10
- var _replacesSavedObservation = require("./replaces-saved-observation.js");
11
- const getObservationCode = observation => observation.code?.coding?.map(coding => `${coding.system ?? ""}|${coding.code ?? ""}`).join("~") || observation.code?.text || "unknown";
12
- const getObservationTime = observation => {
13
- if (observation.effectivePeriod) {
14
- return `${observation.effectivePeriod.start ?? ""}:${observation.effectivePeriod.end ?? ""}`;
15
- }
16
- return observation.effectiveDateTime?.slice(0, 19) ?? "unknown";
17
- };
18
- const getStableObservationId = ({
19
- observation,
20
- provider,
21
- sourceId,
22
- bodyIndex
23
- }) => observation.id && !sourceId ? `${provider}:${observation.id}` : [provider, sourceId ?? getObservationTime(observation), getObservationCode(observation), bodyIndex].join(":");
24
- exports.getStableObservationId = getStableObservationId;
25
- const createBundleUuid = () => {
26
- const cryptoApi = globalThis.crypto;
27
- const randomUuid = typeof cryptoApi === "object" && cryptoApi !== null && "randomUUID" in cryptoApi && typeof cryptoApi.randomUUID === "function" ? cryptoApi.randomUUID : undefined;
28
- if (randomUuid) {
29
- return randomUuid.call(cryptoApi);
30
- }
31
- const bytes = Array.from({
32
- length: 16
33
- }, () => Math.floor(Math.random() * 256));
34
- bytes[6] = bytes[6] & 0x0f | 0x40;
35
- bytes[8] = bytes[8] & 0x3f | 0x80;
36
- const hex = bytes.map(byte => byte.toString(16).padStart(2, "0")).join("");
37
- return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
38
- };
39
- const generateObservationEntry = ({
40
- groupedObservationBodies,
41
- provider,
42
- groupedObservationSyncIds,
43
- groupedRecordIds,
44
- patientId,
45
- mode
46
- }) => {
47
- return groupedObservationBodies.map((observationBodies, groupIndex) => {
48
- const fullUrls = observationBodies.map(() => `urn:uuid:${createBundleUuid()}`);
49
- const recordId = groupedRecordIds?.[groupIndex];
50
- return observationBodies.map((observationBody, bodyIndex) => {
51
- const syncIdentifier = getStableObservationId({
52
- observation: observationBody,
53
- provider,
54
- sourceId: groupedObservationSyncIds?.[groupIndex],
55
- bodyIndex
56
- });
57
- const fullUrl = fullUrls[bodyIndex];
58
- const searchParams = new URLSearchParams();
59
- const isDailyAggregate = (0, _isDailyAggregateMode.isDailyAggregateMode)(mode);
60
- const replaces = (0, _replacesSavedObservation.replacesSavedObservation)(mode);
61
- const legacySyncIdentifier = isDailyAggregate && observationBody.id ? `${provider}:${observationBody.id}` : undefined;
62
- const syncIdentifiers = Array.from(new Set([syncIdentifier, legacySyncIdentifier].filter(Boolean)));
63
- searchParams.set("identifier", syncIdentifiers.map(identifier => `${_fhirSystems.OBSERVATION_SYNC_ID_SYSTEM}|${identifier}`).join(","));
64
- if (patientId) {
65
- searchParams.set("subject", `Patient/${patientId}`);
66
- }
67
- const search = searchParams.toString();
68
- const observationResource = {
69
- ...observationBody
70
- };
71
- if (replaces) {
72
- delete observationResource.id;
73
- }
74
- return {
75
- fullUrl,
76
- request: {
77
- method: replaces ? "PUT" : "POST",
78
- url: replaces ? `Observation?${search}` : "Observation",
79
- ...(replaces ? {} : {
80
- ifNoneExist: search
81
- })
82
- },
83
- resource: {
84
- ...observationResource,
85
- identifier: [...(observationBody.identifier || []), {
86
- system: _fhirSystems.OBSERVATION_SYNC_PROVIDER_SYSTEM,
87
- value: provider
88
- }, {
89
- system: _fhirSystems.OBSERVATION_SYNC_ID_SYSTEM,
90
- value: syncIdentifier
91
- }, ...(recordId ? [(0, _getHealthRecordSyncId.getHealthRecordIdentifier)(provider, recordId)] : [])],
92
- device: {
93
- ...(observationBody.device ?? {}),
94
- identifier: {
95
- system: _fhirSystems.OBSERVATION_SYNC_PROVIDER_SYSTEM,
96
- value: provider
97
- }
98
- },
99
- hasMember: bodyIndex === 0 ? [] : [{
100
- reference: fullUrls[0]
101
- }]
102
- }
103
- };
104
- });
105
- }).flat();
106
- };
107
- exports.generateObservationEntry = generateObservationEntry;
108
- //# sourceMappingURL=generate-observation-entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_fhirSystems","require","_getHealthRecordSyncId","_isDailyAggregateMode","_replacesSavedObservation","getObservationCode","observation","code","coding","map","system","join","text","getObservationTime","effectivePeriod","start","end","effectiveDateTime","slice","getStableObservationId","provider","sourceId","bodyIndex","id","exports","createBundleUuid","cryptoApi","globalThis","crypto","randomUuid","randomUUID","undefined","call","bytes","Array","from","length","Math","floor","random","hex","byte","toString","padStart","generateObservationEntry","groupedObservationBodies","groupedObservationSyncIds","groupedRecordIds","patientId","mode","observationBodies","groupIndex","fullUrls","recordId","observationBody","syncIdentifier","fullUrl","searchParams","URLSearchParams","isDailyAggregate","isDailyAggregateMode","replaces","replacesSavedObservation","legacySyncIdentifier","syncIdentifiers","Set","filter","Boolean","set","identifier","OBSERVATION_SYNC_ID_SYSTEM","search","observationResource","request","method","url","ifNoneExist","resource","OBSERVATION_SYNC_PROVIDER_SYSTEM","value","getHealthRecordIdentifier","device","hasMember","reference","flat"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/generate-observation-entry.ts"],"mappings":"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","ignoreList":[]}
@@ -1,100 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.splitHealthImportEntries = exports.saveBundleObservations = exports.MAX_HEALTH_IMPORT_BUNDLE_BYTES = void 0;
7
- var _healthSyncBatchError = require("../types/health-sync-batch-error.js");
8
- const MAX_HEALTH_IMPORT_BUNDLE_BYTES = exports.MAX_HEALTH_IMPORT_BUNDLE_BYTES = 900_000;
9
- const getByteLength = value => {
10
- const TextEncoderConstructor = globalThis.TextEncoder;
11
- if (TextEncoderConstructor) {
12
- return new TextEncoderConstructor().encode(value).byteLength;
13
- }
14
- return encodeURIComponent(value).replace(/%[0-9A-F]{2}|./g, "_").length;
15
- };
16
- const getBundleByteLength = entries => getByteLength(JSON.stringify({
17
- resourceType: "Bundle",
18
- type: "batch",
19
- entry: entries
20
- }));
21
- const getMemberReference = entry => {
22
- const observation = entry.resource;
23
- return observation?.hasMember?.[0]?.reference;
24
- };
25
- const groupMeasurementEntries = entries => {
26
- const rootUrls = new Set(entries.map(entry => entry.fullUrl).filter(Boolean));
27
- const groups = new Map();
28
- entries.forEach((entry, index) => {
29
- const key = getMemberReference(entry) && rootUrls.has(getMemberReference(entry)) ? getMemberReference(entry) : entry.fullUrl ?? `entry-${index}`;
30
- const group = groups.get(key) ?? [];
31
- group.push(entry);
32
- groups.set(key, group);
33
- });
34
- return [...groups.values()];
35
- };
36
- const serializeBatch = entries => getBundleByteLength(entries);
37
- const splitHealthImportEntries = (entries, maxBytes = MAX_HEALTH_IMPORT_BUNDLE_BYTES) => {
38
- const batches = [];
39
- let current = [];
40
- for (const group of groupMeasurementEntries(entries)) {
41
- const candidate = [...current, ...group];
42
- if (current.length > 0 && serializeBatch(candidate) > maxBytes) {
43
- batches.push(current);
44
- current = [];
45
- }
46
- current.push(...group);
47
- }
48
- if (current.length > 0) {
49
- batches.push(current);
50
- }
51
- return batches;
52
- };
53
- exports.splitHealthImportEntries = splitHealthImportEntries;
54
- const createBatchError = (bundle, expectedEntries) => {
55
- const responseEntries = bundle.entry ?? [];
56
- const statusCounts = new Map();
57
- responseEntries.forEach(entry => {
58
- const status = entry.response?.status ?? "missing status";
59
- if (status.startsWith("2")) {
60
- return;
61
- }
62
- statusCounts.set(status, (statusCounts.get(status) ?? 0) + 1);
63
- });
64
- const missingCount = Math.max(expectedEntries - responseEntries.length, 0);
65
- if (missingCount > 0) {
66
- statusCounts.set("missing status", (statusCounts.get("missing status") ?? 0) + missingCount);
67
- }
68
- const summary = [...statusCounts.entries()].map(([status, count]) => `${status} × ${count}`).join(", ");
69
- const error = new _healthSyncBatchError.HealthSyncBatchError(`Health import batch did not save every entry (${summary || "unknown status"})`, bundle);
70
- return error;
71
- };
72
- const saveBundleObservations = async ({
73
- entries,
74
- client
75
- }) => {
76
- const responseBundles = [];
77
- for (const batchEntries of splitHealthImportEntries(entries)) {
78
- const bundle = await client.executeBatch({
79
- resourceType: "Bundle",
80
- type: "batch",
81
- entry: batchEntries
82
- });
83
- const responseEntries = bundle.entry ?? [];
84
- const hasMissingResponse = responseEntries.length !== batchEntries.length;
85
- const hasRejectedEntry = responseEntries.some(entry => !entry.response?.status.startsWith("2"));
86
- if (hasMissingResponse || hasRejectedEntry) {
87
- throw createBatchError(bundle, batchEntries.length);
88
- }
89
- responseBundles.push(bundle);
90
- }
91
- return {
92
- ...(responseBundles[0] ?? {
93
- resourceType: "Bundle",
94
- type: "batch-response"
95
- }),
96
- entry: responseBundles.flatMap(bundle => bundle.entry ?? [])
97
- };
98
- };
99
- exports.saveBundleObservations = saveBundleObservations;
100
- //# sourceMappingURL=save-bundle-observations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_healthSyncBatchError","require","MAX_HEALTH_IMPORT_BUNDLE_BYTES","exports","getByteLength","value","TextEncoderConstructor","globalThis","TextEncoder","encode","byteLength","encodeURIComponent","replace","length","getBundleByteLength","entries","JSON","stringify","resourceType","type","entry","getMemberReference","observation","resource","hasMember","reference","groupMeasurementEntries","rootUrls","Set","map","fullUrl","filter","Boolean","groups","Map","forEach","index","key","has","group","get","push","set","values","serializeBatch","splitHealthImportEntries","maxBytes","batches","current","candidate","createBatchError","bundle","expectedEntries","responseEntries","statusCounts","status","response","startsWith","missingCount","Math","max","summary","count","join","error","HealthSyncBatchError","saveBundleObservations","client","responseBundles","batchEntries","executeBatch","hasMissingResponse","hasRejectedEntry","some","flatMap"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/save-bundle-observations.ts"],"mappings":"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","ignoreList":[]}