@ampath/esm-reports-app 1.0.0-next.7 → 1.0.0-next.71

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.
Files changed (258) hide show
  1. package/dist/197.js +1 -1
  2. package/dist/282.js +1 -1
  3. package/dist/282.js.map +1 -1
  4. package/dist/295.css +1 -0
  5. package/dist/295.css.map +1 -0
  6. package/dist/295.js +1 -0
  7. package/dist/295.js.map +1 -0
  8. package/dist/299.js +2 -0
  9. package/dist/299.js.LICENSE.txt +3 -0
  10. package/dist/299.js.map +1 -0
  11. package/dist/300.js +1 -1
  12. package/dist/311.js +1 -1
  13. package/dist/311.js.map +1 -1
  14. package/dist/335.js +1 -1
  15. package/dist/353.js +1 -1
  16. package/dist/353.js.map +1 -1
  17. package/dist/354.js +2 -0
  18. package/dist/354.js.LICENSE.txt +20 -0
  19. package/dist/354.js.map +1 -0
  20. package/dist/410.js +1 -0
  21. package/dist/410.js.map +1 -0
  22. package/dist/457.js +2 -0
  23. package/dist/457.js.LICENSE.txt +261 -0
  24. package/dist/457.js.map +1 -0
  25. package/dist/478.js +1 -1
  26. package/dist/478.js.map +1 -1
  27. package/dist/480.js +1 -0
  28. package/dist/540.js +1 -1
  29. package/dist/540.js.map +1 -1
  30. package/dist/55.js +1 -1
  31. package/dist/580.js +1 -0
  32. package/dist/580.js.map +1 -0
  33. package/dist/600.js +2 -0
  34. package/dist/600.js.LICENSE.txt +35 -0
  35. package/dist/600.js.map +1 -0
  36. package/dist/652.js +1 -1
  37. package/dist/781.js +1 -0
  38. package/dist/781.js.map +1 -0
  39. package/dist/919.css +1 -0
  40. package/dist/919.css.map +1 -0
  41. package/dist/919.js +1 -0
  42. package/dist/919.js.map +1 -0
  43. package/dist/961.js +1 -1
  44. package/dist/961.js.map +1 -1
  45. package/dist/99.js +1 -1
  46. package/dist/99.js.map +1 -0
  47. package/dist/ampath-esm-reports-app.js +1 -1
  48. package/dist/ampath-esm-reports-app.js.map +1 -1
  49. package/dist/routes.json +1 -1
  50. package/package.json +4 -2
  51. package/src/common/daily-summary-table.tsx +55 -0
  52. package/src/common/linelist-table/index.ts +3 -0
  53. package/src/common/linelist-table/linelist-columns.ts +48 -0
  54. package/src/common/linelist-table/linelist-table.component.tsx +442 -0
  55. package/src/common/linelist-table/linelist-table.scss +306 -0
  56. package/src/common/linelist-table/linelist-table.test.tsx +120 -0
  57. package/src/common/linelist-table/use-all-rows.ts +93 -0
  58. package/src/common/linelist-table/use-column-layout.ts +123 -0
  59. package/src/common/report-error/index.ts +1 -0
  60. package/src/common/report-error/show-report-error.ts +25 -0
  61. package/src/common/report-filters/date-range.ts +137 -0
  62. package/src/common/report-filters/index.ts +4 -0
  63. package/src/common/report-filters/report-filters.component.tsx +317 -99
  64. package/src/common/report-filters/report-filters.scss +255 -32
  65. package/src/common/report-filters/types.ts +79 -0
  66. package/src/common/report-filters/use-restore-period.ts +43 -0
  67. package/src/common/report-header/index.ts +1 -0
  68. package/src/common/report-header/use-location-details.ts +58 -0
  69. package/src/common/report-page/download-sheet-pdf.ts +59 -0
  70. package/src/common/report-page/index.ts +3 -0
  71. package/src/common/report-page/report-page.component.tsx +32 -0
  72. package/src/common/report-page/report-page.scss +45 -0
  73. package/src/common/report-page/use-page-scale.ts +60 -0
  74. package/src/common/report-placeholder/has-report-data.ts +15 -0
  75. package/src/common/report-placeholder/index.ts +3 -0
  76. package/src/common/report-placeholder/report-placeholder.component.tsx +81 -0
  77. package/src/common/report-placeholder/report-placeholder.scss +48 -0
  78. package/src/common/report-placeholder/use-generated-location.ts +62 -0
  79. package/src/common/report-register/index.ts +6 -0
  80. package/src/common/report-register/register-columns.ts +46 -0
  81. package/src/common/report-register/register-layout.component.tsx +265 -0
  82. package/src/common/report-register/register-layout.scss +150 -0
  83. package/src/common/report-register/register-table.scss +71 -0
  84. package/src/common/report-register/report-parents.ts +27 -0
  85. package/src/common/report-register/rows-to-csv.ts +89 -0
  86. package/src/common/report-register/use-location-name.ts +54 -0
  87. package/src/common/report-register/use-patient-list.ts +92 -0
  88. package/src/common/report-skeleton/index.ts +1 -0
  89. package/src/common/report-skeleton/report-skeleton.component.tsx +46 -0
  90. package/src/common/report-skeleton/report-skeleton.scss +29 -0
  91. package/src/config-schema.ts +9 -1
  92. package/src/dashboard/report-catalog.ts +173 -0
  93. package/src/dashboard/reports-dasboard.tsx +189 -18
  94. package/src/dashboard/reports-dashboard.module.scss +357 -14
  95. package/src/index.ts +13 -1
  96. package/src/registers/moh-240/moh-240-register.scss +41 -0
  97. package/src/registers/moh-240/moh-240.component.test.tsx +166 -0
  98. package/src/registers/moh-240/moh-240.component.tsx +164 -0
  99. package/src/registers/moh-362/moh-362-lab-register.component.tsx +392 -0
  100. package/src/registers/moh-362/moh-362-linkage-register.component.tsx +120 -0
  101. package/src/registers/moh-362/moh-362-register.scss +222 -0
  102. package/src/registers/moh-362/moh-362.component.tsx +99 -0
  103. package/src/registers/moh-362/moh-362.scss +11 -0
  104. package/src/registers/moh-362/moh-362.types.ts +97 -0
  105. package/src/registers/register-catalog.ts +96 -0
  106. package/src/registers/tb-lab-register/tb-lab-register-table.component.tsx +116 -0
  107. package/src/registers/tb-lab-register/tb-lab-register-table.scss +123 -0
  108. package/src/registers/tb-lab-register/tb-lab-register.columns.ts +164 -0
  109. package/src/registers/tb-lab-register/tb-lab-register.component.test.tsx +232 -0
  110. package/src/registers/tb-lab-register/tb-lab-register.component.tsx +153 -0
  111. package/src/reports/datatable-wrapper/datatable-wrapper.component.tsx +63 -48
  112. package/src/reports/moh-240/moh-240-header.component.tsx +62 -0
  113. package/src/reports/moh-240/moh-240.columns.ts +113 -0
  114. package/src/reports/moh-240/moh-240.component.tsx +72 -9
  115. package/src/reports/moh-240/moh-240.scss +40 -0
  116. package/src/reports/moh-240/sub-reports/moh-240-register.component.tsx +31 -37
  117. package/src/reports/moh-240/sub-reports/page-summary.component.tsx +143 -106
  118. package/src/reports/moh-505/moh-505-header.component.tsx +67 -0
  119. package/src/reports/moh-505/moh-505.component.tsx +441 -0
  120. package/src/reports/moh-505/moh-505.scss +117 -0
  121. package/src/reports/moh-705B/moh-204b-register.component.tsx +244 -0
  122. package/src/reports/moh-705B/moh-204b.columns.ts +39 -0
  123. package/src/reports/moh-705B/moh-705b.component.tsx +659 -0
  124. package/src/reports/moh-705B/moh-705b.scss +172 -0
  125. package/src/reports/moh-705a/moh-705a.component.tsx +661 -0
  126. package/src/reports/moh-705a/moh-705a.scss +172 -0
  127. package/src/reports/moh-705a/registers/moh-204a-register.component.tsx +329 -0
  128. package/src/reports/moh-705a/registers/moh-204a.columns.ts +57 -0
  129. package/src/reports/moh-705a/type.ts +6 -0
  130. package/src/reports/moh-706/moh-706-header.component.tsx +66 -0
  131. package/src/reports/moh-706/moh-706.component.tsx +150 -24
  132. package/src/reports/moh-706/moh-706.scss +119 -11
  133. package/src/reports/moh-706/sub-reports/bacteriology/bacteriology.component.tsx +54 -62
  134. package/src/reports/moh-706/sub-reports/blood-chemistry/blood-chemistry.component.tsx +228 -317
  135. package/src/reports/moh-706/sub-reports/drug-susceptibility-testing/drug-susceptibility-testing.component.tsx +31 -46
  136. package/src/reports/moh-706/sub-reports/haematology/haematology.component.tsx +47 -55
  137. package/src/reports/moh-706/sub-reports/histology-and-cytology/histology-and-cytology.component.tsx +43 -58
  138. package/src/reports/moh-706/sub-reports/parasitology/parasitology.component.tsx +31 -39
  139. package/src/reports/moh-706/sub-reports/serology/serology.component.tsx +26 -34
  140. package/src/reports/moh-706/sub-reports/specimen-referral-to-higher-levels/specimen-referral-to-higher-levels.component.tsx +9 -24
  141. package/src/reports/moh-706/sub-reports/urine-analysis/urine-analysis.component.tsx +43 -51
  142. package/src/reports/moh-710/moh-710.component.tsx +799 -632
  143. package/src/reports/moh-710/moh-710.scss +142 -21
  144. package/src/reports/moh-710/registers/moh-510/moh-510.columns.ts +40 -0
  145. package/src/reports/moh-710/registers/moh-510/moh-510.component.tsx +144 -0
  146. package/src/reports/moh-710/registers/moh-510/moh-510.scss +130 -0
  147. package/src/reports/moh-710/registers/moh-511-710-register.component.tsx +268 -0
  148. package/src/reports/moh-710/registers/moh-511-710.columns.ts +52 -0
  149. package/src/reports/moh-710/registers/type.ts +31 -0
  150. package/src/reports/moh-711/moh-711.component.tsx +138 -1269
  151. package/src/reports/moh-711/moh711.scss +135 -20
  152. package/src/reports/moh-711/registers/moh-333-register.component.tsx +637 -0
  153. package/src/reports/moh-711/registers/moh-333.columns.ts +119 -0
  154. package/src/reports/moh-711/registers/moh-405-register.component.tsx +520 -0
  155. package/src/reports/moh-711/registers/moh-405.columns.ts +120 -0
  156. package/src/reports/moh-711/registers/moh-406-register.component.tsx +530 -0
  157. package/src/reports/moh-711/registers/moh-406.columns.ts +133 -0
  158. package/src/reports/moh-711/registers/moh-510-register.component.tsx +55 -0
  159. package/src/reports/moh-711/registers/moh-511-register.component.tsx +270 -0
  160. package/src/reports/moh-711/registers/moh-511.columns.ts +59 -0
  161. package/src/reports/moh-711/registers/type.ts +192 -0
  162. package/src/reports/moh-711/sections/anc.component.tsx +159 -0
  163. package/src/reports/moh-711/sections/cervical-cancer.component.tsx +148 -0
  164. package/src/reports/moh-711/sections/chanis.component.tsx +366 -0
  165. package/src/reports/moh-711/sections/family-planning.component.tsx +221 -0
  166. package/src/reports/moh-711/sections/gbv.component.tsx +115 -0
  167. package/src/reports/moh-711/sections/maternity.component.tsx +321 -0
  168. package/src/reports/moh-711/sections/medical-social-work.component.tsx +73 -0
  169. package/src/reports/moh-711/sections/other.component.tsx +47 -0
  170. package/src/reports/moh-711/sections/physiotherapy.component.tsx +61 -0
  171. package/src/reports/moh-711/sections/pnc.component.tsx +127 -0
  172. package/src/reports/moh-711/sections/post-abortion.component.tsx +42 -0
  173. package/src/reports/moh-711/sections/rehabilitation.component.tsx +57 -0
  174. package/src/reports/moh-711/sections/report-compiled-by.component.tsx +50 -0
  175. package/src/reports/moh-711/sections/tb-screening.component.tsx +57 -0
  176. package/src/reports/moh-717/moh-717.component.tsx +149 -985
  177. package/src/reports/moh-717/moh717.scss +217 -21
  178. package/src/reports/moh-717/registers/nutrition-register.component.tsx +48 -0
  179. package/src/reports/moh-717/sections/finance.component.tsx +42 -0
  180. package/src/reports/moh-717/sections/inpatient.component.tsx +374 -0
  181. package/src/reports/moh-717/sections/maternity.component.tsx +126 -0
  182. package/src/reports/moh-717/sections/medical-records.component.tsx +35 -0
  183. package/src/reports/moh-717/sections/mortuary.component.tsx +43 -0
  184. package/src/reports/moh-717/sections/operations.component.tsx +53 -0
  185. package/src/reports/moh-717/sections/orthopaedic-trauma.component.tsx +98 -0
  186. package/src/reports/moh-717/sections/outpatient.component.tsx +597 -0
  187. package/src/reports/moh-717/sections/pharmacy.component.tsx +43 -0
  188. package/src/reports/moh-717/sections/preparedby.component.tsx +52 -0
  189. package/src/reports/moh-717/sections/special-services.component.tsx +114 -0
  190. package/src/reports/moh-731/linelist/moh-731-indicators.ts +1122 -0
  191. package/src/reports/moh-731/linelist/moh-731-linelist-sections.ts +472 -0
  192. package/src/reports/moh-731/linelist/moh-731-linelist.component.tsx +102 -0
  193. package/src/reports/moh-731/linelist/use-open-moh-731-linelist.ts +50 -0
  194. package/src/reports/moh-731/moh-731.component.tsx +266 -0
  195. package/src/reports/moh-731/moh-731.scss +499 -0
  196. package/src/reports/moh-731/registers/moh-366.columns.ts +38 -0
  197. package/src/reports/moh-731/registers/moh-366.component.tsx +471 -0
  198. package/src/reports/moh-731/registers/prep-register.component.tsx +284 -0
  199. package/src/reports/moh-731/registers/prep.columns.ts +34 -0
  200. package/src/reports/moh-731/sections/hiv-and-tb-treatment.component.tsx +1206 -0
  201. package/src/reports/moh-731/sections/hiv-testing-and-pre-exposure.component.tsx +727 -0
  202. package/src/reports/moh-731/sections/pmtct.component.tsx +572 -0
  203. package/src/reports/moh-731/summary/moh-731-summary.component.tsx +313 -0
  204. package/src/reports/moh-731/summary/moh-731-summary.config.ts +529 -0
  205. package/src/reports/moh-731/summary/moh-731-summary.scss +242 -0
  206. package/src/reports/moh-740/moh-740.component.scss +202 -0
  207. package/src/reports/moh-740/moh-740.component.tsx +1332 -0
  208. package/src/reports/moh-740/moh-740.resource.ts +54 -0
  209. package/src/reports/moh-740/registers/moh-222-daily-register/moh-222-daily-register.tsx +149 -0
  210. package/src/reports/moh-740/registers/moh-270-permanent-register/moh-270-permanent-register.tsx +123 -0
  211. package/src/reports/moh-740/registers/moh-740-patient-list.scss +0 -0
  212. package/src/reports/moh-740/registers/moh-740-patient-list.tsx +60 -0
  213. package/src/reports/moh-740/registers/moh-740.columns.ts +54 -0
  214. package/src/reports/moh-740/shared/data-cell/data-cell.scss +6 -0
  215. package/src/reports/moh-740/shared/data-cell/data-cell.tsx +23 -0
  216. package/src/reports/moh-740/shared/utils/indicator-register-map.ts +159 -0
  217. package/src/reports/moh-740/types/index.ts +223 -0
  218. package/src/reports/moh-745/moh-745.component.tsx +1021 -0
  219. package/src/reports/moh-745/moh-745.scss +132 -0
  220. package/src/reports/moh-745/registers/moh-412-register.component.tsx +249 -0
  221. package/src/reports/moh-745/registers/moh-412.columns.ts +52 -0
  222. package/src/reports/moh-745/registers/type.ts +181 -0
  223. package/src/reports/table-wrapper/table-row-mapper.component.tsx +57 -0
  224. package/src/reports/table-wrapper/table-wrapper.component.tsx +23 -14
  225. package/src/reports/table-wrapper/table-wrapper.scss +1 -16
  226. package/src/resources/moh-362.resource.ts +27 -0
  227. package/src/resources/moh-505.resource.ts +69 -0
  228. package/src/resources/moh-705.resource.ts +106 -0
  229. package/src/resources/moh-706.resource.ts +80 -0
  230. package/src/resources/moh-710.resource.ts +32 -9
  231. package/src/resources/moh-711.resource.ts +137 -9
  232. package/src/resources/moh-717.resource.ts +26 -9
  233. package/src/resources/moh-731.resource.ts +90 -0
  234. package/src/resources/moh-745.resource.ts +76 -0
  235. package/src/resources/patient-list-page.ts +65 -0
  236. package/src/root.component.tsx +59 -8
  237. package/src/root.scss +36 -0
  238. package/src/routes.json +3 -1
  239. package/src/utils/format-indicator.ts +39 -0
  240. package/src/utils/get-base-url.ts +39 -7
  241. package/src/utils/utils.ts +36 -0
  242. package/tsconfig.json +1 -1
  243. package/webpack.config.js +22 -1
  244. package/dist/138.js +0 -2
  245. package/dist/138.js.LICENSE.txt +0 -20
  246. package/dist/138.js.map +0 -1
  247. package/dist/184.js +0 -2
  248. package/dist/184.js.LICENSE.txt +0 -14
  249. package/dist/184.js.map +0 -1
  250. package/dist/205.js +0 -1
  251. package/dist/205.js.map +0 -1
  252. package/dist/711.js +0 -1
  253. package/dist/711.js.map +0 -1
  254. package/dist/812.js +0 -1
  255. package/dist/812.js.map +0 -1
  256. package/dist/ampath-esm-reports-app.js.buildmanifest.json +0 -539
  257. package/dist/main.js +0 -1
  258. package/dist/main.js.map +0 -1
