@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.
- package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js +7 -5
- 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 +4 -5
- package/lib/commonjs/modules/data-sync/services/managers/data-processor.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js +12 -5
- package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js.map +1 -1
- package/lib/commonjs/modules/data-sync/types/health-sync-batch-error.js +18 -0
- package/lib/commonjs/modules/data-sync/types/health-sync-batch-error.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/identify-imported-observations.js +70 -0
- package/lib/commonjs/modules/data-sync/utils/identify-imported-observations.js.map +1 -0
- package/lib/module/modules/data-sync/services/base-health-sync-service.js +7 -5
- 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 +4 -5
- package/lib/module/modules/data-sync/services/managers/data-processor.js.map +1 -1
- package/lib/module/modules/data-sync/services/managers/storage-manager.js +12 -5
- package/lib/module/modules/data-sync/services/managers/storage-manager.js.map +1 -1
- package/lib/module/modules/data-sync/types/health-sync-batch-error.js +18 -0
- package/lib/module/modules/data-sync/types/health-sync-batch-error.js.map +1 -1
- package/lib/module/modules/data-sync/utils/identify-imported-observations.js +65 -0
- package/lib/module/modules/data-sync/utils/identify-imported-observations.js.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts +7 -2
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-batch-error.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/identify-imported-observations.d.ts +25 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/identify-imported-observations.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts +7 -2
- package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-sync-batch-error.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/identify-imported-observations.d.ts +25 -0
- package/lib/typescript/module/src/modules/data-sync/utils/identify-imported-observations.d.ts.map +1 -0
- package/package.json +3 -3
- package/lib/commonjs/modules/data-sync/utils/generate-observation-entry.js +0 -108
- package/lib/commonjs/modules/data-sync/utils/generate-observation-entry.js.map +0 -1
- package/lib/commonjs/modules/data-sync/utils/save-bundle-observations.js +0 -100
- package/lib/commonjs/modules/data-sync/utils/save-bundle-observations.js.map +0 -1
- package/lib/module/modules/data-sync/utils/generate-observation-entry.js +0 -103
- package/lib/module/modules/data-sync/utils/generate-observation-entry.js.map +0 -1
- package/lib/module/modules/data-sync/utils/save-bundle-observations.js +0 -95
- package/lib/module/modules/data-sync/utils/save-bundle-observations.js.map +0 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/generate-observation-entry.d.ts +0 -21
- package/lib/typescript/commonjs/src/modules/data-sync/utils/generate-observation-entry.d.ts.map +0 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/save-bundle-observations.d.ts +0 -11
- package/lib/typescript/commonjs/src/modules/data-sync/utils/save-bundle-observations.d.ts.map +0 -1
- package/lib/typescript/module/src/modules/data-sync/utils/generate-observation-entry.d.ts +0 -21
- package/lib/typescript/module/src/modules/data-sync/utils/generate-observation-entry.d.ts.map +0 -1
- package/lib/typescript/module/src/modules/data-sync/utils/save-bundle-observations.d.ts +0 -11
- package/lib/typescript/module/src/modules/data-sync/utils/save-bundle-observations.d.ts.map +0 -1
|
@@ -115,17 +115,19 @@ class BaseHealthSyncService {
|
|
|
115
115
|
if (this.stateManager.shouldStopSync) {
|
|
116
116
|
break;
|
|
117
117
|
}
|
|
118
|
-
const
|
|
119
|
-
|
|
118
|
+
const mode = (0, _healthSyncKeys.getHealthDataMode)(measurementTypeKey, data.mode);
|
|
119
|
+
const groups = this.dataProcessor.identifyObservations(observationBodies, observationSyncIds, observationRecordIds, mode);
|
|
120
|
+
const observationCount = groups.flat().length;
|
|
121
|
+
if ((observationCount !== 0 || deletedRecordIds.length !== 0) && !this.stateManager.shouldStopSync) {
|
|
120
122
|
try {
|
|
121
|
-
if (
|
|
123
|
+
if (observationCount !== 0) {
|
|
122
124
|
const startedAt = Date.now();
|
|
123
|
-
const result = await (0, _retrySave.withSyncRetries)(() => this.storageManager.saveObservations(
|
|
125
|
+
const result = await (0, _retrySave.withSyncRetries)(() => this.storageManager.saveObservations(groups, mode), () => this.stateManager.shouldStopSync);
|
|
124
126
|
if (this.stateManager.shouldStopSync) {
|
|
125
127
|
return;
|
|
126
128
|
}
|
|
127
129
|
const responseEntries = result.entry ?? [];
|
|
128
|
-
const savedCount = responseEntries.length ? responseEntries.filter(entry => entry.response?.status.startsWith("2")).length :
|
|
130
|
+
const savedCount = responseEntries.length ? responseEntries.filter(entry => entry.response?.status.startsWith("2")).length : observationCount;
|
|
129
131
|
const createdCount = responseEntries.filter(entry => entry.response?.status.startsWith("201")).length;
|
|
130
132
|
(0, _telemetry.recordOvokMetric)("ovok.health.samples.imported", createdCount, {
|
|
131
133
|
provider: this.adapter.provider,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_telemetry","require","_constants","_healthSyncBatchError","_healthSyncKeys","_retrySave","_dataProcessor","_storageManager","_syncProgressManager","_syncStateManager","BaseHealthSyncService","constructor","props","adapter","client","patientId","dataToSync","onSyncError","progressManager","SyncProgressManager","updateProgress","stateManager","SyncStateManager","storageManager","StorageManager","provider","dataProcessor","DataProcessor","chunkSize","DEFAULT_HEALTH_SYNC_CHUNK_SIZE","getTotalCount","getData","convert","startSync","once","withOvokSpan","runSync","isInitialized","Error","resume","setNotStartedStatuses","initialDataFetched","initializeSync","processAllDataTypes","setPauseStatuses","pauseReason","error","stopSync","resetAll","reset","shouldStopSync","pauseSync","reason","pause","latestObservationDates","getLatestObservationDates","calculateTotalCounts","key","Object","keys","measurementTypeKey","data","getDataForMeasurementType","latestValidStartDate","getLatestValidStartDate","getHealthDataMode","mode","totalCount","getTotalRecordsCountForType","setTotalObservations","setStatus","syncDataByType","hasMore","observationBodies","observationSyncIds","observationRecordIds","deletedRecordIds","currentHasMore","anchors","getObservationBodiesForType","
|
|
1
|
+
{"version":3,"names":["_telemetry","require","_constants","_healthSyncBatchError","_healthSyncKeys","_retrySave","_dataProcessor","_storageManager","_syncProgressManager","_syncStateManager","BaseHealthSyncService","constructor","props","adapter","client","patientId","dataToSync","onSyncError","progressManager","SyncProgressManager","updateProgress","stateManager","SyncStateManager","storageManager","StorageManager","provider","dataProcessor","DataProcessor","chunkSize","DEFAULT_HEALTH_SYNC_CHUNK_SIZE","getTotalCount","getData","convert","startSync","once","withOvokSpan","runSync","isInitialized","Error","resume","setNotStartedStatuses","initialDataFetched","initializeSync","processAllDataTypes","setPauseStatuses","pauseReason","error","stopSync","resetAll","reset","shouldStopSync","pauseSync","reason","pause","latestObservationDates","getLatestObservationDates","calculateTotalCounts","key","Object","keys","measurementTypeKey","data","getDataForMeasurementType","latestValidStartDate","getLatestValidStartDate","getHealthDataMode","mode","totalCount","getTotalRecordsCountForType","setTotalObservations","setStatus","syncDataByType","hasMore","observationBodies","observationSyncIds","observationRecordIds","deletedRecordIds","currentHasMore","anchors","getObservationBodiesForType","groups","identifyObservations","observationCount","flat","length","startedAt","Date","now","result","withSyncRetries","saveObservations","responseEntries","entry","savedCount","filter","response","status","startsWith","createdCount","recordOvokMetric","recordOvokDuration","addResult","incrementSyncedObservations","deleteObservations","saveAnchors","isSyncRetryCancelled","toHealthSyncError","exports"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/services/base-health-sync-service.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,13 +6,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.DataProcessor = void 0;
|
|
7
7
|
var _core = require("@ovok/core");
|
|
8
8
|
var _healthSyncKeys = require("../../types/health-sync-keys.js");
|
|
9
|
-
var _generateObservationEntry = require("../../utils/generate-observation-entry.js");
|
|
10
9
|
var _getHealthRecordSyncId = require("../../utils/get-health-record-sync-id.js");
|
|
11
10
|
var _getLatestObservationDatesByCode = require("../../utils/get-latest-observation-dates-by-code.js");
|
|
12
11
|
var _getLatestValidStartDate = require("../../utils/get-latest-valid-start-date.js");
|
|
13
12
|
var _groupSamplesByInterval = require("../../utils/group-samples-by-interval.js");
|
|
14
13
|
var _groupSleepSamples = require("../../utils/group-sleep-samples.js");
|
|
15
14
|
var _healthDataCatalog = require("../../utils/health-data-catalog.js");
|
|
15
|
+
var _identifyImportedObservations = require("../../utils/identify-imported-observations.js");
|
|
16
16
|
/* eslint-disable max-lines */
|
|
17
17
|
|
|
18
18
|
class DataProcessor {
|
|
@@ -136,14 +136,13 @@ class DataProcessor {
|
|
|
136
136
|
anchors: newAnchors
|
|
137
137
|
};
|
|
138
138
|
}
|
|
139
|
-
|
|
140
|
-
return (0,
|
|
139
|
+
identifyObservations(observationBodies, observationSyncIds, observationRecordIds, mode) {
|
|
140
|
+
return (0, _identifyImportedObservations.identifyImportedObservations)({
|
|
141
141
|
groupedObservationBodies: observationBodies,
|
|
142
142
|
provider: this.provider,
|
|
143
143
|
groupedObservationSyncIds: observationSyncIds,
|
|
144
144
|
groupedRecordIds: observationRecordIds,
|
|
145
|
-
mode
|
|
146
|
-
patientId: this.patientId
|
|
145
|
+
mode
|
|
147
146
|
});
|
|
148
147
|
}
|
|
149
148
|
getLatestValidStartDate(latestObservationDates, data, measurementTypeKey, mode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_core","require","_healthSyncKeys","
|
|
1
|
+
{"version":3,"names":["_core","require","_healthSyncKeys","_getHealthRecordSyncId","_getLatestObservationDatesByCode","_getLatestValidStartDate","_groupSamplesByInterval","_groupSleepSamples","_healthDataCatalog","_identifyImportedObservations","DataProcessor","constructor","client","patientId","provider","chunkSize","storageManager","getTotalCountsFunction","getDataFromProviderFunction","getConverterFunction","extractCodes","dataToSync","entries","Object","flatMap","key","data","typeIdentifiers","map","typeIdentifier","code","String","getHealthDataCoding","getHealthDataMode","mode","getLatestObservationDates","codes","getLatestObservationDatesByCode","getTotalRecordsCountForType","measurementTypeKey","latestValidStartDate","totalCounts","Promise","all","anchor","getAnchor","startDate","toISOString","reduce","acc","count","getObservationBodiesForType","configuredCodings","system","display","catalogCoding","undefined","typeIdentifierCodes","fromEntries","typeIdentifierCodeSystems","typeIdentifierCodeDisplays","results","result","newAnchors","flat","filter","Boolean","allData","deletedRecordIds","dataGroups","HealthDataType","sleep","groupSleepSamples","MeasurementTypeKey","bloodPressure","groupSamplesByInterval","observationBodies","group","length","observationSyncIds","getHealthRecordSyncId","observationRecordIds","getHealthRecordSourceId","hasMore","some","anchors","identifyObservations","identifyImportedObservations","groupedObservationBodies","groupedObservationSyncIds","groupedRecordIds","getLatestValidStartDate","latestObservationDates","resolvedMode","resolvedData","exports"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/services/managers/data-processor.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,8 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.StorageManager = void 0;
|
|
7
|
+
var _fhirSystems = require("../../utils/fhir-systems.js");
|
|
7
8
|
var _getHealthRecordSyncId = require("../../utils/get-health-record-sync-id.js");
|
|
8
|
-
var
|
|
9
|
+
var _replacesSavedObservation = require("../../utils/replaces-saved-observation.js");
|
|
9
10
|
class StorageManager {
|
|
10
11
|
/**
|
|
11
12
|
* Where an anchor goes when the host client has no storage.
|
|
@@ -29,10 +30,16 @@ class StorageManager {
|
|
|
29
30
|
this.client = client;
|
|
30
31
|
this.provider = provider;
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Saves a page of imported readings, each group one reading with its main observation first. An observation is
|
|
36
|
+
* created once per sync id, or with a mode that replaces, written over the one saved under it. The record id stays
|
|
37
|
+
* out of that check: all of a reading's observations share it.
|
|
38
|
+
*/
|
|
39
|
+
async saveObservations(groups, mode) {
|
|
40
|
+
return this.client.saveObservationGroups(groups, {
|
|
41
|
+
identifierSystems: [_fhirSystems.OBSERVATION_SYNC_ID_SYSTEM],
|
|
42
|
+
replace: (0, _replacesSavedObservation.replacesSavedObservation)(mode)
|
|
36
43
|
});
|
|
37
44
|
}
|
|
38
45
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_fhirSystems","require","_getHealthRecordSyncId","_replacesSavedObservation","StorageManager","inMemoryAnchors","Map","constructor","client","provider","saveObservations","groups","mode","saveObservationGroups","identifierSystems","OBSERVATION_SYNC_ID_SYSTEM","replace","replacesSavedObservation","deleteObservations","recordIds","patientId","recordId","Set","system","value","getHealthRecordIdentifier","observations","page","searchResourcePages","subject","identifier","push","Promise","all","filter","observation","id","map","deleteResource","saveAnchor","typeIdentifier","anchor","key","anchorKey","clientStorage","setString","set","getAnchor","getString","get","saveAnchors","anchors","forEach","exports"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/services/managers/storage-manager.ts"],"mappings":";;;;;;AAKA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAD,OAAA;AACA,IAAAE,yBAAA,GAAAF,OAAA;AAEO,MAAMG,cAAc,CAAC;EAC1B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACmBC,eAAe,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAE5DC,WAAWA,CACDC,MAAkB,EAClBC,QAAwB,EAChC;IAAA,KAFQD,MAAkB,GAAlBA,MAAkB;IAAA,KAClBC,QAAwB,GAAxBA,QAAwB;EAC/B;;EAEH;AACF;AACA;AACA;AACA;EACE,MAAMC,gBAAgBA,CACpBC,MAAuB,EACvBC,IAAqB,EACS;IAC9B,OAAO,IAAI,CAACJ,MAAM,CAACK,qBAAqB,CAACF,MAAM,EAAE;MAC/CG,iBAAiB,EAAE,CAACC,uCAA0B,CAAC;MAC/CC,OAAO,EAAE,IAAAC,kDAAwB,EAACL,IAAI;IACxC,CAAC,CAAC;EACJ;;EAEA;EACA,MAAMM,kBAAkBA,CACtBC,SAAmB,EACnBC,SAAiB,EACF;IACf,KAAK,MAAMC,QAAQ,IAAI,IAAIC,GAAG,CAACH,SAAS,CAAC,EAAE;MACzC,MAAM;QAAEI,MAAM;QAAEC;MAAM,CAAC,GAAG,IAAAC,gDAAyB,EAAC,IAAI,CAAChB,QAAQ,EAAEY,QAAQ,CAAC;MAC5E,MAAMK,YAAY,GAAG,EAAE;MAEvB,WAAW,MAAMC,IAAI,IAAI,IAAI,CAACnB,MAAM,CAACoB,mBAAmB,CAAC,aAAa,EAAE;QACtEC,OAAO,EAAE,WAAWT,SAAS,EAAE;QAC/BU,UAAU,EAAE,GAAGP,MAAM,IAAIC,KAAK;MAChC,CAAC,CAAC,EAAE;QACFE,YAAY,CAACK,IAAI,CAAC,GAAGJ,IAAI,CAAC;MAC5B;MAEA,MAAMK,OAAO,CAACC,GAAG,CACfP,YAAY,CACTQ,MAAM,CAAEC,WAAW,IAAKA,WAAW,CAACC,EAAE,CAAC,CACvCC,GAAG,CAAEF,WAAW,IACf,IAAI,CAAC3B,MAAM,CAAC8B,cAAc,CAAC,aAAa,EAAEH,WAAW,CAACC,EAAG,CAC3D,CACJ,CAAC;IACH;EACF;EAEAG,UAAUA,CAACC,cAAsB,EAAEC,MAAc,EAAQ;IACvD,MAAMC,GAAG,GAAG,IAAI,CAACC,SAAS,CAACH,cAAc,CAAC;IAE1C,IAAI,IAAI,CAAChC,MAAM,CAACoC,aAAa,EAAE;MAC7B,IAAI,CAACpC,MAAM,CAACoC,aAAa,CAACC,SAAS,CAACH,GAAG,EAAED,MAAM,CAAC;MAEhD;IACF;IAEA,IAAI,CAACpC,eAAe,CAACyC,GAAG,CAACJ,GAAG,EAAED,MAAM,CAAC;EACvC;EAEAM,SAASA,CAACP,cAAsB,EAAsB;IACpD,MAAME,GAAG,GAAG,IAAI,CAACC,SAAS,CAACH,cAAc,CAAC;IAE1C,OAAO,IAAI,CAAChC,MAAM,CAACoC,aAAa,GAC5B,IAAI,CAACpC,MAAM,CAACoC,aAAa,CAACI,SAAS,CAACN,GAAG,CAAC,GACxC,IAAI,CAACrC,eAAe,CAAC4C,GAAG,CAACP,GAAG,CAAC;EACnC;EAEQC,SAASA,CAACH,cAAsB,EAAU;IAChD,OAAO,GAAG,IAAI,CAAC/B,QAAQ,SAAS+B,cAAc,SAAS;EACzD;EAEAU,WAAWA,CACTC,OAA0D,EACpD;IACNA,OAAO,CAACC,OAAO,CAAC,CAAC;MAAEZ,cAAc;MAAEC;IAAO,CAAC,KAAK;MAC9C,IAAI,CAACF,UAAU,CAACC,cAAc,EAAEC,MAAM,CAAC;IACzC,CAAC,CAAC;EACJ;AACF;AAACY,OAAA,CAAAjD,cAAA,GAAAA,cAAA","ignoreList":[]}
|
|
@@ -14,10 +14,28 @@ class HealthSyncBatchError extends Error {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
exports.HealthSyncBatchError = HealthSyncBatchError;
|
|
17
|
+
const isBundle = value => value?.resourceType === "Bundle";
|
|
18
|
+
|
|
19
|
+
/** What the entries a batch didn't save answered, as "409 Conflict × 2, 500 Internal Server Error × 1". */
|
|
20
|
+
const summarizeUnsavedEntries = bundle => {
|
|
21
|
+
const statusCounts = new Map();
|
|
22
|
+
for (const entry of bundle.entry ?? []) {
|
|
23
|
+
const status = entry.response?.status ?? "missing status";
|
|
24
|
+
if (!status.startsWith("2")) {
|
|
25
|
+
statusCounts.set(status, (statusCounts.get(status) ?? 0) + 1);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return [...statusCounts].map(([status, count]) => `${status} × ${count}`).join(", ");
|
|
29
|
+
};
|
|
17
30
|
const toHealthSyncError = error => {
|
|
18
31
|
if (error instanceof HealthSyncBatchError) {
|
|
19
32
|
return error;
|
|
20
33
|
}
|
|
34
|
+
|
|
35
|
+
// Core's save throws the response of a request that didn't save every entry.
|
|
36
|
+
if (isBundle(error)) {
|
|
37
|
+
return new HealthSyncBatchError(`Health import batch did not save every entry (${summarizeUnsavedEntries(error) || "an entry was not answered"})`, error);
|
|
38
|
+
}
|
|
21
39
|
const record = typeof error === "object" && error !== null ? error : undefined;
|
|
22
40
|
if (record?.outcome) {
|
|
23
41
|
return new HealthSyncBatchError(error instanceof Error ? error.message : String(error), undefined, record.outcome);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_toError","require","HealthSyncBatchError","Error","name","constructor","message","bundle","outcome","exports","toHealthSyncError","error","record","undefined","String","toError"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/types/health-sync-batch-error.ts"],"mappings":";;;;;;AAEA,IAAAA,QAAA,GAAAC,OAAA;AAEA,MAAMC,oBAAoB,SAASC,KAAK,CAAC;EACvBC,IAAI,GAAG,sBAAsB;EAEtCC,WAAWA,CAChBC,OAAe,EACCC,MAAe,EACfC,OAA0B,EAC1C;IACA,KAAK,CAACF,OAAO,CAAC;IAAC,KAHCC,MAAe,GAAfA,MAAe;IAAA,KACfC,OAA0B,GAA1BA,OAA0B;EAG5C;AACF;AAACC,OAAA,CAAAP,oBAAA,GAAAA,oBAAA;AAED,MAAMQ,iBAAiB,GAAIC,KAAc,IAAY;EACnD,IAAIA,KAAK,
|
|
1
|
+
{"version":3,"names":["_toError","require","HealthSyncBatchError","Error","name","constructor","message","bundle","outcome","exports","isBundle","value","resourceType","summarizeUnsavedEntries","statusCounts","Map","entry","status","response","startsWith","set","get","map","count","join","toHealthSyncError","error","record","undefined","String","toError"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/types/health-sync-batch-error.ts"],"mappings":";;;;;;AAEA,IAAAA,QAAA,GAAAC,OAAA;AAEA,MAAMC,oBAAoB,SAASC,KAAK,CAAC;EACvBC,IAAI,GAAG,sBAAsB;EAEtCC,WAAWA,CAChBC,OAAe,EACCC,MAAe,EACfC,OAA0B,EAC1C;IACA,KAAK,CAACF,OAAO,CAAC;IAAC,KAHCC,MAAe,GAAfA,MAAe;IAAA,KACfC,OAA0B,GAA1BA,OAA0B;EAG5C;AACF;AAACC,OAAA,CAAAP,oBAAA,GAAAA,oBAAA;AAED,MAAMQ,QAAQ,GAAIC,KAAc,IAC7BA,KAAK,EAAyBC,YAAY,KAAK,QAAQ;;AAE1D;AACA,MAAMC,uBAAuB,GAAIN,MAAc,IAAa;EAC1D,MAAMO,YAAY,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAE9C,KAAK,MAAMC,KAAK,IAAIT,MAAM,CAACS,KAAK,IAAI,EAAE,EAAE;IACtC,MAAMC,MAAM,GAAGD,KAAK,CAACE,QAAQ,EAAED,MAAM,IAAI,gBAAgB;IAEzD,IAAI,CAACA,MAAM,CAACE,UAAU,CAAC,GAAG,CAAC,EAAE;MAC3BL,YAAY,CAACM,GAAG,CAACH,MAAM,EAAE,CAACH,YAAY,CAACO,GAAG,CAACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D;EACF;EAEA,OAAO,CAAC,GAAGH,YAAY,CAAC,CACrBQ,GAAG,CAAC,CAAC,CAACL,MAAM,EAAEM,KAAK,CAAC,KAAK,GAAGN,MAAM,MAAMM,KAAK,EAAE,CAAC,CAChDC,IAAI,CAAC,IAAI,CAAC;AACf,CAAC;AAED,MAAMC,iBAAiB,GAAIC,KAAc,IAAY;EACnD,IAAIA,KAAK,YAAYxB,oBAAoB,EAAE;IACzC,OAAOwB,KAAK;EACd;;EAEA;EACA,IAAIhB,QAAQ,CAACgB,KAAK,CAAC,EAAE;IACnB,OAAO,IAAIxB,oBAAoB,CAC7B,iDAAiDW,uBAAuB,CAACa,KAAK,CAAC,IAAI,2BAA2B,GAAG,EACjHA,KACF,CAAC;EACH;EAEA,MAAMC,MAAM,GACV,OAAOD,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,GACtCA,KAAK,GACNE,SAAS;EAEf,IAAID,MAAM,EAAEnB,OAAO,EAAE;IACnB,OAAO,IAAIN,oBAAoB,CAC7BwB,KAAK,YAAYvB,KAAK,GAAGuB,KAAK,CAACpB,OAAO,GAAGuB,MAAM,CAACH,KAAK,CAAC,EACtDE,SAAS,EACTD,MAAM,CAACnB,OACT,CAAC;EACH;EAEA,OAAO,IAAAsB,gBAAO,EAACJ,KAAK,CAAC;AACvB,CAAC;AAACjB,OAAA,CAAAgB,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.identifyImportedObservations = exports.getStableObservationId = 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
|
+
const getObservationCode = observation => observation.code?.coding?.map(coding => `${coding.system ?? ""}|${coding.code ?? ""}`).join("~") || observation.code?.text || "unknown";
|
|
11
|
+
const getObservationTime = observation => {
|
|
12
|
+
if (observation.effectivePeriod) {
|
|
13
|
+
return `${observation.effectivePeriod.start ?? ""}:${observation.effectivePeriod.end ?? ""}`;
|
|
14
|
+
}
|
|
15
|
+
return observation.effectiveDateTime?.slice(0, 19) ?? "unknown";
|
|
16
|
+
};
|
|
17
|
+
const getStableObservationId = ({
|
|
18
|
+
observation,
|
|
19
|
+
provider,
|
|
20
|
+
sourceId,
|
|
21
|
+
bodyIndex
|
|
22
|
+
}) => observation.id && !sourceId ? `${provider}:${observation.id}` : [provider, sourceId ?? getObservationTime(observation), getObservationCode(observation), bodyIndex].join(":");
|
|
23
|
+
exports.getStableObservationId = getStableObservationId;
|
|
24
|
+
const syncIdentifier = value => ({
|
|
25
|
+
system: _fhirSystems.OBSERVATION_SYNC_ID_SYSTEM,
|
|
26
|
+
value
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Names each imported observation for good: by its provider, by a sync id that stays the same when the source value
|
|
31
|
+
* changes, and by the record it came from. Core's `saveObservationGroups` finds an earlier import by the sync id, so a
|
|
32
|
+
* read of the same source again saves nothing new, or writes over a total that grew.
|
|
33
|
+
*/
|
|
34
|
+
const identifyImportedObservations = ({
|
|
35
|
+
groupedObservationBodies,
|
|
36
|
+
provider,
|
|
37
|
+
groupedObservationSyncIds,
|
|
38
|
+
groupedRecordIds,
|
|
39
|
+
mode
|
|
40
|
+
}) => groupedObservationBodies.map((observationBodies, groupIndex) => {
|
|
41
|
+
const recordId = groupedRecordIds?.[groupIndex];
|
|
42
|
+
return observationBodies.map((observationBody, bodyIndex) => {
|
|
43
|
+
const syncId = getStableObservationId({
|
|
44
|
+
observation: observationBody,
|
|
45
|
+
provider,
|
|
46
|
+
sourceId: groupedObservationSyncIds?.[groupIndex],
|
|
47
|
+
bodyIndex
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// A day's total saved before sync ids named their source carries its old id; naming the total by that id as
|
|
51
|
+
// well is what lets the save find it and write over it.
|
|
52
|
+
const legacySyncId = (0, _isDailyAggregateMode.isDailyAggregateMode)(mode) && observationBody.id ? `${provider}:${observationBody.id}` : undefined;
|
|
53
|
+
return {
|
|
54
|
+
...observationBody,
|
|
55
|
+
identifier: [...(observationBody.identifier || []), {
|
|
56
|
+
system: _fhirSystems.OBSERVATION_SYNC_PROVIDER_SYSTEM,
|
|
57
|
+
value: provider
|
|
58
|
+
}, syncIdentifier(syncId), ...(legacySyncId && legacySyncId !== syncId ? [syncIdentifier(legacySyncId)] : []), ...(recordId ? [(0, _getHealthRecordSyncId.getHealthRecordIdentifier)(provider, recordId)] : [])],
|
|
59
|
+
device: {
|
|
60
|
+
...(observationBody.device ?? {}),
|
|
61
|
+
identifier: {
|
|
62
|
+
system: _fhirSystems.OBSERVATION_SYNC_PROVIDER_SYSTEM,
|
|
63
|
+
value: provider
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
exports.identifyImportedObservations = identifyImportedObservations;
|
|
70
|
+
//# sourceMappingURL=identify-imported-observations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_fhirSystems","require","_getHealthRecordSyncId","_isDailyAggregateMode","getObservationCode","observation","code","coding","map","system","join","text","getObservationTime","effectivePeriod","start","end","effectiveDateTime","slice","getStableObservationId","provider","sourceId","bodyIndex","id","exports","syncIdentifier","value","OBSERVATION_SYNC_ID_SYSTEM","identifyImportedObservations","groupedObservationBodies","groupedObservationSyncIds","groupedRecordIds","mode","observationBodies","groupIndex","recordId","observationBody","syncId","legacySyncId","isDailyAggregateMode","undefined","identifier","OBSERVATION_SYNC_PROVIDER_SYSTEM","getHealthRecordIdentifier","device"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/identify-imported-observations.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -112,17 +112,19 @@ export class BaseHealthSyncService {
|
|
|
112
112
|
if (this.stateManager.shouldStopSync) {
|
|
113
113
|
break;
|
|
114
114
|
}
|
|
115
|
-
const
|
|
116
|
-
|
|
115
|
+
const mode = getHealthDataMode(measurementTypeKey, data.mode);
|
|
116
|
+
const groups = this.dataProcessor.identifyObservations(observationBodies, observationSyncIds, observationRecordIds, mode);
|
|
117
|
+
const observationCount = groups.flat().length;
|
|
118
|
+
if ((observationCount !== 0 || deletedRecordIds.length !== 0) && !this.stateManager.shouldStopSync) {
|
|
117
119
|
try {
|
|
118
|
-
if (
|
|
120
|
+
if (observationCount !== 0) {
|
|
119
121
|
const startedAt = Date.now();
|
|
120
|
-
const result = await withSyncRetries(() => this.storageManager.saveObservations(
|
|
122
|
+
const result = await withSyncRetries(() => this.storageManager.saveObservations(groups, mode), () => this.stateManager.shouldStopSync);
|
|
121
123
|
if (this.stateManager.shouldStopSync) {
|
|
122
124
|
return;
|
|
123
125
|
}
|
|
124
126
|
const responseEntries = result.entry ?? [];
|
|
125
|
-
const savedCount = responseEntries.length ? responseEntries.filter(entry => entry.response?.status.startsWith("2")).length :
|
|
127
|
+
const savedCount = responseEntries.length ? responseEntries.filter(entry => entry.response?.status.startsWith("2")).length : observationCount;
|
|
126
128
|
const createdCount = responseEntries.filter(entry => entry.response?.status.startsWith("201")).length;
|
|
127
129
|
recordOvokMetric("ovok.health.samples.imported", createdCount, {
|
|
128
130
|
provider: this.adapter.provider,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["recordOvokDuration","recordOvokMetric","withOvokSpan","DEFAULT_HEALTH_SYNC_CHUNK_SIZE","toHealthSyncError","getHealthDataMode","isSyncRetryCancelled","withSyncRetries","DataProcessor","StorageManager","SyncProgressManager","SyncStateManager","BaseHealthSyncService","constructor","props","adapter","client","patientId","dataToSync","onSyncError","progressManager","updateProgress","stateManager","storageManager","provider","dataProcessor","chunkSize","getTotalCount","getData","convert","startSync","once","runSync","isInitialized","Error","resume","setNotStartedStatuses","initialDataFetched","initializeSync","processAllDataTypes","setPauseStatuses","pauseReason","error","stopSync","resetAll","reset","shouldStopSync","pauseSync","reason","pause","latestObservationDates","getLatestObservationDates","calculateTotalCounts","key","Object","keys","measurementTypeKey","data","getDataForMeasurementType","latestValidStartDate","getLatestValidStartDate","mode","totalCount","getTotalRecordsCountForType","setTotalObservations","setStatus","syncDataByType","hasMore","observationBodies","observationSyncIds","observationRecordIds","deletedRecordIds","currentHasMore","anchors","getObservationBodiesForType","
|
|
1
|
+
{"version":3,"names":["recordOvokDuration","recordOvokMetric","withOvokSpan","DEFAULT_HEALTH_SYNC_CHUNK_SIZE","toHealthSyncError","getHealthDataMode","isSyncRetryCancelled","withSyncRetries","DataProcessor","StorageManager","SyncProgressManager","SyncStateManager","BaseHealthSyncService","constructor","props","adapter","client","patientId","dataToSync","onSyncError","progressManager","updateProgress","stateManager","storageManager","provider","dataProcessor","chunkSize","getTotalCount","getData","convert","startSync","once","runSync","isInitialized","Error","resume","setNotStartedStatuses","initialDataFetched","initializeSync","processAllDataTypes","setPauseStatuses","pauseReason","error","stopSync","resetAll","reset","shouldStopSync","pauseSync","reason","pause","latestObservationDates","getLatestObservationDates","calculateTotalCounts","key","Object","keys","measurementTypeKey","data","getDataForMeasurementType","latestValidStartDate","getLatestValidStartDate","mode","totalCount","getTotalRecordsCountForType","setTotalObservations","setStatus","syncDataByType","hasMore","observationBodies","observationSyncIds","observationRecordIds","deletedRecordIds","currentHasMore","anchors","getObservationBodiesForType","groups","identifyObservations","observationCount","flat","length","startedAt","Date","now","result","saveObservations","responseEntries","entry","savedCount","filter","response","status","startsWith","createdCount","addResult","incrementSyncedObservations","deleteObservations","saveAnchors"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/services/base-health-sync-service.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
import { MeasurementTypeKey } from "@ovok/core";
|
|
6
6
|
import { getHealthDataMode, HealthDataType } from "../../types/health-sync-keys.js";
|
|
7
|
-
import { generateObservationEntry } from "../../utils/generate-observation-entry.js";
|
|
8
7
|
import { getHealthRecordSourceId, getHealthRecordSyncId } from "../../utils/get-health-record-sync-id.js";
|
|
9
8
|
import { getLatestObservationDatesByCode } from "../../utils/get-latest-observation-dates-by-code.js";
|
|
10
9
|
import { getLatestValidStartDate } from "../../utils/get-latest-valid-start-date.js";
|
|
11
10
|
import { groupSamplesByInterval } from "../../utils/group-samples-by-interval.js";
|
|
12
11
|
import { groupSleepSamples } from "../../utils/group-sleep-samples.js";
|
|
13
12
|
import { getHealthDataCoding } from "../../utils/health-data-catalog.js";
|
|
13
|
+
import { identifyImportedObservations } from "../../utils/identify-imported-observations.js";
|
|
14
14
|
export class DataProcessor {
|
|
15
15
|
constructor(client, patientId, provider, chunkSize, storageManager, getTotalCountsFunction, getDataFromProviderFunction, getConverterFunction) {
|
|
16
16
|
this.client = client;
|
|
@@ -132,14 +132,13 @@ export class DataProcessor {
|
|
|
132
132
|
anchors: newAnchors
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
|
-
|
|
136
|
-
return
|
|
135
|
+
identifyObservations(observationBodies, observationSyncIds, observationRecordIds, mode) {
|
|
136
|
+
return identifyImportedObservations({
|
|
137
137
|
groupedObservationBodies: observationBodies,
|
|
138
138
|
provider: this.provider,
|
|
139
139
|
groupedObservationSyncIds: observationSyncIds,
|
|
140
140
|
groupedRecordIds: observationRecordIds,
|
|
141
|
-
mode
|
|
142
|
-
patientId: this.patientId
|
|
141
|
+
mode
|
|
143
142
|
});
|
|
144
143
|
}
|
|
145
144
|
getLatestValidStartDate(latestObservationDates, data, measurementTypeKey, mode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MeasurementTypeKey","getHealthDataMode","HealthDataType","
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","getHealthDataMode","HealthDataType","getHealthRecordSourceId","getHealthRecordSyncId","getLatestObservationDatesByCode","getLatestValidStartDate","groupSamplesByInterval","groupSleepSamples","getHealthDataCoding","identifyImportedObservations","DataProcessor","constructor","client","patientId","provider","chunkSize","storageManager","getTotalCountsFunction","getDataFromProviderFunction","getConverterFunction","extractCodes","dataToSync","entries","Object","flatMap","key","data","typeIdentifiers","map","typeIdentifier","code","String","mode","getLatestObservationDates","codes","getTotalRecordsCountForType","measurementTypeKey","latestValidStartDate","totalCounts","Promise","all","anchor","getAnchor","startDate","toISOString","reduce","acc","count","getObservationBodiesForType","configuredCodings","system","display","catalogCoding","undefined","typeIdentifierCodes","fromEntries","typeIdentifierCodeSystems","typeIdentifierCodeDisplays","results","result","newAnchors","flat","filter","Boolean","allData","deletedRecordIds","dataGroups","sleep","bloodPressure","observationBodies","group","length","observationSyncIds","observationRecordIds","hasMore","some","anchors","identifyObservations","groupedObservationBodies","groupedObservationSyncIds","groupedRecordIds","latestObservationDates","resolvedMode","resolvedData"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/services/managers/data-processor.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { OBSERVATION_SYNC_ID_SYSTEM } from "../../utils/fhir-systems.js";
|
|
3
4
|
import { getHealthRecordIdentifier } from "../../utils/get-health-record-sync-id.js";
|
|
4
|
-
import {
|
|
5
|
+
import { replacesSavedObservation } from "../../utils/replaces-saved-observation.js";
|
|
5
6
|
export class StorageManager {
|
|
6
7
|
/**
|
|
7
8
|
* Where an anchor goes when the host client has no storage.
|
|
@@ -25,10 +26,16 @@ export class StorageManager {
|
|
|
25
26
|
this.client = client;
|
|
26
27
|
this.provider = provider;
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Saves a page of imported readings, each group one reading with its main observation first. An observation is
|
|
32
|
+
* created once per sync id, or with a mode that replaces, written over the one saved under it. The record id stays
|
|
33
|
+
* out of that check: all of a reading's observations share it.
|
|
34
|
+
*/
|
|
35
|
+
async saveObservations(groups, mode) {
|
|
36
|
+
return this.client.saveObservationGroups(groups, {
|
|
37
|
+
identifierSystems: [OBSERVATION_SYNC_ID_SYSTEM],
|
|
38
|
+
replace: replacesSavedObservation(mode)
|
|
32
39
|
});
|
|
33
40
|
}
|
|
34
41
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getHealthRecordIdentifier","
|
|
1
|
+
{"version":3,"names":["OBSERVATION_SYNC_ID_SYSTEM","getHealthRecordIdentifier","replacesSavedObservation","StorageManager","inMemoryAnchors","Map","constructor","client","provider","saveObservations","groups","mode","saveObservationGroups","identifierSystems","replace","deleteObservations","recordIds","patientId","recordId","Set","system","value","observations","page","searchResourcePages","subject","identifier","push","Promise","all","filter","observation","id","map","deleteResource","saveAnchor","typeIdentifier","anchor","key","anchorKey","clientStorage","setString","set","getAnchor","getString","get","saveAnchors","anchors","forEach"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/services/managers/storage-manager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,10 +9,28 @@ class HealthSyncBatchError extends Error {
|
|
|
9
9
|
this.outcome = outcome;
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
+
const isBundle = value => value?.resourceType === "Bundle";
|
|
13
|
+
|
|
14
|
+
/** What the entries a batch didn't save answered, as "409 Conflict × 2, 500 Internal Server Error × 1". */
|
|
15
|
+
const summarizeUnsavedEntries = bundle => {
|
|
16
|
+
const statusCounts = new Map();
|
|
17
|
+
for (const entry of bundle.entry ?? []) {
|
|
18
|
+
const status = entry.response?.status ?? "missing status";
|
|
19
|
+
if (!status.startsWith("2")) {
|
|
20
|
+
statusCounts.set(status, (statusCounts.get(status) ?? 0) + 1);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return [...statusCounts].map(([status, count]) => `${status} × ${count}`).join(", ");
|
|
24
|
+
};
|
|
12
25
|
const toHealthSyncError = error => {
|
|
13
26
|
if (error instanceof HealthSyncBatchError) {
|
|
14
27
|
return error;
|
|
15
28
|
}
|
|
29
|
+
|
|
30
|
+
// Core's save throws the response of a request that didn't save every entry.
|
|
31
|
+
if (isBundle(error)) {
|
|
32
|
+
return new HealthSyncBatchError(`Health import batch did not save every entry (${summarizeUnsavedEntries(error) || "an entry was not answered"})`, error);
|
|
33
|
+
}
|
|
16
34
|
const record = typeof error === "object" && error !== null ? error : undefined;
|
|
17
35
|
if (record?.outcome) {
|
|
18
36
|
return new HealthSyncBatchError(error instanceof Error ? error.message : String(error), undefined, record.outcome);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["toError","HealthSyncBatchError","Error","name","constructor","message","bundle","outcome","toHealthSyncError","error","record","undefined","String"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/types/health-sync-batch-error.ts"],"mappings":";;AAEA,SAASA,OAAO,QAAQ,iCAA8B;AAEtD,MAAMC,oBAAoB,SAASC,KAAK,CAAC;EACvBC,IAAI,GAAG,sBAAsB;EAEtCC,WAAWA,CAChBC,OAAe,EACCC,MAAe,EACfC,OAA0B,EAC1C;IACA,KAAK,CAACF,OAAO,CAAC;IAAC,KAHCC,MAAe,GAAfA,MAAe;IAAA,KACfC,OAA0B,GAA1BA,OAA0B;EAG5C;AACF;AAEA,MAAMC,iBAAiB,GAAIC,KAAc,IAAY;EACnD,IAAIA,KAAK,
|
|
1
|
+
{"version":3,"names":["toError","HealthSyncBatchError","Error","name","constructor","message","bundle","outcome","isBundle","value","resourceType","summarizeUnsavedEntries","statusCounts","Map","entry","status","response","startsWith","set","get","map","count","join","toHealthSyncError","error","record","undefined","String"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/types/health-sync-batch-error.ts"],"mappings":";;AAEA,SAASA,OAAO,QAAQ,iCAA8B;AAEtD,MAAMC,oBAAoB,SAASC,KAAK,CAAC;EACvBC,IAAI,GAAG,sBAAsB;EAEtCC,WAAWA,CAChBC,OAAe,EACCC,MAAe,EACfC,OAA0B,EAC1C;IACA,KAAK,CAACF,OAAO,CAAC;IAAC,KAHCC,MAAe,GAAfA,MAAe;IAAA,KACfC,OAA0B,GAA1BA,OAA0B;EAG5C;AACF;AAEA,MAAMC,QAAQ,GAAIC,KAAc,IAC7BA,KAAK,EAAyBC,YAAY,KAAK,QAAQ;;AAE1D;AACA,MAAMC,uBAAuB,GAAIL,MAAc,IAAa;EAC1D,MAAMM,YAAY,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAE9C,KAAK,MAAMC,KAAK,IAAIR,MAAM,CAACQ,KAAK,IAAI,EAAE,EAAE;IACtC,MAAMC,MAAM,GAAGD,KAAK,CAACE,QAAQ,EAAED,MAAM,IAAI,gBAAgB;IAEzD,IAAI,CAACA,MAAM,CAACE,UAAU,CAAC,GAAG,CAAC,EAAE;MAC3BL,YAAY,CAACM,GAAG,CAACH,MAAM,EAAE,CAACH,YAAY,CAACO,GAAG,CAACJ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D;EACF;EAEA,OAAO,CAAC,GAAGH,YAAY,CAAC,CACrBQ,GAAG,CAAC,CAAC,CAACL,MAAM,EAAEM,KAAK,CAAC,KAAK,GAAGN,MAAM,MAAMM,KAAK,EAAE,CAAC,CAChDC,IAAI,CAAC,IAAI,CAAC;AACf,CAAC;AAED,MAAMC,iBAAiB,GAAIC,KAAc,IAAY;EACnD,IAAIA,KAAK,YAAYvB,oBAAoB,EAAE;IACzC,OAAOuB,KAAK;EACd;;EAEA;EACA,IAAIhB,QAAQ,CAACgB,KAAK,CAAC,EAAE;IACnB,OAAO,IAAIvB,oBAAoB,CAC7B,iDAAiDU,uBAAuB,CAACa,KAAK,CAAC,IAAI,2BAA2B,GAAG,EACjHA,KACF,CAAC;EACH;EAEA,MAAMC,MAAM,GACV,OAAOD,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,GACtCA,KAAK,GACNE,SAAS;EAEf,IAAID,MAAM,EAAElB,OAAO,EAAE;IACnB,OAAO,IAAIN,oBAAoB,CAC7BuB,KAAK,YAAYtB,KAAK,GAAGsB,KAAK,CAACnB,OAAO,GAAGsB,MAAM,CAACH,KAAK,CAAC,EACtDE,SAAS,EACTD,MAAM,CAAClB,OACT,CAAC;EACH;EAEA,OAAOP,OAAO,CAACwB,KAAK,CAAC;AACvB,CAAC;AAED,SAASvB,oBAAoB,EAAEsB,iBAAiB","ignoreList":[]}
|