@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,157 @@
|
|
|
1
|
+
import React, { useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { useNavigate, useSearchParams } from 'react-router-dom';
|
|
3
|
+
import { Tab, TabList, TabPanel, TabPanels, Tabs } from '@carbon/react';
|
|
4
|
+
import { useSession } from '@openmrs/esm-framework';
|
|
5
|
+
|
|
6
|
+
import { ReportFiltersComponent, type ReportPeriod, useRestorePeriod } from '../../common/report-filters';
|
|
7
|
+
import { downloadSheetsPdf } from '../../common/report-page';
|
|
8
|
+
import { showReportError } from '../../common/report-error';
|
|
9
|
+
import { ReportPlaceholder, useGeneratedLocation } from '../../common/report-placeholder';
|
|
10
|
+
import { ReportSkeleton } from '../../common/report-skeleton';
|
|
11
|
+
import { registerFileName } from '../../registers/register-file-name';
|
|
12
|
+
import { getMoh729b } from '../../resources/moh-729b.resource';
|
|
13
|
+
import Moh729bForm, { type Moh729bCounts } from './moh-729b-form.component';
|
|
14
|
+
import Moh729bSummary from './moh-729b-summary.component';
|
|
15
|
+
import { encodeCell, inCell, inCells, type Moh729bCell, type Moh729bRow } from './moh-729b.types';
|
|
16
|
+
import styles from './moh-729b.scss';
|
|
17
|
+
import reportStyles from '../moh-731/moh-731.scss';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* MoH 729B Facility Monthly ARV Patient Summary (F-MAPS), opened from the
|
|
21
|
+
* landing page's Reports tab, with the reports' filter bar.
|
|
22
|
+
*
|
|
23
|
+
* The clients active on ART in the month come back one row each with their
|
|
24
|
+
* regimen code (/moh-729b), so every count on the form is a count of those
|
|
25
|
+
* rows and opens the linelist of exactly those clients. As MOH 731, the form
|
|
26
|
+
* has a Summary tab beside it that regroups the counts into tables with totals.
|
|
27
|
+
*/
|
|
28
|
+
const Moh729bReport: React.FC = () => {
|
|
29
|
+
const [rows, setRows] = useState<Moh729bRow[] | null>(null);
|
|
30
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
31
|
+
const [period, setPeriod] = useState<{ startDate: string; endDate: string }>({ startDate: '', endDate: '' });
|
|
32
|
+
|
|
33
|
+
const navigate = useNavigate();
|
|
34
|
+
|
|
35
|
+
/* The form tab is the default; the selected tab and the Summary's section
|
|
36
|
+
are kept in the URL, so a linelist opened from them comes back to them */
|
|
37
|
+
const [searchParams, setSearchParams] = useSearchParams();
|
|
38
|
+
const view = searchParams.get('view') === 'summary' ? 'summary' : undefined;
|
|
39
|
+
const section = searchParams.get('section') ?? '';
|
|
40
|
+
const setParam = (key: string, value?: string) => {
|
|
41
|
+
const next = new URLSearchParams(searchParams);
|
|
42
|
+
if (value) {
|
|
43
|
+
next.set(key, value);
|
|
44
|
+
} else {
|
|
45
|
+
next.delete(key);
|
|
46
|
+
}
|
|
47
|
+
setSearchParams(next, { replace: true });
|
|
48
|
+
};
|
|
49
|
+
const session = useSession();
|
|
50
|
+
const locationUuids = session?.sessionLocation?.uuid ?? '';
|
|
51
|
+
const facility = session?.sessionLocation?.display ?? '';
|
|
52
|
+
/* Only a report for the current location counts */
|
|
53
|
+
const { isForCurrentLocation, hasLocationChanged, markGenerated } = useGeneratedLocation('moh729bLocation');
|
|
54
|
+
const isReportGenerated = rows !== null && isForCurrentLocation;
|
|
55
|
+
|
|
56
|
+
const generate = async ({ startDate, endDate }: ReportPeriod) => {
|
|
57
|
+
setIsLoading(true);
|
|
58
|
+
setPeriod({ startDate, endDate });
|
|
59
|
+
try {
|
|
60
|
+
setRows((await getMoh729b({ locationUuids, endDate })) as unknown as Moh729bRow[]);
|
|
61
|
+
markGenerated(locationUuids);
|
|
62
|
+
} catch (error) {
|
|
63
|
+
showReportError('the MOH 729B report', error);
|
|
64
|
+
} finally {
|
|
65
|
+
setIsLoading(false);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
useRestorePeriod(generate);
|
|
70
|
+
|
|
71
|
+
/** Opens the linelist of one count or, under a heading, of several */
|
|
72
|
+
const openLinelist = (cells: Moh729bCell[], label?: string) => {
|
|
73
|
+
const params = new URLSearchParams({ ...period, locationUuids, from: 'moh-729b' });
|
|
74
|
+
cells.forEach((cell) => params.append('f', encodeCell(cell)));
|
|
75
|
+
if (label) params.set('label', label);
|
|
76
|
+
if (view) params.set('view', view);
|
|
77
|
+
if (view && section) params.set('section', section);
|
|
78
|
+
navigate(`/moh-729b-linelist?${params}`);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const counts = useMemo<Moh729bCounts>(
|
|
82
|
+
() => ({
|
|
83
|
+
count: (cell) => (rows ?? []).filter((row) => inCell(row, cell)).length,
|
|
84
|
+
open: (cell) => openLinelist([cell]),
|
|
85
|
+
}),
|
|
86
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
87
|
+
[rows, period, locationUuids, view, section],
|
|
88
|
+
);
|
|
89
|
+
const countClients = (cells: Moh729bCell[]) => (rows ?? []).filter((row) => inCells(row, cells)).length;
|
|
90
|
+
|
|
91
|
+
/* Download PDF saves the form as one A3 portrait page, made from a copy, so
|
|
92
|
+
the page on screen is left as it is */
|
|
93
|
+
const sheetRef = useRef<HTMLDivElement>(null);
|
|
94
|
+
const downloadPdf = async () => {
|
|
95
|
+
const pages = Array.from(sheetRef.current?.querySelectorAll<HTMLElement>('[data-register-page]') ?? []);
|
|
96
|
+
await downloadSheetsPdf(pages, registerFileName('MOH-729B', facility, period), {
|
|
97
|
+
paperSize: 'a3',
|
|
98
|
+
orientation: 'portrait',
|
|
99
|
+
stylesheetsOnly: true,
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
return (
|
|
104
|
+
<>
|
|
105
|
+
<ReportFiltersComponent
|
|
106
|
+
reportName="MOH 729B F-MAPS Report"
|
|
107
|
+
mode="monthly"
|
|
108
|
+
onGenerate={generate}
|
|
109
|
+
isLoading={isLoading}
|
|
110
|
+
isReportGenerated={isReportGenerated}
|
|
111
|
+
generatedPeriod={period}
|
|
112
|
+
onDownloadPdf={downloadPdf}
|
|
113
|
+
/>
|
|
114
|
+
{isLoading && <ReportSkeleton />}
|
|
115
|
+
{!isLoading && !isReportGenerated && (
|
|
116
|
+
<ReportPlaceholder reportName="MOH 729B" isLocationChanged={rows !== null && hasLocationChanged} />
|
|
117
|
+
)}
|
|
118
|
+
{!isLoading && isReportGenerated && (
|
|
119
|
+
<Tabs
|
|
120
|
+
selectedIndex={view === 'summary' ? 1 : 0}
|
|
121
|
+
onChange={({ selectedIndex }) => setParam('view', selectedIndex === 1 ? 'summary' : undefined)}
|
|
122
|
+
>
|
|
123
|
+
<TabList aria-label="MOH 729B views" className={reportStyles.tabList}>
|
|
124
|
+
<Tab>MOH 729B Form</Tab>
|
|
125
|
+
<Tab>Summary</Tab>
|
|
126
|
+
</TabList>
|
|
127
|
+
<TabPanels>
|
|
128
|
+
<TabPanel className={reportStyles.formPanel}>
|
|
129
|
+
{/* Download PDF saves the form whichever tab is open */}
|
|
130
|
+
<div className={styles.reportFrame} ref={sheetRef}>
|
|
131
|
+
<Moh729bForm
|
|
132
|
+
facility={facility}
|
|
133
|
+
startDate={period.startDate}
|
|
134
|
+
endDate={period.endDate}
|
|
135
|
+
counts={counts}
|
|
136
|
+
/>
|
|
137
|
+
</div>
|
|
138
|
+
</TabPanel>
|
|
139
|
+
<TabPanel className={reportStyles.summaryPanel}>
|
|
140
|
+
<div className={reportStyles.reportFrame}>
|
|
141
|
+
<Moh729bSummary
|
|
142
|
+
count={countClients}
|
|
143
|
+
openLinelist={openLinelist}
|
|
144
|
+
sectionId={section}
|
|
145
|
+
onSectionChange={(id) => setParam('section', id)}
|
|
146
|
+
period={period.endDate.slice(0, 7)}
|
|
147
|
+
/>
|
|
148
|
+
</div>
|
|
149
|
+
</TabPanel>
|
|
150
|
+
</TabPanels>
|
|
151
|
+
</Tabs>
|
|
152
|
+
)}
|
|
153
|
+
</>
|
|
154
|
+
);
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
export default Moh729bReport;
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The regimen codes of the MoH 729B Facility Monthly ARV Patient Summary
|
|
3
|
+
* (F-MAPS, Ver. July 2023), section by section as printed on its report page.
|
|
4
|
+
*
|
|
5
|
+
* `h` is each row's height as measured off the form (in its own units, scaled
|
|
6
|
+
* to millimetres by the sheet), so the two halves of the page keep the
|
|
7
|
+
* printed proportions: a two-line regimen gets a taller row.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export type Regimen = [code: string, name: string, h?: number];
|
|
11
|
+
|
|
12
|
+
export interface RegimenSection {
|
|
13
|
+
title: string;
|
|
14
|
+
/** the heading row's height */
|
|
15
|
+
h: number;
|
|
16
|
+
rows: Regimen[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Left half: ART */
|
|
20
|
+
|
|
21
|
+
export const ADULT_ART: RegimenSection[] = [
|
|
22
|
+
{
|
|
23
|
+
title: 'Adult ART 1st Line regimens',
|
|
24
|
+
h: 39,
|
|
25
|
+
rows: [
|
|
26
|
+
['AF2E', 'TDF + 3TC + DTG'],
|
|
27
|
+
['AF2B', 'TDF + 3TC + EFV'],
|
|
28
|
+
['AF1D', 'AZT + 3TC + DTG'],
|
|
29
|
+
['AF4C', 'ABC + 3TC + DTG'],
|
|
30
|
+
['AF2D', 'TDF + 3TC + ATV/r'],
|
|
31
|
+
['AF2F', 'TDF + 3TC + LPV/r'],
|
|
32
|
+
['AS2G', 'TAF + 3TC + DTG'],
|
|
33
|
+
['AF1E', 'AZT + 3TC + LPV/r'],
|
|
34
|
+
['AF1F', 'AZT + 3TC + ATV/r'],
|
|
35
|
+
['AF5X', 'Any other 1st line Adult regimens'],
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
title: 'Adult ART 2nd Line regimens',
|
|
40
|
+
h: 40,
|
|
41
|
+
rows: [
|
|
42
|
+
['AS1A', 'AZT + 3TC + LPV/r', 63],
|
|
43
|
+
['AS1B', 'AZT + 3TC + ATV/r', 64],
|
|
44
|
+
['AS1C', 'AZT + 3TC + DTG', 38],
|
|
45
|
+
['AS2A', 'TDF + 3TC + LPV/r', 38],
|
|
46
|
+
['AS2B', 'TDF + 3TC + DTG', 38],
|
|
47
|
+
['AS2C', 'TDF + 3TC + ATV/r', 38],
|
|
48
|
+
['AS5A', 'ABC + 3TC + LPV/r', 38],
|
|
49
|
+
['AS5B', 'ABC + 3TC + ATV/r', 38],
|
|
50
|
+
['AS5C', 'ABC + 3TC + DTG', 38],
|
|
51
|
+
['AS6X', 'Any other 2nd line Adult regimens', 45],
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
title: 'Adult ART 3rd Line regimens',
|
|
56
|
+
h: 44,
|
|
57
|
+
rows: [
|
|
58
|
+
['AT2D', 'TDF+3TC+DTG+DRV+RTV', 45],
|
|
59
|
+
['AT2F', 'TDF+3TC+DTG+ETV+DRV+RTV', 45],
|
|
60
|
+
['AT2G', 'TDF + 3TC + DTG', 44],
|
|
61
|
+
['AT2H', 'AZT + 3TC + DTG', 45],
|
|
62
|
+
['AT2I', 'AZT + 3TC + DTG + DRV + RTV', 45],
|
|
63
|
+
['AT2X', 'Any other 3rd line Adult regimens', 45],
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
|
|
68
|
+
/** The children's weight bands, then their Total */
|
|
69
|
+
export const WEIGHT_BANDS = ['3-5.9kg', '6-9.9kg', '10-13.9kg', '14-19.9kg', '20-24.9kg', '25-29.9kgs', '≥30kgs'];
|
|
70
|
+
|
|
71
|
+
export const PAEDIATRIC_ART: RegimenSection[] = [
|
|
72
|
+
{
|
|
73
|
+
title: 'Paediatric ART 1st Line regimens',
|
|
74
|
+
h: 40,
|
|
75
|
+
rows: [
|
|
76
|
+
['CF2G', 'ABC+3TC+DTG', 41],
|
|
77
|
+
['CF1D', 'AZT + 3TC + DTG', 41],
|
|
78
|
+
['CF4E', 'TDF + 3TC + DTG', 41],
|
|
79
|
+
['CF5X', 'Any other 1st line Paediatric regimens', 41],
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
title: 'Paediatric ART 2nd Line regimens',
|
|
84
|
+
h: 46,
|
|
85
|
+
rows: [
|
|
86
|
+
['CS1A', 'AZT + 3TC + LPV/r', 41],
|
|
87
|
+
['CS1B', 'AZT + 3TC + DTG', 41],
|
|
88
|
+
['CS2A', 'ABC + 3TC + LPV/r', 41],
|
|
89
|
+
['CS2B', 'ABC+3TC+DTG', 41],
|
|
90
|
+
['CS4X', 'Any other 2nd line Paediatric regimens', 41],
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
title: 'Paediatric ART 3rd Line regimens',
|
|
95
|
+
h: 54,
|
|
96
|
+
rows: [
|
|
97
|
+
['CT1H', 'AZT + 3TC + DRV+RTV+RAL', 41.5],
|
|
98
|
+
['CT2D', 'ABC + 3TC + DRV+RTV+RAL', 41.5],
|
|
99
|
+
['CT3X', 'Any other 3rd line Paediatric regimens', 41.5],
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
|
|
104
|
+
export const PREP: RegimenSection = {
|
|
105
|
+
title: 'PrEP',
|
|
106
|
+
h: 37,
|
|
107
|
+
rows: [
|
|
108
|
+
['PRP1A', 'TDF + FTC', 29.5],
|
|
109
|
+
['PRP1B', 'TDF + 3TC', 29.5],
|
|
110
|
+
['PRP1D', 'Dapivirine ring', 29.5],
|
|
111
|
+
['PRP1E', 'Cabotegravir', 29.5],
|
|
112
|
+
/* not printed on the form: added for clients on Lenacapavir */
|
|
113
|
+
['PRP1F', 'Lenacapavir', 29.5],
|
|
114
|
+
['PRP1X', 'Others', 29.5],
|
|
115
|
+
],
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/* Right half: PMTCT, PEP, Hepatitis B and OIs */
|
|
119
|
+
|
|
120
|
+
export const PMTCT_MOTHERS: RegimenSection = {
|
|
121
|
+
title: 'Pregnant women or HEI Mothers',
|
|
122
|
+
h: 39,
|
|
123
|
+
rows: [
|
|
124
|
+
['PM9', 'PMTCT HAART: TDF + 3TC + EFV'],
|
|
125
|
+
['PM12', 'PMTCT HAART: TDF + 3TC + DTG'],
|
|
126
|
+
['PM13', 'PMTCT HAART: AZT + 3TC + DTG'],
|
|
127
|
+
['PM14', 'PMTCT HAART: ABC + 3TC + DTG'],
|
|
128
|
+
['PM11', 'PMTCT HAART: TDF + 3TC + ATV/r'],
|
|
129
|
+
['PM7', 'PMTCT HAART: TDF + 3TC + LPV/r'],
|
|
130
|
+
['PM10', 'PMTCT HAART: AZT + 3TC + ATV/r'],
|
|
131
|
+
['PM5', 'PMTCT HAART: AZT + 3TC + LPV/r'],
|
|
132
|
+
['PM1X', 'Any other PMTCT regimens for Women'],
|
|
133
|
+
],
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
/** The infants' age bands, then their Total */
|
|
137
|
+
export const INFANT_AGES = ['0-12 weeks', '12 weeks-6months', '7- 9 months', '10-12 months', 'Above 12 months'];
|
|
138
|
+
|
|
139
|
+
export const PMTCT_INFANTS: RegimenSection = {
|
|
140
|
+
title: 'Infants',
|
|
141
|
+
h: 40,
|
|
142
|
+
rows: [
|
|
143
|
+
[
|
|
144
|
+
'PC8',
|
|
145
|
+
'AZT liquid BID + NVP liquid OD for 6 weeks then NVP liquid OD until 6 weeks after complete cessation of Breastfeeding',
|
|
146
|
+
63,
|
|
147
|
+
],
|
|
148
|
+
['PC7', 'AZT liquid BID + NVP liquid OD for 6 weeks then NVP liquid OD for 6 weeks(If not breastfeeding)', 64],
|
|
149
|
+
['PC1X', 'Any other PMTCT regimens for Infants', 38],
|
|
150
|
+
],
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
/** A numbered group of the right half, each regimen with a single count and a Total */
|
|
154
|
+
export interface TotalledGroup extends RegimenSection {
|
|
155
|
+
number?: string;
|
|
156
|
+
/** the heading's Total cell is shaded (Cryptococcal Meningitis) */
|
|
157
|
+
noTotal?: boolean;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export const PEP: TotalledGroup[] = [
|
|
161
|
+
{
|
|
162
|
+
number: '1',
|
|
163
|
+
title: 'PEP for Adults',
|
|
164
|
+
h: 38,
|
|
165
|
+
rows: [
|
|
166
|
+
['PA3D', 'TDF + 3TC + DTG', 38],
|
|
167
|
+
['PA3C', 'TDF + 3TC + ATV/r', 38],
|
|
168
|
+
['PA1C', 'AZT + 3TC + ATV/r', 38],
|
|
169
|
+
['PA4X', 'Any other PEP regimens for Adults', 38],
|
|
170
|
+
],
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
number: '2',
|
|
174
|
+
title: 'PEP for Children',
|
|
175
|
+
h: 45,
|
|
176
|
+
rows: [
|
|
177
|
+
['PC3A', 'ABC + 3TC + LPV/r', 45],
|
|
178
|
+
['PC3C', 'ABC + 3TC + DTG', 45],
|
|
179
|
+
['PC4X', 'Any other PEP regimens for Children', 45],
|
|
180
|
+
],
|
|
181
|
+
},
|
|
182
|
+
];
|
|
183
|
+
|
|
184
|
+
export const HEPATITIS_B: TotalledGroup = {
|
|
185
|
+
title: 'Hepatitis B Patients who are HIV-ve',
|
|
186
|
+
h: 44,
|
|
187
|
+
rows: [
|
|
188
|
+
['HPB1A', 'TDF + 3TC (HIV-ve HepB patients)', 45],
|
|
189
|
+
['HPB1B', 'TDF + FTC (HIV-ve HepB patients)', 45],
|
|
190
|
+
['HPB1C', 'Any other HEP B regimens', 45],
|
|
191
|
+
],
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
/** The TPT group counted from MOH 731 3.4 Starting TPT */
|
|
195
|
+
export const TPT_HIV_POSITIVE = 'TPT HIV Positive';
|
|
196
|
+
|
|
197
|
+
export const OPPORTUNISTIC_INFECTIONS: TotalledGroup[] = [
|
|
198
|
+
{
|
|
199
|
+
number: '1',
|
|
200
|
+
title: 'Universal prophylaxis',
|
|
201
|
+
h: 43,
|
|
202
|
+
rows: [
|
|
203
|
+
['OI1A', 'Adult patients on Cotrimoxazole prophylaxis', 40],
|
|
204
|
+
['OI1C', 'Paediatric patients on Cotrimoxazole prophylaxis', 40],
|
|
205
|
+
['OI2A', 'Adult patients on Dapsone prophylaxis', 40],
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
number: '2',
|
|
210
|
+
title: TPT_HIV_POSITIVE,
|
|
211
|
+
h: 46,
|
|
212
|
+
rows: [
|
|
213
|
+
['ATPT1A', 'Adult patients (=>15 Yrs) newly started on 6H in the month', 41],
|
|
214
|
+
['ATPT1B', 'Adult patients (=>15 Yrs) newly started on 3HP in the month', 41],
|
|
215
|
+
['CTPT1A', 'Paed patients (<15 Yrs) newly started on 6H in the month', 41],
|
|
216
|
+
['CTPT1B', 'Paed patients (<15 Yrs) newly started on 3HP in the month', 41],
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
number: '3',
|
|
221
|
+
title: 'TPT HIV Negative',
|
|
222
|
+
h: 41,
|
|
223
|
+
rows: [['ATPT1C', 'HIV Negative Adult patients (=>15 Yrs) newly started on 3HP in the month', 54]],
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
number: '4',
|
|
227
|
+
title: 'Cryptococcal Menengitis New Clients only',
|
|
228
|
+
h: 40,
|
|
229
|
+
noTotal: true,
|
|
230
|
+
rows: [
|
|
231
|
+
['OI6B', 'New CM patients (=>15 Yrs) on liposomal Ampotericin+Flucytosine + fluconazole in the month', 84],
|
|
232
|
+
['OI6X', 'New CM patients (=>15 Yrs) on any other treatment in the month', 72],
|
|
233
|
+
],
|
|
234
|
+
},
|
|
235
|
+
];
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
@use '@carbon/layout';
|
|
2
|
+
@use '@openmrs/esm-styleguide/src/vars' as *;
|
|
3
|
+
|
|
4
|
+
/* The MoH 729B F-MAPS report page as one A3 portrait sheet, drawn in the units
|
|
5
|
+
the paper is measured in (mm, pt) so it prints as one sheet: the masthead,
|
|
6
|
+
the two halves of regimen codes side by side, and the sign-off beneath.
|
|
7
|
+
Row heights come from the form (moh-729b.config.ts). */
|
|
8
|
+
|
|
9
|
+
/* On screen a page is the printable area only, A3 portrait less its 8mm
|
|
10
|
+
margins: the card around it gives the margin, and `usePageScale` is told
|
|
11
|
+
this width. */
|
|
12
|
+
$page-w: 297mm - 2 * 8mm;
|
|
13
|
+
$page-h: 420mm - 2 * 8mm;
|
|
14
|
+
|
|
15
|
+
$ink: #000;
|
|
16
|
+
$rule: 0.6pt solid #000;
|
|
17
|
+
$shade: #a6a6a6; // cells not to be filled
|
|
18
|
+
$light-shade: #bfbfbf;
|
|
19
|
+
$band: #d9d9d9; // ADULT ART, PMTCT, PrEP
|
|
20
|
+
$heading: #f2f2f2; // each section's heading row
|
|
21
|
+
|
|
22
|
+
/* The card the page sits in, drawn like the filter card above it */
|
|
23
|
+
.reportFrame {
|
|
24
|
+
margin: layout.$spacing-05 0 layout.$spacing-07;
|
|
25
|
+
padding: layout.$spacing-05;
|
|
26
|
+
background-color: $ui-02;
|
|
27
|
+
border: 1px solid $ui-03;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Holds the fixed-width page without making the app scroll sideways */
|
|
31
|
+
.viewport {
|
|
32
|
+
overflow-x: auto;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.page {
|
|
36
|
+
display: flex;
|
|
37
|
+
flex-direction: column;
|
|
38
|
+
box-sizing: border-box;
|
|
39
|
+
width: $page-w;
|
|
40
|
+
height: $page-h;
|
|
41
|
+
margin: 0 auto;
|
|
42
|
+
padding: 2mm 3mm 0;
|
|
43
|
+
color: $ink;
|
|
44
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
45
|
+
font-size: 7pt;
|
|
46
|
+
line-height: 1.15;
|
|
47
|
+
background-color: #fff;
|
|
48
|
+
/* set by `usePageScale` from the measured container width, floored at 1 */
|
|
49
|
+
zoom: var(--page-zoom, 1);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.titleLine {
|
|
53
|
+
display: flex;
|
|
54
|
+
justify-content: space-between;
|
|
55
|
+
font-family: Calibri, Carlito, Arial, sans-serif;
|
|
56
|
+
font-size: 10.5pt;
|
|
57
|
+
font-weight: 700;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.formCode {
|
|
61
|
+
margin-top: 1mm;
|
|
62
|
+
font-size: 6pt;
|
|
63
|
+
font-weight: 700;
|
|
64
|
+
text-align: right;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Facility and county on the left, MFL code and sub-county on the right */
|
|
68
|
+
.fields {
|
|
69
|
+
display: flex;
|
|
70
|
+
justify-content: space-between;
|
|
71
|
+
margin-top: 1mm;
|
|
72
|
+
|
|
73
|
+
> .fieldGrid:first-child {
|
|
74
|
+
width: 82mm;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
> .fieldGrid:last-child {
|
|
78
|
+
width: 75mm;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.fieldGrid {
|
|
83
|
+
display: grid;
|
|
84
|
+
grid-template-columns: auto 1fr;
|
|
85
|
+
column-gap: 1mm;
|
|
86
|
+
row-gap: 2.6mm;
|
|
87
|
+
align-items: end;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.fieldLabel {
|
|
91
|
+
font-weight: 700;
|
|
92
|
+
text-align: right;
|
|
93
|
+
white-space: nowrap;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* The ruled line a field is written on; its caption sits beneath it */
|
|
97
|
+
.fieldLine {
|
|
98
|
+
position: relative;
|
|
99
|
+
min-height: 3.4mm;
|
|
100
|
+
padding-left: 1mm;
|
|
101
|
+
border-bottom: $rule;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.caption {
|
|
105
|
+
position: absolute;
|
|
106
|
+
top: 100%;
|
|
107
|
+
left: 0;
|
|
108
|
+
right: 0;
|
|
109
|
+
padding-top: 0.2mm;
|
|
110
|
+
font-weight: 700;
|
|
111
|
+
text-align: center;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* a line with a caption leaves room beneath it for the caption */
|
|
115
|
+
.captioned {
|
|
116
|
+
margin-bottom: 3mm;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* Beginning and Ending, each with its (Day/Month/Year) */
|
|
120
|
+
.period {
|
|
121
|
+
display: grid;
|
|
122
|
+
grid-template-columns: 30mm 74mm 1fr 75mm;
|
|
123
|
+
column-gap: 1mm;
|
|
124
|
+
align-items: end;
|
|
125
|
+
margin: 1mm 0 1.5mm;
|
|
126
|
+
|
|
127
|
+
.caption {
|
|
128
|
+
font-weight: 400;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.halves {
|
|
133
|
+
display: flex;
|
|
134
|
+
align-items: stretch;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.half {
|
|
138
|
+
display: flex;
|
|
139
|
+
flex-direction: column;
|
|
140
|
+
flex-basis: 0;
|
|
141
|
+
min-width: 0;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.grid {
|
|
145
|
+
width: 100%;
|
|
146
|
+
table-layout: fixed;
|
|
147
|
+
border-collapse: collapse;
|
|
148
|
+
|
|
149
|
+
th,
|
|
150
|
+
td {
|
|
151
|
+
padding: 0 0.6mm;
|
|
152
|
+
overflow: hidden;
|
|
153
|
+
border: $rule;
|
|
154
|
+
vertical-align: middle;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
th {
|
|
158
|
+
font-weight: 700;
|
|
159
|
+
text-align: center;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
td {
|
|
163
|
+
text-align: left;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.columnHead th {
|
|
168
|
+
font-family: Cambria, Georgia, serif;
|
|
169
|
+
font-size: 6.5pt;
|
|
170
|
+
line-height: 1.1;
|
|
171
|
+
vertical-align: top;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.band th {
|
|
175
|
+
background-color: $band;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.heading th {
|
|
179
|
+
background-color: $heading;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.bandCell {
|
|
183
|
+
background-color: $band !important;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.code {
|
|
187
|
+
text-align: center !important;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.small {
|
|
191
|
+
font-size: 6.5pt;
|
|
192
|
+
line-height: 1;
|
|
193
|
+
text-align: left !important;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.leftText {
|
|
197
|
+
text-align: left !important;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.italicHeading {
|
|
201
|
+
font-style: italic;
|
|
202
|
+
text-align: left !important;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.count {
|
|
206
|
+
font-variant-numeric: tabular-nums;
|
|
207
|
+
text-align: center !important;
|
|
208
|
+
cursor: pointer;
|
|
209
|
+
|
|
210
|
+
&:hover,
|
|
211
|
+
&:focus-visible {
|
|
212
|
+
background-color: $brand-primary-10;
|
|
213
|
+
outline: 1px solid var(--brand-01);
|
|
214
|
+
outline-offset: -1px;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.shade {
|
|
219
|
+
background-color: $shade;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.lightShade {
|
|
223
|
+
background-color: $light-shade;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.blankCell {
|
|
227
|
+
background-color: #fff;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* The right half is shorter: the rest of its column is shaded, as printed */
|
|
231
|
+
.filler {
|
|
232
|
+
flex: 1;
|
|
233
|
+
background-color: $light-shade;
|
|
234
|
+
border: $rule;
|
|
235
|
+
border-top: none;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.instruction {
|
|
239
|
+
margin-top: 1mm;
|
|
240
|
+
font-size: 6.5pt;
|
|
241
|
+
font-weight: 700;
|
|
242
|
+
line-height: 1.6;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.signOff {
|
|
246
|
+
display: flex;
|
|
247
|
+
justify-content: space-between;
|
|
248
|
+
margin-top: 4mm;
|
|
249
|
+
padding: 0 0 0 18mm;
|
|
250
|
+
|
|
251
|
+
> .fieldGrid {
|
|
252
|
+
width: 102mm;
|
|
253
|
+
row-gap: 3.2mm;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
> .fieldGrid:last-child {
|
|
257
|
+
width: 120mm;
|
|
258
|
+
margin-right: 22mm;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.notes {
|
|
263
|
+
margin-top: 2mm;
|
|
264
|
+
font-weight: 700;
|
|
265
|
+
text-decoration: underline;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.pageFoot {
|
|
269
|
+
display: flex;
|
|
270
|
+
justify-content: space-between;
|
|
271
|
+
margin-top: auto;
|
|
272
|
+
padding-bottom: 1mm;
|
|
273
|
+
font-family: Calibri, Carlito, Arial, sans-serif;
|
|
274
|
+
font-size: 10pt;
|
|
275
|
+
font-weight: 700;
|
|
276
|
+
}
|