openchs-models 1.29.3 → 1.29.5
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 +4 -0
- package/dist/CustomFilter.js +22 -1
- package/dist/application/FormMapping.js +25 -0
- package/dist/index.js +32 -0
- package/dist/reports/DashboardFilter.js +2 -1
- package/dist/reports/DashboardFilterConfig.js +200 -0
- package/dist/service/MetaDataService.js +63 -0
- package/package.json +1 -1
package/Makefile
CHANGED
|
@@ -27,7 +27,11 @@ copy-dist-to-avni-client:
|
|
|
27
27
|
deploy-to-avni-client-only:
|
|
28
28
|
$(call _deploy,../avni-client/packages/openchs-android/node_modules/openchs-models)
|
|
29
29
|
|
|
30
|
+
deploy-to-avni-web-only:
|
|
31
|
+
$(call _deploy,../avni-webapp/node_modules/openchs-models)
|
|
32
|
+
|
|
30
33
|
deploy-to-avni-client: build deploy-to-avni-client-only
|
|
34
|
+
deploy-to-avni-web: build deploy-to-avni-web-only
|
|
31
35
|
|
|
32
36
|
deploy-to-avni-project: build
|
|
33
37
|
$(if $(local),$(call _deploy,$(local)/node_modules/openchs-models))
|
package/dist/CustomFilter.js
CHANGED
|
@@ -5,9 +5,30 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
9
|
+
|
|
10
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
11
|
+
|
|
8
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; }
|
|
9
13
|
|
|
10
|
-
class CustomFilter {
|
|
14
|
+
class CustomFilter {
|
|
15
|
+
static getDashboardFilterTypes() {
|
|
16
|
+
const clonedTypes = _objectSpread({}, CustomFilter.type);
|
|
17
|
+
|
|
18
|
+
delete clonedTypes.Name;
|
|
19
|
+
delete clonedTypes.Age;
|
|
20
|
+
delete clonedTypes.SearchAll;
|
|
21
|
+
return clonedTypes;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
static getDashboardFilterWidgets() {
|
|
25
|
+
const cloned = _objectSpread({}, CustomFilter.widget);
|
|
26
|
+
|
|
27
|
+
delete cloned.Relative;
|
|
28
|
+
return cloned;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
}
|
|
11
32
|
|
|
12
33
|
_defineProperty(CustomFilter, "type", {
|
|
13
34
|
Name: "Name",
|
|
@@ -191,6 +191,31 @@ class FormMapping extends _BaseEntity.default {
|
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
+
get programUUID() {
|
|
195
|
+
return this.entityUUID;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
set programUUID(x) {
|
|
199
|
+
this.entityUUID = x;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
get encounterTypeUUID() {
|
|
203
|
+
return this.observationsTypeEntityUUID;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
set encounterTypeUUID(x) {
|
|
207
|
+
this.observationsTypeEntityUUID = x;
|
|
208
|
+
} // created for legacy reasons because the web app doesn't construct the domain model in the same way
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
get subjectTypeUUID() {
|
|
212
|
+
return this.subjectType.uuid;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
get formType() {
|
|
216
|
+
return this.form.formType;
|
|
217
|
+
}
|
|
218
|
+
|
|
194
219
|
}
|
|
195
220
|
|
|
196
221
|
_defineProperty(FormMapping, "schema", {
|
package/dist/index.js
CHANGED
|
@@ -753,6 +753,30 @@ Object.defineProperty(exports, "getUnderlyingRealmObject", {
|
|
|
753
753
|
return _RealmCollectionHelper.getUnderlyingRealmObject;
|
|
754
754
|
}
|
|
755
755
|
});
|
|
756
|
+
Object.defineProperty(exports, "DashboardFilterConfig", {
|
|
757
|
+
enumerable: true,
|
|
758
|
+
get: function () {
|
|
759
|
+
return _DashboardFilterConfig.default;
|
|
760
|
+
}
|
|
761
|
+
});
|
|
762
|
+
Object.defineProperty(exports, "GroupSubjectTypeFilter", {
|
|
763
|
+
enumerable: true,
|
|
764
|
+
get: function () {
|
|
765
|
+
return _DashboardFilterConfig.GroupSubjectTypeFilter;
|
|
766
|
+
}
|
|
767
|
+
});
|
|
768
|
+
Object.defineProperty(exports, "ObservationBasedFilter", {
|
|
769
|
+
enumerable: true,
|
|
770
|
+
get: function () {
|
|
771
|
+
return _DashboardFilterConfig.ObservationBasedFilter;
|
|
772
|
+
}
|
|
773
|
+
});
|
|
774
|
+
Object.defineProperty(exports, "MetaDataService", {
|
|
775
|
+
enumerable: true,
|
|
776
|
+
get: function () {
|
|
777
|
+
return _MetaDataService.default;
|
|
778
|
+
}
|
|
779
|
+
});
|
|
756
780
|
|
|
757
781
|
var _AbstractEncounter = _interopRequireDefault(require("./AbstractEncounter"));
|
|
758
782
|
|
|
@@ -1002,4 +1026,12 @@ var _ArrayHelper = _interopRequireDefault(require("./framework/ArrayHelper"));
|
|
|
1002
1026
|
|
|
1003
1027
|
var _RealmCollectionHelper = require("./framework/RealmCollectionHelper");
|
|
1004
1028
|
|
|
1029
|
+
var _DashboardFilterConfig = _interopRequireWildcard(require("./reports/DashboardFilterConfig"));
|
|
1030
|
+
|
|
1031
|
+
var _MetaDataService = _interopRequireDefault(require("./service/MetaDataService"));
|
|
1032
|
+
|
|
1033
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
1034
|
+
|
|
1035
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
1036
|
+
|
|
1005
1037
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.GroupSubjectTypeFilter = exports.ObservationBasedFilter = void 0;
|
|
7
|
+
|
|
8
|
+
var _CustomFilter = _interopRequireDefault(require("../CustomFilter"));
|
|
9
|
+
|
|
10
|
+
var _Concept = _interopRequireDefault(require("../Concept"));
|
|
11
|
+
|
|
12
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
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; }
|
|
17
|
+
|
|
18
|
+
const widgetConceptDataTypes = [_Concept.default.dataType.Date, _Concept.default.dataType.DateTime, _Concept.default.dataType.Time, _Concept.default.dataType.Numeric];
|
|
19
|
+
|
|
20
|
+
class ObservationBasedFilter {
|
|
21
|
+
constructor() {
|
|
22
|
+
_defineProperty(this, "scope", void 0);
|
|
23
|
+
|
|
24
|
+
_defineProperty(this, "concept", void 0);
|
|
25
|
+
|
|
26
|
+
_defineProperty(this, "programs", void 0);
|
|
27
|
+
|
|
28
|
+
_defineProperty(this, "encounterTypes", void 0);
|
|
29
|
+
|
|
30
|
+
this.programs = [];
|
|
31
|
+
this.encounterTypes = [];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
isValid() {
|
|
35
|
+
const {
|
|
36
|
+
concept,
|
|
37
|
+
programs,
|
|
38
|
+
encounterTypes
|
|
39
|
+
} = this;
|
|
40
|
+
return !_lodash.default.isNil(concept) && (!_lodash.default.isEmpty(programs) || !_lodash.default.isEmpty(encounterTypes) || this.scope === _CustomFilter.default.scope.Registration);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
toServerRequest() {
|
|
44
|
+
return {
|
|
45
|
+
scope: this.scope,
|
|
46
|
+
conceptUUID: this.concept.uuid,
|
|
47
|
+
programUUIDs: this.programs.map(x => x.uuid),
|
|
48
|
+
encounterTypeUUIDs: this.encounterTypes.map(x => x.uuid)
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
isWidgetRequired() {
|
|
53
|
+
return widgetConceptDataTypes.includes(_lodash.default.get(this.concept, "dataType"));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
setPrograms(programs) {
|
|
57
|
+
this.programs = programs;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
setEncounterTypes(encounterTypes) {
|
|
61
|
+
this.encounterTypes = encounterTypes;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
setScope(scope) {
|
|
65
|
+
if (this.scope !== scope) {
|
|
66
|
+
this.scope = scope;
|
|
67
|
+
|
|
68
|
+
if (!this.willObservationBeInScopeOfEncounter()) {
|
|
69
|
+
this.encounterTypes = [];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (!this.willObservationBeInScopeOfProgramEnrolment()) {
|
|
73
|
+
this.programs = [];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
willObservationBeInScopeOfProgramEnrolment() {
|
|
79
|
+
return [_CustomFilter.default.scope.ProgramEnrolment, _CustomFilter.default.scope.ProgramEncounter].includes(this.scope);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
willObservationBeInScopeOfEncounter() {
|
|
83
|
+
return [_CustomFilter.default.scope.ProgramEncounter, _CustomFilter.default.scope.Encounter].includes(this.scope);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
exports.ObservationBasedFilter = ObservationBasedFilter;
|
|
89
|
+
|
|
90
|
+
class GroupSubjectTypeFilter {
|
|
91
|
+
constructor() {
|
|
92
|
+
_defineProperty(this, "subjectType", void 0);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
isValid() {
|
|
96
|
+
return !_lodash.default.isNil(this.subjectType);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
toServerRequest() {
|
|
100
|
+
return {
|
|
101
|
+
subjectTypeUUID: this.subjectType.uuid
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
exports.GroupSubjectTypeFilter = GroupSubjectTypeFilter;
|
|
108
|
+
|
|
109
|
+
class DashboardFilterConfig {
|
|
110
|
+
constructor() {
|
|
111
|
+
_defineProperty(this, "subjectType", void 0);
|
|
112
|
+
|
|
113
|
+
_defineProperty(this, "type", void 0);
|
|
114
|
+
|
|
115
|
+
_defineProperty(this, "widget", void 0);
|
|
116
|
+
|
|
117
|
+
_defineProperty(this, "groupSubjectTypeFilter", void 0);
|
|
118
|
+
|
|
119
|
+
_defineProperty(this, "observationBasedFilter", void 0);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
isConceptTypeFilter() {
|
|
123
|
+
return this.type === _CustomFilter.default.type.Concept;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
isGroupSubjectTypeFilter() {
|
|
127
|
+
return this.type === _CustomFilter.default.type.GroupSubject;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
isValid() {
|
|
131
|
+
const valid = !(_lodash.default.isNil(this.type) || _lodash.default.isNil(this.subjectType));
|
|
132
|
+
if (!valid) return valid;
|
|
133
|
+
if (this.isConceptTypeFilter()) return this.observationBasedFilter.isValid();else if (this.isGroupSubjectTypeFilter()) return this.groupSubjectTypeFilter.isValid();else if (this.isWidgetRequired()) return !_lodash.default.isNil(this.widget);else return true;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
toServerRequest() {
|
|
137
|
+
const request = {
|
|
138
|
+
subjectTypeUUID: this.subjectType.uuid,
|
|
139
|
+
type: this.type,
|
|
140
|
+
widget: this.widget
|
|
141
|
+
};
|
|
142
|
+
if (this.isConceptTypeFilter()) request.observationBasedFilter = this.observationBasedFilter.toServerRequest();else if (this.isGroupSubjectTypeFilter()) request.groupSubjectTypeFilter = this.groupSubjectTypeFilter.toServerRequest();
|
|
143
|
+
return request;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
setType(type) {
|
|
147
|
+
if (type !== this.type) {
|
|
148
|
+
this.type = type;
|
|
149
|
+
this.widget = null;
|
|
150
|
+
this.groupSubjectTypeFilter = type === _CustomFilter.default.type.GroupSubject ? new GroupSubjectTypeFilter() : null;
|
|
151
|
+
this.observationBasedFilter = type === _CustomFilter.default.type.Concept ? new ObservationBasedFilter() : null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
isWidgetRequired() {
|
|
156
|
+
const {
|
|
157
|
+
RegistrationDate,
|
|
158
|
+
EnrolmentDate,
|
|
159
|
+
ProgramEncounterDate,
|
|
160
|
+
EncounterDate
|
|
161
|
+
} = _CustomFilter.default.getDashboardFilterTypes();
|
|
162
|
+
|
|
163
|
+
return [RegistrationDate, EnrolmentDate, ProgramEncounterDate, EncounterDate].includes(this.type) || this.isConceptTypeFilter() && this.observationBasedFilter.isWidgetRequired();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
setSubjectType(subjectType) {
|
|
167
|
+
if (_lodash.default.get(subjectType, "uuid") !== _lodash.default.get(this.subjectType, "uuid")) {
|
|
168
|
+
this.subjectType = subjectType;
|
|
169
|
+
|
|
170
|
+
if (!_lodash.default.isNil(this.observationBasedFilter)) {
|
|
171
|
+
this.observationBasedFilter.programs = [];
|
|
172
|
+
this.observationBasedFilter.encounterTypes = [];
|
|
173
|
+
} else if (!_lodash.default.isNil(this.groupSubjectTypeFilter)) {
|
|
174
|
+
this.groupSubjectTypeFilter.subjectType = null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
willObservationBeInScopeOfProgramEnrolment() {
|
|
180
|
+
return this.isConceptTypeFilter() && this.observationBasedFilter.willObservationBeInScopeOfProgramEnrolment();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
willObservationBeInScopeOfEncounter() {
|
|
184
|
+
return this.isConceptTypeFilter() && this.observationBasedFilter.willObservationBeInScopeOfEncounter();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
clone() {
|
|
188
|
+
const clone = new DashboardFilterConfig();
|
|
189
|
+
clone.type = this.type;
|
|
190
|
+
clone.subjectType = this.subjectType;
|
|
191
|
+
clone.widget = this.widget;
|
|
192
|
+
clone.groupSubjectTypeFilter = this.groupSubjectTypeFilter;
|
|
193
|
+
clone.observationBasedFilter = this.observationBasedFilter;
|
|
194
|
+
return clone;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
var _default = DashboardFilterConfig;
|
|
200
|
+
exports.default = _default;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
|
+
|
|
10
|
+
var _openchsModels = require("openchs-models");
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
class MetaDataService {
|
|
15
|
+
static getProgramFormMappings(formMappings) {
|
|
16
|
+
return _lodash.default.filter(formMappings, formMapping => formMapping.formType === _openchsModels.Form.formTypes.ProgramEnrolment);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
static getGeneralEncounterFormMappings(formMappings) {
|
|
20
|
+
return _lodash.default.filter(formMappings, formMapping => formMapping.formType === _openchsModels.Form.formTypes.Encounter || formMapping.formType === _openchsModels.Form.formTypes.IndividualEncounterCancellation);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
static getProgramEncounterFormMappings(formMappings) {
|
|
24
|
+
return _lodash.default.filter(formMappings, formMapping => formMapping.formType === _openchsModels.Form.formTypes.ProgramEncounter || formMapping.formType === _openchsModels.Form.formTypes.ProgramEncounterCancellation);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static getProgramsForSubjectType(allPrograms, subjectType, formMappings) {
|
|
28
|
+
if (_lodash.default.isNil(subjectType)) return allPrograms;
|
|
29
|
+
|
|
30
|
+
const programFormMappingsForSubjectType = _lodash.default.filter(formMappings, formMapping => formMapping.subjectTypeUUID === subjectType.uuid && formMapping.formType === _openchsModels.Form.formTypes.ProgramEnrolment);
|
|
31
|
+
|
|
32
|
+
return _lodash.default.intersectionWith(allPrograms, programFormMappingsForSubjectType, (p, fm) => p.uuid === fm.programUUID);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static getEncounterTypesForSubjectType(allEncounterTypes, subjectType, formMappings) {
|
|
36
|
+
if (_lodash.default.isNil(subjectType)) return allEncounterTypes;
|
|
37
|
+
|
|
38
|
+
const generalEncounterFormMappingsForSubjectType = _lodash.default.filter(this.getGeneralEncounterFormMappings(formMappings), formMapping => formMapping.subjectTypeUUID === subjectType.uuid);
|
|
39
|
+
|
|
40
|
+
return generalEncounterFormMappingsForSubjectType.map(x => _lodash.default.some(allEncounterTypes, et => et.uuid === x.encounterTypeUUID));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
static getEncounterTypesForPrograms(allEncounterTypes, programs, formMappings) {
|
|
44
|
+
const programEncounterTypeMappings = MetaDataService.getProgramEncounterFormMappings(formMappings);
|
|
45
|
+
|
|
46
|
+
const encounterTypeMappingsForPrograms = _lodash.default.intersectionWith(programEncounterTypeMappings, programs, (etMapping, program) => etMapping.programUUID === program.uuid);
|
|
47
|
+
|
|
48
|
+
return encounterTypeMappingsForPrograms.map(x => _lodash.default.find(allEncounterTypes, et => et.uuid === x.encounterTypeUUID));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
static getEncounterTypes_For_SubjectTypeAndPrograms(allEncounterTypes, subjectType, programs, formMappings) {
|
|
52
|
+
if (_lodash.default.isEmpty(programs)) return MetaDataService.getEncounterTypesForSubjectType(allEncounterTypes, subjectType, formMappings);
|
|
53
|
+
return MetaDataService.getEncounterTypesForPrograms(allEncounterTypes, programs, formMappings);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static getPossibleGroupSubjectTypesFor(subjectTypes, subjectType) {
|
|
57
|
+
return _lodash.default.isNil(subjectType) ? _lodash.default.filter(subjectTypes, x => x.group) : _lodash.default.filter(subjectTypes, x => x.uuid !== subjectType.uuid && x.group);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
var _default = MetaDataService;
|
|
63
|
+
exports.default = _default;
|