@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
@@ -0,0 +1,132 @@
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
+ }
@@ -0,0 +1,249 @@
1
+ import { 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 classNames from 'classnames';
6
+ import { useSearchParams } from 'react-router-dom';
7
+ import { moh412Columns } from './type';
8
+ import { fetchMoh745PatientList, getMoh412PatientList } from '../../../resources/moh-745.resource';
9
+ import { moh412ExportColumns } from './moh-412.columns';
10
+ import { RegisterLayout, usePatientList } from '../../../common/report-register';
11
+ import ReportFiltersComponent from '../../../common/report-filters/report-filters.component';
12
+ import { showReportError } from '../../../common/report-error/show-report-error';
13
+ import { type ReportPeriod } from '../../../common/report-filters/types';
14
+ import { useSession } from '@openmrs/esm-framework';
15
+ import dayjs from 'dayjs';
16
+ import { useGeneratedLocation } from '../../../common/report-placeholder/use-generated-location';
17
+
18
+ const Moh412Register: React.FC = () => {
19
+ const [rows, setRows] = useState<any[]>([]);
20
+ const [searchParams] = useSearchParams();
21
+ const startDate = searchParams.get('startDate') ?? '';
22
+ const endDate = searchParams.get('endDate') ?? '';
23
+ const locationUuids = searchParams.get('locationUuids') ?? '';
24
+ const indicators = searchParams.get('indicators') ?? '';
25
+ const [patientList,setPatientList] = useState<any>([]);
26
+ const [isLoading,setIsLoading] = useState<boolean>(false);
27
+ const [period, setPeriod] = useState<{ startDate: string; endDate: string }>({ startDate: '', endDate: '' });
28
+ const session = useSession();
29
+ const { isForCurrentLocation, hasLocationChanged, markGenerated } = useGeneratedLocation('moh412Location');
30
+ const isGenerated = rows !== null && isForCurrentLocation;
31
+
32
+ useEffect(()=>{
33
+ if(startDate && endDate && locationUuids && indicators){
34
+ fetchPatientList();
35
+ }
36
+
37
+ },[startDate, endDate, locationUuids, indicators]);
38
+
39
+ async function fetchPatientList(){
40
+ const resp = await fetchMoh745PatientList({
41
+ startDate,
42
+ endDate,
43
+ locationUuids,
44
+ indicators,
45
+ });
46
+
47
+ if(resp){
48
+ setRows(resp);
49
+ }else{
50
+ setRows([]);
51
+ }
52
+ }
53
+ const generate = async ({ startDate, endDate }: ReportPeriod) => {
54
+ setIsLoading(true);
55
+ setPeriod({ startDate, endDate });
56
+ let ind = '';
57
+ let locationUuid = '';
58
+ const selectedDate = dayjs(startDate).endOf('month')
59
+ const registerStartDate = selectedDate.format('YYYY-MM-DD');
60
+ let reportIndicators;
61
+ try {
62
+ if(!indicators){
63
+ reportIndicators = 'cumulative_all';
64
+ }else{
65
+ reportIndicators = ind;
66
+ }
67
+ if(!locationUuids){
68
+ locationUuid = session.sessionLocation?.uuid ?? '';
69
+ }else{
70
+ locationUuid = locationUuids;
71
+ }
72
+ const resp = await fetchMoh745PatientList({ startDate, endDate, locationUuids: locationUuid,indicators: reportIndicators,
73
+ });
74
+ if(resp){
75
+ setRows(resp);
76
+ }
77
+ markGenerated(locationUuids);
78
+ } catch (error) {
79
+ showReportError('The MOH 412 register', error);
80
+ } finally {
81
+ setIsLoading(false);
82
+ }
83
+ }
84
+
85
+ return (
86
+
87
+ <div className={styles.tableContainer}>
88
+ <ReportFiltersComponent
89
+ reportName="MOH 412 Register"
90
+ mode="both"
91
+ onGenerate={generate}
92
+ isLoading={isLoading}
93
+ isReportGenerated={isGenerated}
94
+ generatedPeriod={period}
95
+ defaultTab="monthly"
96
+ backLink={{ label: 'All registers', to: '/?tab=registers' }}
97
+ />
98
+ <div>
99
+ <Table className={classNames(`${styles.table}`, `${styles.tableBordered}`, `${styles.tableStriped}`)}>
100
+ <TableHead>
101
+ <TableRow>
102
+ <TableHeader colSpan={3}>Month:</TableHeader>
103
+ <TableHeader colSpan={2}>Year</TableHeader>
104
+ <TableHeader></TableHeader>
105
+ <TableHeader></TableHeader>
106
+ <TableHeader></TableHeader>
107
+ <TableHeader></TableHeader>
108
+ <TableHeader colSpan={6}>CERVICAL CANCER</TableHeader>
109
+ <TableHeader colSpan={3}>Breast Cancer</TableHeader>
110
+ <TableHeader colSpan={2}>Colorectal Cancer</TableHeader>
111
+ <TableHeader></TableHeader>
112
+ <TableHeader></TableHeader>
113
+ <TableHeader></TableHeader>
114
+ <TableHeader></TableHeader>
115
+ </TableRow>
116
+ <TableRow>
117
+ <TableHeader colSpan={9}>Client Details</TableHeader>
118
+ <TableHeader colSpan={3}>Screening Methods and Results</TableHeader>
119
+ <TableHeader colSpan={3}>Pre-Cancer Treatment</TableHeader>
120
+ <TableHeader colSpan={3}>Methods and Results</TableHeader>
121
+ <TableHeader colSpan={2}>Methods and Results</TableHeader>
122
+ <TableHeader></TableHeader>
123
+ <TableHeader></TableHeader>
124
+ <TableHeader></TableHeader>
125
+ <TableHeader></TableHeader>
126
+ </TableRow>
127
+ <TableRow>
128
+ <TableHeader>
129
+ a)S/No
130
+ <br />
131
+ No
132
+ </TableHeader>
133
+ <TableHeader>
134
+ b)Visit <br />
135
+ Date
136
+ </TableHeader>
137
+ <TableHeader>
138
+ c)Visit <br />
139
+ Type
140
+ </TableHeader>
141
+ <TableHeader>
142
+ d)Client <br />
143
+ No
144
+ </TableHeader>
145
+ <TableHeader>e)Client Names</TableHeader>
146
+ <TableHeader>
147
+ f)Client's Phone <br />
148
+ Number
149
+ </TableHeader>
150
+ <TableHeader>
151
+ g)Client's <br /> Age
152
+ </TableHeader>
153
+ <TableHeader>
154
+ h)Location
155
+ <br />
156
+ Residence
157
+ </TableHeader>
158
+ <TableHeader>
159
+ i)Treatment
160
+ <br />
161
+ Suppoter's Phone
162
+ <br />
163
+ Number
164
+ </TableHeader>
165
+ <TableHeader>
166
+ j)Via or <br />
167
+ VIA/VILLI
168
+ </TableHeader>
169
+ <TableHeader>
170
+ k)Pap <br />
171
+ Smear
172
+ </TableHeader>
173
+ <TableHeader>
174
+ l)HPV Test
175
+ <br />
176
+ (over 30 years)
177
+ </TableHeader>
178
+ <TableHeader>m)cryotherapy</TableHeader>
179
+ <TableHeader>
180
+ n)Thermo-
181
+ <br />
182
+ ablation
183
+ </TableHeader>
184
+ <TableHeader>o)LEEP</TableHeader>
185
+ <TableHeader>p)CBE</TableHeader>
186
+ <TableHeader>q)Ultrasound</TableHeader>
187
+ <TableHeader>r)Mammogram</TableHeader>
188
+ <TableHeader>s)Colonoscopy</TableHeader>
189
+ <TableHeader>t)FOBT</TableHeader>
190
+ <TableHeader>u)HIV Status</TableHeader>
191
+ <TableHeader>
192
+ v)Referral <br />
193
+ To/From
194
+ </TableHeader>
195
+ <TableHeader>
196
+ w)Follow-
197
+ <br />
198
+ up Date
199
+ </TableHeader>
200
+ <TableHeader>
201
+ Remarks(e.g Colposcopy done,
202
+ <br />
203
+ Cervicography results, Call
204
+ <br />
205
+ Client for follow up, Return for <br />
206
+ post-treatment screening, <br />
207
+ Communicate with the referral site)
208
+ </TableHeader>
209
+ </TableRow>
210
+ </TableHead>
211
+ <TableBody>
212
+ {
213
+ rows.map((p: any,index: number)=>{
214
+ return <><TableRow>
215
+ <TableCell>{index + 1}</TableCell>
216
+ <TableCell>{p.screening_date ?? ''}</TableCell>
217
+ <TableCell>{p?.screening_visit_type ?? ''}</TableCell>
218
+ <TableCell>{p?.ccc_number ?? ''}</TableCell>
219
+ <TableCell>{p.person_name}</TableCell>
220
+ <TableCell></TableCell>
221
+ <TableCell>{p?.age ?? ''}</TableCell>
222
+ <TableCell></TableCell>
223
+ <TableCell></TableCell>
224
+ <TableCell>{p?.via_or_via_vili_test_result ?? ''}</TableCell>
225
+ <TableCell>{p?.pap_smear_test_result ?? ''}</TableCell>
226
+ <TableCell>{p?.hpv_test_result ?? ''}</TableCell>
227
+ <TableCell></TableCell>
228
+ <TableCell></TableCell>
229
+ <TableCell></TableCell>
230
+ <TableCell></TableCell>
231
+ <TableCell></TableCell>
232
+ <TableCell></TableCell>
233
+ <TableCell></TableCell>
234
+ <TableCell></TableCell>
235
+ <TableCell>{p?.hiv_status ?? ''}</TableCell>
236
+ <TableCell></TableCell>
237
+ <TableCell></TableCell>
238
+ <TableCell></TableCell>
239
+ </TableRow></>
240
+ })
241
+ }
242
+
243
+ </TableBody>
244
+ </Table>
245
+ </div>
246
+ </div>
247
+ );
248
+ };
249
+ 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
+ ];
@@ -0,0 +1,181 @@
1
+ export const moh412Columns = [
2
+ 'serial_no',
3
+ 'visit_date',
4
+ 'visit_type',
5
+ 'client_no',
6
+ 'full_names',
7
+ 'phone_number',
8
+ 'age',
9
+ 'location_residence',
10
+ 'treatment_supporter_phone_number',
11
+
12
+ 'via_villi',
13
+ 'pap_smear',
14
+ 'hpv',
15
+ 'cryotherapy',
16
+ 'thermocoagulation',
17
+ 'leep',
18
+
19
+ 'cbe',
20
+ 'ultrasound',
21
+ 'mammogram',
22
+ 'colonoscopy',
23
+ 'fobt',
24
+ 'hiv_status',
25
+
26
+ 'referral_from',
27
+ 'referral_to',
28
+ 'follow_up_date',
29
+ 'remarks',
30
+ ];
31
+
32
+ export type CancerScreeningResult = {
33
+ dc__screening_visit_type__initial__age_range__less_than_25__screened_via_or_via_vili: string;
34
+ dc__screening_visit_type__initial__age_range__25_to_49__screened_via_or_via_vili: string;
35
+ dc__screening_visit_type__initial__age_range__50_and_above__screened_via_or_via_vili: string;
36
+ screened_via_or_via_vili_initial_visit: string;
37
+ dc__screening_visit_type__routine__age_range__less_than_25__screened_via_or_via_vili: string;
38
+ dc__screening_visit_type__routine__age_range__25_to_49__screened_via_or_via_vili: string;
39
+ dc__screening_visit_type__routine__age_range__50_and_above__screened_via_or_via_vili: string;
40
+ screened_via_or_via_vili_routine_visit: string;
41
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__screened_via_or_via_vili: string;
42
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__screened_via_or_via_vili: string;
43
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__screened_via_or_via_vili: string;
44
+ screened_via_or_via_vili_post_treatment_visit: string;
45
+ dc__screening_visit_type__initial__age_range__less_than_25__screened_pap_smear: string;
46
+ dc__screening_visit_type__initial__age_range__25_to_49__screened_pap_smear: string;
47
+ dc__screening_visit_type__initial__age_range__50_and_above__screened_pap_smear: string;
48
+ screened_pap_smear_initial_visit: string;
49
+ dc__screening_visit_type__routine__age_range__less_than_25__screened_pap_smear: string;
50
+ dc__screening_visit_type__routine__age_range__25_to_49__screened_pap_smear: string;
51
+ dc__screening_visit_type__routine__age_range__50_and_above__screened_pap_smear: string;
52
+ screened_pap_smear_routine_visit: string;
53
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__screened_pap_smear: string;
54
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__screened_pap_smear: string;
55
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__screened_pap_smear: string;
56
+ screened_pap_smear_post_treatment_visit: string;
57
+ dc__screening_visit_type__initial__age_range__less_than_25__screened_hpv: string;
58
+ dc__screening_visit_type__initial__age_range__25_to_49__screened_hpv: string;
59
+ dc__screening_visit_type__initial__age_range__50_and_above__screened_hpv: string;
60
+ screened_hpv_initial_visit: string;
61
+ dc__screening_visit_type__routine__age_range__less_than_25__screened_hpv: string;
62
+ dc__screening_visit_type__routine__age_range__25_to_49__screened_hpv: string;
63
+ dc__screening_visit_type__routine__age_range__50_and_above__screened_hpv: string;
64
+ screened_hpv_routine_visit: string;
65
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__screened_hpv: string;
66
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__screened_hpv: string;
67
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__screened_hpv: string;
68
+ screened_hpv_post_treatment_visit: string;
69
+ dc__screening_visit_type__initial__age_range__less_than_25__positive_via_or_via_vili_test_result: string;
70
+ dc__screening_visit_type__initial__age_range__25_to_49__positive_via_or_via_vili_test_result: string;
71
+ dc__screening_visit_type__initial__age_range__50_and_above__positive_via_or_via_vili_test_result: string;
72
+ positive_via_or_via_vili_test_result_initial_visit: string;
73
+ dc__screening_visit_type__routine__age_range__less_than_25__positive_via_or_via_vili_test_result: string;
74
+ dc__screening_visit_type__routine__age_range__25_to_49__positive_via_or_via_vili_test_result: string;
75
+ dc__screening_visit_type__routine__age_range__50_and_above__positive_via_or_via_vili_test_result: string;
76
+ positive_via_or_via_vili_test_result_routine_visit: string;
77
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__positive_via_or_via_vili_test_result: string;
78
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__positive_via_or_via_vili_test_result: string;
79
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__positive_via_or_via_vili_test_result: string;
80
+ positive_via_or_via_vili_test_result_post_treatment_visit: string;
81
+ dc__screening_visit_type__initial__age_range__less_than_25__positive_hpv_test_result: string;
82
+ dc__screening_visit_type__initial__age_range__25_to_49__positive_hpv_test_result: string;
83
+ dc__screening_visit_type__initial__age_range__50_and_above__positive_hpv_test_result: string;
84
+ positive_hpv_test_result_initial_visit: string;
85
+ dc__screening_visit_type__routine__age_range__less_than_25__positive_hpv_test_result: string;
86
+ dc__screening_visit_type__routine__age_range__25_to_49__positive_hpv_test_result: string;
87
+ dc__screening_visit_type__routine__age_range__50_and_above__positive_hpv_test_result: string;
88
+ positive_hpv_test_result_routine_visit: string;
89
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__positive_hpv_test_result: string;
90
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__positive_hpv_test_result: string;
91
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__positive_hpv_test_result: string;
92
+ positive_hpv_test_result_post_treatment_visit: string;
93
+ dc__screening_visit_type__initial__age_range__less_than_25__via_or_via_vili_suspicious_lesion: string;
94
+ dc__screening_visit_type__initial__age_range__25_to_49__via_or_via_vili_suspicious_lesion: string;
95
+ dc__screening_visit_type__initial__age_range__50_and_above__via_or_via_vili_suspicious_lesion: string;
96
+ via_or_via_vili_suspicious_lesion_initial_visit: string;
97
+ dc__screening_visit_type__routine__age_range__less_than_25__via_or_via_vili_suspicious_lesion: string;
98
+ dc__screening_visit_type__routine__age_range__25_to_49__via_or_via_vili_suspicious_lesion: string;
99
+ dc__screening_visit_type__routine__age_range__50_and_above__via_or_via_vili_suspicious_lesion: string;
100
+ via_or_via_vili_suspicious_lesion_routine_visit: string;
101
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__via_or_via_vili_suspicious_lesion: string;
102
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__via_or_via_vili_suspicious_lesion: string;
103
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__via_or_via_vili_suspicious_lesion: string;
104
+ via_or_via_vili_suspicious_lesion_post_treatment_visit: string;
105
+ dc__screening_visit_type__initial__age_range__less_than_25__treated_via_cyrotherapy: string;
106
+ dc__screening_visit_type__initial__age_range__25_to_49__treated_via_cyrotherapy: string;
107
+ dc__screening_visit_type__initial__age_range__50_and_above__treated_via_cyrotherapy: string;
108
+ dc__screening_visit_type__routine__age_range__less_than_25__treated_via_cyrotherapy: string;
109
+ dc__screening_visit_type__routine__age_range__25_to_49__treated_via_cyrotherapy: string;
110
+ dc__screening_visit_type__routine__age_range__50_and_above__treated_via_cyrotherapy: string;
111
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__treated_via_cyrotherapy: string;
112
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__treated_via_cyrotherapy: string;
113
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__treated_via_cyrotherapy: string;
114
+ dc__screening_visit_type__initial__age_range__less_than_25__treated_via_thermo_coagulation: string;
115
+ dc__screening_visit_type__initial__age_range__25_to_49__treated_via_thermo_coagulation: string;
116
+ dc__screening_visit_type__initial__age_range__50_and_above__treated_via_thermo_coagulation: string;
117
+ treatment_method_thermo_coagulation_initial_visit: string;
118
+ dc__screening_visit_type__routine__age_range__less_than_25__treated_via_thermo_coagulation: string;
119
+ dc__screening_visit_type__routine__age_range__25_to_49__treated_via_thermo_coagulation: string;
120
+ dc__screening_visit_type__routine__age_range__50_and_above__treated_via_thermo_coagulation: string;
121
+ treatment_method_thermo_coagulation_routine_visit: string;
122
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__treated_via_thermo_coagulation: string;
123
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__treated_via_thermo_coagulation: string;
124
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__treated_via_thermo_coagulation: string;
125
+ treatment_method_thermo_coagulation_post_treatment_visit: string;
126
+ dc__screening_visit_type__initial__age_range__less_than_25__treated_via_leep: string;
127
+ dc__screening_visit_type__initial__age_range__25_to_49__treated_via_leep: string;
128
+ dc__screening_visit_type__initial__age_range__50_and_above__treated_via_leep: string;
129
+ treatment_method_leep_initial_visit: string;
130
+ dc__screening_visit_type__routine__age_range__less_than_25__treated_via_leep: string;
131
+ dc__screening_visit_type__routine__age_range__25_to_49__treated_via_leep: string;
132
+ dc__screening_visit_type__routine__age_range__50_and_above__treated_via_leep: string;
133
+ treatment_method_leep_routine_visit: string;
134
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__treated_via_leep: string;
135
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__treated_via_leep: string;
136
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__treated_via_leep: string;
137
+ treatment_method_leep_post_treatment_visit: string;
138
+ dc__screening_visit_type__initial__age_range__less_than_25__treated_via_other: string;
139
+ dc__screening_visit_type__initial__age_range__25_to_49__treated_via_other: string;
140
+ dc__screening_visit_type__initial__age_range__50_and_above__treated_via_other: string;
141
+ treatment_method_other_initial_visit: string;
142
+ dc__screening_visit_type__routine__age_range__less_than_25__treated_via_other: string;
143
+ dc__screening_visit_type__routine__age_range__25_to_49__treated_via_other: string;
144
+ dc__screening_visit_type__routine__age_range__50_and_above__treated_via_other: string;
145
+ treatment_method_other_routine_visit: string;
146
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__treated_via_other: string;
147
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__treated_via_other: string;
148
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__treated_via_other: string;
149
+ treatment_method_other_post_treatment_visit: string;
150
+
151
+ dc__screening_visit_type__initial__age_range__less_than_25__hiv_positive_screened: string;
152
+ dc__screening_visit_type__initial__age_range__25_to_49__hiv_positive_screened: string;
153
+ dc__screening_visit_type__initial__age_range__50_and_above__hiv_positive_screened: string;
154
+ hiv_positive_screened_initial_visit: string;
155
+ dc__screening_visit_type__routine__age_range__less_than_25__hiv_positive_screened: string;
156
+ dc__screening_visit_type__routine__age_range__25_to_49__hiv_positive_screened: string;
157
+ dc__screening_visit_type__routine__age_range__50_and_above__hiv_positive_screened: string;
158
+ hiv_positive_screened_routine_visit: string;
159
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__hiv_positive_screened: string;
160
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__hiv_positive_screened: string;
161
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__hiv_positive_screened: string;
162
+ hiv_positive_screened_post_treatment_visit: string;
163
+
164
+ dc__screening_visit_type__initial__age_range__less_than_25__hiv_positive_screened_positive_result: string;
165
+ dc__screening_visit_type__initial__age_range__25_to_49__hiv_positive_screened_positive_result: string;
166
+ dc__screening_visit_type__initial__age_range__50_and_above__hiv_positive_screened_positive_result: string;
167
+ hiv_positive_screened_positive_result_initial_visit: string;
168
+ dc__screening_visit_type__routine__age_range__less_than_25__hiv_positive_screened_positive_result: string;
169
+ dc__screening_visit_type__routine__age_range__25_to_49__hiv_positive_screened_positive_result: string;
170
+ dc__screening_visit_type__routine__age_range__50_and_above__hiv_positive_screened_positive_result: string;
171
+ hiv_positive_screened_positive_result_routine_visit: string;
172
+ dc__screening_visit_type__post_treatment__age_range__less_than_25__hiv_positive_screened_positive_result: string;
173
+ dc__screening_visit_type__post_treatment__age_range__25_to_49__hiv_positive_screened_positive_result: string;
174
+ dc__screening_visit_type__post_treatment__age_range__50_and_above__hiv_positive_screened_positive_result: string;
175
+ hiv_positive_screened_positive_result_post_treatment_visit: string;
176
+
177
+ };
178
+
179
+ export type Moh745reponse = {
180
+ result: CancerScreeningResult[];
181
+ }
@@ -0,0 +1,57 @@
1
+ import React from "react";
2
+ import { TableRow, TableCell } from "@carbon/react";
3
+ import styles from './table-wrapper.scss';
4
+ import { navigate } from "@openmrs/esm-framework";
5
+
6
+ interface TableRowMapperProps {
7
+ tableRows: {
8
+ tableCells: Array<{
9
+ key: string;
10
+ label: any;
11
+ strong: boolean;
12
+ colSpan: number;
13
+ rowSpan: number;
14
+ }>
15
+ }[],
16
+ data?: any,
17
+ redirectTo?: string,
18
+ locationUuids?: string,
19
+ startDate?: string,
20
+ endDate?: string
21
+ report?: string,
22
+ }
23
+
24
+ const TableRowMapper: React.FC<TableRowMapperProps> = ({ tableRows, data, redirectTo = "home/reports/moh-240", locationUuids, startDate, endDate, report = "moh-706" }) => {
25
+ return <>
26
+ {tableRows.map((tR) => (
27
+ <TableRow>
28
+ {tR.tableCells.map((tC, i) => {
29
+ const value = data ? data[tC.key] : "";
30
+
31
+ const onClick = () => {
32
+ if (!tC.label && tC.key) {
33
+ const params = new URLSearchParams();
34
+ if (locationUuids) params.append('locationUuids', locationUuids);
35
+ if (startDate) params.append('startDate', startDate);
36
+ if (endDate) params.append('endDate', endDate);
37
+ if (tC.key) params.append('indicators', tC.key);
38
+ params.append('report', report);
39
+ // the row's own label, so the register header reads
40
+ // the form row ("1.3 Ketones") instead of the key
41
+ const rowLabel = tR.tableCells.find((c: any) => c.label)?.label;
42
+ if (rowLabel) params.append('label', String(rowLabel));
43
+ navigate({ to: `${redirectTo}?${params.toString()}` });
44
+ }
45
+ };
46
+
47
+ return <TableCell className={styles.dataCell} colSpan={tC.colSpan} key={i} onClick={onClick} {...({ rowSpan: tC.rowSpan } as any)}>
48
+ {tC.label ? (tC.strong ? <strong>{tC.label}</strong> : tC.label) : value}
49
+ </TableCell>
50
+
51
+ })}
52
+ </TableRow>
53
+ ))}
54
+ </>
55
+ }
56
+
57
+ export default TableRowMapper;