openchs-models 1.31.54 → 1.31.55

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.
@@ -261,7 +261,7 @@ _defineProperty(AddressLevel, "schema", {
261
261
  },
262
262
  locationProperties: {
263
263
  type: "list",
264
- objectType: "Observation"
264
+ objectType: "EmbeddedObservation"
265
265
  },
266
266
  titleLineage: {
267
267
  type: "string",
@@ -362,7 +362,7 @@ _defineProperty(ChecklistItem, "schema", {
362
362
  },
363
363
  observations: {
364
364
  type: "list",
365
- objectType: "Observation"
365
+ objectType: "EmbeddedObservation"
366
366
  },
367
367
  checklist: "Checklist",
368
368
  approvalStatuses: {
package/dist/Encounter.js CHANGED
@@ -132,10 +132,10 @@ _defineProperty(Encounter, "schema", {
132
132
  individual: _SchemaNames.default.Individual,
133
133
  observations: {
134
134
  type: "list",
135
- objectType: "Observation"
135
+ objectType: "EmbeddedObservation"
136
136
  },
137
137
  encounterLocation: {
138
- type: _SchemaNames.default.Point,
138
+ type: _SchemaNames.default.EmbeddedPoint,
139
139
  optional: true
140
140
  },
141
141
  name: {
@@ -156,10 +156,10 @@ _defineProperty(Encounter, "schema", {
156
156
  },
157
157
  cancelObservations: {
158
158
  type: "list",
159
- objectType: "Observation"
159
+ objectType: "EmbeddedObservation"
160
160
  },
161
161
  cancelLocation: {
162
- type: _SchemaNames.default.Point,
162
+ type: _SchemaNames.default.EmbeddedPoint,
163
163
  optional: true
164
164
  },
165
165
  voided: {
@@ -33,8 +33,6 @@ var _EncounterType = _interopRequireDefault(require("./EncounterType"));
33
33
 
34
34
  var _Encounter = _interopRequireDefault(require("./Encounter"));
35
35
 
36
- var _ProgramOutcome = _interopRequireDefault(require("./ProgramOutcome"));
37
-
38
36
  var _Form = _interopRequireDefault(require("./application/Form"));
39
37
 
40
38
  var _FormElementGroup = _interopRequireDefault(require("./application/FormElementGroup"));
@@ -248,9 +246,6 @@ const program = refDataNameTranslated(_Program.default, {
248
246
  res: "operationalProgram",
249
247
  syncWeight: 3
250
248
  });
251
- const programOutcome = refDataNameTranslated(_ProgramOutcome.default, {
252
- syncWeight: 3
253
- });
254
249
  const gender = refDataNameTranslated(_Gender.default, {
255
250
  syncWeight: 1
256
251
  });
@@ -630,7 +625,7 @@ class EntityMetaData {
630
625
 
631
626
  //order is important. last entity in each (tx and ref) with be executed first. parent should be synced before the child.
632
627
  static model() {
633
- return [groupDashboard, approvalStatus, dashboardSectionCardMapping, dashboardSection, dashboardFilter, dashboard, reportCard, standardReportCardType, menuItem, locationHierarchy, video, checklistItemDetail, checklistDetail, rule, ruleDependency, individualRelationshipType, individualRelationGenderMapping, individualRelation, formMapping, formElement, formElementGroup, form, documentationItem, documentation, identifierSource, organisationConfig, platformTranslation, translation, locationMapping, addressLevel, taskStatus, taskType, encounterType, program, programOutcome, gender, groupRole, subjectType, conceptAnswer, concept, myGroups, groupPrivileges, groups, privilege, resetSync, subjectMigration, userSubjectAssignment, task, taskUnAssigment, subjectProgramEligibility, news, videoTelemetric, groupSubject, comment, commentThread, entityApprovalStatus, subjectEntityApprovalStatus, encounterEntityApprovalStatus, programEncounterEntityApprovalStatus, programEnrolmentEntityApprovalStatus, checklistItemEntityApprovalStatus, individualRelationship, checklistItem, checklist, encounter, identifierAssignment, programEncounter, programEnrolment, individual, extension, userInfo, ruleFailureTelemetry, syncTelemetry];
628
+ return [groupDashboard, approvalStatus, dashboardSectionCardMapping, dashboardSection, dashboardFilter, dashboard, reportCard, standardReportCardType, menuItem, locationHierarchy, video, checklistItemDetail, checklistDetail, rule, ruleDependency, individualRelationshipType, individualRelationGenderMapping, individualRelation, formMapping, formElement, formElementGroup, form, documentationItem, documentation, identifierSource, organisationConfig, platformTranslation, translation, locationMapping, addressLevel, taskStatus, taskType, encounterType, program, gender, groupRole, subjectType, conceptAnswer, concept, myGroups, groupPrivileges, groups, privilege, resetSync, subjectMigration, userSubjectAssignment, task, taskUnAssigment, subjectProgramEligibility, news, videoTelemetric, groupSubject, comment, commentThread, entityApprovalStatus, subjectEntityApprovalStatus, encounterEntityApprovalStatus, programEncounterEntityApprovalStatus, programEnrolmentEntityApprovalStatus, checklistItemEntityApprovalStatus, individualRelationship, checklistItem, checklist, encounter, identifierAssignment, programEncounter, programEnrolment, individual, extension, userInfo, ruleFailureTelemetry, syncTelemetry];
634
629
  }
635
630
 
636
631
  static entitiesLoadedFromServer() {
package/dist/Family.js CHANGED
@@ -226,7 +226,7 @@ _defineProperty(Family, "schema", {
226
226
  },
227
227
  observations: {
228
228
  type: "list",
229
- objectType: "Observation"
229
+ objectType: "EmbeddedObservation"
230
230
  }
231
231
  }
232
232
  });
@@ -891,6 +891,18 @@ class Individual extends _BaseEntity.default {
891
891
  return _lodash.default.filter(this.getEncounters(true), encounter => !encounter.encounterDateTime && _lodash.default.isNil(encounter.cancelDateTime));
892
892
  }
893
893
 
894
+ everScheduledEncounters() {
895
+ return _lodash.default.filter(this.getEncounters(true), encounter => !_lodash.default.isNil(encounter.earliestVisitDateTime) && _lodash.default.isNil(encounter.cancelDateTime));
896
+ }
897
+
898
+ scheduledEncountersOfType(encounterTypeName) {
899
+ return this.scheduledEncounters().filter(scheduledEncounter => scheduledEncounter.encounterType.name === encounterTypeName);
900
+ }
901
+
902
+ everScheduledEncountersOfType(encounterTypeName) {
903
+ return this.everScheduledEncounters().filter(scheduledEncounter => scheduledEncounter.encounterType.name === encounterTypeName);
904
+ }
905
+
894
906
  findObservationInLastEncounter(conceptNameOrUuid, currentEncounter) {
895
907
  const lastEncounter = this.findLastEncounterOfType(currentEncounter, _lodash.default.get(currentEncounter, 'encounterType'));
896
908
  return lastEncounter ? lastEncounter.findObservation(conceptNameOrUuid) : null;
@@ -1104,7 +1116,7 @@ _defineProperty(Individual, "schema", {
1104
1116
  },
1105
1117
  observations: {
1106
1118
  type: "list",
1107
- objectType: "Observation"
1119
+ objectType: "EmbeddedObservation"
1108
1120
  },
1109
1121
  relationships: {
1110
1122
  type: "list",
@@ -1115,7 +1127,7 @@ _defineProperty(Individual, "schema", {
1115
1127
  objectType: "GroupSubject"
1116
1128
  },
1117
1129
  registrationLocation: {
1118
- type: _SchemaNames.default.Point,
1130
+ type: _SchemaNames.default.EmbeddedPoint,
1119
1131
  optional: true
1120
1132
  },
1121
1133
  comments: {
@@ -261,7 +261,8 @@ class Observation extends _PersistedObject.default {
261
261
  }
262
262
 
263
263
  _defineProperty(Observation, "schema", {
264
- name: "Observation",
264
+ name: "EmbeddedObservation",
265
+ embedded: true,
265
266
  properties: {
266
267
  concept: "Concept",
267
268
  valueJSON: "string"
@@ -17,8 +17,6 @@ var _lodash = _interopRequireDefault(require("lodash"));
17
17
 
18
18
  var _ValidationResult = _interopRequireDefault(require("./application/ValidationResult"));
19
19
 
20
- var _Point = _interopRequireDefault(require("./geo/Point"));
21
-
22
20
  var _EntityApprovalStatus = _interopRequireDefault(require("./EntityApprovalStatus"));
23
21
 
24
22
  var _SchemaNames = _interopRequireDefault(require("./SchemaNames"));
@@ -196,7 +194,7 @@ _defineProperty(ProgramEncounter, "schema", {
196
194
  programEnrolment: _SchemaNames.default.ProgramEnrolment,
197
195
  observations: {
198
196
  type: "list",
199
- objectType: "Observation"
197
+ objectType: "EmbeddedObservation"
200
198
  },
201
199
  cancelDateTime: {
202
200
  type: "date",
@@ -204,14 +202,14 @@ _defineProperty(ProgramEncounter, "schema", {
204
202
  },
205
203
  cancelObservations: {
206
204
  type: "list",
207
- objectType: "Observation"
205
+ objectType: "EmbeddedObservation"
208
206
  },
209
207
  encounterLocation: {
210
- type: _SchemaNames.default.Point,
208
+ type: _SchemaNames.default.EmbeddedPoint,
211
209
  optional: true
212
210
  },
213
211
  cancelLocation: {
214
- type: _SchemaNames.default.Point,
212
+ type: _SchemaNames.default.EmbeddedPoint,
215
213
  optional: true
216
214
  },
217
215
  voided: {
@@ -11,8 +11,6 @@ var _ResourceUtil = _interopRequireDefault(require("./utility/ResourceUtil"));
11
11
 
12
12
  var _Program = _interopRequireDefault(require("./Program"));
13
13
 
14
- var _ProgramOutcome = _interopRequireDefault(require("./ProgramOutcome"));
15
-
16
14
  var _ProgramEncounter = _interopRequireDefault(require("./ProgramEncounter"));
17
15
 
18
16
  var _BaseEntity = _interopRequireDefault(require("./BaseEntity"));
@@ -98,14 +96,6 @@ class ProgramEnrolment extends _BaseEntity.default {
98
96
  this.that.programExitObservations = this.fromEntityList(x);
99
97
  }
100
98
 
101
- get programOutcome() {
102
- return this.toEntity("programOutcome", _ProgramOutcome.default);
103
- }
104
-
105
- set programOutcome(x) {
106
- this.that.programOutcome = this.fromObject(x);
107
- }
108
-
109
99
  get encounters() {
110
100
  return this.toEntityList("encounters", _ProgramEncounter.default);
111
101
  }
@@ -217,7 +207,6 @@ class ProgramEnrolment extends _BaseEntity.default {
217
207
  resource["programUUID"] = this.program.uuid;
218
208
  resource.enrolmentDateTime = _General.default.isoFormat(this.enrolmentDateTime);
219
209
  resource.programExitDateTime = _General.default.isoFormat(this.programExitDateTime);
220
- resource["programOutcomeUUID"] = _lodash.default.isNil(this.programOutcome) ? null : this.programOutcome.uuid;
221
210
  resource["individualUUID"] = this.individual.uuid;
222
211
  if (!_lodash.default.isNil(this.checklist)) resource["checklistUUID"] = this.checklist.uuid;
223
212
  resource["observations"] = [];
@@ -242,20 +231,12 @@ class ProgramEnrolment extends _BaseEntity.default {
242
231
 
243
232
  static fromResource(resource, entityService) {
244
233
  const program = entityService.findByKey("uuid", _ResourceUtil.default.getUUIDFor(resource, "programUUID"), _Program.default.schema.name);
245
-
246
- const programOutcomeUUID = _ResourceUtil.default.getUUIDFor(resource, "programOutcomeUUID");
247
-
248
234
  const individual = entityService.findByKey("uuid", _ResourceUtil.default.getUUIDFor(resource, "individualUUID"), _Individual.default.schema.name);
249
235
 
250
236
  const programEnrolment = _General.default.assignFields(resource, new ProgramEnrolment(), ["uuid", "voided"], ["enrolmentDateTime", "programExitDateTime"], ["observations", "programExitObservations"], entityService);
251
237
 
252
238
  programEnrolment.program = program;
253
239
  programEnrolment.individual = individual;
254
-
255
- if (!_lodash.default.isNil(programOutcomeUUID)) {
256
- programEnrolment.programOutcome = entityService.findByKey("uuid", programOutcomeUUID, _ProgramOutcome.default.schema.name);
257
- }
258
-
259
240
  if (!_lodash.default.isNil(resource.enrolmentLocation)) programEnrolment.enrolmentLocation = _Point.default.fromResource(resource.enrolmentLocation);
260
241
  if (!_lodash.default.isNil(resource.exitLocation)) programEnrolment.exitLocation = _Point.default.fromResource(resource.exitLocation);
261
242
  (0, _AuditUtil.mapAuditFields)(programEnrolment, resource);
@@ -290,7 +271,6 @@ class ProgramEnrolment extends _BaseEntity.default {
290
271
  programEnrolment.program = _lodash.default.isNil(this.program) ? null : this.program.clone();
291
272
  programEnrolment.enrolmentDateTime = this.enrolmentDateTime;
292
273
  programEnrolment.programExitDateTime = this.programExitDateTime;
293
- programEnrolment.programOutcome = _lodash.default.isNil(this.programOutcome) ? null : this.programOutcome.clone();
294
274
  programEnrolment.individual = this.individual;
295
275
  programEnrolment.observations = _ObservationsHolder.default.clone(this.observations);
296
276
  programEnrolment.programExitObservations = _ObservationsHolder.default.clone(this.programExitObservations);
@@ -654,10 +634,6 @@ class ProgramEnrolment extends _BaseEntity.default {
654
634
  observations: this.observations,
655
635
  programExitDateTime: this.programExitDateTime,
656
636
  programExitObservations: this.programExitObservations,
657
- programOutcome: {
658
- type: "ProgramOutcome",
659
- optional: true
660
- },
661
637
  encounters: this.encounters,
662
638
  checklists: this.checklists,
663
639
  individualUUID: this.individual.uuid,
@@ -681,7 +657,7 @@ _defineProperty(ProgramEnrolment, "schema", {
681
657
  enrolmentDateTime: "date",
682
658
  observations: {
683
659
  type: "list",
684
- objectType: "Observation"
660
+ objectType: "EmbeddedObservation"
685
661
  },
686
662
  programExitDateTime: {
687
663
  type: "date",
@@ -689,11 +665,7 @@ _defineProperty(ProgramEnrolment, "schema", {
689
665
  },
690
666
  programExitObservations: {
691
667
  type: "list",
692
- objectType: "Observation"
693
- },
694
- programOutcome: {
695
- type: "ProgramOutcome",
696
- optional: true
668
+ objectType: "EmbeddedObservation"
697
669
  },
698
670
  encounters: {
699
671
  type: "list",
@@ -705,11 +677,11 @@ _defineProperty(ProgramEnrolment, "schema", {
705
677
  },
706
678
  individual: "Individual",
707
679
  enrolmentLocation: {
708
- type: _SchemaNames.default.Point,
680
+ type: _SchemaNames.default.EmbeddedPoint,
709
681
  optional: true
710
682
  },
711
683
  exitLocation: {
712
- type: _SchemaNames.default.Point,
684
+ type: _SchemaNames.default.EmbeddedPoint,
713
685
  optional: true
714
686
  },
715
687
  voided: {
package/dist/Schema.js CHANGED
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.createTransactionDataMapForEmbeddedFields = createTransactionDataMapForEmbeddedFields;
6
7
  exports.default = void 0;
7
8
 
8
9
  var _Settings = _interopRequireDefault(require("./Settings"));
@@ -19,8 +20,6 @@ var _Family = _interopRequireDefault(require("./Family"));
19
20
 
20
21
  var _AddressLevel = _interopRequireWildcard(require("./AddressLevel"));
21
22
 
22
- var _UserDefinedIndividualProperty = _interopRequireDefault(require("./UserDefinedIndividualProperty"));
23
-
24
23
  var _Gender = _interopRequireDefault(require("./Gender"));
25
24
 
26
25
  var _EntitySyncStatus = _interopRequireDefault(require("./EntitySyncStatus"));
@@ -37,8 +36,6 @@ var _Encounter = _interopRequireDefault(require("./Encounter"));
37
36
 
38
37
  var _EncounterType = _interopRequireDefault(require("./EncounterType"));
39
38
 
40
- var _ProgramOutcome = _interopRequireDefault(require("./ProgramOutcome"));
41
-
42
39
  var _FormElement = _interopRequireDefault(require("./application/FormElement"));
43
40
 
44
41
  var _FormElementGroup = _interopRequireDefault(require("./application/FormElementGroup"));
@@ -53,8 +50,6 @@ var _EntityQueue = _interopRequireDefault(require("./EntityQueue"));
53
50
 
54
51
  var _FormMapping = _interopRequireDefault(require("./application/FormMapping"));
55
52
 
56
- var _ConfigFile = _interopRequireDefault(require("./ConfigFile"));
57
-
58
53
  var _ChecklistItemStatus = _interopRequireDefault(require("./ChecklistItemStatus"));
59
54
 
60
55
  var _ChecklistItemDetail = _interopRequireDefault(require("./ChecklistItemDetail"));
@@ -197,7 +192,7 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
197
192
 
198
193
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
199
194
 
200
- const entities = [_DashboardFilter.default, _LocaleMapping.default, _Settings.default, _ConceptAnswer.default, _Concept.default, _EncounterType.default, _Gender.default, _UserDefinedIndividualProperty.default, _AddressLevel.LocationMapping, _AddressLevel.default, _KeyValue.default, _Form.default, _FormMapping.default, _FormElementGroup.default, _FormElement.default, _SubjectType.default, _Individual.default, _ProgramOutcome.default, _Program.default, _ProgramEnrolment.default, _Observation.default, _ProgramEncounter.default, _Encounter.default, _EntitySyncStatus.default, _EntityQueue.default, _ConfigFile.default, _Checklist.default, _ChecklistItem.default, _Format.default, _UserInfo.default, _StringKeyNumericValue.default, _Family.default, _IndividualRelation.default, _IndividualRelationGenderMapping.default, _IndividualRelationshipType.default, _IndividualRelationship.default, _RuleDependency.default, _Rule.default, _ChecklistItemStatus.default, _ChecklistDetail.default, _ChecklistItemDetail.default, _VideoTelemetric.default, _Video.default, _MediaQueue.default, _Point.default, _SyncTelemetry.default, _IdentifierSource.default, _IdentifierAssignment.default, _RuleFailureTelemetry.default, _BeneficiaryModePin.default, _OrganisationConfig.default, _PlatformTranslation.default, _Translation.default, _Groups.default, _MyGroups.default, _GroupPrivileges.default, _Privilege.default, _GroupRole.default, _GroupSubject.default, _DashboardCache.default, _CustomDashboardCache.default, _LocationHierarchy.default, _ReportCard.default, _Dashboard.default, _DashboardSectionCardMapping.default, _DraftSubject.default, _StandardReportCardType.default, _ApprovalStatus.default, _EntityApprovalStatus.default, _GroupDashboard.default, _DashboardSection.default, _News.default, _Comment.default, _CommentThread.default, _Extension.default, _SubjectMigration.default, _ResetSync.default, _Documentation.default, _DocumentationItem.default, _TaskType.default, _TaskStatus.default, _Task.default, _TaskUnAssignment.default, _DraftEncounter.default, _SubjectProgramEligibility.default, _MenuItem.default, _UserSubjectAssignment.default];
195
+ const entities = [_DashboardFilter.default, _LocaleMapping.default, _Settings.default, _ConceptAnswer.default, _Concept.default, _EncounterType.default, _Gender.default, _AddressLevel.LocationMapping, _AddressLevel.default, _KeyValue.default, _Form.default, _FormMapping.default, _FormElementGroup.default, _FormElement.default, _SubjectType.default, _Individual.default, _Program.default, _ProgramEnrolment.default, _Observation.default, _ProgramEncounter.default, _Encounter.default, _EntitySyncStatus.default, _EntityQueue.default, _Checklist.default, _ChecklistItem.default, _Format.default, _UserInfo.default, _StringKeyNumericValue.default, _Family.default, _IndividualRelation.default, _IndividualRelationGenderMapping.default, _IndividualRelationshipType.default, _IndividualRelationship.default, _RuleDependency.default, _Rule.default, _ChecklistItemStatus.default, _ChecklistDetail.default, _ChecklistItemDetail.default, _VideoTelemetric.default, _Video.default, _MediaQueue.default, _Point.default, _SyncTelemetry.default, _IdentifierSource.default, _IdentifierAssignment.default, _RuleFailureTelemetry.default, _BeneficiaryModePin.default, _OrganisationConfig.default, _PlatformTranslation.default, _Translation.default, _Groups.default, _MyGroups.default, _GroupPrivileges.default, _Privilege.default, _GroupRole.default, _GroupSubject.default, _DashboardCache.default, _CustomDashboardCache.default, _LocationHierarchy.default, _ReportCard.default, _Dashboard.default, _DashboardSectionCardMapping.default, _DraftSubject.default, _StandardReportCardType.default, _ApprovalStatus.default, _EntityApprovalStatus.default, _GroupDashboard.default, _DashboardSection.default, _News.default, _Comment.default, _CommentThread.default, _Extension.default, _SubjectMigration.default, _ResetSync.default, _Documentation.default, _DocumentationItem.default, _TaskType.default, _TaskStatus.default, _Task.default, _TaskUnAssignment.default, _DraftEncounter.default, _SubjectProgramEligibility.default, _MenuItem.default, _UserSubjectAssignment.default];
201
196
 
202
197
  function migrateObjectTypeFieldToEmbedded(newDB, oldDB, schemaName, field, creatorFn) {
203
198
  console.log(`schema: ${schemaName}, field: ${field}`);
@@ -277,7 +272,100 @@ function migrateEmbeddedObjects(oldDB, newDB) {
277
272
  newDB.deleteModel("StringKeyNumericValue");
278
273
  }
279
274
 
280
- const VersionWithEmbeddedMigrationProblem = 185;
275
+ function flush(db) {
276
+ db.commitTransaction();
277
+ db.beginTransaction();
278
+ }
279
+
280
+ function shouldFlush(numberOfRecords) {
281
+ const batchSize = 100;
282
+ return numberOfRecords % batchSize === batchSize - 1;
283
+ }
284
+
285
+ function createTransactionDataMapForEmbeddedFields() {
286
+ const map = new Map();
287
+
288
+ _MetaDataService.default.forEachPointField((fieldName, schemaName) => {
289
+ if (map.has(schemaName)) {
290
+ map.get(schemaName).push({
291
+ fieldName,
292
+ fieldType: "Point"
293
+ });
294
+ } else {
295
+ map.set(schemaName, [{
296
+ fieldName,
297
+ fieldType: "Point"
298
+ }]);
299
+ }
300
+ });
301
+
302
+ _MetaDataService.default.forEachObservationField((fieldName, schemaName) => {
303
+ if (map.has(schemaName)) {
304
+ map.get(schemaName).push({
305
+ fieldName,
306
+ fieldType: "Obs"
307
+ });
308
+ } else {
309
+ map.set(schemaName, [{
310
+ fieldName,
311
+ fieldType: "Obs"
312
+ }]);
313
+ }
314
+ });
315
+
316
+ return map;
317
+ }
318
+
319
+ function migrateAllEmbeddedForTxnData(oldDB, newDB) {
320
+ const startTime = new Date();
321
+ flush(newDB);
322
+ const map = createTransactionDataMapForEmbeddedFields();
323
+ let recordCounter = 0;
324
+ const conceptMap = new Map();
325
+ map.forEach((fields, schemaName) => {
326
+ console.log(`schema: ${schemaName}, fields: ${fields.length}`);
327
+ newDB.objects(schemaName).forEach(newDbParentEntity => {
328
+ if (shouldFlush(recordCounter)) {
329
+ flush(newDB);
330
+ }
331
+
332
+ fields.forEach(field => {
333
+ const oldEntity = oldDB.objects(schemaName).filtered(`uuid = "${newDbParentEntity.uuid}"`)[0];
334
+ const oldValue = oldEntity[field.fieldName];
335
+
336
+ if (!_lodash.default.isNil(oldValue)) {
337
+ if (field.fieldType === "Point") newDbParentEntity[field.fieldName] = {
338
+ x: oldValue.x,
339
+ y: oldValue.y
340
+ };else {
341
+ const newObsList = [];
342
+ oldValue.forEach(oldItemValue => {
343
+ let newConcept = conceptMap.get(oldItemValue.concept.uuid);
344
+
345
+ if (_lodash.default.isNil(newConcept)) {
346
+ newConcept = newDB.objects("Concept").filtered(`uuid = "${oldItemValue.concept.uuid}"`)[0];
347
+ conceptMap.set(oldItemValue.concept.uuid, newConcept);
348
+ }
349
+
350
+ newObsList.push({
351
+ concept: newConcept,
352
+ valueJSON: oldItemValue.valueJSON
353
+ });
354
+ });
355
+ newDbParentEntity[field.fieldName] = newObsList;
356
+ }
357
+ }
358
+ });
359
+ recordCounter++;
360
+ });
361
+ });
362
+ flush(newDB);
363
+ newDB.deleteModel("Point");
364
+ newDB.deleteModel("Observation");
365
+ const endTime = new Date();
366
+ const diff = (0, _moment.default)(endTime).diff(startTime, "seconds", true);
367
+ console.log("Total Time Taken", diff, "seconds");
368
+ }
281
369
 
282
370
  function createRealmConfig() {
283
371
  return {
@@ -287,17 +375,9 @@ function createRealmConfig() {
287
375
  return doCompact;
288
376
  },
289
377
  //order is important, should be arranged according to the dependency
290
- schemaVersion: 186,
378
+ schemaVersion: 187,
291
379
  onMigration: function (oldDB, newDB) {
292
380
  console.log("[AvniModels.Schema]", `Running migration with old schema version: ${oldDB.schemaVersion} and new schema version: ${newDB.schemaVersion}`);
293
- if (oldDB.schemaVersion === VersionWithEmbeddedMigrationProblem) throw new Error(`Update from schema version ${VersionWithEmbeddedMigrationProblem} is not allowed. Please uninstall and install app.`);
294
-
295
- if (oldDB.schemaVersion < 10) {
296
- const oldObjects = oldDB.objects("DecisionConfig");
297
- oldObjects.forEach(decisionConfig => {
298
- newDB.create(_ConfigFile.default.schema.name, _ConfigFile.default.create(decisionConfig.fileName, decisionConfig.decisionCode), true);
299
- });
300
- }
301
381
 
302
382
  if (oldDB.schemaVersion < 17) {
303
383
  const oldObjects = oldDB.objects("AddressLevel");
@@ -901,7 +981,14 @@ function createRealmConfig() {
901
981
  migrateEmbeddedObjects(oldDB, newDB);
902
982
  }
903
983
 
904
- if (oldDB.schemaVersion < VersionWithEmbeddedMigrationProblem) {// removed migration code. keeping the version number in case this number is required for any checks later
984
+ if (oldDB.schemaVersion < 185) {
985
+ migrateAllEmbeddedForTxnData(oldDB, newDB);
986
+ }
987
+
988
+ if (oldDB.schemaVersion < 186) {// newDB.deleteModel("UserDefinedIndividualProperty");
989
+ // newDB.deleteModel("ConfigFile");
990
+ // newDB.deleteModel("Decision");
991
+ // newDB.deleteModel("ProgramOutcome");
905
992
  }
906
993
  }
907
994
  };
@@ -91,7 +91,7 @@ _defineProperty(SchemaNames, "Concept", "Concept");
91
91
 
92
92
  _defineProperty(SchemaNames, "EntityApprovalStatus", "EntityApprovalStatus");
93
93
 
94
- _defineProperty(SchemaNames, "Point", "Point");
94
+ _defineProperty(SchemaNames, "EmbeddedPoint", "EmbeddedPoint");
95
95
 
96
96
  var _default = SchemaNames;
97
97
  exports.default = _default;
@@ -176,6 +176,14 @@ class SubjectType extends _ReferenceEntity.default {
176
176
  this.that.directlyAssignable = x;
177
177
  }
178
178
 
179
+ get settings() {
180
+ return this.that.settings;
181
+ }
182
+
183
+ set settings(x) {
184
+ this.that.settings = x;
185
+ }
186
+
179
187
  static create(name, group = false, household = false, type) {
180
188
  let subjectType = new SubjectType();
181
189
  subjectType.uuid = _General.default.randomUUID();
@@ -210,6 +218,7 @@ class SubjectType extends _ReferenceEntity.default {
210
218
  subjectType.syncRegistrationConcept1 = _ResourceUtil.default.getUUIDFor(operationalSubjectType, 'syncRegistrationConcept1');
211
219
  subjectType.syncRegistrationConcept2 = _ResourceUtil.default.getUUIDFor(operationalSubjectType, 'syncRegistrationConcept2');
212
220
  subjectType.nameHelpText = _ResourceUtil.default.getUUIDFor(operationalSubjectType, 'nameHelpText');
221
+ subjectType.settings = !_.isNil(operationalSubjectType.settings) ? JSON.stringify(operationalSubjectType.settings) : '{}';
213
222
  return subjectType;
214
223
  }
215
224
 
@@ -237,6 +246,7 @@ class SubjectType extends _ReferenceEntity.default {
237
246
  cloned.syncRegistrationConcept1 = this.syncRegistrationConcept1;
238
247
  cloned.syncRegistrationConcept2 = this.syncRegistrationConcept2;
239
248
  cloned.nameHelpText = this.nameHelpText;
249
+ cloned.settings = this.settings;
240
250
  return cloned;
241
251
  }
242
252
 
@@ -264,6 +274,14 @@ class SubjectType extends _ReferenceEntity.default {
264
274
  return !_.isNil(this.iconFileS3Key);
265
275
  }
266
276
 
277
+ getSettings() {
278
+ return JSON.parse(this.settings);
279
+ }
280
+
281
+ getSetting(settingName) {
282
+ return this.getSettings()[settingName];
283
+ }
284
+
267
285
  }
268
286
 
269
287
  _defineProperty(SubjectType, "schema", {
@@ -344,6 +362,10 @@ _defineProperty(SubjectType, "schema", {
344
362
  nameHelpText: {
345
363
  type: "string",
346
364
  optional: true
365
+ },
366
+ settings: {
367
+ type: "string",
368
+ default: '{}'
347
369
  }
348
370
  }
349
371
  });
@@ -355,5 +377,10 @@ _defineProperty(SubjectType, "types", {
355
377
  Household: 'Household'
356
378
  });
357
379
 
380
+ _defineProperty(SubjectType, "settingKeys", {
381
+ displayRegistrationDetails: 'displayRegistrationDetails',
382
+ displayPlannedEncounters: 'displayPlannedEncounters'
383
+ });
384
+
358
385
  var _default = SubjectType;
359
386
  exports.default = _default;
@@ -66,6 +66,14 @@ class Form extends _BaseEntity.default {
66
66
  this.that.decisionRule = x;
67
67
  }
68
68
 
69
+ get editFormRule() {
70
+ return this.that.editFormRule;
71
+ }
72
+
73
+ set editFormRule(x) {
74
+ this.that.editFormRule = x;
75
+ }
76
+
69
77
  get visitScheduleRule() {
70
78
  return this.that.visitScheduleRule;
71
79
  }
@@ -118,7 +126,7 @@ class Form extends _BaseEntity.default {
118
126
  this.deleteOutOfSyncDrafts(entityService, resource.uuid);
119
127
  }
120
128
 
121
- return _General.default.assignFields(resource, new Form(), ["uuid", "name", "formType", "decisionRule", "visitScheduleRule", "taskScheduleRule", "validationRule", "checklistsRule", "taskScheduleRule"]);
129
+ return _General.default.assignFields(resource, new Form(), ["uuid", "name", "formType", "decisionRule", "editFormRule", "visitScheduleRule", "taskScheduleRule", "validationRule", "checklistsRule", "taskScheduleRule"]);
122
130
  }
123
131
 
124
132
  static deleteOutOfSyncDrafts(entityService, formUUID) {
@@ -219,6 +227,32 @@ class Form extends _BaseEntity.default {
219
227
 
220
228
  const extraObs = observations.filter(obs => _lodash.default.isNil(orderedObservations.find(oobs => oobs.concept.uuid === obs.concept.uuid)));
221
229
  return orderedObservations.concat(extraObs);
230
+ } //TODO add tests
231
+
232
+
233
+ orderObservationsPerFEG(observations) {
234
+ const orderedObservations = [];
235
+
236
+ const formElementOrdering = _lodash.default.sortBy(this.formElementGroups, feg => feg.displayOrder).map(feg => {
237
+ let fegOrderedObservations = [];
238
+ const returnValue = {};
239
+ returnValue.uuid = feg.uuid;
240
+ returnValue.feg = feg;
241
+ returnValue.sortedObservationsArray = fegOrderedObservations;
242
+ this.orderObservationsWithinAFEG(feg.getFormElements(), observations, fegOrderedObservations);
243
+ orderedObservations.concat(fegOrderedObservations);
244
+ return returnValue;
245
+ });
246
+
247
+ return formElementOrdering;
248
+ }
249
+
250
+ orderObservationsWithinAFEG(formElements, observations, orderedObservations) {
251
+ _lodash.default.sortBy(formElements, fe => fe.displayOrder).forEach(formElement => this.addSortedObservations(formElement, observations, orderedObservations));
252
+
253
+ const extraObs = observations.filter(obs => _lodash.default.isNil(orderedObservations.find(oobs => oobs.concept.uuid === obs.concept.uuid)));
254
+ orderedObservations.concat(extraObs);
255
+ return extraObs;
222
256
  }
223
257
 
224
258
  sectionWiseOrderedObservations(observations) {
@@ -348,6 +382,10 @@ _defineProperty(Form, "schema", {
348
382
  type: "string",
349
383
  optional: true
350
384
  },
385
+ editFormRule: {
386
+ type: "string",
387
+ optional: true
388
+ },
351
389
  visitScheduleRule: {
352
390
  type: "string",
353
391
  optional: true
@@ -170,10 +170,10 @@ _defineProperty(DraftEncounter, "schema", {
170
170
  individual: "Individual",
171
171
  observations: {
172
172
  type: "list",
173
- objectType: "Observation"
173
+ objectType: "EmbeddedObservation"
174
174
  },
175
175
  encounterLocation: {
176
- type: _SchemaNames.default.Point,
176
+ type: _SchemaNames.default.EmbeddedPoint,
177
177
  optional: true
178
178
  },
179
179
  name: {
@@ -194,10 +194,10 @@ _defineProperty(DraftEncounter, "schema", {
194
194
  },
195
195
  cancelObservations: {
196
196
  type: "list",
197
- objectType: "Observation"
197
+ objectType: "EmbeddedObservation"
198
198
  },
199
199
  cancelLocation: {
200
- type: _SchemaNames.default.Point,
200
+ type: _SchemaNames.default.EmbeddedPoint,
201
201
  optional: true
202
202
  },
203
203
  voided: {
@@ -211,10 +211,10 @@ _defineProperty(DraftSubject, "schema", {
211
211
  lowestAddressLevel: "AddressLevel",
212
212
  observations: {
213
213
  type: "list",
214
- objectType: "Observation"
214
+ objectType: "EmbeddedObservation"
215
215
  },
216
216
  registrationLocation: {
217
- type: _SchemaNames.default.Point,
217
+ type: _SchemaNames.default.EmbeddedPoint,
218
218
  optional: true
219
219
  },
220
220
  updatedOn: "date",
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
 
8
8
  //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error
9
- function SyncError(code, message, fileName, lineNumber) {
10
- let instance = new Error(message, fileName, lineNumber);
9
+ function SyncError(code, message) {
10
+ let instance = new Error(message);
11
11
  instance.errorCode = code;
12
12
  instance.errorText = message;
13
13
 
package/dist/geo/Point.js CHANGED
@@ -57,7 +57,8 @@ class Point extends _PersistedObject.default {
57
57
  }
58
58
 
59
59
  _defineProperty(Point, "schema", {
60
- name: "Point",
60
+ name: "EmbeddedPoint",
61
+ embedded: true,
61
62
  properties: {
62
63
  x: "double",
63
64
  y: "double"
package/dist/index.js CHANGED
@@ -75,18 +75,6 @@ Object.defineProperty(exports, "ConceptAnswer", {
75
75
  return _ConceptAnswer.default;
76
76
  }
77
77
  });
78
- Object.defineProperty(exports, "ConfigFile", {
79
- enumerable: true,
80
- get: function () {
81
- return _ConfigFile.default;
82
- }
83
- });
84
- Object.defineProperty(exports, "Decision", {
85
- enumerable: true,
86
- get: function () {
87
- return _Decision.default;
88
- }
89
- });
90
78
  Object.defineProperty(exports, "Duration", {
91
79
  enumerable: true,
92
80
  get: function () {
@@ -297,12 +285,6 @@ Object.defineProperty(exports, "Program", {
297
285
  return _Program.default;
298
286
  }
299
287
  });
300
- Object.defineProperty(exports, "ProgramOutcome", {
301
- enumerable: true,
302
- get: function () {
303
- return _ProgramOutcome.default;
304
- }
305
- });
306
288
  Object.defineProperty(exports, "ReferenceEntity", {
307
289
  enumerable: true,
308
290
  get: function () {
@@ -357,12 +339,6 @@ Object.defineProperty(exports, "StringKeyNumericValue", {
357
339
  return _StringKeyNumericValue.default;
358
340
  }
359
341
  });
360
- Object.defineProperty(exports, "UserDefinedIndividualProperty", {
361
- enumerable: true,
362
- get: function () {
363
- return _UserDefinedIndividualProperty.default;
364
- }
365
- });
366
342
  Object.defineProperty(exports, "UserInfo", {
367
343
  enumerable: true,
368
344
  get: function () {
@@ -830,10 +806,6 @@ var _Concept = _interopRequireDefault(require("./Concept"));
830
806
 
831
807
  var _ConceptAnswer = _interopRequireDefault(require("./ConceptAnswer"));
832
808
 
833
- var _ConfigFile = _interopRequireDefault(require("./ConfigFile"));
834
-
835
- var _Decision = _interopRequireDefault(require("./Decision"));
836
-
837
809
  var _Duration = _interopRequireDefault(require("./Duration"));
838
810
 
839
811
  var _Encounter = _interopRequireDefault(require("./Encounter"));
@@ -902,8 +874,6 @@ var _ProgramEnrolment = _interopRequireDefault(require("./ProgramEnrolment"));
902
874
 
903
875
  var _Program = _interopRequireDefault(require("./Program"));
904
876
 
905
- var _ProgramOutcome = _interopRequireDefault(require("./ProgramOutcome"));
906
-
907
877
  var _ReferenceEntity = _interopRequireDefault(require("./ReferenceEntity"));
908
878
 
909
879
  var _RuleDependency = _interopRequireDefault(require("./RuleDependency"));
@@ -922,8 +892,6 @@ var _StaticFormElementGroup = _interopRequireDefault(require("./application/Stat
922
892
 
923
893
  var _StringKeyNumericValue = _interopRequireDefault(require("./application/StringKeyNumericValue"));
924
894
 
925
- var _UserDefinedIndividualProperty = _interopRequireDefault(require("./UserDefinedIndividualProperty"));
926
-
927
895
  var _UserInfo = _interopRequireDefault(require("./UserInfo"));
928
896
 
929
897
  var _ValidationResult = _interopRequireDefault(require("./application/ValidationResult"));
@@ -221,7 +221,7 @@ _defineProperty(SubjectProgramEligibility, "schema", {
221
221
  },
222
222
  observations: {
223
223
  type: "list",
224
- objectType: "Observation"
224
+ objectType: "EmbeddedObservation"
225
225
  },
226
226
  voided: {
227
227
  type: "bool",
@@ -207,7 +207,7 @@ _defineProperty(IndividualRelationship, "schema", {
207
207
  },
208
208
  exitObservations: {
209
209
  type: "list",
210
- objectType: "Observation"
210
+ objectType: "EmbeddedObservation"
211
211
  },
212
212
  voided: {
213
213
  type: "bool",
package/dist/task/Task.js CHANGED
@@ -230,7 +230,7 @@ _defineProperty(Task, "schema", {
230
230
  },
231
231
  metadata: {
232
232
  type: "list",
233
- objectType: "Observation"
233
+ objectType: "EmbeddedObservation"
234
234
  },
235
235
  subject: {
236
236
  type: 'Individual',
@@ -238,7 +238,7 @@ _defineProperty(Task, "schema", {
238
238
  },
239
239
  observations: {
240
240
  type: "list",
241
- objectType: "Observation"
241
+ objectType: "EmbeddedObservation"
242
242
  },
243
243
  voided: {
244
244
  type: 'bool',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "openchs-models",
3
3
  "description": "OpenCHS data model to be used by front end clients",
4
- "version": "1.31.54",
4
+ "version": "1.31.55",
5
5
  "private": false,
6
6
  "repository": {
7
7
  "type": "git",
@@ -1,58 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _PersistedObject = _interopRequireDefault(require("./PersistedObject"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
-
14
- class ConfigFile extends _PersistedObject.default {
15
- constructor(that = null) {
16
- super(that);
17
- }
18
-
19
- get fileName() {
20
- return this.that.fileName;
21
- }
22
-
23
- set fileName(x) {
24
- this.that.fileName = x;
25
- }
26
-
27
- get contents() {
28
- return this.that.contents;
29
- }
30
-
31
- set contents(x) {
32
- this.that.contents = x;
33
- }
34
-
35
- static create(fileName, contents) {
36
- const configFile = new ConfigFile();
37
- configFile.fileName = fileName.toLowerCase();
38
- configFile.contents = contents;
39
- return configFile;
40
- }
41
-
42
- toString() {
43
- return this.fileName;
44
- }
45
-
46
- }
47
-
48
- _defineProperty(ConfigFile, "schema", {
49
- name: "ConfigFile",
50
- primaryKey: "fileName",
51
- properties: {
52
- fileName: "string",
53
- contents: "string"
54
- }
55
- });
56
-
57
- var _default = ConfigFile;
58
- exports.default = _default;
package/dist/Decision.js DELETED
@@ -1,63 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _PersistedObject = _interopRequireDefault(require("./PersistedObject"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
-
14
- class Decision extends _PersistedObject.default {
15
- constructor(that = null) {
16
- super(that);
17
- }
18
-
19
- get name() {
20
- return this.that.name;
21
- }
22
-
23
- set name(x) {
24
- this.that.name = x;
25
- }
26
-
27
- get value() {
28
- return this.that.value;
29
- }
30
-
31
- set value(x) {
32
- this.that.value = x;
33
- }
34
-
35
- get code() {
36
- return this.that.code;
37
- }
38
-
39
- set code(x) {
40
- this.that.code = x;
41
- }
42
-
43
- static newInstance(name, code, value) {
44
- return {
45
- name: name,
46
- code: code,
47
- value: value
48
- };
49
- }
50
-
51
- }
52
-
53
- _defineProperty(Decision, "schema", {
54
- name: "Decision",
55
- properties: {
56
- name: "string",
57
- code: "string",
58
- value: "string"
59
- }
60
- });
61
-
62
- var _default = Decision;
63
- exports.default = _default;
@@ -1,39 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _ReferenceEntity = _interopRequireDefault(require("./ReferenceEntity"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
-
14
- class ProgramOutcome extends _ReferenceEntity.default {
15
- constructor(that = null) {
16
- super(that);
17
- }
18
-
19
- get name() {
20
- return this.that.name;
21
- }
22
-
23
- set name(x) {
24
- this.that.name = x;
25
- }
26
-
27
- }
28
-
29
- _defineProperty(ProgramOutcome, "schema", {
30
- name: "ProgramOutcome",
31
- primaryKey: "uuid",
32
- properties: {
33
- uuid: "string",
34
- name: "string"
35
- }
36
- });
37
-
38
- var _default = ProgramOutcome;
39
- exports.default = _default;
@@ -1,58 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _PersistedObject = _interopRequireDefault(require("./PersistedObject"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
-
14
- class UserDefinedIndividualProperty extends _PersistedObject.default {
15
- constructor(that = null) {
16
- super(that);
17
- }
18
-
19
- get name() {
20
- return this.that.name;
21
- }
22
-
23
- set name(x) {
24
- this.that.name = x;
25
- }
26
-
27
- get value() {
28
- return this.that.value;
29
- }
30
-
31
- set value(x) {
32
- this.that.value = x;
33
- }
34
-
35
- get unit() {
36
- return this.that.unit;
37
- }
38
-
39
- set unit(x) {
40
- this.that.unit = x;
41
- }
42
-
43
- }
44
-
45
- _defineProperty(UserDefinedIndividualProperty, "schema", {
46
- name: "UserDefinedIndividualProperty",
47
- properties: {
48
- name: "string",
49
- value: "string",
50
- unit: {
51
- type: "string",
52
- optional: true
53
- }
54
- }
55
- });
56
-
57
- var _default = UserDefinedIndividualProperty;
58
- exports.default = _default;