@ampath/esm-reports-app 1.0.0-next.8 → 1.0.0-next.81
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/dist/197.js +1 -1
- package/dist/282.js +1 -1
- package/dist/282.js.map +1 -1
- package/dist/295.css +1 -0
- package/dist/295.css.map +1 -0
- package/dist/295.js +1 -0
- package/dist/295.js.map +1 -0
- package/dist/299.js +2 -0
- package/dist/299.js.LICENSE.txt +3 -0
- package/dist/299.js.map +1 -0
- package/dist/300.js +1 -1
- package/dist/311.js +1 -1
- package/dist/311.js.map +1 -1
- package/dist/335.js +1 -1
- package/dist/353.js +1 -1
- package/dist/353.js.map +1 -1
- package/dist/354.js +2 -0
- package/dist/354.js.LICENSE.txt +20 -0
- package/dist/354.js.map +1 -0
- package/dist/410.js +1 -0
- package/dist/410.js.map +1 -0
- package/dist/457.js +2 -0
- package/dist/457.js.LICENSE.txt +261 -0
- package/dist/457.js.map +1 -0
- package/dist/478.js +1 -1
- package/dist/478.js.map +1 -1
- package/dist/480.js +1 -0
- package/dist/540.js +1 -1
- package/dist/540.js.map +1 -1
- package/dist/549.css +1 -0
- package/dist/549.css.map +1 -0
- package/dist/549.js +1 -0
- package/dist/549.js.map +1 -0
- package/dist/55.js +1 -1
- package/dist/600.js +2 -0
- package/dist/600.js.LICENSE.txt +35 -0
- package/dist/600.js.map +1 -0
- package/dist/652.js +1 -1
- package/dist/757.js +1 -0
- package/dist/757.js.map +1 -0
- package/dist/781.js +1 -0
- package/dist/781.js.map +1 -0
- package/dist/961.js +1 -1
- package/dist/961.js.map +1 -1
- package/dist/99.js +1 -1
- package/dist/99.js.map +1 -0
- package/dist/ampath-esm-reports-app.js +1 -1
- package/dist/ampath-esm-reports-app.js.map +1 -1
- package/dist/routes.json +1 -1
- package/package.json +4 -2
- package/src/common/daily-summary-table.tsx +55 -0
- package/src/common/linelist-table/index.ts +3 -0
- package/src/common/linelist-table/linelist-columns.ts +48 -0
- package/src/common/linelist-table/linelist-table.component.tsx +442 -0
- package/src/common/linelist-table/linelist-table.scss +306 -0
- package/src/common/linelist-table/linelist-table.test.tsx +120 -0
- package/src/common/linelist-table/use-all-rows.ts +93 -0
- package/src/common/linelist-table/use-column-layout.ts +123 -0
- package/src/common/report-error/index.ts +1 -0
- package/src/common/report-error/show-report-error.ts +25 -0
- package/src/common/report-filters/date-range.ts +137 -0
- package/src/common/report-filters/index.ts +4 -0
- package/src/common/report-filters/report-filters.component.tsx +317 -99
- package/src/common/report-filters/report-filters.scss +264 -32
- package/src/common/report-filters/types.ts +79 -0
- package/src/common/report-filters/use-restore-period.ts +43 -0
- package/src/common/report-header/index.ts +1 -0
- package/src/common/report-header/use-location-details.ts +58 -0
- package/src/common/report-page/download-sheet-pdf.ts +225 -0
- package/src/common/report-page/index.ts +3 -0
- package/src/common/report-page/report-page.component.tsx +32 -0
- package/src/common/report-page/report-page.scss +45 -0
- package/src/common/report-page/use-page-scale.ts +60 -0
- package/src/common/report-placeholder/has-report-data.ts +15 -0
- package/src/common/report-placeholder/index.ts +3 -0
- package/src/common/report-placeholder/report-placeholder.component.tsx +81 -0
- package/src/common/report-placeholder/report-placeholder.scss +48 -0
- package/src/common/report-placeholder/use-generated-location.ts +62 -0
- package/src/common/report-register/index.ts +6 -0
- package/src/common/report-register/register-columns.ts +46 -0
- package/src/common/report-register/register-layout.component.tsx +265 -0
- package/src/common/report-register/register-layout.scss +150 -0
- package/src/common/report-register/register-table.scss +71 -0
- package/src/common/report-register/report-parents.ts +29 -0
- package/src/common/report-register/rows-to-csv.ts +89 -0
- package/src/common/report-register/use-location-name.ts +54 -0
- package/src/common/report-register/use-patient-list.ts +92 -0
- package/src/common/report-skeleton/index.ts +1 -0
- package/src/common/report-skeleton/report-skeleton.component.tsx +46 -0
- package/src/common/report-skeleton/report-skeleton.scss +29 -0
- package/src/config-schema.ts +9 -1
- package/src/dashboard/report-catalog.ts +191 -0
- package/src/dashboard/reports-dasboard.tsx +189 -18
- package/src/dashboard/reports-dashboard.module.scss +357 -14
- package/src/index.ts +13 -1
- package/src/registers/moh-240/moh-240-register.scss +41 -0
- package/src/registers/moh-240/moh-240.component.test.tsx +166 -0
- package/src/registers/moh-240/moh-240.component.tsx +164 -0
- package/src/registers/moh-267/moh-267-register.component.tsx +407 -0
- package/src/registers/moh-267/moh-267-register.scss +298 -0
- package/src/registers/moh-267/moh-267-summary.ts +102 -0
- package/src/registers/moh-267/moh-267.component.tsx +94 -0
- package/src/registers/moh-267/moh-267.types.ts +47 -0
- package/src/registers/moh-362/moh-362-lab-register.component.tsx +551 -0
- package/src/registers/moh-362/moh-362-lab-register.scss +412 -0
- package/src/registers/moh-362/moh-362-linkage-register.component.tsx +215 -0
- package/src/registers/moh-362/moh-362-linkage-register.scss +91 -0
- package/src/registers/moh-362/moh-362.component.tsx +117 -0
- package/src/registers/moh-362/moh-362.scss +11 -0
- package/src/registers/moh-362/moh-362.types.ts +87 -0
- package/src/registers/presumptive-tb/presumptive-tb-register.component.tsx +391 -0
- package/src/registers/presumptive-tb/presumptive-tb-register.scss +262 -0
- package/src/registers/presumptive-tb/presumptive-tb.component.tsx +92 -0
- package/src/registers/presumptive-tb/presumptive-tb.types.ts +88 -0
- package/src/registers/register-catalog.ts +202 -0
- package/src/registers/register-file-name.ts +18 -0
- package/src/registers/tb-lab-register/tb-lab-register-table.component.tsx +116 -0
- package/src/registers/tb-lab-register/tb-lab-register-table.scss +123 -0
- package/src/registers/tb-lab-register/tb-lab-register.columns.ts +164 -0
- package/src/registers/tb-lab-register/tb-lab-register.component.test.tsx +232 -0
- package/src/registers/tb-lab-register/tb-lab-register.component.tsx +153 -0
- package/src/registers/tb4/tb4-parts.tsx +164 -0
- package/src/registers/tb4/tb4-patient-sheet.component.tsx +418 -0
- package/src/registers/tb4/tb4-register.scss +282 -0
- package/src/registers/tb4/tb4-treatment-sheet.component.tsx +349 -0
- package/src/registers/tb4/tb4.component.tsx +120 -0
- package/src/registers/tb4/tb4.types.ts +129 -0
- package/src/reports/acf-summary/acf-summary-form.component.tsx +176 -0
- package/src/reports/acf-summary/acf-summary-linelist.component.tsx +86 -0
- package/src/reports/acf-summary/acf-summary.component.tsx +97 -0
- package/src/reports/acf-summary/acf-summary.counts.ts +37 -0
- package/src/reports/acf-summary/acf-summary.scss +162 -0
- package/src/reports/datatable-wrapper/datatable-wrapper.component.tsx +63 -48
- package/src/reports/moh-240/moh-240-header.component.tsx +62 -0
- package/src/reports/moh-240/moh-240.columns.ts +113 -0
- package/src/reports/moh-240/moh-240.component.tsx +72 -9
- package/src/reports/moh-240/moh-240.scss +40 -0
- package/src/reports/moh-240/sub-reports/moh-240-register.component.tsx +31 -37
- package/src/reports/moh-240/sub-reports/page-summary.component.tsx +143 -106
- package/src/reports/moh-505/moh-505-header.component.tsx +67 -0
- package/src/reports/moh-505/moh-505.component.tsx +441 -0
- package/src/reports/moh-505/moh-505.scss +117 -0
- package/src/reports/moh-705B/moh-204b-register.component.tsx +246 -0
- package/src/reports/moh-705B/moh-204b.columns.ts +39 -0
- package/src/reports/moh-705B/moh-705b.component.tsx +659 -0
- package/src/reports/moh-705B/moh-705b.scss +172 -0
- package/src/reports/moh-705a/moh-705a.component.tsx +661 -0
- package/src/reports/moh-705a/moh-705a.scss +172 -0
- package/src/reports/moh-705a/registers/moh-204a-register.component.tsx +331 -0
- package/src/reports/moh-705a/registers/moh-204a.columns.ts +57 -0
- package/src/reports/moh-705a/type.ts +6 -0
- package/src/reports/moh-706/moh-706-header.component.tsx +66 -0
- package/src/reports/moh-706/moh-706.component.tsx +150 -24
- package/src/reports/moh-706/moh-706.scss +119 -11
- package/src/reports/moh-706/sub-reports/bacteriology/bacteriology.component.tsx +35 -28
- package/src/reports/moh-706/sub-reports/blood-chemistry/blood-chemistry.component.tsx +229 -305
- package/src/reports/moh-706/sub-reports/haematology/haematology.component.tsx +26 -19
- package/src/reports/moh-706/sub-reports/histology-and-cytology/histology-and-cytology.component.tsx +23 -23
- package/src/reports/moh-706/sub-reports/parasitology/parasitology.component.tsx +25 -18
- package/src/reports/moh-706/sub-reports/serology/serology.component.tsx +21 -14
- package/src/reports/moh-706/sub-reports/specimen-referral-to-higher-levels/specimen-referral-to-higher-levels.component.tsx +2 -2
- package/src/reports/moh-706/sub-reports/urine-analysis/urine-analysis.component.tsx +27 -20
- package/src/reports/moh-710/moh-710.component.tsx +815 -632
- package/src/reports/moh-710/moh-710.scss +142 -21
- package/src/reports/moh-710/registers/moh-413/moh-413-columns.ts +22 -0
- package/src/reports/moh-710/registers/moh-413/moh-413.component.tsx +140 -0
- package/src/reports/moh-710/registers/moh-413/moh-413.scss +64 -0
- package/src/reports/moh-710/registers/moh-510/moh-510.columns.ts +40 -0
- package/src/reports/moh-710/registers/moh-510/moh-510.component.tsx +191 -0
- package/src/reports/moh-710/registers/moh-510/moh-510.scss +130 -0
- package/src/reports/moh-710/registers/moh-511-710-register.component.tsx +268 -0
- package/src/reports/moh-710/registers/moh-511-710.columns.ts +52 -0
- package/src/reports/moh-710/registers/type.ts +31 -0
- package/src/reports/moh-711/moh-711.component.tsx +153 -1269
- package/src/reports/moh-711/moh711.scss +135 -20
- package/src/reports/moh-711/registers/moh-333-register.component.tsx +680 -0
- package/src/reports/moh-711/registers/moh-333.columns.ts +119 -0
- package/src/reports/moh-711/registers/moh-405-register.component.tsx +566 -0
- package/src/reports/moh-711/registers/moh-405.columns.ts +120 -0
- package/src/reports/moh-711/registers/moh-406-register.component.tsx +581 -0
- package/src/reports/moh-711/registers/moh-406.columns.ts +133 -0
- package/src/reports/moh-711/registers/moh-407-register.component.tsx +157 -0
- package/src/reports/moh-711/registers/moh-407.columns.ts +24 -0
- package/src/reports/moh-711/registers/moh-407.scss +64 -0
- package/src/reports/moh-711/registers/moh-510-register.component.tsx +55 -0
- package/src/reports/moh-711/registers/moh-511-register.component.tsx +270 -0
- package/src/reports/moh-711/registers/moh-511.columns.ts +59 -0
- package/src/reports/moh-711/registers/moh-512-columns.ts +94 -0
- package/src/reports/moh-711/registers/moh-512.component.tsx +191 -0
- package/src/reports/moh-711/registers/moh-512.scss +64 -0
- package/src/reports/moh-711/registers/tb-register-columns.ts +17 -0
- package/src/reports/moh-711/registers/tb-register.component.tsx +96 -0
- package/src/reports/moh-711/registers/tb-register.scss +64 -0
- package/src/reports/moh-711/registers/type.ts +192 -0
- package/src/reports/moh-711/sections/anc.component.tsx +159 -0
- package/src/reports/moh-711/sections/cervical-cancer.component.tsx +148 -0
- package/src/reports/moh-711/sections/chanis.component.tsx +389 -0
- package/src/reports/moh-711/sections/family-planning.component.tsx +299 -0
- package/src/reports/moh-711/sections/gbv.component.tsx +115 -0
- package/src/reports/moh-711/sections/maternity.component.tsx +321 -0
- package/src/reports/moh-711/sections/medical-social-work.component.tsx +73 -0
- package/src/reports/moh-711/sections/other.component.tsx +47 -0
- package/src/reports/moh-711/sections/physiotherapy.component.tsx +61 -0
- package/src/reports/moh-711/sections/pnc.component.tsx +127 -0
- package/src/reports/moh-711/sections/post-abortion.component.tsx +42 -0
- package/src/reports/moh-711/sections/rehabilitation.component.tsx +57 -0
- package/src/reports/moh-711/sections/report-compiled-by.component.tsx +50 -0
- package/src/reports/moh-711/sections/tb-screening.component.tsx +94 -0
- package/src/reports/moh-717/moh-717.component.tsx +149 -985
- package/src/reports/moh-717/moh717.scss +217 -21
- package/src/reports/moh-717/registers/nutrition-register.component.tsx +48 -0
- package/src/reports/moh-717/sections/finance.component.tsx +42 -0
- package/src/reports/moh-717/sections/inpatient.component.tsx +374 -0
- package/src/reports/moh-717/sections/maternity.component.tsx +126 -0
- package/src/reports/moh-717/sections/medical-records.component.tsx +35 -0
- package/src/reports/moh-717/sections/mortuary.component.tsx +43 -0
- package/src/reports/moh-717/sections/operations.component.tsx +53 -0
- package/src/reports/moh-717/sections/orthopaedic-trauma.component.tsx +98 -0
- package/src/reports/moh-717/sections/outpatient.component.tsx +597 -0
- package/src/reports/moh-717/sections/pharmacy.component.tsx +43 -0
- package/src/reports/moh-717/sections/preparedby.component.tsx +52 -0
- package/src/reports/moh-717/sections/special-services.component.tsx +114 -0
- package/src/reports/moh-729b/moh-729b-form.component.tsx +385 -0
- package/src/reports/moh-729b/moh-729b-linelist.component.tsx +205 -0
- package/src/reports/moh-729b/moh-729b-summary.component.tsx +258 -0
- package/src/reports/moh-729b/moh-729b-summary.config.ts +229 -0
- package/src/reports/moh-729b/moh-729b.component.tsx +157 -0
- package/src/reports/moh-729b/moh-729b.config.ts +235 -0
- package/src/reports/moh-729b/moh-729b.scss +276 -0
- package/src/reports/moh-729b/moh-729b.types.ts +111 -0
- package/src/reports/moh-731/linelist/moh-731-indicators.ts +1122 -0
- package/src/reports/moh-731/linelist/moh-731-linelist-sections.ts +472 -0
- package/src/reports/moh-731/linelist/moh-731-linelist.component.tsx +102 -0
- package/src/reports/moh-731/linelist/use-open-moh-731-linelist.ts +50 -0
- package/src/reports/moh-731/moh-731.component.tsx +269 -0
- package/src/reports/moh-731/moh-731.scss +496 -0
- package/src/reports/moh-731/registers/moh-366.columns.ts +38 -0
- package/src/reports/moh-731/registers/moh-366.component.tsx +471 -0
- package/src/reports/moh-731/registers/prep-register.component.tsx +284 -0
- package/src/reports/moh-731/registers/prep.columns.ts +34 -0
- package/src/reports/moh-731/sections/hiv-and-tb-treatment.component.tsx +1206 -0
- package/src/reports/moh-731/sections/hiv-testing-and-pre-exposure.component.tsx +727 -0
- package/src/reports/moh-731/sections/pmtct.component.tsx +572 -0
- package/src/reports/moh-731/summary/moh-731-summary.component.tsx +313 -0
- package/src/reports/moh-731/summary/moh-731-summary.config.ts +527 -0
- package/src/reports/moh-731/summary/moh-731-summary.scss +247 -0
- package/src/reports/moh-740/moh-740.component.scss +202 -0
- package/src/reports/moh-740/moh-740.component.tsx +1339 -0
- package/src/reports/moh-740/moh-740.resource.ts +54 -0
- package/src/reports/moh-740/registers/moh-222-daily-register/moh-222-daily-register.scss +20 -0
- package/src/reports/moh-740/registers/moh-222-daily-register/moh-222-daily-register.tsx +183 -0
- package/src/reports/moh-740/registers/moh-270-permanent-register/moh-270-permanent-register.scss +6 -0
- package/src/reports/moh-740/registers/moh-270-permanent-register/moh-270-permanent-register.tsx +151 -0
- package/src/reports/moh-740/registers/moh-740-patient-list.scss +0 -0
- package/src/reports/moh-740/registers/moh-740-patient-list.tsx +60 -0
- package/src/reports/moh-740/registers/moh-740.columns.ts +54 -0
- package/src/reports/moh-740/shared/data-cell/data-cell.scss +6 -0
- package/src/reports/moh-740/shared/data-cell/data-cell.tsx +23 -0
- package/src/reports/moh-740/shared/utils/indicator-register-map.ts +159 -0
- package/src/reports/moh-740/types/index.ts +223 -0
- package/src/reports/moh-745/moh-745.component.tsx +2058 -0
- package/src/reports/moh-745/moh-745.scss +142 -0
- package/src/reports/moh-745/registers/moh-412-register.component.scss +6 -0
- package/src/reports/moh-745/registers/moh-412-register.component.tsx +275 -0
- package/src/reports/moh-745/registers/moh-412.columns.ts +52 -0
- package/src/reports/moh-745/registers/type.ts +223 -0
- package/src/reports/table-wrapper/table-row-mapper.component.tsx +20 -5
- package/src/reports/table-wrapper/table-wrapper.component.tsx +23 -14
- package/src/reports/table-wrapper/table-wrapper.scss +1 -16
- package/src/resources/moh-267.resource.ts +27 -0
- package/src/resources/moh-362.resource.ts +27 -0
- package/src/resources/moh-505.resource.ts +69 -0
- package/src/resources/moh-705.resource.ts +118 -0
- package/src/resources/moh-706.resource.ts +80 -0
- package/src/resources/moh-710.resource.ts +60 -9
- package/src/resources/moh-711.resource.ts +206 -9
- package/src/resources/moh-717.resource.ts +26 -9
- package/src/resources/moh-729b.resource.ts +25 -0
- package/src/resources/moh-731.resource.ts +90 -0
- package/src/resources/moh-745.resource.ts +76 -0
- package/src/resources/patient-list-page.ts +66 -0
- package/src/resources/presumptive-tb.resource.ts +27 -0
- package/src/root.component.tsx +79 -8
- package/src/root.scss +36 -0
- package/src/routes.json +3 -1
- package/src/utils/format-indicator.ts +39 -0
- package/src/utils/get-base-url.ts +39 -7
- package/src/utils/utils.ts +30 -1
- package/tsconfig.json +1 -1
- package/webpack.config.js +22 -1
- package/dist/138.js +0 -2
- package/dist/138.js.LICENSE.txt +0 -20
- package/dist/138.js.map +0 -1
- package/dist/184.js +0 -2
- package/dist/184.js.LICENSE.txt +0 -14
- package/dist/184.js.map +0 -1
- package/dist/205.js +0 -1
- package/dist/205.js.map +0 -1
- package/dist/812.js +0 -1
- package/dist/812.js.map +0 -1
- package/dist/879.js +0 -1
- package/dist/879.js.map +0 -1
- package/dist/ampath-esm-reports-app.js.buildmanifest.json +0 -539
- package/dist/main.js +0 -1
- package/dist/main.js.map +0 -1
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import { openmrsFetch } from '@openmrs/esm-framework';
|
|
2
|
-
import {
|
|
2
|
+
import { buildEtlUrl } from '../utils/get-base-url';
|
|
3
|
+
import { PAGE_SIZE, toPatientListPage, pageParams, type PatientListParams } from './patient-list-page';
|
|
3
4
|
|
|
4
5
|
interface Moh710Params {
|
|
5
6
|
locationUuids: string;
|
|
6
7
|
startDate?: string;
|
|
7
8
|
endDate?: string;
|
|
9
|
+
indicator?: string | string[];
|
|
10
|
+
startIndex?: number;
|
|
11
|
+
limit?: number;
|
|
12
|
+
reportName?: string;
|
|
8
13
|
}
|
|
9
14
|
|
|
10
15
|
export async function getMoh710(params: Moh710Params): Promise<any> {
|
|
11
|
-
const
|
|
12
|
-
const url = `${etlBaseUrl}/moh-710`;
|
|
13
|
-
const queryparams = {
|
|
16
|
+
const url = await buildEtlUrl('moh-710', {
|
|
14
17
|
locationUuids: params.locationUuids || '',
|
|
15
18
|
startDate: params.startDate || '',
|
|
16
19
|
endDate: params.endDate || '',
|
|
17
|
-
};
|
|
18
|
-
const queryString = new URLSearchParams(
|
|
19
|
-
Object.fromEntries(Object.entries(queryparams).filter(([_, v]) => v !== undefined && v !== null)),
|
|
20
|
-
).toString();
|
|
20
|
+
});
|
|
21
21
|
try {
|
|
22
|
-
const response = await openmrsFetch(
|
|
22
|
+
const response = await openmrsFetch(url);
|
|
23
23
|
|
|
24
24
|
if (!response.ok) {
|
|
25
25
|
const errorText = await response.text();
|
|
@@ -32,3 +32,54 @@ export async function getMoh710(params: Moh710Params): Promise<any> {
|
|
|
32
32
|
throw new Error(`An error occurred while fetching the MOH-710 report: ${error.message}`);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
+
|
|
36
|
+
export async function getMoh510PatientList(params: PatientListParams): Promise<any> {
|
|
37
|
+
const url = await buildEtlUrl('moh-510-patient-list', {
|
|
38
|
+
locationUuids: params.locationUuids || '',
|
|
39
|
+
startDate: params.startDate || '',
|
|
40
|
+
endDate: params.endDate || '',
|
|
41
|
+
indicator: Array.isArray(params.indicator) ? params.indicator.join(',') : params.indicator || '',
|
|
42
|
+
reportName: params.reportName || 'moh710Report',
|
|
43
|
+
...pageParams(params),
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
const response = await openmrsFetch(url);
|
|
48
|
+
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
const errorText = await response.text();
|
|
51
|
+
throw new Error(`Failed to fetch dashboard summary: ${response.status} - ${errorText}`);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const data = await response.json();
|
|
55
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
56
|
+
} catch (error: any) {
|
|
57
|
+
throw new Error(`An error occurred while fetching the MOH-510 REgister: ${error.message}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export async function getMoh413PatientList(params: PatientListParams): Promise<any> {
|
|
62
|
+
const url = await buildEtlUrl('moh-413-patient-list', {
|
|
63
|
+
locationUuids: params.locationUuids || '',
|
|
64
|
+
startDate: params.startDate || '',
|
|
65
|
+
endDate: params.endDate || '',
|
|
66
|
+
indicator: Array.isArray(params.indicator) ? params.indicator.join(',') : params.indicator || '',
|
|
67
|
+
reportName: params.reportName || 'moh710Report',
|
|
68
|
+
...pageParams(params),
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
const response = await openmrsFetch(url);
|
|
73
|
+
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
const errorText = await response.text();
|
|
76
|
+
throw new Error(`Failed to fetch moh-413: ${response.status} - ${errorText}`);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const data = await response.json();
|
|
80
|
+
|
|
81
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
82
|
+
} catch (error: any) {
|
|
83
|
+
throw new Error(`An error occurred while fetching the MOH-413 Register: ${error.message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
import { openmrsFetch } from '@openmrs/esm-framework';
|
|
2
|
-
import {
|
|
2
|
+
import { buildEtlUrl } from '../utils/get-base-url';
|
|
3
|
+
import {
|
|
4
|
+
PAGE_SIZE,
|
|
5
|
+
pageParams,
|
|
6
|
+
toPatientListPage,
|
|
7
|
+
type PatientListPage,
|
|
8
|
+
type PatientListParams,
|
|
9
|
+
} from './patient-list-page';
|
|
3
10
|
|
|
4
11
|
interface Moh711Params {
|
|
5
12
|
locationUuids: string;
|
|
6
13
|
startDate?: string;
|
|
7
14
|
endDate?: string;
|
|
15
|
+
indicator?: string | string[];
|
|
16
|
+
reportName?: string;
|
|
8
17
|
}
|
|
9
18
|
|
|
10
19
|
export async function getMoh711(params: Moh711Params): Promise<any> {
|
|
11
|
-
const
|
|
12
|
-
const url = `${etlBaseUrl}/moh-711`;
|
|
13
|
-
const queryparams = {
|
|
20
|
+
const url = await buildEtlUrl('moh-711', {
|
|
14
21
|
locationUuids: params.locationUuids || '',
|
|
15
22
|
startDate: params.startDate || '',
|
|
16
23
|
endDate: params.endDate || '',
|
|
17
|
-
};
|
|
18
|
-
const queryString = new URLSearchParams(
|
|
19
|
-
Object.fromEntries(Object.entries(queryparams).filter(([_, v]) => v !== undefined && v !== null)),
|
|
20
|
-
).toString();
|
|
24
|
+
});
|
|
21
25
|
try {
|
|
22
|
-
const response = await openmrsFetch(
|
|
26
|
+
const response = await openmrsFetch(url);
|
|
23
27
|
|
|
24
28
|
if (!response.ok) {
|
|
25
29
|
const errorText = await response.text();
|
|
@@ -32,3 +36,196 @@ export async function getMoh711(params: Moh711Params): Promise<any> {
|
|
|
32
36
|
throw new Error(`An error occurred while fetching the MOH-711 report: ${error.message}`);
|
|
33
37
|
}
|
|
34
38
|
}
|
|
39
|
+
|
|
40
|
+
export async function getMoh406PatientList(params: PatientListParams): Promise<PatientListPage> {
|
|
41
|
+
const endPoint = (() => {
|
|
42
|
+
if (params.from && params.from?.toLowerCase() === 'moh-717') {
|
|
43
|
+
return 'moh-717-patient-list';
|
|
44
|
+
}
|
|
45
|
+
return 'moh-406-patient-list';
|
|
46
|
+
})();
|
|
47
|
+
const url = await buildEtlUrl(endPoint, {
|
|
48
|
+
locationUuids: params.locationUuids || '',
|
|
49
|
+
startDate: params.startDate || '',
|
|
50
|
+
endDate: params.endDate || '',
|
|
51
|
+
indicator: Array.isArray(params.indicator) ? params.indicator.join(',') : params.indicator || '',
|
|
52
|
+
reportName: params.reportName || '',
|
|
53
|
+
...pageParams(params),
|
|
54
|
+
});
|
|
55
|
+
try {
|
|
56
|
+
const response = await openmrsFetch(url);
|
|
57
|
+
|
|
58
|
+
if (!response.ok) {
|
|
59
|
+
const errorText = await response.text();
|
|
60
|
+
throw new Error(`Failed to fetch patient list: ${response.status} - ${errorText}`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const data = await response.json();
|
|
64
|
+
|
|
65
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
66
|
+
} catch (error: any) {
|
|
67
|
+
throw new Error(`An error occurred while fetching the MOH-705 patient list: ${error.message}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export async function getMoh405PatientList(params: PatientListParams): Promise<PatientListPage> {
|
|
72
|
+
const endPoint = (() => {
|
|
73
|
+
if (params.from && params.from?.toLowerCase() === 'moh-717') {
|
|
74
|
+
return 'moh-717-patient-list';
|
|
75
|
+
}
|
|
76
|
+
return 'moh-405-patient-list';
|
|
77
|
+
})();
|
|
78
|
+
const url = await buildEtlUrl(endPoint, {
|
|
79
|
+
locationUuids: params.locationUuids || '',
|
|
80
|
+
startDate: params.startDate || '',
|
|
81
|
+
endDate: params.endDate || '',
|
|
82
|
+
indicator: Array.isArray(params.indicator) ? params.indicator.join(',') : params.indicator || '',
|
|
83
|
+
reportName: params.reportName || '',
|
|
84
|
+
...pageParams(params),
|
|
85
|
+
});
|
|
86
|
+
try {
|
|
87
|
+
const response = await openmrsFetch(url);
|
|
88
|
+
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
const errorText = await response.text();
|
|
91
|
+
throw new Error(`Failed to fetch patient list: ${response.status} - ${errorText}`);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const data = await response.json();
|
|
95
|
+
|
|
96
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
97
|
+
} catch (error: any) {
|
|
98
|
+
throw new Error(`An error occurred while fetching the MOH-705 patient list: ${error.message}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export async function getMoh333PatientList(params: PatientListParams): Promise<PatientListPage> {
|
|
103
|
+
const endPoint = (() => {
|
|
104
|
+
if (params.from && params.from?.toLowerCase() === 'moh-717') {
|
|
105
|
+
return 'moh-717-patient-list';
|
|
106
|
+
}
|
|
107
|
+
return 'moh-333-patient-list';
|
|
108
|
+
})();
|
|
109
|
+
const url = await buildEtlUrl(endPoint, {
|
|
110
|
+
locationUuids: params.locationUuids || '',
|
|
111
|
+
startDate: params.startDate || '',
|
|
112
|
+
endDate: params.endDate || '',
|
|
113
|
+
indicator: Array.isArray(params.indicator) ? params.indicator.join(',') : params.indicator || '',
|
|
114
|
+
reportName: params.reportName || '',
|
|
115
|
+
...pageParams(params),
|
|
116
|
+
});
|
|
117
|
+
try {
|
|
118
|
+
const response = await openmrsFetch(url);
|
|
119
|
+
|
|
120
|
+
if (!response.ok) {
|
|
121
|
+
const errorText = await response.text();
|
|
122
|
+
throw new Error(`Failed to fetch patient list: ${response.status} - ${errorText}`);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const data = await response.json();
|
|
126
|
+
|
|
127
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
128
|
+
} catch (error: any) {
|
|
129
|
+
throw new Error(`An error occurred while fetching the MOH-705 patient list: ${error.message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export async function getMoh511PatientList(params: PatientListParams): Promise<PatientListPage> {
|
|
134
|
+
const url = await buildEtlUrl('moh-511-patient-list', {
|
|
135
|
+
locationUuids: params.locationUuids || '',
|
|
136
|
+
startDate: params.startDate || '',
|
|
137
|
+
endDate: params.endDate || '',
|
|
138
|
+
indicator: Array.isArray(params.indicator) ? params.indicator.join(',') : params.indicator || '',
|
|
139
|
+
reportName: params.reportName || '',
|
|
140
|
+
...pageParams(params),
|
|
141
|
+
});
|
|
142
|
+
try {
|
|
143
|
+
const response = await openmrsFetch(url);
|
|
144
|
+
|
|
145
|
+
if (!response.ok) {
|
|
146
|
+
const errorText = await response.text();
|
|
147
|
+
throw new Error(`Failed to fetch patient list: ${response.status} - ${errorText}`);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const data = await response.json();
|
|
151
|
+
|
|
152
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
153
|
+
} catch (error: any) {
|
|
154
|
+
throw new Error(`An error occurred while fetching the MOH-705 patient list: ${error.message}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export async function getTBPatientList(params: PatientListParams): Promise<PatientListPage> {
|
|
159
|
+
const url = await buildEtlUrl('tb-patient-list', {
|
|
160
|
+
locationUuids: params.locationUuids || '',
|
|
161
|
+
startDate: params.startDate || '',
|
|
162
|
+
endDate: params.endDate || '',
|
|
163
|
+
indicator: Array.isArray(params.indicator) ? params.indicator.join(',') : params.indicator || '',
|
|
164
|
+
reportName: params.reportName || 'moh711Report',
|
|
165
|
+
...pageParams(params),
|
|
166
|
+
});
|
|
167
|
+
try {
|
|
168
|
+
const response = await openmrsFetch(url);
|
|
169
|
+
|
|
170
|
+
if (!response.ok) {
|
|
171
|
+
const errorText = await response.text();
|
|
172
|
+
throw new Error(`Failed to fetch patient list: ${response.status} - ${errorText}`);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const data = await response.json();
|
|
176
|
+
|
|
177
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
178
|
+
} catch (error: any) {
|
|
179
|
+
throw new Error(`An error occurred while fetching the MOH-705 patient list: ${error.message}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export async function getMoh512PatientList(params: PatientListParams): Promise<PatientListPage> {
|
|
184
|
+
const url = await buildEtlUrl('moh-512-patient-list', {
|
|
185
|
+
locationUuids: params.locationUuids || '',
|
|
186
|
+
startDate: params.startDate || '',
|
|
187
|
+
endDate: params.endDate || '',
|
|
188
|
+
indicator: Array.isArray(params.indicator) ? params.indicator.join(',') : params.indicator || '',
|
|
189
|
+
reportName: params.reportName || 'moh711Report',
|
|
190
|
+
...pageParams(params),
|
|
191
|
+
});
|
|
192
|
+
try {
|
|
193
|
+
const response = await openmrsFetch(url);
|
|
194
|
+
|
|
195
|
+
if (!response.ok) {
|
|
196
|
+
const errorText = await response.text();
|
|
197
|
+
throw new Error(`Failed to fetch patient list: ${response.status} - ${errorText}`);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
const data = await response.json();
|
|
201
|
+
|
|
202
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
203
|
+
} catch (error: any) {
|
|
204
|
+
throw new Error(`An error occurred while fetching the MOH-512 patient list: ${error.message}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export async function getMoh407PatientList(params: PatientListParams): Promise<PatientListPage> {
|
|
209
|
+
const url = await buildEtlUrl('moh-407-patient-list', {
|
|
210
|
+
locationUuids: params.locationUuids || '',
|
|
211
|
+
startDate: params.startDate || '',
|
|
212
|
+
endDate: params.endDate || '',
|
|
213
|
+
indicator: Array.isArray(params.indicator) ? params.indicator.join(',') : params.indicator || '',
|
|
214
|
+
reportName: params.reportName || 'moh711Report',
|
|
215
|
+
...pageParams(params),
|
|
216
|
+
});
|
|
217
|
+
try {
|
|
218
|
+
const response = await openmrsFetch(url);
|
|
219
|
+
|
|
220
|
+
if (!response.ok) {
|
|
221
|
+
const errorText = await response.text();
|
|
222
|
+
throw new Error(`Failed to fetch patient list: ${response.status} - ${errorText}`);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const data = await response.json();
|
|
226
|
+
|
|
227
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
228
|
+
} catch (error: any) {
|
|
229
|
+
throw new Error(`An error occurred while fetching the MOH-407 patient list: ${error.message}`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { openmrsFetch } from '@openmrs/esm-framework';
|
|
2
|
-
import {
|
|
2
|
+
import { buildEtlUrl } from '../utils/get-base-url';
|
|
3
3
|
|
|
4
4
|
interface Moh717Params {
|
|
5
5
|
locationUuids: string;
|
|
@@ -8,19 +8,36 @@ interface Moh717Params {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export async function getMoh717(params: Moh717Params): Promise<any> {
|
|
11
|
-
const
|
|
12
|
-
const url = `${etlBaseUrl}/moh-717`;
|
|
13
|
-
const queryparams = {
|
|
11
|
+
const url = await buildEtlUrl('moh-717', {
|
|
14
12
|
locationUuids: params.locationUuids || '',
|
|
15
13
|
startDate: params.startDate || '',
|
|
16
14
|
endDate: params.endDate || '',
|
|
17
|
-
};
|
|
18
|
-
const queryString = new URLSearchParams(
|
|
19
|
-
Object.fromEntries(Object.entries(queryparams).filter(([_, v]) => v !== undefined && v !== null)),
|
|
20
|
-
).toString();
|
|
15
|
+
});
|
|
21
16
|
|
|
22
17
|
try {
|
|
23
|
-
const response = await openmrsFetch(
|
|
18
|
+
const response = await openmrsFetch(url);
|
|
19
|
+
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
const errorText = await response.text();
|
|
22
|
+
throw new Error(`Failed to fetch dashboard summary: ${response.status} - ${errorText}`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
return data;
|
|
27
|
+
} catch (error: any) {
|
|
28
|
+
throw new Error(`An error occurred while fetching the MOH-717 report: ${error.message}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export async function getNutritionRegister(params: Moh717Params): Promise<any> {
|
|
33
|
+
const url = await buildEtlUrl('moh-717', {
|
|
34
|
+
locationUuids: params.locationUuids || '',
|
|
35
|
+
startDate: params.startDate || '',
|
|
36
|
+
endDate: params.endDate || '',
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
const response = await openmrsFetch(url);
|
|
24
41
|
|
|
25
42
|
if (!response.ok) {
|
|
26
43
|
const errorText = await response.text();
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { openmrsFetch } from '@openmrs/esm-framework';
|
|
2
|
+
import { buildEtlUrl } from '../utils/get-base-url';
|
|
3
|
+
|
|
4
|
+
interface Moh729bParams {
|
|
5
|
+
locationUuids: string;
|
|
6
|
+
endDate: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* MOH 729B F-MAPS: one row per client active on ART in the month ending on
|
|
11
|
+
* `endDate`, for the whole facility of the location, with the form's regimen
|
|
12
|
+
* code. The form counts these rows and its linelists list them.
|
|
13
|
+
*/
|
|
14
|
+
export async function getMoh729b(params: Moh729bParams): Promise<Array<Record<string, unknown>>> {
|
|
15
|
+
const url = await buildEtlUrl('moh-729b', {
|
|
16
|
+
locationUuids: params.locationUuids,
|
|
17
|
+
endDate: params.endDate,
|
|
18
|
+
});
|
|
19
|
+
const response = await openmrsFetch(url);
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
throw new Error(`Failed to fetch MOH 729B: ${response.status} - ${await response.text()}`);
|
|
22
|
+
}
|
|
23
|
+
const data = await response.json();
|
|
24
|
+
return Array.isArray(data) ? data : [];
|
|
25
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { openmrsFetch } from '@openmrs/esm-framework';
|
|
2
|
+
import { buildEtlUrl } from '../utils/get-base-url';
|
|
3
|
+
import {
|
|
4
|
+
PAGE_SIZE,
|
|
5
|
+
pageParams,
|
|
6
|
+
toPatientListPage,
|
|
7
|
+
type PatientListPage,
|
|
8
|
+
type PatientListParams,
|
|
9
|
+
} from './patient-list-page';
|
|
10
|
+
|
|
11
|
+
interface Moh745Params {
|
|
12
|
+
locationUuids: string;
|
|
13
|
+
startDate?: string;
|
|
14
|
+
endDate?: string;
|
|
15
|
+
indicator?: string;
|
|
16
|
+
gender?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export async function getMoh731(params: Moh745Params): Promise<any> {
|
|
20
|
+
const url = await buildEtlUrl('moh-731-monthly-summary', {
|
|
21
|
+
locationUuids: params.locationUuids || '',
|
|
22
|
+
startDate: params.startDate || '',
|
|
23
|
+
endDate: params.endDate || '',
|
|
24
|
+
});
|
|
25
|
+
try {
|
|
26
|
+
const response = await openmrsFetch(url);
|
|
27
|
+
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
const errorText = await response.text();
|
|
30
|
+
throw new Error(`Failed to fetch dashboard summary: ${response.status} - ${errorText}`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const data = await response.json();
|
|
34
|
+
return data;
|
|
35
|
+
} catch (error: any) {
|
|
36
|
+
throw new Error(`An error occurred while fetching the MOH-731 report: ${error.message}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export async function getMoh366PatientList(params: PatientListParams): Promise<PatientListPage> {
|
|
41
|
+
const url = await buildEtlUrl('moh-731-monthly-summary-patient-list', {
|
|
42
|
+
locationUuids: params.locationUuids || '',
|
|
43
|
+
startDate: params.startDate || '',
|
|
44
|
+
endDate: params.endDate || '',
|
|
45
|
+
indicator: params.indicator || '',
|
|
46
|
+
gender: params.gender || '',
|
|
47
|
+
...pageParams(params),
|
|
48
|
+
});
|
|
49
|
+
try {
|
|
50
|
+
const response = await openmrsFetch(url);
|
|
51
|
+
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
const errorText = await response.text();
|
|
54
|
+
throw new Error(`Failed to fetch patient list: ${response.status} - ${errorText}`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const data = await response.json();
|
|
58
|
+
|
|
59
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
60
|
+
} catch (error: any) {
|
|
61
|
+
console.error('Failed to fetch MOH 412 PATIENT LIST data', error);
|
|
62
|
+
throw new Error(`An error occurred while fetching the MOH-705 patient list: ${error.message}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export async function getPrepPatientList(params: PatientListParams): Promise<PatientListPage> {
|
|
67
|
+
const url = await buildEtlUrl('prep-patient-list', {
|
|
68
|
+
locationUuids: params.locationUuids || '',
|
|
69
|
+
startDate: params.startDate || '',
|
|
70
|
+
endDate: params.endDate || '',
|
|
71
|
+
indicator: params.indicator || '',
|
|
72
|
+
gender: params.gender || '',
|
|
73
|
+
...pageParams(params),
|
|
74
|
+
});
|
|
75
|
+
try {
|
|
76
|
+
const response = await openmrsFetch(url);
|
|
77
|
+
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
const errorText = await response.text();
|
|
80
|
+
throw new Error(`Failed to fetch patient list: ${response.status} - ${errorText}`);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const data = await response.json();
|
|
84
|
+
|
|
85
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
86
|
+
} catch (error: any) {
|
|
87
|
+
console.error('Failed to fetch MOH 412 PATIENT LIST data', error);
|
|
88
|
+
throw new Error(`An error occurred while fetching the MOH-705 patient list: ${error.message}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { openmrsFetch } from '@openmrs/esm-framework';
|
|
2
|
+
import { buildEtlUrl } from '../utils/get-base-url';
|
|
3
|
+
import {
|
|
4
|
+
PAGE_SIZE,
|
|
5
|
+
pageParams,
|
|
6
|
+
toPatientListPage,
|
|
7
|
+
type PatientListPage,
|
|
8
|
+
type PatientListParams,
|
|
9
|
+
} from './patient-list-page';
|
|
10
|
+
import {type Moh745reponse, type CancerScreeningResult } from '../reports/moh-745/registers/type';
|
|
11
|
+
|
|
12
|
+
interface Moh745Params {
|
|
13
|
+
locationUuids: string;
|
|
14
|
+
startDate?: string;
|
|
15
|
+
endDate?: string;
|
|
16
|
+
indicator?: string | string[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export async function getMoh745(params: Moh745Params): Promise<CancerScreeningResult> {
|
|
20
|
+
const url = await buildEtlUrl('moh-745', {
|
|
21
|
+
locationUuids: params.locationUuids || '',
|
|
22
|
+
startDate: params.startDate || '',
|
|
23
|
+
endDate: params.endDate || '',
|
|
24
|
+
});
|
|
25
|
+
try {
|
|
26
|
+
const response = await openmrsFetch(url);
|
|
27
|
+
|
|
28
|
+
const data = await response.json() as Moh745reponse;
|
|
29
|
+
return data?.result[0] ?? null;
|
|
30
|
+
} catch (error: any) {
|
|
31
|
+
throw new Error(`An error occurred while fetching the MOH-710 report: ${error.message}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export async function getMoh412PatientList(params: PatientListParams): Promise<PatientListPage> {
|
|
36
|
+
const url = await buildEtlUrl('moh-412-patient-list', {
|
|
37
|
+
locationUuids: params.locationUuids || '',
|
|
38
|
+
startDate: params.startDate || '',
|
|
39
|
+
endDate: params.endDate || '',
|
|
40
|
+
indicator: Array.isArray(params.indicator) ? params.indicator.join(',') : params.indicator || '',
|
|
41
|
+
...pageParams(params),
|
|
42
|
+
});
|
|
43
|
+
try {
|
|
44
|
+
const response = await openmrsFetch(url);
|
|
45
|
+
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
const errorText = await response.text();
|
|
48
|
+
throw new Error(`Failed to fetch patient list: ${response.status} - ${errorText}`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const data = await response.json();
|
|
52
|
+
|
|
53
|
+
return toPatientListPage(data, params.startIndex ?? 0, params.limit ?? PAGE_SIZE);
|
|
54
|
+
} catch (error: any) {
|
|
55
|
+
console.error('Failed to fetch MOH 412 PATIENT LIST data', error);
|
|
56
|
+
throw new Error(`An error occurred while fetching the MOH-705 patient list: ${error.message}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export async function fetchMoh745PatientList(params: PatientListParams): Promise<any[]> {
|
|
61
|
+
const url = await buildEtlUrl('moh-412-patient-list', {
|
|
62
|
+
locationUuids: params.locationUuids || '',
|
|
63
|
+
startDate: params.startDate || '',
|
|
64
|
+
endDate: params.endDate || '',
|
|
65
|
+
indicators: Array.isArray(params.indicators) ? params.indicators.join(',') : params.indicators || '',
|
|
66
|
+
limit:1000
|
|
67
|
+
});
|
|
68
|
+
try {
|
|
69
|
+
const response = await openmrsFetch(url);
|
|
70
|
+
const data = await response.json();
|
|
71
|
+
return data?.result ?? [];
|
|
72
|
+
} catch (error: any) {
|
|
73
|
+
console.error('Failed to fetch MOH 412 PATIENT LIST data', error);
|
|
74
|
+
throw new Error(`An error occurred while fetching the MOH-705 patient list: ${error.message}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** How many rows a register asks for at a time */
|
|
2
|
+
export const PAGE_SIZE = 50;
|
|
3
|
+
|
|
4
|
+
export interface PatientListParams {
|
|
5
|
+
locationUuids: string;
|
|
6
|
+
startDate?: string;
|
|
7
|
+
endDate?: string;
|
|
8
|
+
indicator?: string;
|
|
9
|
+
indicators?: string;
|
|
10
|
+
gender?: string;
|
|
11
|
+
/** MOH-711 endpoints scope the list by report */
|
|
12
|
+
reportName?: string;
|
|
13
|
+
/** Row to start at, 0-based, as the ETL expects */
|
|
14
|
+
startIndex?: number;
|
|
15
|
+
limit?: number;
|
|
16
|
+
from?: string | null;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface PatientListPage {
|
|
20
|
+
results: Array<Record<string, any>>;
|
|
21
|
+
/** Rows across every page */
|
|
22
|
+
total: number;
|
|
23
|
+
/** `false` when the total had to be inferred rather than read from the response */
|
|
24
|
+
isTotalExact: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** The paging arguments every patient-list endpoint takes */
|
|
28
|
+
export function pageParams(params: PatientListParams) {
|
|
29
|
+
return {
|
|
30
|
+
startIndex: String(params.startIndex ?? 0),
|
|
31
|
+
limit: String(params.limit ?? PAGE_SIZE),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Normalises a patient-list response into a page of rows plus a total.
|
|
37
|
+
*
|
|
38
|
+
* The endpoints nest their payload differently and do not all report a count,
|
|
39
|
+
* so the total is read from whichever field carries it and inferred otherwise:
|
|
40
|
+
* a short page means we are on the last one, a full page means there is at
|
|
41
|
+
* least one more. Inferring keeps the pager usable without ever overstating
|
|
42
|
+
* what we know -- `isTotalExact` says which it is.
|
|
43
|
+
*/
|
|
44
|
+
export function toPatientListPage(data: any, startIndex: number, limit: number): PatientListPage {
|
|
45
|
+
const container = data?.results ?? data ?? {};
|
|
46
|
+
const results: Array<Record<string, any>> = Array.isArray(container?.results)
|
|
47
|
+
? container.results
|
|
48
|
+
: Array.isArray(container)
|
|
49
|
+
? container
|
|
50
|
+
: [];
|
|
51
|
+
const reported = [container?.total, container?.totalCount, container?.count, data?.total, data?.totalCount].find(
|
|
52
|
+
(value) => typeof value === 'number',
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
if (typeof reported === 'number') {
|
|
56
|
+
return { results, total: reported, isTotalExact: true };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const isLastPage = results.length < limit;
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
results,
|
|
63
|
+
total: isLastPage ? startIndex + results.length : startIndex + results.length + 1,
|
|
64
|
+
isTotalExact: isLastPage,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { openmrsFetch } from '@openmrs/esm-framework';
|
|
2
|
+
import { buildEtlUrl } from '../utils/get-base-url';
|
|
3
|
+
|
|
4
|
+
interface PresumptiveTbParams {
|
|
5
|
+
locationUuids: string;
|
|
6
|
+
startDate: string;
|
|
7
|
+
endDate: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Presumptive TB Register (MOH/REG/DNTLDP/02): one row per TB encounter (331)
|
|
12
|
+
* in the period, for the whole facility of the location, in the register's
|
|
13
|
+
* columns (PresumptiveTbRow).
|
|
14
|
+
*/
|
|
15
|
+
export async function getPresumptiveTb(params: PresumptiveTbParams): Promise<Array<Record<string, unknown>>> {
|
|
16
|
+
const url = await buildEtlUrl('presumptive-tb-register', {
|
|
17
|
+
locationUuids: params.locationUuids,
|
|
18
|
+
startDate: params.startDate,
|
|
19
|
+
endDate: params.endDate,
|
|
20
|
+
});
|
|
21
|
+
const response = await openmrsFetch(url);
|
|
22
|
+
if (!response.ok) {
|
|
23
|
+
throw new Error(`Failed to fetch the Presumptive TB register: ${response.status} - ${await response.text()}`);
|
|
24
|
+
}
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
return Array.isArray(data) ? data : [];
|
|
27
|
+
}
|