@@ -1,26 +1,152 @@
1
- import React from "react";
2
- import UrineAnalysis from "./sub-reports/urine-analysis/urine-analysis.component";
3
- import BloodChemistry from "./sub-reports/blood-chemistry/blood-chemistry.component";
4
- import Parasitology from "./sub-reports/parasitology/parasitology.component";
5
- import Haematology from "./sub-reports/haematology/haematology.component";
6
- import Bacteriology from "./sub-reports/bacteriology/bacteriology.component";
7
- import HistologyAndCytology from "./sub-reports/histology-and-cytology/histology-and-cytology.component";
8
- import Serology from "./sub-reports/serology/serology.component";
9
- import SpecimenReferralToHigherLevels from "./sub-reports/specimen-referral-to-higher-levels/specimen-referral-to-higher-levels.component";
10
- import DrugSusceptibilityTesting from "./sub-reports/drug-susceptibility-testing/drug-susceptibility-testing.component";
1
+ import React, { useEffect, useState } from 'react';
2
+ import { formatDate, useSession } from '@openmrs/esm-framework';
3
+ import { Column, Grid } from '@carbon/react';
4
+ import UrineAnalysis from './sub-reports/urine-analysis/urine-analysis.component';
5
+ import BloodChemistry from './sub-reports/blood-chemistry/blood-chemistry.component';
6
+ import Parasitology from './sub-reports/parasitology/parasitology.component';
7
+ import Haematology from './sub-reports/haematology/haematology.component';
8
+ import Bacteriology from './sub-reports/bacteriology/bacteriology.component';
9
+ import HistologyAndCytology from './sub-reports/histology-and-cytology/histology-and-cytology.component';
10
+ import Serology from './sub-reports/serology/serology.component';
11
+ import SpecimenReferralToHigherLevels from './sub-reports/specimen-referral-to-higher-levels/specimen-referral-to-higher-levels.component';
12
+ import DrugSusceptibilityTesting from './sub-reports/drug-susceptibility-testing/drug-susceptibility-testing.component';
13
+ import { ReportFiltersComponent, type ReportPeriod } from '../../common/report-filters';
14
+ import { showReportError } from '../../common/report-error';
15
+ import { hasReportData, ReportPlaceholder, useGeneratedLocation } from '../../common/report-placeholder';
16
+ import { getMoh706 } from '../../resources/moh-706.resource';
17
+ import styles from './moh-706.scss';
18
+ import MOH706Header from './moh-706-header.component';
19
+ import { useSearchParams } from 'react-router-dom';
20
+ import { ReportSkeleton } from '../../common/report-skeleton';
21
+ import { ReportPage } from '../../common/report-page';
11
22
 
