openchs-models 1.31.8 → 1.31.10

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/Makefile CHANGED
@@ -13,7 +13,7 @@ build:
13
13
 
14
14
  release: get-current-version
15
15
  @echo "\033[0m"
16
- yarn version
16
+ @yarn version
17
17
  @echo " Now please run \nmake publish"
18
18
 
19
19
  publish:
package/dist/Checklist.js CHANGED
@@ -21,6 +21,8 @@ var _ChecklistDetail = _interopRequireDefault(require("./ChecklistDetail"));
21
21
 
22
22
  var _SchemaNames = _interopRequireDefault(require("./SchemaNames"));
23
23
 
24
+ var _EntityApprovalStatus = _interopRequireDefault(require("./EntityApprovalStatus"));
25
+
24
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
27
 
26
28
  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; }
@@ -126,6 +128,10 @@ class Checklist extends _BaseEntity.default {
126
128
  }`;
127
129
  }
128
130
 
131
+ addApprovalDescendantsWithLatestStatus(approvalStatus_status, list) {
132
+ _EntityApprovalStatus.default.addMatchingApprovalStatusEntity(this.items, approvalStatus_status, "baseDate", list);
133
+ }
134
+
129
135
  }
130
136
 
131
137
  _defineProperty(Checklist, "schema", {
@@ -305,6 +305,10 @@ class ChecklistItem extends _BaseEntity.default {
305
305
  this.that.latestEntityApprovalStatus = this.fromObject(entityApprovalStatus);
306
306
  }
307
307
 
308
+ getSchemaName() {
309
+ return _SchemaNames.default.ChecklistItem;
310
+ }
311
+
308
312
  }
309
313
 
310
314
  _defineProperty(ChecklistItem, "schema", {
package/dist/Encounter.js CHANGED
@@ -109,6 +109,10 @@ class Encounter extends _AbstractEncounter.default {
109
109
  return realmEncounter;
110
110
  }
111
111
 
112
+ getSchemaName() {
113
+ return _SchemaNames.default.Encounter;
114
+ }
115
+
112
116
  }
113
117
 
114
118
  _defineProperty(Encounter, "schema", {
@@ -22,6 +22,17 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
22
22
  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; }
23
23
 
24
24
  class EntityApprovalStatus extends _BaseEntity.default {
25
+ static getMatchingApprovalStatusEntity(entities, approvalStatus_status, latestFieldPath) {
26
+ return _lodash.default.max(entities.filter(x => !_lodash.default.isNil(x.latestEntityApprovalStatus) && x.latestEntityApprovalStatus.hasStatus(approvalStatus_status)), y => _lodash.default.get(y, latestFieldPath));
27
+ }
28
+
29
+ static addMatchingApprovalStatusEntity(entities, approvalStatus_status, latestFieldPath, list, groupingByPath) {
30
+ Object.values(_lodash.default.groupBy(entities, x => _lodash.default.get(x, groupingByPath))).forEach(y => {
31
+ const latestEntity = EntityApprovalStatus.getMatchingApprovalStatusEntity(y, approvalStatus_status, latestFieldPath);
32
+ if (!_lodash.default.isNil(latestEntity)) list.push(latestEntity);
33
+ });
34
+ }
35
+
25
36
  static getApprovalEntitiesSchema() {
26
37
  return [_SchemaNames.default.Individual, _SchemaNames.default.ProgramEncounter, _SchemaNames.default.Encounter, _SchemaNames.default.ProgramEnrolment, _SchemaNames.default.ChecklistItem];
27
38
  }
@@ -141,6 +152,22 @@ class EntityApprovalStatus extends _BaseEntity.default {
141
152
  }];
142
153
  }
143
154
 
155
+ hasStatus(status) {
156
+ return this.approvalStatus.status === status;
157
+ }
158
+
159
+ get isRejected() {
160
+ return this.approvalStatus.isRejected;
161
+ }
162
+
163
+ get isApproved() {
164
+ return this.approvalStatus.isApproved;
165
+ }
166
+
167
+ get isPending() {
168
+ return this.approvalStatus.isPending;
169
+ }
170
+
144
171
  }
145
172
 
146
173
  _defineProperty(EntityApprovalStatus, "schema", {
@@ -630,7 +630,7 @@ class EntityMetaData {
630
630
 
631
631
  //order is important. last entity in each (tx and ref) with be executed first. parent should be synced before the child.
632
632
  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, syncTelemetry, ruleFailureTelemetry];
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];
634
634
  }
635
635
 
636
636
  static entitiesLoadedFromServer() {
@@ -232,7 +232,7 @@ class Individual extends _BaseEntity.default {
232
232
  const individual = new Individual();
233
233
  individual.uuid = _General.default.randomUUID();
234
234
  individual.subjectType = _SubjectType.default.create("");
235
- individual.registrationDate = new Date();
235
+ individual.registrationDate = (0, _moment.default)().startOf('day').toDate();
236
236
  individual.gender = _Gender.default.create("");
237
237
  individual.observations = [];
238
238
  individual.encounters = [];
@@ -330,7 +330,7 @@ class Individual extends _BaseEntity.default {
330
330
  }
331
331
 
332
332
  static associateRelationship(child, childEntityClass, childResource, entityService) {
333
- var individual = _BaseEntity.default.getParentEntity(entityService, childEntityClass, childResource, "individualAUUID", Individual.schema.name);
333
+ let individual = _BaseEntity.default.getParentEntity(entityService, childEntityClass, childResource, "individualAUUID", Individual.schema.name);
334
334
 
335
335
  individual = _General.default.pick(individual, ["uuid"], ["enrolments", "encounters", "relationships", "groupSubjects", "comments", "groups"]);
336
336
 
@@ -351,7 +351,7 @@ class Individual extends _BaseEntity.default {
351
351
 
352
352
 
353
353
  try {
354
- var memberSubject = getParentByUUID("memberSubjectUUID");
354
+ let memberSubject = getParentByUUID("memberSubjectUUID");
355
355
  memberSubject = copyFieldsForSubject(memberSubject);
356
356
 
357
357
  _BaseEntity.default.addNewChild(child, memberSubject.groups);
@@ -453,12 +453,12 @@ class Individual extends _BaseEntity.default {
453
453
  }
454
454
 
455
455
  setDateOfBirth(date) {
456
- this.dateOfBirth = date;
456
+ this.dateOfBirth = (0, _moment.default)(date).startOf('day').toDate();
457
457
  this.dateOfBirthVerified = true;
458
458
  }
459
459
 
460
460
  setAge(age, isInYears) {
461
- this.dateOfBirth = (0, _moment.default)().subtract(age, isInYears ? "years" : "months").toDate();
461
+ this.dateOfBirth = (0, _moment.default)().subtract(age, isInYears ? "years" : "months").startOf('day').toDate();
462
462
  this.dateOfBirthVerified = false;
463
463
  }
464
464
 
@@ -971,6 +971,21 @@ class Individual extends _BaseEntity.default {
971
971
  this.that.latestEntityApprovalStatus = this.fromObject(entityApprovalStatus);
972
972
  }
973
973
 
974
+ getMemberEntitiesWithLatestStatus(approvalStatus_status) {
975
+ let descendants = [];
976
+ if (!_lodash.default.isNil(this.latestEntityApprovalStatus) && this.latestEntityApprovalStatus.hasStatus(approvalStatus_status)) descendants.push(this);
977
+
978
+ _EntityApprovalStatus.default.addMatchingApprovalStatusEntity(this.nonVoidedEncounters(), approvalStatus_status, "encounterDateTime", descendants, "encounterType.uuid");
979
+
980
+ _EntityApprovalStatus.default.addMatchingApprovalStatusEntity(this.nonVoidedEnrolments(), approvalStatus_status, "enrolmentDateTime", descendants, "program.uuid");
981
+
982
+ this.nonVoidedEnrolments().forEach(enrolment => {
983
+ const latestEntity = enrolment.addApprovalDescendantsWithLatestStatus(approvalStatus_status, descendants);
984
+ if (!_lodash.default.isNil(latestEntity)) descendants.push(latestEntity);
985
+ });
986
+ return descendants;
987
+ }
988
+
974
989
  toJSON() {
975
990
  return {
976
991
  uuid: this.uuid,
@@ -996,6 +1011,10 @@ class Individual extends _BaseEntity.default {
996
1011
  };
997
1012
  }
998
1013
 
1014
+ getSchemaName() {
1015
+ return _SchemaNames.default.Individual;
1016
+ }
1017
+
999
1018
  }
1000
1019
 
1001
1020
  _defineProperty(Individual, "schema", {
@@ -145,6 +145,10 @@ class ProgramEncounter extends _AbstractEncounter.default {
145
145
  this.that.latestEntityApprovalStatus = this.fromObject(entityApprovalStatus);
146
146
  }
147
147
 
148
+ getSchemaName() {
149
+ return _SchemaNames.default.ProgramEncounter;
150
+ }
151
+
148
152
  }
149
153
 
150
154
  _defineProperty(ProgramEncounter, "fieldKeys", {
@@ -591,6 +591,14 @@ class ProgramEnrolment extends _BaseEntity.default {
591
591
  this.that.latestEntityApprovalStatus = this.fromObject(entityApprovalStatus);
592
592
  }
593
593
 
594
+ addApprovalDescendantsWithLatestStatus(approvalStatus_status, list) {
595
+ _EntityApprovalStatus.default.addMatchingApprovalStatusEntity(this.nonVoidedEncounters(), approvalStatus_status, "encounterDateTime", list, "encounterType.uuid");
596
+
597
+ this.checklists.filter(x => !x.voided).forEach(x => {
598
+ x.addApprovalDescendantsWithLatestStatus(approvalStatus_status, list);
599
+ });
600
+ }
601
+
594
602
  toJSON() {
595
603
  return {
596
604
  uuid: this.uuid,
@@ -611,6 +619,10 @@ class ProgramEnrolment extends _BaseEntity.default {
611
619
  };
612
620
  }
613
621
 
622
+ getSchemaName() {
623
+ return _SchemaNames.default.ProgramEnrolment;
624
+ }
625
+
614
626
  }
615
627
 
616
628
  _defineProperty(ProgramEnrolment, "schema", {
@@ -136,7 +136,7 @@ class RuleFailureTelemetry extends _BaseEntity.default {
136
136
  }
137
137
 
138
138
  get toResource() {
139
- return _lodash.default.pick(this, ["uuid", "ruleUuid", "individualUuid", "errorMessage", "stacktrace", "closed", "errorDateTime", "sourceType", "sourceId", "entityType", "entityId", "appType"]);
139
+ return _lodash.default.pick(this, ["ruleUuid", "individualUuid", "errorMessage", "stacktrace", "closed", "errorDateTime", "sourceType", "sourceId", "entityType", "entityId", "appType"]);
140
140
  }
141
141
 
142
142
  clone() {
@@ -11,6 +11,8 @@ var _General = _interopRequireDefault(require("./utility/General"));
11
11
 
12
12
  var _TaskType = _interopRequireDefault(require("./task/TaskType"));
13
13
 
14
+ var _ApprovalStatus = _interopRequireDefault(require("./ApprovalStatus"));
15
+
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
17
 
16
18
  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; }
@@ -110,6 +112,10 @@ class StandardReportCardType extends _BaseEntity.default {
110
112
  return _.includes(this.defaultTypes(), this.name);
111
113
  }
112
114
 
115
+ getApprovalStatusForType() {
116
+ return typeToStatusMap[this.name];
117
+ }
118
+
113
119
  }
114
120
 
115
121
  _defineProperty(StandardReportCardType, "schema", {
@@ -145,5 +151,10 @@ _defineProperty(StandardReportCardType, "type", {
145
151
  DueChecklist: "Due checklist"
146
152
  });
147
153
 
154
+ const typeToStatusMap = {
155
+ [StandardReportCardType.type.PendingApproval]: _ApprovalStatus.default.statuses.Pending,
156
+ [StandardReportCardType.type.Approved]: _ApprovalStatus.default.statuses.Approved,
157
+ [StandardReportCardType.type.Rejected]: _ApprovalStatus.default.statuses.Rejected
158
+ };
148
159
  var _default = StandardReportCardType;
149
160
  exports.default = _default;
@@ -100,58 +100,6 @@ class FormMapping extends _BaseEntity.default {
100
100
  return formMapping;
101
101
  }
102
102
 
103
- getSchemaAndFilterQuery() {
104
- switch (this.form.formType) {
105
- case _Form.default.formTypes.IndividualProfile:
106
- return {
107
- schema: "Individual",
108
- filterQuery: `subjectType.uuid = '${this.subjectType.uuid}'`
109
- };
110
-
111
- case _Form.default.formTypes.IndividualEncounterCancellation:
112
- return {
113
- schema: "Encounter",
114
- filterQuery: `individual.subjectType.uuid = '${this.subjectType.uuid}' and encounterType.uuid = '${this.observationsTypeEntityUUID}' and cancelDateTime <> null`
115
- };
116
-
117
- case _Form.default.formTypes.Encounter:
118
- return {
119
- schema: "Encounter",
120
- filterQuery: `individual.subjectType.uuid = '${this.subjectType.uuid}' and encounterType.uuid = '${this.observationsTypeEntityUUID}' and cancelDateTime = null`
121
- };
122
-
123
- case _Form.default.formTypes.ProgramEnrolment:
124
- return {
125
- schema: "ProgramEnrolment",
126
- filterQuery: `individual.subjectType.uuid = '${this.subjectType.uuid}' and program.uuid = '${this.entityUUID}' and programExitDateTime = null`
127
- };
128
-
129
- case _Form.default.formTypes.ProgramExit:
130
- return {
131
- schema: "ProgramEnrolment",
132
- filterQuery: `individual.subjectType.uuid = '${this.subjectType.uuid}' and program.uuid = '${this.entityUUID}' and programExitDateTime <> null`
133
- };
134
-
135
- case _Form.default.formTypes.ProgramEncounter:
136
- return {
137
- schema: "ProgramEncounter",
138
- filterQuery: `programEnrolment.individual.subjectType.uuid = '${this.subjectType.uuid}' and programEnrolment.program.uuid = '${this.entityUUID}' and encounterType.uuid = '${this.observationsTypeEntityUUID}' and cancelDateTime = null`
139
- };
140
-
141
- case _Form.default.formTypes.ProgramEncounterCancellation:
142
- return {
143
- schema: "ProgramEncounter",
144
- filterQuery: `programEnrolment.individual.subjectType.uuid = '${this.subjectType.uuid}' and programEnrolment.program.uuid = '${this.entityUUID}' and encounterType.uuid = '${this.observationsTypeEntityUUID}' and cancelDateTime <> null`
145
- };
146
-
147
- case _Form.default.formTypes.ChecklistItem:
148
- return {
149
- schema: "ChecklistItem",
150
- filterQuery: ''
151
- };
152
- }
153
- }
154
-
155
103
  getEntityNameAndEntityTypeUUID() {
156
104
  const formTypes = _Form.default.formTypes;
157
105
 
@@ -124,13 +124,13 @@ class DraftEncounter extends _BaseEntity.default {
124
124
  draftEncounter.encounterType = encounter.encounterType;
125
125
  draftEncounter.encounterDateTime = encounter.encounterDateTime;
126
126
  draftEncounter.individual = encounter.individual;
127
- draftEncounter.observations = encounter.observations;
127
+ draftEncounter.observations = _ObservationsHolder.default.clone(encounter.observations);
128
128
  draftEncounter.encounterLocation = encounter.encounterLocation;
129
129
  draftEncounter.name = encounter.name;
130
130
  draftEncounter.earliestVisitDateTime = encounter.earliestVisitDateTime;
131
131
  draftEncounter.maxVisitDateTime = encounter.maxVisitDateTime;
132
132
  draftEncounter.cancelDateTime = encounter.cancelDateTime;
133
- draftEncounter.cancelObservations = encounter.cancelObservations;
133
+ draftEncounter.cancelObservations = _ObservationsHolder.default.clone(encounter.cancelObservations);
134
134
  draftEncounter.cancelLocation = encounter.cancelLocation;
135
135
  draftEncounter.voided = encounter.voided;
136
136
  draftEncounter.registrationLocation = encounter.registrationLocation;
@@ -148,7 +148,7 @@ class DraftSubject extends _BaseEntity.default {
148
148
  draftSubject.dateOfBirthVerified = subject.dateOfBirthVerified;
149
149
  draftSubject.gender = subject.gender;
150
150
  draftSubject.lowestAddressLevel = subject.lowestAddressLevel;
151
- draftSubject.observations = subject.observations;
151
+ draftSubject.observations = _ObservationsHolder.default.clone(subject.observations);
152
152
  draftSubject.registrationLocation = subject.registrationLocation;
153
153
  draftSubject.totalMembers = _.isEmpty(totalMembers) ? null : totalMembers;
154
154
  draftSubject.updatedOn = new Date();
@@ -60,7 +60,9 @@ class RealmResultsProxy {
60
60
 
61
61
  filtered(query, ...args) {
62
62
  if (this.logQueries) console.log(this.entityClass, query, ...args);
63
- return RealmResultsProxy.create(this.realmCollection.filtered(query, ...args), this.entityClass);
63
+ const realmResultsProxy = RealmResultsProxy.create(this.realmCollection.filtered(query, ...args), this.entityClass);
64
+ realmResultsProxy.setLogQueries(this.logQueries);
65
+ return realmResultsProxy;
64
66
  }
65
67
 
66
68
  getAt(index) {
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.8",
4
+ "version": "1.31.10",
5
5
  "private": false,
6
6
  "repository": {
7
7
  "type": "git",