@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
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/* MOH-745 laid out for A4, matching MOH-711 and MOH-740: geometry in
|
|
2
|
+
millimetres, type in points, one rule weight. Its 33 rows fit one page. */
|
|
3
|
+
|
|
4
|
+
$ink: #000;
|
|
5
|
+
$rule: 1px solid $ink;
|
|
6
|
+
|
|
7
|
+
$text: 7pt;
|
|
8
|
+
$title: 7.5pt;
|
|
9
|
+
$meta: 6.5pt;
|
|
10
|
+
|
|
11
|
+
/* The blocks below stack flush and share their edges, so the sheet reads as one
|
|
12
|
+
continuous form rather than a title, two loose tables and a footer. */
|
|
13
|
+
|
|
14
|
+
.reportTitle {
|
|
15
|
+
padding: 3mm;
|
|
16
|
+
font-size: $title;
|
|
17
|
+
font-weight: 700;
|
|
18
|
+
text-align: center;
|
|
19
|
+
border: $rule;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Facility / county / period strip, and the sign-off at the foot: both are one
|
|
23
|
+
line of fields separated by spacing, with rules to write on. */
|
|
24
|
+
|
|
25
|
+
.location {
|
|
26
|
+
display: flex;
|
|
27
|
+
flex-wrap: nowrap;
|
|
28
|
+
align-items: baseline;
|
|
29
|
+
justify-content: space-between;
|
|
30
|
+
/* Six fields rather than the five the other reports carry, so the rules are
|
|
31
|
+
a little shorter to keep the row on one line. */
|
|
32
|
+
gap: 2.5mm;
|
|
33
|
+
padding: 2mm 3mm;
|
|
34
|
+
font-size: $meta;
|
|
35
|
+
white-space: nowrap;
|
|
36
|
+
border: $rule;
|
|
37
|
+
border-top: none;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.line,
|
|
41
|
+
.shortLine {
|
|
42
|
+
display: inline-block;
|
|
43
|
+
padding: 0 0.5mm;
|
|
44
|
+
margin-left: 1mm;
|
|
45
|
+
overflow: hidden;
|
|
46
|
+
font-weight: 600;
|
|
47
|
+
text-align: center;
|
|
48
|
+
text-overflow: ellipsis;
|
|
49
|
+
vertical-align: bottom;
|
|
50
|
+
border-bottom: $rule;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.line {
|
|
54
|
+
width: 24mm;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.shortLine {
|
|
58
|
+
width: 12mm;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.tableContainer {
|
|
62
|
+
width: 100%;
|
|
63
|
+
overflow-x: auto;
|
|
64
|
+
|
|
65
|
+
/* pulls the second table onto the first one's edge instead of doubling it */
|
|
66
|
+
& + & {
|
|
67
|
+
margin-top: -1px;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.table {
|
|
72
|
+
width: 100%;
|
|
73
|
+
border-collapse: collapse;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.tableBordered td,
|
|
77
|
+
.tableBordered th {
|
|
78
|
+
padding: 1mm 1.5mm;
|
|
79
|
+
font-size: $text;
|
|
80
|
+
text-align: center;
|
|
81
|
+
border: $rule;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.tableBordered th {
|
|
85
|
+
font-weight: 700;
|
|
86
|
+
background-color: #f4f4f4;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.tableStriped tbody tr:nth-of-type(odd) {
|
|
90
|
+
background-color: #fafafa;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* Sign-off, enclosed by the form rather than floating beneath it.
|
|
94
|
+
|
|
95
|
+
Its rules are wider than the header strip's: four fields across the sheet
|
|
96
|
+
leave about 133mm for them, where the header has to fit six. At the shared
|
|
97
|
+
12mm a date like "29-Jul-2026" needs 13.6mm and was being ellipsised. Sized
|
|
98
|
+
to leave headroom rather than to fill the row exactly. */
|
|
99
|
+
|
|
100
|
+
.signOff .line {
|
|
101
|
+
width: 36mm;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.signOff .shortLine {
|
|
105
|
+
width: 22mm;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.signOff {
|
|
109
|
+
display: flex;
|
|
110
|
+
flex-wrap: nowrap;
|
|
111
|
+
align-items: baseline;
|
|
112
|
+
justify-content: space-between;
|
|
113
|
+
gap: 2.5mm;
|
|
114
|
+
padding: 3mm;
|
|
115
|
+
font-size: $meta;
|
|
116
|
+
white-space: nowrap;
|
|
117
|
+
border: $rule;
|
|
118
|
+
border-top: none;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.rotateUp {
|
|
122
|
+
writing-mode: vertical-rl;
|
|
123
|
+
transform: rotate(180deg);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/* On paper the striping is screen affordance that prints as grey noise */
|
|
127
|
+
|
|
128
|
+
@media print {
|
|
129
|
+
.tableStriped tbody tr:nth-of-type(odd) {
|
|
130
|
+
background-color: transparent;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.totalVal{
|
|
135
|
+
font-weight: bold;
|
|
136
|
+
}
|
|
137
|
+
.reportCount {
|
|
138
|
+
color: #00f;
|
|
139
|
+
}
|
|
140
|
+
.reportCount:hover{
|
|
141
|
+
cursor: pointer;
|
|
142
|
+
}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { Button, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@carbon/react';
|
|
2
|
+
import React, { useEffect, useState } from 'react';
|
|
3
|
+
|
|
4
|
+
import styles from '../../../common/report-register/register-table.scss';
|
|
5
|
+
import { Download } from '@carbon/react/icons';
|
|
6
|
+
import moh412Styles from './moh-412-register.component.scss';
|
|
7
|
+
import classNames from 'classnames';
|
|
8
|
+
import { useSearchParams } from 'react-router-dom';
|
|
9
|
+
import { moh412Columns } from './type';
|
|
10
|
+
import { fetchMoh745PatientList, getMoh412PatientList } from '../../../resources/moh-745.resource';
|
|
11
|
+
import { moh412ExportColumns } from './moh-412.columns';
|
|
12
|
+
import { columnsToCsv, downloadCsv, RegisterLayout, usePatientList } from '../../../common/report-register';
|
|
13
|
+
import ReportFiltersComponent from '../../../common/report-filters/report-filters.component';
|
|
14
|
+
import { showReportError } from '../../../common/report-error/show-report-error';
|
|
15
|
+
import { type ReportPeriod } from '../../../common/report-filters/types';
|
|
16
|
+
import { useSession } from '@openmrs/esm-framework';
|
|
17
|
+
import dayjs from 'dayjs';
|
|
18
|
+
import { useGeneratedLocation } from '../../../common/report-placeholder/use-generated-location';
|
|
19
|
+
|
|
20
|
+
const Moh412Register: React.FC = () => {
|
|
21
|
+
const [rows, setRows] = useState<any[]>([]);
|
|
22
|
+
const [isExporting, setIsExporting] = useState(false);
|
|
23
|
+
const [searchParams] = useSearchParams();
|
|
24
|
+
const startDate = searchParams.get('startDate') ?? '';
|
|
25
|
+
const endDate = searchParams.get('endDate') ?? '';
|
|
26
|
+
const locationUuids = searchParams.get('locationUuids') ?? '';
|
|
27
|
+
const indicators = searchParams.get('indicators') ?? '';
|
|
28
|
+
const [patientList,setPatientList] = useState<any>([]);
|
|
29
|
+
const [isLoading,setIsLoading] = useState<boolean>(false);
|
|
30
|
+
const [period, setPeriod] = useState<{ startDate: string; endDate: string }>({ startDate: '', endDate: '' });
|
|
31
|
+
const session = useSession();
|
|
32
|
+
const { isForCurrentLocation, hasLocationChanged, markGenerated } = useGeneratedLocation('moh412Location');
|
|
33
|
+
const isGenerated = rows !== null && isForCurrentLocation;
|
|
34
|
+
const columns = moh412ExportColumns;
|
|
35
|
+
|
|
36
|
+
useEffect(()=>{
|
|
37
|
+
if(startDate && endDate && locationUuids && indicators){
|
|
38
|
+
fetchPatientList();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
},[startDate, endDate, locationUuids, indicators]);
|
|
42
|
+
|
|
43
|
+
async function fetchPatientList(){
|
|
44
|
+
const resp = await fetchMoh745PatientList({
|
|
45
|
+
startDate,
|
|
46
|
+
endDate,
|
|
47
|
+
locationUuids,
|
|
48
|
+
indicators,
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
if(resp){
|
|
52
|
+
setRows(resp);
|
|
53
|
+
}else{
|
|
54
|
+
setRows([]);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const generate = async ({ startDate, endDate }: ReportPeriod) => {
|
|
58
|
+
setIsLoading(true);
|
|
59
|
+
setPeriod({ startDate, endDate });
|
|
60
|
+
let ind = '';
|
|
61
|
+
let locationUuid = '';
|
|
62
|
+
const selectedDate = dayjs(startDate).endOf('month')
|
|
63
|
+
const registerStartDate = selectedDate.format('YYYY-MM-DD');
|
|
64
|
+
let reportIndicators;
|
|
65
|
+
try {
|
|
66
|
+
if(!indicators){
|
|
67
|
+
reportIndicators = 'cumulative_all';
|
|
68
|
+
}else{
|
|
69
|
+
reportIndicators = ind;
|
|
70
|
+
}
|
|
71
|
+
if(!locationUuids){
|
|
72
|
+
locationUuid = session.sessionLocation?.uuid ?? '';
|
|
73
|
+
}else{
|
|
74
|
+
locationUuid = locationUuids;
|
|
75
|
+
}
|
|
76
|
+
const resp = await fetchMoh745PatientList({ startDate, endDate, locationUuids: locationUuid,indicators: reportIndicators,
|
|
77
|
+
});
|
|
78
|
+
if(resp){
|
|
79
|
+
setRows(resp);
|
|
80
|
+
}
|
|
81
|
+
markGenerated(locationUuids);
|
|
82
|
+
} catch (error) {
|
|
83
|
+
showReportError('The MOH 412 register', error);
|
|
84
|
+
} finally {
|
|
85
|
+
setIsLoading(false);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const exportCsv = async () => {
|
|
89
|
+
setIsExporting(true);
|
|
90
|
+
|
|
91
|
+
try {
|
|
92
|
+
const slug = ['moh-412-register', period.startDate, period.endDate]
|
|
93
|
+
.filter(Boolean)
|
|
94
|
+
.join('-')
|
|
95
|
+
.toLowerCase();
|
|
96
|
+
downloadCsv(columnsToCsv(rows, columns, { subHeaderRow: [] }), `${slug}.csv`);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
showReportError('the register export', error);
|
|
99
|
+
} finally {
|
|
100
|
+
setIsExporting(false);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
return (
|
|
105
|
+
|
|
106
|
+
<div className={styles.tableContainer}>
|
|
107
|
+
<ReportFiltersComponent
|
|
108
|
+
reportName="MOH 412 Register"
|
|
109
|
+
mode="both"
|
|
110
|
+
onGenerate={generate}
|
|
111
|
+
isLoading={isLoading}
|
|
112
|
+
isReportGenerated={isGenerated}
|
|
113
|
+
generatedPeriod={period}
|
|
114
|
+
defaultTab="monthly"
|
|
115
|
+
backLink={{ label: 'All registers', to: '/?tab=registers' }}
|
|
116
|
+
/>
|
|
117
|
+
<div className={moh412Styles.exportRow}>
|
|
118
|
+
<div className={styles.toolbar}>
|
|
119
|
+
<Button kind="tertiary" size="sm" renderIcon={Download} onClick={exportCsv} disabled={isExporting}>
|
|
120
|
+
{isExporting ? 'Preparing…' : 'Export CSV'}
|
|
121
|
+
</Button>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
<div>
|
|
125
|
+
<Table className={classNames(`${styles.table}`, `${styles.tableBordered}`, `${styles.tableStriped}`)}>
|
|
126
|
+
<TableHead>
|
|
127
|
+
<TableRow>
|
|
128
|
+
<TableHeader colSpan={3}>Month:</TableHeader>
|
|
129
|
+
<TableHeader colSpan={2}>Year</TableHeader>
|
|
130
|
+
<TableHeader></TableHeader>
|
|
131
|
+
<TableHeader></TableHeader>
|
|
132
|
+
<TableHeader></TableHeader>
|
|
133
|
+
<TableHeader></TableHeader>
|
|
134
|
+
<TableHeader colSpan={6}>CERVICAL CANCER</TableHeader>
|
|
135
|
+
<TableHeader colSpan={3}>Breast Cancer</TableHeader>
|
|
136
|
+
<TableHeader colSpan={2}>Colorectal Cancer</TableHeader>
|
|
137
|
+
<TableHeader></TableHeader>
|
|
138
|
+
<TableHeader></TableHeader>
|
|
139
|
+
<TableHeader></TableHeader>
|
|
140
|
+
<TableHeader></TableHeader>
|
|
141
|
+
</TableRow>
|
|
142
|
+
<TableRow>
|
|
143
|
+
<TableHeader colSpan={9}>Client Details</TableHeader>
|
|
144
|
+
<TableHeader colSpan={3}>Screening Methods and Results</TableHeader>
|
|
145
|
+
<TableHeader colSpan={3}>Pre-Cancer Treatment</TableHeader>
|
|
146
|
+
<TableHeader colSpan={3}>Methods and Results</TableHeader>
|
|
147
|
+
<TableHeader colSpan={2}>Methods and Results</TableHeader>
|
|
148
|
+
<TableHeader></TableHeader>
|
|
149
|
+
<TableHeader></TableHeader>
|
|
150
|
+
<TableHeader></TableHeader>
|
|
151
|
+
<TableHeader></TableHeader>
|
|
152
|
+
</TableRow>
|
|
153
|
+
<TableRow>
|
|
154
|
+
<TableHeader>
|
|
155
|
+
a)S/No
|
|
156
|
+
<br />
|
|
157
|
+
No
|
|
158
|
+
</TableHeader>
|
|
159
|
+
<TableHeader>
|
|
160
|
+
b)Visit <br />
|
|
161
|
+
Date
|
|
162
|
+
</TableHeader>
|
|
163
|
+
<TableHeader>
|
|
164
|
+
c)Visit <br />
|
|
165
|
+
Type
|
|
166
|
+
</TableHeader>
|
|
167
|
+
<TableHeader>
|
|
168
|
+
d)Client <br />
|
|
169
|
+
No
|
|
170
|
+
</TableHeader>
|
|
171
|
+
<TableHeader>e)Client Names</TableHeader>
|
|
172
|
+
<TableHeader>
|
|
173
|
+
f)Client's Phone <br />
|
|
174
|
+
Number
|
|
175
|
+
</TableHeader>
|
|
176
|
+
<TableHeader>
|
|
177
|
+
g)Client's <br /> Age
|
|
178
|
+
</TableHeader>
|
|
179
|
+
<TableHeader>
|
|
180
|
+
h)Location
|
|
181
|
+
<br />
|
|
182
|
+
Residence
|
|
183
|
+
</TableHeader>
|
|
184
|
+
<TableHeader>
|
|
185
|
+
i)Treatment
|
|
186
|
+
<br />
|
|
187
|
+
Suppoter's Phone
|
|
188
|
+
<br />
|
|
189
|
+
Number
|
|
190
|
+
</TableHeader>
|
|
191
|
+
<TableHeader>
|
|
192
|
+
j)Via or <br />
|
|
193
|
+
VIA/VILLI
|
|
194
|
+
</TableHeader>
|
|
195
|
+
<TableHeader>
|
|
196
|
+
k)Pap <br />
|
|
197
|
+
Smear
|
|
198
|
+
</TableHeader>
|
|
199
|
+
<TableHeader>
|
|
200
|
+
l)HPV Test
|
|
201
|
+
<br />
|
|
202
|
+
(over 30 years)
|
|
203
|
+
</TableHeader>
|
|
204
|
+
<TableHeader>m)cryotherapy</TableHeader>
|
|
205
|
+
<TableHeader>
|
|
206
|
+
n)Thermo-
|
|
207
|
+
<br />
|
|
208
|
+
ablation
|
|
209
|
+
</TableHeader>
|
|
210
|
+
<TableHeader>o)LEEP</TableHeader>
|
|
211
|
+
<TableHeader>p)CBE</TableHeader>
|
|
212
|
+
<TableHeader>q)Ultrasound</TableHeader>
|
|
213
|
+
<TableHeader>r)Mammogram</TableHeader>
|
|
214
|
+
<TableHeader>s)Colonoscopy</TableHeader>
|
|
215
|
+
<TableHeader>t)FOBT</TableHeader>
|
|
216
|
+
<TableHeader>u)HIV Status</TableHeader>
|
|
217
|
+
<TableHeader>
|
|
218
|
+
v)Referral <br />
|
|
219
|
+
To/From
|
|
220
|
+
</TableHeader>
|
|
221
|
+
<TableHeader>
|
|
222
|
+
w)Follow-
|
|
223
|
+
<br />
|
|
224
|
+
up Date
|
|
225
|
+
</TableHeader>
|
|
226
|
+
<TableHeader>
|
|
227
|
+
Remarks(e.g Colposcopy done,
|
|
228
|
+
<br />
|
|
229
|
+
Cervicography results, Call
|
|
230
|
+
<br />
|
|
231
|
+
Client for follow up, Return for <br />
|
|
232
|
+
post-treatment screening, <br />
|
|
233
|
+
Communicate with the referral site)
|
|
234
|
+
</TableHeader>
|
|
235
|
+
</TableRow>
|
|
236
|
+
</TableHead>
|
|
237
|
+
<TableBody>
|
|
238
|
+
{
|
|
239
|
+
rows.map((p: any,index: number)=>{
|
|
240
|
+
return <><TableRow>
|
|
241
|
+
<TableCell>{index + 1}</TableCell>
|
|
242
|
+
<TableCell>{p.screening_date ?? ''}</TableCell>
|
|
243
|
+
<TableCell>{p?.screening_visit_type ?? ''}</TableCell>
|
|
244
|
+
<TableCell>{p?.ccc_number ?? ''}</TableCell>
|
|
245
|
+
<TableCell>{p.person_name}</TableCell>
|
|
246
|
+
<TableCell>{p?.phone_number ?? ''}</TableCell>
|
|
247
|
+
<TableCell>{p?.age ?? ''}</TableCell>
|
|
248
|
+
<TableCell></TableCell>
|
|
249
|
+
<TableCell></TableCell>
|
|
250
|
+
<TableCell>{p?.via_or_via_vili_test_result ?? ''}</TableCell>
|
|
251
|
+
<TableCell>{p?.pap_smear_test_result ?? ''}</TableCell>
|
|
252
|
+
<TableCell>{p?.hpv_test_result ?? ''}</TableCell>
|
|
253
|
+
<TableCell></TableCell>
|
|
254
|
+
<TableCell></TableCell>
|
|
255
|
+
<TableCell></TableCell>
|
|
256
|
+
<TableCell></TableCell>
|
|
257
|
+
<TableCell></TableCell>
|
|
258
|
+
<TableCell></TableCell>
|
|
259
|
+
<TableCell></TableCell>
|
|
260
|
+
<TableCell></TableCell>
|
|
261
|
+
<TableCell>{p?.hiv_status ?? ''}</TableCell>
|
|
262
|
+
<TableCell></TableCell>
|
|
263
|
+
<TableCell></TableCell>
|
|
264
|
+
<TableCell></TableCell>
|
|
265
|
+
</TableRow></>
|
|
266
|
+
})
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
</TableBody>
|
|
270
|
+
</Table>
|
|
271
|
+
</div>
|
|
272
|
+
</div>
|
|
273
|
+
);
|
|
274
|
+
};
|
|
275
|
+
export default Moh412Register;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type RegisterColumn } from '../../../common/report-register';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* MOH 412 as the register prints it: one column per cell, in the order they appear.
|
|
5
|
+
*
|
|
6
|
+
* One column is rendered by the table but has no heading above it -- the
|
|
7
|
+
* header row is 24 columns wide against 25 of data. It carries its field name
|
|
8
|
+
* rather than a heading borrowed from a neighbouring column.
|
|
9
|
+
*/
|
|
10
|
+
export const moh412ExportColumns: RegisterColumn[] = [
|
|
11
|
+
{ header: 'Client Details - a)S/No No', value: (row) => row.serial_no ?? '' },
|
|
12
|
+
{ header: 'Client Details - b)Visit Date', value: (row) => row.visit_date ?? '' },
|
|
13
|
+
{ header: 'Client Details - c)Visit Type', value: (row) => row.visit_type ?? '' },
|
|
14
|
+
{ header: 'Client Details - d)Client No', value: (row) => row.client_no ?? '' },
|
|
15
|
+
{ header: 'Client Details - e)Client Names', value: (row) => row.full_names ?? '' },
|
|
16
|
+
{ header: "Client Details - f)Client's Phone Number", value: (row) => row.phone_number ?? '' },
|
|
17
|
+
{ header: "Client Details - g)Client's Age", value: (row) => row.age ?? '' },
|
|
18
|
+
{ header: 'Client Details - h)Location Residence', value: (row) => row.location_residence ?? '' },
|
|
19
|
+
{
|
|
20
|
+
header: "Client Details - i)Treatment Suppoter's Phone Number",
|
|
21
|
+
value: (row) => row.treatment_supporter_phone_number ?? '',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
header: 'CERVICAL CANCER - Screening Methods and Results - j)Via or VIA/VILLI',
|
|
25
|
+
value: (row) => row.via_villi ?? '',
|
|
26
|
+
},
|
|
27
|
+
{ header: 'CERVICAL CANCER - Screening Methods and Results - k)Pap Smear', value: (row) => row.pap_smear ?? '' },
|
|
28
|
+
{
|
|
29
|
+
header: 'CERVICAL CANCER - Screening Methods and Results - l)HPV Test (over 30 years)',
|
|
30
|
+
value: (row) => row.hpv ?? '',
|
|
31
|
+
},
|
|
32
|
+
{ header: 'CERVICAL CANCER - Pre-Cancer Treatment - m)cryotherapy', value: (row) => row.cryotherapy ?? '' },
|
|
33
|
+
{
|
|
34
|
+
header: 'CERVICAL CANCER - Pre-Cancer Treatment - n)Thermo- ablation',
|
|
35
|
+
value: (row) => row.thermocoagulation ?? '',
|
|
36
|
+
},
|
|
37
|
+
{ header: 'CERVICAL CANCER - Pre-Cancer Treatment - o)LEEP', value: (row) => row.leep ?? '' },
|
|
38
|
+
{ header: 'Breast Cancer - Methods and Results - p)CBE', value: (row) => row.cbe ?? '' },
|
|
39
|
+
{ header: 'Breast Cancer - Methods and Results - q)Ultrasound', value: (row) => row.ultrasound ?? '' },
|
|
40
|
+
{ header: 'Breast Cancer - Methods and Results - r)Mammogram', value: (row) => row.mammogram ?? '' },
|
|
41
|
+
{ header: 'Colorectal Cancer - Methods and Results - s)Colonoscopy', value: (row) => row.colonoscopy ?? '' },
|
|
42
|
+
{ header: 'Colorectal Cancer - Methods and Results - t)FOBT', value: (row) => row.fobt ?? '' },
|
|
43
|
+
{ header: 'u)HIV Status', value: (row) => row.hiv_status ?? '' },
|
|
44
|
+
{ header: 'v)Referral To/From', value: (row) => row.referral_from ?? '' },
|
|
45
|
+
{ header: 'w)Follow- up Date', value: (row) => row.referral_to ?? '' },
|
|
46
|
+
{
|
|
47
|
+
header:
|
|
48
|
+
'Remarks(e.g Colposcopy done, Cervicography results, Call Client for follow up, Return for post-treatment screening, Communicate with the referral site)',
|
|
49
|
+
value: (row) => row.follow_up_date ?? '',
|
|
50
|
+
},
|
|
51
|
+
{ header: 'Remarks', value: (row) => row.remarks ?? '' },
|
|
52
|
+
];
|