12
23
  const MoH706Report: React.FC = () => {
13
- return <>
14
- <UrineAnalysis />
15
- <BloodChemistry />
16
- <Parasitology />
17
- <Haematology />
18
- <Bacteriology />
19
- <HistologyAndCytology />
20
- <Serology />
21
- <SpecimenReferralToHigherLevels />
22
- <DrugSusceptibilityTesting />
23
- </>;
24
- }
25
-
26
- export default MoH706Report;
24
+ const [moh706Data, setMoh706Data] = useState<any>({});
25
+ /* Only a report for the current location counts: after switching location the
26
+ old figures would otherwise be shown, and labelled, as the new location's. */
27
+ const { isForCurrentLocation, hasLocationChanged, markGenerated } = useGeneratedLocation();
28
+ const isReportGenerated = hasReportData(moh706Data) && isForCurrentLocation;
29
+ const [isLoading, setIsLoading] = useState<boolean>(false);
30
+ const [filters, setFilters] = useState<{ locationUuids?: string; startDate?: string; endDate?: string }>({});
31
+
32
+ const session = useSession();
33
+ const locationUuids = session?.sessionLocation?.uuid;
34
+
35
+ /* Masthead and sign-off fill themselves in, as on the other reports */
36
+ const facility = session?.sessionLocation?.display ?? '';
37
+ const compiledBy = session?.user?.person?.display ?? session?.user?.display ?? '';
38
+ const compiledOn = formatDate(new Date(), { mode: 'standard', time: false, noToday: true });
39
+
40
+ const [searchParams] = useSearchParams();
41
+
42
+ useEffect(() => {
43
+ const startDate = searchParams.get('startDate');
44
+ const endDate = searchParams.get('endDate');
45
+
46
+ if (startDate && endDate) {
47
+ setFilters({ locationUuids, startDate, endDate });
48
+ fetchMoh706Data({ startDate, endDate });
49
+ }
50
+ }, [searchParams]);
51
+
52
+ const fetchMoh706Data = async ({ startDate, endDate }: Pick<ReportPeriod, 'startDate' | 'endDate'>) => {
53
+ setIsLoading(true);
54
+
55
+ const params = {
56
+ locationUuids: locationUuids || '',
57
+ startDate,
58
+ endDate,
59
+ };
60
+
61
+ try {
62
+ const result = await getMoh706(params);
63
+ const flatData = Object.assign({}, ...result);
64
+ setMoh706Data(flatData);
65
+ markGenerated(params.locationUuids);
66
+ setFilters({ locationUuids: params.locationUuids, startDate, endDate });
67
+ } catch (error: any) {
68
+ showReportError('the MOH-706 report', error);
69
+ } finally {
70
+ setIsLoading(false);
71
+ }
72
+ };
73
+
74
+ return (
75
+ <>
76
+ <ReportFiltersComponent
77
+ reportName="MOH-706 Report"
78
+ mode="both"
79
+ onGenerate={fetchMoh706Data}
80
+ isLoading={isLoading}
81
+ isReportGenerated={isReportGenerated}
82
+ />
83
+ {isLoading && <ReportSkeleton />}
84
+ {!isLoading && !isReportGenerated && (
85
+ <ReportPlaceholder reportName="MOH-706" isLocationChanged={hasReportData(moh706Data) && hasLocationChanged} />
86
+ )}
87
+ {!isLoading && isReportGenerated && (
88
+ <ReportPage>
89
+ <div className={styles.sheet}>
90
+ <MOH706Header facility={facility} startDate={filters.startDate} endDate={filters.endDate} />
91
+ <div className={styles.reportSections}>
92
+ <UrineAnalysis
93
+ data={moh706Data}
94
+ locationUuids={filters.locationUuids}
95
+ startDate={filters.startDate}
96
+ endDate={filters.endDate}
97
+ />
98
+ <BloodChemistry
99
+ data={moh706Data}
100
+ locationUuids={filters.locationUuids}
101
+ startDate={filters.startDate}
102
+ endDate={filters.endDate}
103
+ />
104
+ <Parasitology
105
+ data={moh706Data}
106
+ locationUuids={filters.locationUuids}
107
+ startDate={filters.startDate}
108
+ endDate={filters.endDate}
109
+ />
110
+ <Haematology
111
+ data={moh706Data}
112
+ locationUuids={filters.locationUuids}
113
+ startDate={filters.startDate}
114
+ endDate={filters.endDate}
115
+ />
116
+ <Bacteriology
117
+ data={moh706Data}
118
+ locationUuids={filters.locationUuids}
119
+ startDate={filters.startDate}
120
+ endDate={filters.endDate}
121
+ />
122
+ <HistologyAndCytology />
123
+ <Serology
124
+ data={moh706Data}
125
+ locationUuids={filters.locationUuids}
126
+ startDate={filters.startDate}
127
+ endDate={filters.endDate}
128
+ />
129
+ <SpecimenReferralToHigherLevels />
130
+ <DrugSusceptibilityTesting />
131
+ </div>
132
+
133
+ <div className={styles.signOff}>
134
+ <span>
135
+ Compiled by:<span className={styles.line}>{compiledBy}</span>
136
+ </span>
137
+ <span>
138
+ Signature:
139
+ <span className={styles.line} />
140
+ </span>
141
+ <span>
142
+ Date:<span className={styles.shortLine}>{compiledOn}</span>
143
+ </span>
144
+ </div>
145
+ </div>
146
+ </ReportPage>
147
+ )}
148
+ </>
149
+ );
150
+ };
151
+
152
+ export default MoH706Report;
@@ -1,18 +1,126 @@
1
- .tableWrapper {
2
- overflow-x: auto;
3
- border: 1px solid #d0d0d0;
4
- border-radius: 4px;
1
+ /* MOH-706 laid out for A4, on the same scale as the other reports.
2
+
3
+ Its nine sub-reports all render through the shared TableWrapper, so their
4
+ cells are styled from `table-wrapper.scss` rather than here. Those rules are
5
+ all single-class, so scoping these under `.sheet` (a class plus an element,
6
+ one step more specific) wins deterministically -- no reliance on which module
7
+ loads first. The wrapper is asked for a plain table so Carbon's data-table
8
+ rules, which are far more specific, never apply at all. */
9
+
10
+ $ink: #000;
11
+ $rule: 1px solid $ink;
12
+
13
+ $text: 7pt;
14
+ $title: 7.5pt;
15
+ $meta: 6.5pt;
16
+
17
+ $pad: 3mm;
18
+
19
+ .mainTitleBox {
20
+ padding: 2mm $pad;
21
+ text-align: center;
22
+ border: $rule;
23
+ }
24
+
25
+ .ministry {
26
+ font-size: $meta;
27
+ }
28
+
29
+ .reportTitle {
30
+ font-size: $title;
31
+ font-weight: 700;
32
+ color: $ink;
33
+ }
34
+
35
+ .headerSection {
36
+ padding: 0;
5
37
  }
6
38
 
7
- .tableContainer {
39
+ /* The nine sub-reports run continuously down the sheet, as they do on the form.
40
+ Each is kept off a page break so a block is never split from the heading row
41
+ that names its columns. */
42
+
43
+ .reportSections {
8
44
  width: 100%;
9
- border-collapse: collapse;
45
+ margin: 0;
46
+ padding: 0;
47
+
48
+ > * {
49
+ break-inside: avoid;
50
+ page-break-inside: avoid;
51
+ }
52
+ }
53
+
54
+ .sheet {
55
+ font-size: $text;
10
56
 
11
- thead {
12
- background-color: #f4f4f4;
57
+ table {
58
+ width: 100%;
59
+ border-collapse: collapse;
13
60
  }
14
61
 
15
- tbody tr {
16
- border-bottom: 1px solid #e0e0e0;
62
+ td,
63
+ th {
64
+ height: auto;
65
+ min-width: 0;
66
+ padding: 0.7mm 1mm;
67
+ overflow-wrap: anywhere;
68
+ font-size: $text;
69
+ line-height: 1.25;
70
+ text-align: center;
71
+ border: $rule;
17
72
  }
18
- }
73
+
74
+ /* Row labels read as text, not as data */
75
+ td:first-child {
76
+ text-align: left;
77
+ }
78
+
79
+ /* The facility block is all labels and values, none of it tabular data */
80
+ .headerSection td {
81
+ text-align: left;
82
+ }
83
+ }
84
+
85
+ /* Sign-off, enclosed by the form */
86
+
87
+ .signOff {
88
+ display: flex;
89
+ flex-wrap: nowrap;
90
+ align-items: baseline;
91
+ justify-content: space-between;
92
+ gap: 2.5mm;
93
+ padding: $pad;
94
+ font-size: $meta;
95
+ white-space: nowrap;
96
+ border: $rule;
97
+ border-top: none;
98
+
99
+ > span {
100
+ display: flex;
101
+ flex: 1 1 auto;
102
+ align-items: baseline;
103
+ min-width: 0;
104
+ }
105
+ }
106
+
107
+ .line,
108
+ .shortLine {
109
+ padding: 0 0.5mm;
110
+ margin-left: 1mm;
111
+ overflow: hidden;
112
+ font-weight: 600;
113
+ text-align: center;
114
+ text-overflow: ellipsis;
115
+ border-bottom: $rule;
116
+ }
117
+
118
+ .line {
119
+ flex: 1 1 45mm;
120
+ min-width: 15mm;
121
+ }
122
+
123
+ .shortLine {
124
+ flex: 1 1 25mm;
125
+ min-width: 12mm;
126
+ }
@@ -1,43 +1,43 @@
1
1
  import React, { useMemo } from "react";
2
- import { TableRow, TableCell } from '@carbon/react';
3
2
  import TableWrapper from "../../../table-wrapper/table-wrapper.component";
4
- import styles from '../../../table-wrapper/table-wrapper.scss';
3
+ import TableRowMapper from "../../../table-wrapper/table-row-mapper.component";
4
+ import { getCell } from "../../../../utils/utils";
5
5
 
6
- const Bacteriology: React.FC = () => {
7
- const getCell = (key = "", value = "", colSpan = 1, strong = false) => ({
8
- key,
9
- value,
10
- strong,
11
- colSpan
12
- });
6
+ interface BacteriologyProps {
7
+ data?: any,
8
+ locationUuids?: string,
9
+ startDate?: string,
10
+ endDate?: string
11
+ }
13
12
 
13
+ const Bacteriology: React.FC<BacteriologyProps> = ({ data, locationUuids, startDate, endDate }) => {
14
14
  const tableRows = useMemo(() => {
15
15
  return [
16
16
  {
17
- tableCells: [getCell("", "5 BACTERIOLOGY", 4, true)]
17
+ tableCells: [getCell("", "5 BACTERIOLOGY", 4, 1, true)]
18
18
  },
19
19
  {
20
20
  tableCells: [
21
- getCell("", "Bacteriological Sample", 1, true),
22
- getCell("", "Total Exam", 1, true),
23
- getCell("", "Total Cultures", 1, true),
24
- getCell("", "Number Culture Positive", 1, true),
21
+ getCell("", "Bacteriological Sample", 1, 1, true),
22
+ getCell("", "Total Exam", 1, 1, true),
23
+ getCell("", "Total Cultures", 1, 1, true),
24
+ getCell("", "Number Culture Positive", 1, 1, true),
25
25
  ]
26
26
  },
27
27
  { tableCells: [getCell("", "5.1 Urine"), getCell(), getCell(), getCell()] },
28
- { tableCells: [getCell("", "5.2 Pus swabs"), getCell(), getCell(), getCell()] },
28
+ { tableCells: [getCell("", "5.2 Pus swabs"), getCell("total_bact_pus_swab"), getCell(), getCell()] },
29
29
  { tableCells: [getCell("", "5.3 High Vaginal Swabs"), getCell(), getCell(), getCell()] },
30
- { tableCells: [getCell("", "5.4 Throat swab"), getCell(), getCell(), getCell()] },
31
- { tableCells: [getCell("", "5.5 Rectal swab"), getCell(), getCell(), getCell()] },
32
- { tableCells: [getCell("", "5.6 Blood"), getCell(), getCell(), getCell()] },
33
- { tableCells: [getCell("", "5.7 Water"), getCell(), getCell(), getCell()] },
34
- { tableCells: [getCell("", "5.8 Food"), getCell(), getCell(), getCell()] },
35
- { tableCells: [getCell("", "5.9 Urethral swabs"), getCell(), getCell(), getCell()] },
30
+ { tableCells: [getCell("", "5.4 Throat swab"), getCell("total_bact_throat_swab"), getCell(), getCell()] },
31
+ { tableCells: [getCell("", "5.5 Rectal swab"), getCell("total_bact_rectal_swab"), getCell(), getCell()] },
32
+ { tableCells: [getCell("", "5.6 Blood"), getCell("total_bact_blood"), getCell(), getCell()] },
33
+ { tableCells: [getCell("", "5.7 Water"), getCell("total_bact_water"), getCell(), getCell()] },
34
+ { tableCells: [getCell("", "5.8 Food"), getCell("total_bact_food"), getCell(), getCell()] },
35
+ { tableCells: [getCell("", "5.9 Urethral swabs"), getCell("total_bact_urethral"), getCell(), getCell()] },
36
36
  {
37
37
  tableCells: [
38
- getCell("", "Bacterial enteric pathogens", 2, true),
39
- getCell("", "Total Exam", 1, true),
40
- getCell("", "Number Positive", 1, true),
38
+ getCell("", "Bacterial enteric pathogens", 2, 1, true),
39
+ getCell("", "Total Exam", 1, 1, true),
40
+ getCell("", "Number Positive", 1, 1, true),
41
41
  ]
42
42
  },
43
43
  {
@@ -49,65 +49,65 @@ const Bacteriology: React.FC = () => {
49
49
  },
50
50
  {
51
51
  tableCells: [
52
- getCell("", "Stool Isolates", 3, true),
53
- getCell("", "Number Positive", 1, true),
52
+ getCell("", "Stool Isolates", 3, 1, true),
53
+ getCell("", "Number Positive", 1, 1, true),
54
54
  ]
55
55
  },
56
- { tableCells: [getCell("", "5.11 Salmonella typhi", 3), getCell()] },
57
- { tableCells: [getCell("", "5.12 Shigella - dysenteriae type1", 3), getCell()] },
58
- { tableCells: [getCell("", "5.13 E. coli O157:H7", 3), getCell()] },
59
- { tableCells: [getCell("", "5.14 V. cholerae O1", 3), getCell()] },
56
+ { tableCells: [getCell("", "5.11 Salmonella typhi", 3), getCell("positive_salmonella")] },
57
+ { tableCells: [getCell("", "5.12 Shigella - dysenteriae type1", 3), getCell("positive_bact_shigella_dysenteriae1")] },
58
+ { tableCells: [getCell("", "5.13 E. coli O157:H7", 3), getCell("positive_bact_ecoli_o157")] },
59
+ { tableCells: [getCell("", "5.14 V. cholerae O1", 3), getCell("positive_bact_v_cholerae_o1")] },
60
60
  { tableCells: [getCell("", "5.15 V. cholerae O139", 3), getCell()] },
61
61
 
62
62
  {
63
- tableCells: [getCell("", "Bacterial meningitis", 4, true)]
63
+ tableCells: [getCell("", "Bacterial meningitis", 4, 1, true)]
64
64
  },
65
65
  {
66
66
  tableCells: [
67
- getCell("", "Bacterial meningitis", 1, true),
68
- getCell("", "Total Exam", 1, true),
69
- getCell("", "Number Positive", 1, true),
70
- getCell("", "Number Contaminated", 2, true),
67
+ getCell("", "Bacterial meningitis", 1, 1, true),
68
+ getCell("", "Total Exam", 1, 1, true),
69
+ getCell("", "Number Positive", 1, 1, true),
70
+ getCell("", "Number Contaminated", 2, 1, true),
71
71
  ]
72
72
  },
73
73
  {
74
74
  tableCells: [
75
75
  getCell("", "5.16 CSF"),
76
- getCell(),
76
+ getCell("total_bact_csf"),
77
77
  getCell(),
78
78
  getCell(),
79
79
  ]
80
80
  },
81
81
  {
82
82
  tableCells: [
83
- getCell("", "Bacterial meningitis Serotypes", 1, true),
84
- getCell("", "Number Positive", 3, true),
83
+ getCell("", "Bacterial meningitis Serotypes", 1, 1, true),
84
+ getCell("", "Number Positive", 3, 1, true),
85
85
  ]
86
86
  },
87
- { tableCells: [getCell("", "5.17 Neisseria meningitidis A"), getCell("", "", 3)] },
88
- { tableCells: [getCell("", "5.18 Neisseria meningitidis B"), getCell("", "", 3)] },
89
- { tableCells: [getCell("", "5.19 Neisseria meningitidis C"), getCell("", "", 3)] },
90
- { tableCells: [getCell("", "5.20 Neisseria meningitidis W135"), getCell("", "", 3)] },
87
+ { tableCells: [getCell("", "5.17 Neisseria meningitidis A"), getCell("positive_bact_men_a", "", 3)] },
88
+ { tableCells: [getCell("", "5.18 Neisseria meningitidis B"), getCell("positive_bact_men_b", "", 3)] },
89
+ { tableCells: [getCell("", "5.19 Neisseria meningitidis C"), getCell("positive_bact_men_c", "", 3)] },
90
+ { tableCells: [getCell("", "5.20 Neisseria meningitidis W135"), getCell("positive_bact_men_w135", "", 3)] },
91
91
  { tableCells: [getCell("", "5.21 Neisseria meningitidis X"), getCell("", "", 3)] },
92
- { tableCells: [getCell("", "5.22 Neisseria meningitidis Y"), getCell("", "", 3)] },
93
- { tableCells: [getCell("", "5.23 Neisseria meningitidis (indeterminate)"), getCell("", "", 3)] },
94
- { tableCells: [getCell("", "5.24 Streptococcus pneumoniae"), getCell("", "", 3)] },
95
- { tableCells: [getCell("", "5.25 Haemophilus influenzae (type b)"), getCell("", "", 3)] },
92
+ { tableCells: [getCell("", "5.22 Neisseria meningitidis Y"), getCell("positive_bact_men_y", "", 3)] },
93
+ { tableCells: [getCell("", "5.23 Neisseria meningitidis (indeterminate)"), getCell("positive_bact_men_indeterminate", "", 3)] },
94
+ { tableCells: [getCell("", "5.24 Streptococcus pneumoniae"), getCell("positive_bact_strep_pneumoniae", "", 3)] },
95
+ { tableCells: [getCell("", "5.25 Haemophilus influenzae (type b)"), getCell("positive_bact_h_influenzae_b", "", 3)] },
96
96
  { tableCells: [getCell("", "5.26 Cryptococcal Meningitis"), getCell("", "", 3)] },
97
97
  {
98
- tableCells: [getCell("", "Bacterial Pathogens from other types of specimen", 4, true)]
98
+ tableCells: [getCell("", "Bacterial Pathogens from other types of specimen", 4, 1, true)]
99
99
  },
100
- { tableCells: [getCell("", "5.27 B. anthracis"), getCell("", "", 3)] },
101
- { tableCells: [getCell("", "5.28 Y. pestis"), getCell("", "", 3)] },
100
+ { tableCells: [getCell("", "5.27 B. anthracis"), getCell("positive_bact_b_anthracis", "", 3)] },
101
+ { tableCells: [getCell("", "5.28 Y. pestis"), getCell("positive_bact_y_pestis", "", 3)] },
102
102
  { tableCells: [getCell("", "TB SPUTUM", 4)] },
103
103
  {
104
104
  tableCells: [
105
- getCell("", "TB SPUTUM", 1, true),
106
- getCell("", "Total Exam", 1, true),
107
- getCell("", "Number Positive", 1, true),
105
+ getCell("", "TB SPUTUM", 1, 1, true),
106
+ getCell("", "Total Exam", 1, 1, true),
107
+ getCell("", "Number Positive", 1, 1, true),
108
108
  ]
109
109
  },
110
- { tableCells: [getCell("", "5.29 Total TB smears"), getCell(), getCell()] },
110
+ { tableCells: [getCell("", "5.29 Total TB smears"), getCell("total_tb_smear"), getCell("positive_tb_smear")] },
111
111
  { tableCells: [getCell("", "5.30 New presumptive TB cases"), getCell(), getCell()] },
112
112
  { tableCells: [getCell("", "5.31 TB Follow up"), getCell(), getCell()] },
113
113
  { tableCells: [getCell("", "5.32 Rifampicin Resistant TB"), getCell(), getCell()] },
@@ -117,15 +117,7 @@ const Bacteriology: React.FC = () => {
117
117
 
118
118
 
119
119
  return <TableWrapper>
120
- {tableRows.map((tR) => (
121
- <TableRow>
122
- {tR.tableCells.map((tC) => (
123
- <TableCell className={styles.dataCell} colSpan={tC.colSpan}>
124
- {tC.strong ? <strong>{tC.value}</strong> : tC.value}
125
- </TableCell>
126
- ))}
127
- </TableRow>
128
- ))}
120
+ <TableRowMapper tableRows={tableRows} data={data} locationUuids={locationUuids} startDate={startDate} endDate={endDate} />
129
121
  </TableWrapper>
130
122
  }
131
123