@ampath/esm-reports-app 1.0.0-next.8 → 1.0.0-next.80
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/0.css +1 -0
- package/dist/0.css.map +1 -0
- package/dist/0.js +1 -0
- package/dist/0.js.map +1 -0
- 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/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 +1332 -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.tsx +149 -0
- package/src/reports/moh-740/registers/moh-270-permanent-register/moh-270-permanent-register.tsx +123 -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.tsx +249 -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
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import styles from './moh-731.scss';
|
|
4
|
+
import { ReportFiltersComponent, type ReportPeriod } from '../../common/report-filters';
|
|
5
|
+
import { showReportError } from '../../common/report-error';
|
|
6
|
+
import { hasReportData, ReportPlaceholder, useGeneratedLocation } from '../../common/report-placeholder';
|
|
7
|
+
import { formatDate, useSession } from '@openmrs/esm-framework';
|
|
8
|
+
import dayjs from 'dayjs';
|
|
9
|
+
import { useNavigate, useSearchParams } from 'react-router-dom';
|
|
10
|
+
import { Tab, TabList, TabPanel, TabPanels, Tabs } from '@carbon/react';
|
|
11
|
+
import { getMoh731 } from '../../resources/moh-731.resource';
|
|
12
|
+
import HivTestingandPreExposusreProphylaxis from './sections/hiv-testing-and-pre-exposure.component';
|
|
13
|
+
import PmtctComponent from './sections/pmtct.component';
|
|
14
|
+
import HivAndTBTreatmentComponent from './sections/hiv-and-tb-treatment.component';
|
|
15
|
+
import { ReportSkeleton } from '../../common/report-skeleton';
|
|
16
|
+
import { downloadSheetPdf, usePageScale } from '../../common/report-page';
|
|
17
|
+
import Moh731Summary from './summary/moh-731-summary.component';
|
|
18
|
+
import { useOpenMoh731Linelist } from './linelist/use-open-moh-731-linelist';
|
|
19
|
+
|
|
20
|
+
interface Moh731Props {}
|
|
21
|
+
|
|
22
|
+
/** The sheet's on-screen width: A4 less its 8mm margins (`.form` in moh-731.scss) */
|
|
23
|
+
const SHEET_WIDTH_MM = 210 - 2 * 8;
|
|
24
|
+
|
|
25
|
+
const Moh731Report: React.FC<Moh731Props> = () => {
|
|
26
|
+
const [moh731Data, setMoh731Data] = useState<any>(() => {
|
|
27
|
+
const saved = sessionStorage.getItem('moh731Data');
|
|
28
|
+
return saved ? JSON.parse(saved) : [];
|
|
29
|
+
});
|
|
30
|
+
const [isLoading, setIsLoading] = useState<boolean>(false);
|
|
31
|
+
const [startDate, setStartDate] = useState<string>(() => {
|
|
32
|
+
return sessionStorage.getItem('moh731StartDate') || '';
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const [endDate, setEndDate] = useState<string>(() => {
|
|
36
|
+
return sessionStorage.getItem('moh731EndDate') || '';
|
|
37
|
+
});
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
sessionStorage.setItem('moh731Data', JSON.stringify(moh731Data));
|
|
40
|
+
}, [moh731Data]);
|
|
41
|
+
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
sessionStorage.setItem('moh731StartDate', startDate);
|
|
44
|
+
}, [startDate]);
|
|
45
|
+
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
sessionStorage.setItem('moh731EndDate', endDate);
|
|
48
|
+
}, [endDate]);
|
|
49
|
+
|
|
50
|
+
const session = useSession();
|
|
51
|
+
const locationUuids = session?.sessionLocation?.uuid;
|
|
52
|
+
const navigate = useNavigate();
|
|
53
|
+
|
|
54
|
+
/* The form tab is the default; the selected tab is kept in the URL so a
|
|
55
|
+
linelist opened from the Summary tab comes back to it. */
|
|
56
|
+
const [searchParams, setSearchParams] = useSearchParams();
|
|
57
|
+
const selectedTab = searchParams.get('view') === 'summary' ? 1 : 0;
|
|
58
|
+
const selectTab = ({ selectedIndex }: { selectedIndex: number }) => {
|
|
59
|
+
const next = new URLSearchParams(searchParams);
|
|
60
|
+
if (selectedIndex === 1) {
|
|
61
|
+
next.set('view', 'summary');
|
|
62
|
+
} else {
|
|
63
|
+
next.delete('view');
|
|
64
|
+
}
|
|
65
|
+
setSearchParams(next, { replace: true });
|
|
66
|
+
};
|
|
67
|
+
/* the Summary's section tab, kept in the URL the same way */
|
|
68
|
+
const summarySection = searchParams.get('section') ?? '';
|
|
69
|
+
const selectSummarySection = (section: string) => {
|
|
70
|
+
const next = new URLSearchParams(searchParams);
|
|
71
|
+
next.set('section', section);
|
|
72
|
+
setSearchParams(next, { replace: true });
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/* Only a report for the current location counts: after switching location the
|
|
76
|
+
old figures would otherwise be shown, and labelled, as the new location's. */
|
|
77
|
+
const { isForCurrentLocation, hasLocationChanged, markGenerated } = useGeneratedLocation('moh731Location');
|
|
78
|
+
const isReportGenerated = hasReportData(moh731Data) && isForCurrentLocation;
|
|
79
|
+
const openSummaryLinelist = useOpenMoh731Linelist(startDate, endDate, locationUuids ?? '', 'summary', summarySection);
|
|
80
|
+
|
|
81
|
+
/* The sign-off records who produced the return and when. Designation and
|
|
82
|
+
signature stay blank -- those are filled in by hand on the printed sheet. */
|
|
83
|
+
/* The masthead names the location the report was generated from, so the
|
|
84
|
+
session location leads and the ETL's own facility field is the fallback.
|
|
85
|
+
County, sub-county and MFL come from the response where the ETL supplies
|
|
86
|
+
them (the same keys MOH-740 returns). Month and year come from the period
|
|
87
|
+
the report was actually generated for, not from today. */
|
|
88
|
+
const facility = session?.sessionLocation?.display ?? moh731Data?.facility ?? '';
|
|
89
|
+
const county = moh731Data?.county ?? '';
|
|
90
|
+
const subCounty = moh731Data?.sub_county ?? '';
|
|
91
|
+
const mflCode = moh731Data?.mfl_code ?? '';
|
|
92
|
+
const reportMonth = startDate ? dayjs(startDate).format('MMMM') : '';
|
|
93
|
+
const reportYear = startDate ? dayjs(startDate).format('YYYY') : '';
|
|
94
|
+
|
|
95
|
+
const generatedBy = session?.user?.person?.display ?? session?.user?.display ?? '';
|
|
96
|
+
const generatedOn = formatDate(new Date(), { mode: 'standard', time: false, noToday: true });
|
|
97
|
+
|
|
98
|
+
/** Fills the available width, never rendering below A4 */
|
|
99
|
+
const { ref: viewportRef, scale } = usePageScale<HTMLDivElement>(SHEET_WIDTH_MM);
|
|
100
|
+
|
|
101
|
+
/* Download PDF saves the form whichever tab is open; the file is made from a
|
|
102
|
+
copy, so the sheet on screen is left as it is */
|
|
103
|
+
const formRef = useRef<HTMLDivElement>(null);
|
|
104
|
+
const downloadPdf = async () => {
|
|
105
|
+
if (!formRef.current) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const name = ['MOH-731', facility, startDate ? dayjs(startDate).format('YYYY-MM') : '']
|
|
109
|
+
.filter(Boolean)
|
|
110
|
+
.join('_')
|
|
111
|
+
.replace(/[^a-z0-9_-]+/gi, '-');
|
|
112
|
+
await downloadSheetPdf(formRef.current, `${name}.pdf`);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const fetchMoh731ReportData = async ({ startDate, endDate }: ReportPeriod) => {
|
|
116
|
+
setIsLoading(true);
|
|
117
|
+
setStartDate(startDate);
|
|
118
|
+
setEndDate(endDate);
|
|
119
|
+
|
|
120
|
+
const params = {
|
|
121
|
+
locationUuids: locationUuids || '',
|
|
122
|
+
startDate,
|
|
123
|
+
endDate,
|
|
124
|
+
};
|
|
125
|
+
try {
|
|
126
|
+
const data = await getMoh731(params);
|
|
127
|
+
const flatData = Object.assign({}, ...data.result);
|
|
128
|
+
setMoh731Data(flatData);
|
|
129
|
+
markGenerated(params.locationUuids);
|
|
130
|
+
setIsLoading(false);
|
|
131
|
+
} catch (error: any) {
|
|
132
|
+
setIsLoading(false);
|
|
133
|
+
showReportError('the MOH-731 report', error);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
return (
|
|
138
|
+
<>
|
|
139
|
+
<ReportFiltersComponent
|
|
140
|
+
reportName="MOH-731 Report"
|
|
141
|
+
mode="monthly"
|
|
142
|
+
onGenerate={fetchMoh731ReportData}
|
|
143
|
+
isLoading={isLoading}
|
|
144
|
+
isReportGenerated={isReportGenerated}
|
|
145
|
+
generatedPeriod={{ startDate, endDate }}
|
|
146
|
+
onDownloadPdf={downloadPdf}
|
|
147
|
+
/>
|
|
148
|
+
{isLoading && <ReportSkeleton blocks={3} />}
|
|
149
|
+
{!isLoading && !isReportGenerated && (
|
|
150
|
+
<ReportPlaceholder reportName="MOH-731" isLocationChanged={hasReportData(moh731Data) && hasLocationChanged} />
|
|
151
|
+
)}
|
|
152
|
+
{!isLoading && isReportGenerated && (
|
|
153
|
+
<Tabs selectedIndex={selectedTab} onChange={selectTab}>
|
|
154
|
+
<TabList aria-label="MOH 731 views" className={styles.tabList}>
|
|
155
|
+
<Tab>MOH 731 Form</Tab>
|
|
156
|
+
<Tab>Summary</Tab>
|
|
157
|
+
</TabList>
|
|
158
|
+
<TabPanels>
|
|
159
|
+
<TabPanel className={styles.formPanel}>
|
|
160
|
+
{/* The sheet is a fixed A4 page, so it scrolls inside this viewport
|
|
161
|
+
rather than forcing the whole app to scroll sideways. */}
|
|
162
|
+
<div className={styles.reportFrame}>
|
|
163
|
+
<div className={styles.viewport} ref={viewportRef}>
|
|
164
|
+
{/* The scale is a custom property rather than an inline `zoom`, so
|
|
165
|
+
the print stylesheet can still reset it to 1 */}
|
|
166
|
+
<div className={styles.form} ref={formRef} style={{ '--page-zoom': scale } as React.CSSProperties}>
|
|
167
|
+
{/* Ministry line sits above the ruled sheet, as on the printed form */}
|
|
168
|
+
<div className={styles.ministryLine}>
|
|
169
|
+
<span>Ministry of Health</span>
|
|
170
|
+
<span>Ver. July 2023</span>
|
|
171
|
+
</div>
|
|
172
|
+
|
|
173
|
+
<div className={styles.sheet}>
|
|
174
|
+
<div className={styles.formHeader}>
|
|
175
|
+
<div className={styles.formTitle}>
|
|
176
|
+
<strong>National AIDS & STI Control Program- NASCOP</strong>
|
|
177
|
+
<strong>Comprehensive HIV/ AIDS reporting form</strong>
|
|
178
|
+
</div>
|
|
179
|
+
<span className={styles.formVersion}>(MOH 731-Ver. July 2023)</span>
|
|
180
|
+
</div>
|
|
181
|
+
|
|
182
|
+
{/* Each label and its rule is one flex item, so the six pairs stay
|
|
183
|
+
on a single centred line and cannot run together. */}
|
|
184
|
+
<p className={styles.locationContainer}>
|
|
185
|
+
<span>
|
|
186
|
+
County<span className={styles.line}>{county}</span>
|
|
187
|
+
</span>
|
|
188
|
+
<span>
|
|
189
|
+
Sub County<span className={styles.line}>{subCounty}</span>
|
|
190
|
+
</span>
|
|
191
|
+
<span>
|
|
192
|
+
Facility<span className={styles.line}>{facility}</span>
|
|
193
|
+
</span>
|
|
194
|
+
<span>
|
|
195
|
+
MFL<span className={styles.shortLine}>{mflCode}</span>
|
|
196
|
+
</span>
|
|
197
|
+
<span>
|
|
198
|
+
Month<span className={styles.shortLine}>{reportMonth}</span>
|
|
199
|
+
</span>
|
|
200
|
+
<span>
|
|
201
|
+
year<span className={styles.shortLine}>{reportYear}</span>
|
|
202
|
+
</span>
|
|
203
|
+
</p>
|
|
204
|
+
|
|
205
|
+
<h5 className={styles.sectionHeader}>1. HIV Testing Services & Pre exposure Prophylaxis</h5>
|
|
206
|
+
<HivTestingandPreExposusreProphylaxis
|
|
207
|
+
MOH731Data={moh731Data}
|
|
208
|
+
startDate={startDate}
|
|
209
|
+
endDate={endDate}
|
|
210
|
+
locationUuids={locationUuids!}
|
|
211
|
+
/>
|
|
212
|
+
|
|
213
|
+
<h5 className={styles.sectionHeader}>2. Elimination of Mother-to-Child Transmission (EMTCT)</h5>
|
|
214
|
+
<PmtctComponent
|
|
215
|
+
MOH731Data={moh731Data}
|
|
216
|
+
startDate={startDate}
|
|
217
|
+
endDate={endDate}
|
|
218
|
+
locationUuids={locationUuids!}
|
|
219
|
+
/>
|
|
220
|
+
|
|
221
|
+
{/* The sign-off is the bottom band of columns 1 and 2 on the printed
|
|
222
|
+
sheet, with section 5 continuing beside it, so it is handed to
|
|
223
|
+
section 3 rather than rendered after it. */}
|
|
224
|
+
<HivAndTBTreatmentComponent
|
|
225
|
+
MOH731Data={moh731Data}
|
|
226
|
+
startDate={startDate}
|
|
227
|
+
endDate={endDate}
|
|
228
|
+
locationUuids={locationUuids!}
|
|
229
|
+
footer={
|
|
230
|
+
<div className={styles.reviewSection}>
|
|
231
|
+
<span className={styles.reviewLabel}>Reviewed by:</span>
|
|
232
|
+
<span>Name</span>
|
|
233
|
+
<span>Designation</span>
|
|
234
|
+
<span>Signature</span>
|
|
235
|
+
<span>Date</span>
|
|
236
|
+
|
|
237
|
+
<span />
|
|
238
|
+
<span className={styles.reviewRule}>{generatedBy}</span>
|
|
239
|
+
<span className={styles.reviewRule} />
|
|
240
|
+
<span className={styles.reviewRule} />
|
|
241
|
+
<span className={styles.reviewRule}>{generatedOn}</span>
|
|
242
|
+
</div>
|
|
243
|
+
}
|
|
244
|
+
/>
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
</TabPanel>
|
|
250
|
+
<TabPanel className={styles.summaryPanel}>
|
|
251
|
+
{/* in the same bordered card as the form, so both tabs read alike */}
|
|
252
|
+
<div className={styles.reportFrame}>
|
|
253
|
+
<Moh731Summary
|
|
254
|
+
data={moh731Data}
|
|
255
|
+
openLinelist={openSummaryLinelist}
|
|
256
|
+
sectionId={summarySection}
|
|
257
|
+
onSectionChange={selectSummarySection}
|
|
258
|
+
period={`${startDate}-${endDate}`}
|
|
259
|
+
/>
|
|
260
|
+
</div>
|
|
261
|
+
</TabPanel>
|
|
262
|
+
</TabPanels>
|
|
263
|
+
</Tabs>
|
|
264
|
+
)}
|
|
265
|
+
</>
|
|
266
|
+
);
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
export default Moh731Report;
|