@dhis2/analytics 29.4.3 → 29.5.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/build/cjs/__demo__/PivotTable.event.stories.js +67 -2
- package/build/cjs/__demo__/data/event/eventou.data.json +123 -0
- package/build/cjs/__demo__/data/event/eventou.visualization.json +139 -0
- package/build/cjs/__demo__/data/event/eventstatus.data.hidena.json +122 -0
- package/build/cjs/__demo__/data/event/eventstatus.data.json +132 -0
- package/build/cjs/__demo__/data/event/eventstatus.data.org.json +117 -0
- package/build/cjs/__demo__/data/event/eventstatus.visualization.json +154 -0
- package/build/cjs/__demo__/data/event/integer.data.json +225 -39
- package/build/cjs/__demo__/data/event/integer.visualization.json +3 -1
- package/build/cjs/index.js +8 -0
- package/build/cjs/locales/en/translations.json +16 -0
- package/build/cjs/modules/dimensions.js +68 -0
- package/build/cjs/modules/eventVisualization/__tests__/eventVisualization.spec.js +42 -0
- package/build/cjs/modules/eventVisualization/eventVisualization.js +31 -0
- package/build/cjs/modules/response/event/__tests__/response.spec.js +23 -0
- package/build/cjs/modules/response/event/response.js +25 -3
- package/build/es/__demo__/PivotTable.event.stories.js +63 -1
- package/build/es/__demo__/data/event/eventou.data.json +123 -0
- package/build/es/__demo__/data/event/eventou.visualization.json +139 -0
- package/build/es/__demo__/data/event/eventstatus.data.hidena.json +122 -0
- package/build/es/__demo__/data/event/eventstatus.data.json +132 -0
- package/build/es/__demo__/data/event/eventstatus.data.org.json +117 -0
- package/build/es/__demo__/data/event/eventstatus.visualization.json +154 -0
- package/build/es/__demo__/data/event/integer.data.json +225 -39
- package/build/es/__demo__/data/event/integer.visualization.json +3 -1
- package/build/es/index.js +4 -0
- package/build/es/locales/en/translations.json +16 -0
- package/build/es/modules/dimensions.js +61 -0
- package/build/es/modules/eventVisualization/__tests__/eventVisualization.spec.js +40 -0
- package/build/es/modules/eventVisualization/eventVisualization.js +25 -0
- package/build/es/modules/response/event/__tests__/response.spec.js +24 -1
- package/build/es/modules/response/event/response.js +23 -2
- package/package.json +4 -1
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getHeaderByVis = void 0;
|
|
7
|
+
// vis: 'dimension' in EventVisualization columns/rows/filters
|
|
8
|
+
// dim: tracker analytics api dimension/filter id
|
|
9
|
+
// header: tracker analytics api header name (query endpoints)
|
|
10
|
+
|
|
11
|
+
const EVENT_DIMENSIONS = [{
|
|
12
|
+
vis: 'ou',
|
|
13
|
+
dim: 'ou',
|
|
14
|
+
header: 'ouname'
|
|
15
|
+
}, {
|
|
16
|
+
vis: 'eventDate',
|
|
17
|
+
dim: 'EVENT_DATE',
|
|
18
|
+
header: 'eventdate'
|
|
19
|
+
}, {
|
|
20
|
+
vis: 'enrollmentDate',
|
|
21
|
+
dim: 'ENROLLMENT_DATE',
|
|
22
|
+
header: 'enrollmentdate'
|
|
23
|
+
}, {
|
|
24
|
+
vis: 'scheduledDate',
|
|
25
|
+
dim: 'SCHEDULED_DATE',
|
|
26
|
+
header: 'scheduleddate'
|
|
27
|
+
}, {
|
|
28
|
+
vis: 'incidentDate',
|
|
29
|
+
dim: 'INCIDENT_DATE',
|
|
30
|
+
header: 'incidentdate'
|
|
31
|
+
}, {
|
|
32
|
+
vis: 'lastUpdated',
|
|
33
|
+
dim: 'LAST_UPDATED',
|
|
34
|
+
header: 'lastupdated'
|
|
35
|
+
}, {
|
|
36
|
+
vis: 'created',
|
|
37
|
+
dim: 'CREATED',
|
|
38
|
+
header: 'created'
|
|
39
|
+
}, {
|
|
40
|
+
vis: 'completed',
|
|
41
|
+
dim: 'COMPLETED',
|
|
42
|
+
header: 'completed'
|
|
43
|
+
}, {
|
|
44
|
+
vis: 'eventStatus',
|
|
45
|
+
dim: 'EVENT_STATUS',
|
|
46
|
+
header: 'eventstatus'
|
|
47
|
+
}, {
|
|
48
|
+
vis: 'programStatus',
|
|
49
|
+
dim: 'PROGRAM_STATUS',
|
|
50
|
+
header: 'programstatus'
|
|
51
|
+
}, {
|
|
52
|
+
vis: 'enrollmentOu',
|
|
53
|
+
dim: 'ENROLLMENT_OU',
|
|
54
|
+
header: 'enrollmentouname'
|
|
55
|
+
}, {
|
|
56
|
+
vis: 'createdBy',
|
|
57
|
+
dim: '',
|
|
58
|
+
header: 'createdbydisplayname'
|
|
59
|
+
}, {
|
|
60
|
+
vis: 'lastUpdatedBy',
|
|
61
|
+
dim: '',
|
|
62
|
+
header: 'lastupdatedbydisplayname'
|
|
63
|
+
}];
|
|
64
|
+
const getHeaderByVis = vis => {
|
|
65
|
+
var _EVENT_DIMENSIONS$fin;
|
|
66
|
+
return (_EVENT_DIMENSIONS$fin = EVENT_DIMENSIONS.find(d => d.vis === vis)) === null || _EVENT_DIMENSIONS$fin === void 0 ? void 0 : _EVENT_DIMENSIONS$fin.header;
|
|
67
|
+
};
|
|
68
|
+
exports.getHeaderByVis = getHeaderByVis;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _eventVisualization = require("../eventVisualization.js");
|
|
4
|
+
const testDim1 = {
|
|
5
|
+
dimension: 'eventDate',
|
|
6
|
+
programStage: {
|
|
7
|
+
id: 'A03MvHHogjR'
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
const testDim2 = {
|
|
11
|
+
dimension: 'enrollmentDate',
|
|
12
|
+
program: {
|
|
13
|
+
id: 'IpHINAT79UW'
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const testDim3 = {
|
|
17
|
+
dimension: 'created'
|
|
18
|
+
};
|
|
19
|
+
const testAxis = [testDim1];
|
|
20
|
+
const testVis = {
|
|
21
|
+
columns: testAxis,
|
|
22
|
+
rows: [testDim2],
|
|
23
|
+
filters: [testDim3]
|
|
24
|
+
};
|
|
25
|
+
describe('eventVisualization', () => {
|
|
26
|
+
describe('transformEventVisualization', () => {
|
|
27
|
+
it('does not modify dimension, axis or vis', () => {
|
|
28
|
+
const newVis = (0, _eventVisualization.transformEventVisualization)(testVis);
|
|
29
|
+
expect(newVis).not.toBe(testVis);
|
|
30
|
+
expect(newVis.columns).not.toBe(testAxis);
|
|
31
|
+
expect(newVis.columns[0]).not.toBe(testDim1);
|
|
32
|
+
});
|
|
33
|
+
it('applies program stage to id', () => {
|
|
34
|
+
const newVis = (0, _eventVisualization.transformEventVisualization)(testVis);
|
|
35
|
+
expect(newVis.columns[0].dimension).toBe('A03MvHHogjR.eventdate');
|
|
36
|
+
});
|
|
37
|
+
it('applies program to id', () => {
|
|
38
|
+
const newVis = (0, _eventVisualization.transformEventVisualization)(testVis);
|
|
39
|
+
expect(newVis.rows[0].dimension).toBe('IpHINAT79UW.enrollmentdate');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.transformEventVisualization = void 0;
|
|
7
|
+
var _dimensions = require("../dimensions.js");
|
|
8
|
+
var _layoutGetAllDimensions = require("../layout/layoutGetAllDimensions.js");
|
|
9
|
+
// Dimensions saved with program or program stage in an EventVisualization need
|
|
10
|
+
// transformation before we can pass them to the pivot table engine
|
|
11
|
+
|
|
12
|
+
const cloneAxis = axis => axis === null || axis === void 0 ? void 0 : axis.map(dim => ({
|
|
13
|
+
...dim
|
|
14
|
+
}));
|
|
15
|
+
const transformEventVisualization = vis => {
|
|
16
|
+
// Do not modify the original visualization
|
|
17
|
+
const transformedVis = {
|
|
18
|
+
...vis,
|
|
19
|
+
columns: cloneAxis(vis.columns),
|
|
20
|
+
rows: cloneAxis(vis.rows),
|
|
21
|
+
filters: cloneAxis(vis.filters)
|
|
22
|
+
};
|
|
23
|
+
(0, _layoutGetAllDimensions.layoutGetAllDimensions)(transformedVis).forEach(dim => {
|
|
24
|
+
var _dim$program$id, _dim$program, _dim$programStage;
|
|
25
|
+
const headerName = (0, _dimensions.getHeaderByVis)(dim.dimension);
|
|
26
|
+
const prefix = (_dim$program$id = (_dim$program = dim.program) === null || _dim$program === void 0 ? void 0 : _dim$program.id) !== null && _dim$program$id !== void 0 ? _dim$program$id : (_dim$programStage = dim.programStage) === null || _dim$programStage === void 0 ? void 0 : _dim$programStage.id;
|
|
27
|
+
dim.dimension = prefix ? `${prefix}.${headerName}` : headerName;
|
|
28
|
+
});
|
|
29
|
+
return transformedVis;
|
|
30
|
+
};
|
|
31
|
+
exports.transformEventVisualization = transformEventVisualization;
|
|
@@ -12,6 +12,9 @@ var _datetimeDataOrg = _interopRequireDefault(require("../../../../__demo__/data
|
|
|
12
12
|
var _emailDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/email.data.hidena.json"));
|
|
13
13
|
var _emailData = _interopRequireDefault(require("../../../../__demo__/data/event/email.data.json"));
|
|
14
14
|
var _emailDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/email.data.org.json"));
|
|
15
|
+
var _eventstatusDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/eventstatus.data.hidena.json"));
|
|
16
|
+
var _eventstatusData = _interopRequireDefault(require("../../../../__demo__/data/event/eventstatus.data.json"));
|
|
17
|
+
var _eventstatusDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/eventstatus.data.org.json"));
|
|
15
18
|
var _integerDataHidena = _interopRequireDefault(require("../../../../__demo__/data/event/integer.data.hidena.json"));
|
|
16
19
|
var _integerData = _interopRequireDefault(require("../../../../__demo__/data/event/integer.data.json"));
|
|
17
20
|
var _integerDataOrg = _interopRequireDefault(require("../../../../__demo__/data/event/integer.data.org.json"));
|
|
@@ -28,6 +31,16 @@ var _valueTypes = require("../../../valueTypes.js");
|
|
|
28
31
|
var _response = require("../response.js");
|
|
29
32
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
30
33
|
describe('response', () => {
|
|
34
|
+
describe('getItemFormatterByHeaderName', () => {
|
|
35
|
+
it('should return the correct formatter and format correctly', () => {
|
|
36
|
+
expect((0, _response.getItemFormatterByHeaderName)('eventstatus')('ACTIVE')).toBe('Active');
|
|
37
|
+
expect((0, _response.getItemFormatterByHeaderName)('eventstatus')('COMPLETED')).toBe('Completed');
|
|
38
|
+
expect((0, _response.getItemFormatterByHeaderName)('eventstatus')('SCHEDULE')).toBe('Scheduled');
|
|
39
|
+
expect((0, _response.getItemFormatterByHeaderName)('programstatus')('ACTIVE')).toBe('Active');
|
|
40
|
+
expect((0, _response.getItemFormatterByHeaderName)('programstatus')('COMPLETED')).toBe('Completed');
|
|
41
|
+
expect((0, _response.getItemFormatterByHeaderName)('programstatus')('CANCELLED')).toBe('Cancelled');
|
|
42
|
+
});
|
|
43
|
+
});
|
|
31
44
|
describe('getItemFormatterByValueType', () => {
|
|
32
45
|
it('should return the correct formatter and format correctly', () => {
|
|
33
46
|
expect((0, _response.getItemFormatterByValueType)(_valueTypes.VALUE_TYPE_BOOLEAN)('1')).toBe('Yes');
|
|
@@ -121,5 +134,15 @@ describe('response', () => {
|
|
|
121
134
|
})).toEqual(_yesonlyDataHidena.default);
|
|
122
135
|
});
|
|
123
136
|
});
|
|
137
|
+
describe('eventstatus', () => {
|
|
138
|
+
it('transforms response', () => {
|
|
139
|
+
expect((0, _response.transformResponse)(_eventstatusDataOrg.default)).toEqual(_eventstatusData.default);
|
|
140
|
+
});
|
|
141
|
+
it('transforms response and hides N/A data', () => {
|
|
142
|
+
expect((0, _response.transformResponse)(_eventstatusDataOrg.default, {
|
|
143
|
+
hideNaData: true
|
|
144
|
+
})).toEqual(_eventstatusDataHidena.default);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
124
147
|
});
|
|
125
148
|
});
|
|
@@ -3,13 +3,18 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.transformResponse = exports.getItemFormatterByValueType = exports.UNSUPPORTED_VALUE_TYPES = exports.PREFIX_SEPARATOR = exports.NA_VALUE_ITEM = exports.NA_VALUE = void 0;
|
|
6
|
+
exports.transformResponse = exports.getItemFormatterByValueType = exports.getItemFormatterByHeaderName = exports.getItemFormatter = exports.UNSUPPORTED_VALUE_TYPES = exports.PREFIX_SEPARATOR = exports.NA_VALUE_ITEM = exports.NA_VALUE = void 0;
|
|
7
7
|
var _d2I18n = _interopRequireDefault(require("@dhis2/d2-i18n"));
|
|
8
8
|
var _predefinedDimensions = require("../../predefinedDimensions.js");
|
|
9
9
|
var _valueTypes = require("../../valueTypes.js");
|
|
10
10
|
var _default = require("./default.js");
|
|
11
11
|
var _optionSet = require("./optionSet.js");
|
|
12
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
// Responses coming from these endpoints need transformation
|
|
14
|
+
// before we can pass it to the pivot table engine:
|
|
15
|
+
// - analytics/events/aggregate
|
|
16
|
+
// - analytics/enrollments/aggregate
|
|
17
|
+
|
|
13
18
|
const PREFIX_SEPARATOR = exports.PREFIX_SEPARATOR = '_';
|
|
14
19
|
const NA_VALUE = exports.NA_VALUE = '';
|
|
15
20
|
const NA_VALUE_ITEM = exports.NA_VALUE_ITEM = {
|
|
@@ -22,6 +27,20 @@ const NA_VALUE_ITEM = exports.NA_VALUE_ITEM = {
|
|
|
22
27
|
}
|
|
23
28
|
};
|
|
24
29
|
const UNSUPPORTED_VALUE_TYPES = exports.UNSUPPORTED_VALUE_TYPES = [_valueTypes.VALUE_TYPE_COORDINATE, _valueTypes.VALUE_TYPE_GEOJSON, _valueTypes.VALUE_TYPE_FILE_RESOURCE, _valueTypes.VALUE_TYPE_IMAGE, _valueTypes.VALUE_TYPE_MULTI_TEXT, _valueTypes.VALUE_TYPE_REFERENCE];
|
|
30
|
+
const STATUSES = {
|
|
31
|
+
ACTIVE: _d2I18n.default.t('Active'),
|
|
32
|
+
COMPLETED: _d2I18n.default.t('Completed'),
|
|
33
|
+
SCHEDULE: _d2I18n.default.t('Scheduled'),
|
|
34
|
+
CANCELLED: _d2I18n.default.t('Cancelled')
|
|
35
|
+
};
|
|
36
|
+
const formatStatus = value => STATUSES[value] || value;
|
|
37
|
+
const getItemFormatter = ({
|
|
38
|
+
name,
|
|
39
|
+
valueType
|
|
40
|
+
}) => getItemFormatterByHeaderName(name) || getItemFormatterByValueType(valueType);
|
|
41
|
+
exports.getItemFormatter = getItemFormatter;
|
|
42
|
+
const getItemFormatterByHeaderName = name => name.endsWith('eventstatus') || name.endsWith('programstatus') ? formatStatus : undefined;
|
|
43
|
+
exports.getItemFormatterByHeaderName = getItemFormatterByHeaderName;
|
|
25
44
|
const getItemFormatterByValueType = valueType => {
|
|
26
45
|
switch (valueType) {
|
|
27
46
|
case _valueTypes.VALUE_TYPE_AGE:
|
|
@@ -39,6 +58,9 @@ const getItemFormatterByValueType = valueType => {
|
|
|
39
58
|
}
|
|
40
59
|
};
|
|
41
60
|
exports.getItemFormatterByValueType = getItemFormatterByValueType;
|
|
61
|
+
const EXCLUDED_HEADER_NAMES = new Set([_predefinedDimensions.DIMENSION_ID_PERIOD, _predefinedDimensions.DIMENSION_ID_ORGUNIT, 'lastupdated', 'created', 'completed']);
|
|
62
|
+
const EXCLUDED_HEADER_SUFFIXES = ['.eventdate', '.enrollmentdate', '.scheduleddate', '.incidentdate', '.ou'];
|
|
63
|
+
const isIncludedHeader = header => Boolean(header.meta) && !EXCLUDED_HEADER_NAMES.has(header.name) && !EXCLUDED_HEADER_SUFFIXES.some(suffix => header.name.endsWith(suffix));
|
|
42
64
|
const transformResponse = (response, {
|
|
43
65
|
hideNaData = false
|
|
44
66
|
} = {}) => {
|
|
@@ -62,7 +84,7 @@ const transformResponse = (response, {
|
|
|
62
84
|
const metaHeaders = response.headers.map((header, index) => ({
|
|
63
85
|
...header,
|
|
64
86
|
index
|
|
65
|
-
})).filter(
|
|
87
|
+
})).filter(isIncludedHeader);
|
|
66
88
|
|
|
67
89
|
// Legendsets use uids and do not need transformation
|
|
68
90
|
// Skip unsupported value types
|
|
@@ -74,7 +96,7 @@ const transformResponse = (response, {
|
|
|
74
96
|
transformedResponse = (0, _optionSet.applyOptionSetHandler)(transformedResponse, header.index);
|
|
75
97
|
} else {
|
|
76
98
|
transformedResponse = (0, _default.applyDefaultHandler)(transformedResponse, header.index, {
|
|
77
|
-
itemFormatter:
|
|
99
|
+
itemFormatter: getItemFormatter(header)
|
|
78
100
|
});
|
|
79
101
|
}
|
|
80
102
|
}
|
|
@@ -13,6 +13,11 @@ import datetimeVisualization from './data/event/datetime.visualization.json';
|
|
|
13
13
|
import emailDataHideNa from './data/event/email.data.hidena.json';
|
|
14
14
|
import emailData from './data/event/email.data.json';
|
|
15
15
|
import emailVisualization from './data/event/email.visualization.json';
|
|
16
|
+
import eventouData from './data/event/eventou.data.json';
|
|
17
|
+
import eventouVisualization from './data/event/eventou.visualization.json';
|
|
18
|
+
import eventstatusDataHideNa from './data/event/eventstatus.data.hidena.json';
|
|
19
|
+
import eventstatusData from './data/event/eventstatus.data.json';
|
|
20
|
+
import eventstatusVisualization from './data/event/eventstatus.visualization.json';
|
|
16
21
|
import integerDataHideNa from './data/event/integer.data.hidena.json';
|
|
17
22
|
import integerData from './data/event/integer.data.json';
|
|
18
23
|
import integerVisualization from './data/event/integer.visualization.json';
|
|
@@ -411,4 +416,61 @@ export const Yesonly = (_, {
|
|
|
411
416
|
visualization: visualization
|
|
412
417
|
}));
|
|
413
418
|
};
|
|
414
|
-
Yesonly.storyName = 'Yesonly';
|
|
419
|
+
Yesonly.storyName = 'Yesonly';
|
|
420
|
+
export const EventstatusNA = (_, {
|
|
421
|
+
pivotTableOptions
|
|
422
|
+
}) => {
|
|
423
|
+
const visualization = {
|
|
424
|
+
...eventstatusVisualization,
|
|
425
|
+
...visualizationReset,
|
|
426
|
+
...pivotTableOptions
|
|
427
|
+
};
|
|
428
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
429
|
+
style: {
|
|
430
|
+
width: 800,
|
|
431
|
+
height: 600
|
|
432
|
+
}
|
|
433
|
+
}, /*#__PURE__*/React.createElement(PivotTable, {
|
|
434
|
+
data: eventstatusData,
|
|
435
|
+
visualization: visualization
|
|
436
|
+
}));
|
|
437
|
+
};
|
|
438
|
+
EventstatusNA.storyName = 'Eventstatus N/A';
|
|
439
|
+
export const Eventstatus = (_, {
|
|
440
|
+
pivotTableOptions
|
|
441
|
+
}) => {
|
|
442
|
+
const visualization = {
|
|
443
|
+
...eventstatusVisualization,
|
|
444
|
+
...visualizationReset,
|
|
445
|
+
...pivotTableOptions
|
|
446
|
+
};
|
|
447
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
448
|
+
style: {
|
|
449
|
+
width: 800,
|
|
450
|
+
height: 600
|
|
451
|
+
}
|
|
452
|
+
}, /*#__PURE__*/React.createElement(PivotTable, {
|
|
453
|
+
data: eventstatusDataHideNa,
|
|
454
|
+
visualization: visualization
|
|
455
|
+
}));
|
|
456
|
+
};
|
|
457
|
+
Eventstatus.storyName = 'Eventstatus';
|
|
458
|
+
export const Eventou = (_, {
|
|
459
|
+
pivotTableOptions
|
|
460
|
+
}) => {
|
|
461
|
+
const visualization = {
|
|
462
|
+
...eventouVisualization,
|
|
463
|
+
...visualizationReset,
|
|
464
|
+
...pivotTableOptions
|
|
465
|
+
};
|
|
466
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
467
|
+
style: {
|
|
468
|
+
width: 800,
|
|
469
|
+
height: 600
|
|
470
|
+
}
|
|
471
|
+
}, /*#__PURE__*/React.createElement(PivotTable, {
|
|
472
|
+
data: eventouData,
|
|
473
|
+
visualization: visualization
|
|
474
|
+
}));
|
|
475
|
+
};
|
|
476
|
+
Eventou.storyName = 'Event orgunit';
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
{
|
|
2
|
+
"headers": [
|
|
3
|
+
{
|
|
4
|
+
"name": "A03MvHHogjR.ou",
|
|
5
|
+
"column": "Organisation unit",
|
|
6
|
+
"valueType": "ORGANISATION_UNIT",
|
|
7
|
+
"type": "org.hisp.dhis.organisationunit.OrganisationUnit",
|
|
8
|
+
"hidden": false,
|
|
9
|
+
"meta": true
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "A03MvHHogjR.eventdate",
|
|
13
|
+
"column": "Report date",
|
|
14
|
+
"valueType": "DATE",
|
|
15
|
+
"type": "java.time.LocalDate",
|
|
16
|
+
"hidden": false,
|
|
17
|
+
"meta": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "value",
|
|
21
|
+
"column": "Value",
|
|
22
|
+
"valueType": "NUMBER",
|
|
23
|
+
"type": "java.lang.Double",
|
|
24
|
+
"hidden": false,
|
|
25
|
+
"meta": false
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"metaData": {
|
|
29
|
+
"items": {
|
|
30
|
+
"202510": {
|
|
31
|
+
"name": "202510"
|
|
32
|
+
},
|
|
33
|
+
"202511": {
|
|
34
|
+
"name": "202511"
|
|
35
|
+
},
|
|
36
|
+
"202512": {
|
|
37
|
+
"name": "202512"
|
|
38
|
+
},
|
|
39
|
+
"202601": {
|
|
40
|
+
"name": "202601"
|
|
41
|
+
},
|
|
42
|
+
"202602": {
|
|
43
|
+
"name": "202602"
|
|
44
|
+
},
|
|
45
|
+
"202603": {
|
|
46
|
+
"name": "202603"
|
|
47
|
+
},
|
|
48
|
+
"IpHINAT79UW": {
|
|
49
|
+
"name": "Child Programme"
|
|
50
|
+
},
|
|
51
|
+
"ZzYYXq4fJie": {
|
|
52
|
+
"name": "Baby Postnatal"
|
|
53
|
+
},
|
|
54
|
+
"USER_ORGUNIT": {
|
|
55
|
+
"organisationUnits": [
|
|
56
|
+
"ImspTQPwCqd"
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
"A03MvHHogjR.ou": {
|
|
60
|
+
"name": "Organisation unit"
|
|
61
|
+
},
|
|
62
|
+
"ImspTQPwCqd": {
|
|
63
|
+
"name": "Sierra Leone"
|
|
64
|
+
},
|
|
65
|
+
"A03MvHHogjR.eventdate": {
|
|
66
|
+
"name": "Report date"
|
|
67
|
+
},
|
|
68
|
+
"A03MvHHogjR": {
|
|
69
|
+
"name": "Birth"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"dimensions": {
|
|
73
|
+
"A03MvHHogjR.eventdate": [
|
|
74
|
+
"202510",
|
|
75
|
+
"202511",
|
|
76
|
+
"202512",
|
|
77
|
+
"202601",
|
|
78
|
+
"202602",
|
|
79
|
+
"202603"
|
|
80
|
+
],
|
|
81
|
+
"pe": [],
|
|
82
|
+
"A03MvHHogjR.ou": [
|
|
83
|
+
"ImspTQPwCqd"
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"rowContext": {},
|
|
88
|
+
"width": 3,
|
|
89
|
+
"rows": [
|
|
90
|
+
[
|
|
91
|
+
"ImspTQPwCqd",
|
|
92
|
+
"202510",
|
|
93
|
+
"973"
|
|
94
|
+
],
|
|
95
|
+
[
|
|
96
|
+
"ImspTQPwCqd",
|
|
97
|
+
"202511",
|
|
98
|
+
"932"
|
|
99
|
+
],
|
|
100
|
+
[
|
|
101
|
+
"ImspTQPwCqd",
|
|
102
|
+
"202512",
|
|
103
|
+
"858"
|
|
104
|
+
],
|
|
105
|
+
[
|
|
106
|
+
"ImspTQPwCqd",
|
|
107
|
+
"202601",
|
|
108
|
+
"694"
|
|
109
|
+
],
|
|
110
|
+
[
|
|
111
|
+
"ImspTQPwCqd",
|
|
112
|
+
"202602",
|
|
113
|
+
"629"
|
|
114
|
+
],
|
|
115
|
+
[
|
|
116
|
+
"ImspTQPwCqd",
|
|
117
|
+
"202603",
|
|
118
|
+
"694"
|
|
119
|
+
]
|
|
120
|
+
],
|
|
121
|
+
"headerWidth": 3,
|
|
122
|
+
"height": 6
|
|
123
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Event orgunit",
|
|
3
|
+
"created": "2025-07-02T10:27:50.483",
|
|
4
|
+
"lastUpdated": "2025-07-02T10:27:50.483",
|
|
5
|
+
"translations": [],
|
|
6
|
+
"createdBy": {
|
|
7
|
+
"id": "xE7jOejl9FI",
|
|
8
|
+
"code": null,
|
|
9
|
+
"name": "John Traore",
|
|
10
|
+
"displayName": "John Traore",
|
|
11
|
+
"username": "admin"
|
|
12
|
+
},
|
|
13
|
+
"favorites": [],
|
|
14
|
+
"lastUpdatedBy": {
|
|
15
|
+
"id": "xE7jOejl9FI",
|
|
16
|
+
"code": null,
|
|
17
|
+
"name": "John Traore",
|
|
18
|
+
"displayName": "John Traore",
|
|
19
|
+
"username": "admin"
|
|
20
|
+
},
|
|
21
|
+
"sharing": {
|
|
22
|
+
"owner": "xE7jOejl9FI",
|
|
23
|
+
"external": false,
|
|
24
|
+
"users": {},
|
|
25
|
+
"userGroups": {},
|
|
26
|
+
"public": "rw------"
|
|
27
|
+
},
|
|
28
|
+
"regressionType": "NONE",
|
|
29
|
+
"displayDensity": "NORMAL",
|
|
30
|
+
"fontSize": "NORMAL",
|
|
31
|
+
"sortOrder": 0,
|
|
32
|
+
"topLimit": 0,
|
|
33
|
+
"hideEmptyRows": false,
|
|
34
|
+
"showHierarchy": false,
|
|
35
|
+
"completedOnly": false,
|
|
36
|
+
"skipRounding": false,
|
|
37
|
+
"dataDimensionItems": [],
|
|
38
|
+
"dataElementGroupSetDimensions": [],
|
|
39
|
+
"organisationUnitGroupSetDimensions": [],
|
|
40
|
+
"categoryDimensions": [],
|
|
41
|
+
"categoryOptionGroupSetDimensions": [],
|
|
42
|
+
"attributeDimensions": [],
|
|
43
|
+
"programIndicatorDimensions": [],
|
|
44
|
+
"subscribers": [],
|
|
45
|
+
"digitGroupSeparator": "SPACE",
|
|
46
|
+
"hideEmptyRowItems": "NONE",
|
|
47
|
+
"hideLegend": false,
|
|
48
|
+
"noSpaceBetweenColumns": false,
|
|
49
|
+
"cumulativeValues": false,
|
|
50
|
+
"percentStackedValues": false,
|
|
51
|
+
"showData": false,
|
|
52
|
+
"colTotals": true,
|
|
53
|
+
"rowTotals": true,
|
|
54
|
+
"rowSubTotals": true,
|
|
55
|
+
"colSubTotals": true,
|
|
56
|
+
"hideTitle": false,
|
|
57
|
+
"hideSubtitle": false,
|
|
58
|
+
"showDimensionLabels": true,
|
|
59
|
+
"interpretations": [],
|
|
60
|
+
"program": {
|
|
61
|
+
"enrollmentDateLabel": "Date of enrollment",
|
|
62
|
+
"incidentDateLabel": "Date of birth",
|
|
63
|
+
"id": "IpHINAT79UW",
|
|
64
|
+
"name": "Child Programme"
|
|
65
|
+
},
|
|
66
|
+
"programStage": {
|
|
67
|
+
"executionDateLabel": "Report date",
|
|
68
|
+
"id": "A03MvHHogjR",
|
|
69
|
+
"name": "Birth"
|
|
70
|
+
},
|
|
71
|
+
"dataType": "AGGREGATED_VALUES",
|
|
72
|
+
"outputType": "EVENT",
|
|
73
|
+
"collapseDataDimensions": false,
|
|
74
|
+
"hideNaData": false,
|
|
75
|
+
"simpleDimensions": [
|
|
76
|
+
{
|
|
77
|
+
"parent": "COLUMN",
|
|
78
|
+
"dimension": "ou",
|
|
79
|
+
"values": [
|
|
80
|
+
"ImspTQPwCqd"
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"legacy": true,
|
|
85
|
+
"type": "PIVOT_TABLE",
|
|
86
|
+
"filters": [],
|
|
87
|
+
"parentGraphMap": {
|
|
88
|
+
"ImspTQPwCqd": ""
|
|
89
|
+
},
|
|
90
|
+
"columns": [
|
|
91
|
+
{
|
|
92
|
+
"items": [
|
|
93
|
+
{
|
|
94
|
+
"name": "Sierra Leone",
|
|
95
|
+
"id": "ImspTQPwCqd"
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"dimension": "A03MvHHogjR.ou",
|
|
99
|
+
"programStage": {
|
|
100
|
+
"id": "A03MvHHogjR"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"rows": [
|
|
105
|
+
{
|
|
106
|
+
"items": [
|
|
107
|
+
{
|
|
108
|
+
"dimensionItemType": "PERIOD",
|
|
109
|
+
"id": "LAST_6_MONTHS"
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"dimension": "A03MvHHogjR.eventdate",
|
|
113
|
+
"programStage": {
|
|
114
|
+
"id": "A03MvHHogjR"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"displayName": "Event orgunit",
|
|
119
|
+
"access": {
|
|
120
|
+
"manage": true,
|
|
121
|
+
"externalize": true,
|
|
122
|
+
"write": true,
|
|
123
|
+
"read": true,
|
|
124
|
+
"update": true,
|
|
125
|
+
"delete": true
|
|
126
|
+
},
|
|
127
|
+
"user": {
|
|
128
|
+
"id": "xE7jOejl9FI",
|
|
129
|
+
"code": null,
|
|
130
|
+
"name": "John Traore",
|
|
131
|
+
"displayName": "John Traore",
|
|
132
|
+
"username": "admin"
|
|
133
|
+
},
|
|
134
|
+
"favorite": false,
|
|
135
|
+
"subscribed": false,
|
|
136
|
+
"displayFormName": "Event orgunit",
|
|
137
|
+
"id": "xLPn5T11Vd4",
|
|
138
|
+
"attributeValues": []
|
|
139
|
+
}
|