@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.
Files changed (305) 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/549.css +1 -0
  31. package/dist/549.css.map +1 -0
  32. package/dist/549.js +1 -0
  33. package/dist/549.js.map +1 -0
  34. package/dist/55.js +1 -1
  35. package/dist/600.js +2 -0
  36. package/dist/600.js.LICENSE.txt +35 -0
  37. package/dist/600.js.map +1 -0
  38. package/dist/652.js +1 -1
  39. package/dist/757.js +1 -0
  40. package/dist/757.js.map +1 -0
  41. package/dist/781.js +1 -0
  42. package/dist/781.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 +264 -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 +225 -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 +29 -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 +191 -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-267/moh-267-register.component.tsx +407 -0
  100. package/src/registers/moh-267/moh-267-register.scss +298 -0
  101. package/src/registers/moh-267/moh-267-summary.ts +102 -0
  102. package/src/registers/moh-267/moh-267.component.tsx +94 -0
  103. package/src/registers/moh-267/moh-267.types.ts +47 -0
  104. package/src/registers/moh-362/moh-362-lab-register.component.tsx +551 -0
  105. package/src/registers/moh-362/moh-362-lab-register.scss +412 -0
  106. package/src/registers/moh-362/moh-362-linkage-register.component.tsx +215 -0
  107. package/src/registers/moh-362/moh-362-linkage-register.scss +91 -0
  108. package/src/registers/moh-362/moh-362.component.tsx +117 -0
  109. package/src/registers/moh-362/moh-362.scss +11 -0
  110. package/src/registers/moh-362/moh-362.types.ts +87 -0
  111. package/src/registers/presumptive-tb/presumptive-tb-register.component.tsx +391 -0
  112. package/src/registers/presumptive-tb/presumptive-tb-register.scss +262 -0
  113. package/src/registers/presumptive-tb/presumptive-tb.component.tsx +92 -0
  114. package/src/registers/presumptive-tb/presumptive-tb.types.ts +88 -0
  115. package/src/registers/register-catalog.ts +202 -0
  116. package/src/registers/register-file-name.ts +18 -0
  117. package/src/registers/tb-lab-register/tb-lab-register-table.component.tsx +116 -0
  118. package/src/registers/tb-lab-register/tb-lab-register-table.scss +123 -0
  119. package/src/registers/tb-lab-register/tb-lab-register.columns.ts +164 -0
  120. package/src/registers/tb-lab-register/tb-lab-register.component.test.tsx +232 -0
  121. package/src/registers/tb-lab-register/tb-lab-register.component.tsx +153 -0
  122. package/src/registers/tb4/tb4-parts.tsx +164 -0
  123. package/src/registers/tb4/tb4-patient-sheet.component.tsx +418 -0
  124. package/src/registers/tb4/tb4-register.scss +282 -0
  125. package/src/registers/tb4/tb4-treatment-sheet.component.tsx +349 -0
  126. package/src/registers/tb4/tb4.component.tsx +120 -0
  127. package/src/registers/tb4/tb4.types.ts +129 -0
  128. package/src/reports/acf-summary/acf-summary-form.component.tsx +176 -0
  129. package/src/reports/acf-summary/acf-summary-linelist.component.tsx +86 -0
  130. package/src/reports/acf-summary/acf-summary.component.tsx +97 -0
  131. package/src/reports/acf-summary/acf-summary.counts.ts +37 -0
  132. package/src/reports/acf-summary/acf-summary.scss +162 -0
  133. package/src/reports/datatable-wrapper/datatable-wrapper.component.tsx +63 -48
  134. package/src/reports/moh-240/moh-240-header.component.tsx +62 -0
  135. package/src/reports/moh-240/moh-240.columns.ts +113 -0
  136. package/src/reports/moh-240/moh-240.component.tsx +72 -9
  137. package/src/reports/moh-240/moh-240.scss +40 -0
  138. package/src/reports/moh-240/sub-reports/moh-240-register.component.tsx +31 -37
  139. package/src/reports/moh-240/sub-reports/page-summary.component.tsx +143 -106
  140. package/src/reports/moh-505/moh-505-header.component.tsx +67 -0
  141. package/src/reports/moh-505/moh-505.component.tsx +441 -0
  142. package/src/reports/moh-505/moh-505.scss +117 -0
  143. package/src/reports/moh-705B/moh-204b-register.component.tsx +246 -0
  144. package/src/reports/moh-705B/moh-204b.columns.ts +39 -0
  145. package/src/reports/moh-705B/moh-705b.component.tsx +659 -0
  146. package/src/reports/moh-705B/moh-705b.scss +172 -0
  147. package/src/reports/moh-705a/moh-705a.component.tsx +661 -0
  148. package/src/reports/moh-705a/moh-705a.scss +172 -0
  149. package/src/reports/moh-705a/registers/moh-204a-register.component.tsx +331 -0
  150. package/src/reports/moh-705a/registers/moh-204a.columns.ts +57 -0
  151. package/src/reports/moh-705a/type.ts +6 -0
  152. package/src/reports/moh-706/moh-706-header.component.tsx +66 -0
  153. package/src/reports/moh-706/moh-706.component.tsx +150 -24
  154. package/src/reports/moh-706/moh-706.scss +119 -11
  155. package/src/reports/moh-706/sub-reports/bacteriology/bacteriology.component.tsx +35 -28
  156. package/src/reports/moh-706/sub-reports/blood-chemistry/blood-chemistry.component.tsx +229 -305
  157. package/src/reports/moh-706/sub-reports/haematology/haematology.component.tsx +26 -19
  158. package/src/reports/moh-706/sub-reports/histology-and-cytology/histology-and-cytology.component.tsx +23 -23
  159. package/src/reports/moh-706/sub-reports/parasitology/parasitology.component.tsx +25 -18
  160. package/src/reports/moh-706/sub-reports/serology/serology.component.tsx +21 -14
  161. package/src/reports/moh-706/sub-reports/specimen-referral-to-higher-levels/specimen-referral-to-higher-levels.component.tsx +2 -2
  162. package/src/reports/moh-706/sub-reports/urine-analysis/urine-analysis.component.tsx +27 -20
  163. package/src/reports/moh-710/moh-710.component.tsx +815 -632
  164. package/src/reports/moh-710/moh-710.scss +142 -21
  165. package/src/reports/moh-710/registers/moh-413/moh-413-columns.ts +22 -0
  166. package/src/reports/moh-710/registers/moh-413/moh-413.component.tsx +140 -0
  167. package/src/reports/moh-710/registers/moh-413/moh-413.scss +64 -0
  168. package/src/reports/moh-710/registers/moh-510/moh-510.columns.ts +40 -0
  169. package/src/reports/moh-710/registers/moh-510/moh-510.component.tsx +191 -0
  170. package/src/reports/moh-710/registers/moh-510/moh-510.scss +130 -0
  171. package/src/reports/moh-710/registers/moh-511-710-register.component.tsx +268 -0
  172. package/src/reports/moh-710/registers/moh-511-710.columns.ts +52 -0
  173. package/src/reports/moh-710/registers/type.ts +31 -0
  174. package/src/reports/moh-711/moh-711.component.tsx +153 -1269
  175. package/src/reports/moh-711/moh711.scss +135 -20
  176. package/src/reports/moh-711/registers/moh-333-register.component.tsx +680 -0
  177. package/src/reports/moh-711/registers/moh-333.columns.ts +119 -0
  178. package/src/reports/moh-711/registers/moh-405-register.component.tsx +566 -0
  179. package/src/reports/moh-711/registers/moh-405.columns.ts +120 -0
  180. package/src/reports/moh-711/registers/moh-406-register.component.tsx +581 -0
  181. package/src/reports/moh-711/registers/moh-406.columns.ts +133 -0
  182. package/src/reports/moh-711/registers/moh-407-register.component.tsx +157 -0
  183. package/src/reports/moh-711/registers/moh-407.columns.ts +24 -0
  184. package/src/reports/moh-711/registers/moh-407.scss +64 -0
  185. package/src/reports/moh-711/registers/moh-510-register.component.tsx +55 -0
  186. package/src/reports/moh-711/registers/moh-511-register.component.tsx +270 -0
  187. package/src/reports/moh-711/registers/moh-511.columns.ts +59 -0
  188. package/src/reports/moh-711/registers/moh-512-columns.ts +94 -0
  189. package/src/reports/moh-711/registers/moh-512.component.tsx +191 -0
  190. package/src/reports/moh-711/registers/moh-512.scss +64 -0
  191. package/src/reports/moh-711/registers/tb-register-columns.ts +17 -0
  192. package/src/reports/moh-711/registers/tb-register.component.tsx +96 -0
  193. package/src/reports/moh-711/registers/tb-register.scss +64 -0
  194. package/src/reports/moh-711/registers/type.ts +192 -0
  195. package/src/reports/moh-711/sections/anc.component.tsx +159 -0
  196. package/src/reports/moh-711/sections/cervical-cancer.component.tsx +148 -0
  197. package/src/reports/moh-711/sections/chanis.component.tsx +389 -0
  198. package/src/reports/moh-711/sections/family-planning.component.tsx +299 -0
  199. package/src/reports/moh-711/sections/gbv.component.tsx +115 -0
  200. package/src/reports/moh-711/sections/maternity.component.tsx +321 -0
  201. package/src/reports/moh-711/sections/medical-social-work.component.tsx +73 -0
  202. package/src/reports/moh-711/sections/other.component.tsx +47 -0
  203. package/src/reports/moh-711/sections/physiotherapy.component.tsx +61 -0
  204. package/src/reports/moh-711/sections/pnc.component.tsx +127 -0
  205. package/src/reports/moh-711/sections/post-abortion.component.tsx +42 -0
  206. package/src/reports/moh-711/sections/rehabilitation.component.tsx +57 -0
  207. package/src/reports/moh-711/sections/report-compiled-by.component.tsx +50 -0
  208. package/src/reports/moh-711/sections/tb-screening.component.tsx +94 -0
  209. package/src/reports/moh-717/moh-717.component.tsx +149 -985
  210. package/src/reports/moh-717/moh717.scss +217 -21
  211. package/src/reports/moh-717/registers/nutrition-register.component.tsx +48 -0
  212. package/src/reports/moh-717/sections/finance.component.tsx +42 -0
  213. package/src/reports/moh-717/sections/inpatient.component.tsx +374 -0
  214. package/src/reports/moh-717/sections/maternity.component.tsx +126 -0
  215. package/src/reports/moh-717/sections/medical-records.component.tsx +35 -0
  216. package/src/reports/moh-717/sections/mortuary.component.tsx +43 -0
  217. package/src/reports/moh-717/sections/operations.component.tsx +53 -0
  218. package/src/reports/moh-717/sections/orthopaedic-trauma.component.tsx +98 -0
  219. package/src/reports/moh-717/sections/outpatient.component.tsx +597 -0
  220. package/src/reports/moh-717/sections/pharmacy.component.tsx +43 -0
  221. package/src/reports/moh-717/sections/preparedby.component.tsx +52 -0
  222. package/src/reports/moh-717/sections/special-services.component.tsx +114 -0
  223. package/src/reports/moh-729b/moh-729b-form.component.tsx +385 -0
  224. package/src/reports/moh-729b/moh-729b-linelist.component.tsx +205 -0
  225. package/src/reports/moh-729b/moh-729b-summary.component.tsx +258 -0
  226. package/src/reports/moh-729b/moh-729b-summary.config.ts +229 -0
  227. package/src/reports/moh-729b/moh-729b.component.tsx +157 -0
  228. package/src/reports/moh-729b/moh-729b.config.ts +235 -0
  229. package/src/reports/moh-729b/moh-729b.scss +276 -0
  230. package/src/reports/moh-729b/moh-729b.types.ts +111 -0
  231. package/src/reports/moh-731/linelist/moh-731-indicators.ts +1122 -0
  232. package/src/reports/moh-731/linelist/moh-731-linelist-sections.ts +472 -0
  233. package/src/reports/moh-731/linelist/moh-731-linelist.component.tsx +102 -0
  234. package/src/reports/moh-731/linelist/use-open-moh-731-linelist.ts +50 -0
  235. package/src/reports/moh-731/moh-731.component.tsx +269 -0
  236. package/src/reports/moh-731/moh-731.scss +496 -0
  237. package/src/reports/moh-731/registers/moh-366.columns.ts +38 -0
  238. package/src/reports/moh-731/registers/moh-366.component.tsx +471 -0
  239. package/src/reports/moh-731/registers/prep-register.component.tsx +284 -0
  240. package/src/reports/moh-731/registers/prep.columns.ts +34 -0
  241. package/src/reports/moh-731/sections/hiv-and-tb-treatment.component.tsx +1206 -0
  242. package/src/reports/moh-731/sections/hiv-testing-and-pre-exposure.component.tsx +727 -0
  243. package/src/reports/moh-731/sections/pmtct.component.tsx +572 -0
  244. package/src/reports/moh-731/summary/moh-731-summary.component.tsx +313 -0
  245. package/src/reports/moh-731/summary/moh-731-summary.config.ts +527 -0
  246. package/src/reports/moh-731/summary/moh-731-summary.scss +247 -0
  247. package/src/reports/moh-740/moh-740.component.scss +202 -0
  248. package/src/reports/moh-740/moh-740.component.tsx +1339 -0
  249. package/src/reports/moh-740/moh-740.resource.ts +54 -0
  250. package/src/reports/moh-740/registers/moh-222-daily-register/moh-222-daily-register.scss +20 -0
  251. package/src/reports/moh-740/registers/moh-222-daily-register/moh-222-daily-register.tsx +183 -0
  252. package/src/reports/moh-740/registers/moh-270-permanent-register/moh-270-permanent-register.scss +6 -0
  253. package/src/reports/moh-740/registers/moh-270-permanent-register/moh-270-permanent-register.tsx +151 -0
  254. package/src/reports/moh-740/registers/moh-740-patient-list.scss +0 -0
  255. package/src/reports/moh-740/registers/moh-740-patient-list.tsx +60 -0
  256. package/src/reports/moh-740/registers/moh-740.columns.ts +54 -0
  257. package/src/reports/moh-740/shared/data-cell/data-cell.scss +6 -0
  258. package/src/reports/moh-740/shared/data-cell/data-cell.tsx +23 -0
  259. package/src/reports/moh-740/shared/utils/indicator-register-map.ts +159 -0
  260. package/src/reports/moh-740/types/index.ts +223 -0
  261. package/src/reports/moh-745/moh-745.component.tsx +2058 -0
  262. package/src/reports/moh-745/moh-745.scss +142 -0
  263. package/src/reports/moh-745/registers/moh-412-register.component.scss +6 -0
  264. package/src/reports/moh-745/registers/moh-412-register.component.tsx +275 -0
  265. package/src/reports/moh-745/registers/moh-412.columns.ts +52 -0
  266. package/src/reports/moh-745/registers/type.ts +223 -0
  267. package/src/reports/table-wrapper/table-row-mapper.component.tsx +20 -5
  268. package/src/reports/table-wrapper/table-wrapper.component.tsx +23 -14
  269. package/src/reports/table-wrapper/table-wrapper.scss +1 -16
  270. package/src/resources/moh-267.resource.ts +27 -0
  271. package/src/resources/moh-362.resource.ts +27 -0
  272. package/src/resources/moh-505.resource.ts +69 -0
  273. package/src/resources/moh-705.resource.ts +118 -0
  274. package/src/resources/moh-706.resource.ts +80 -0
  275. package/src/resources/moh-710.resource.ts +60 -9
  276. package/src/resources/moh-711.resource.ts +206 -9
  277. package/src/resources/moh-717.resource.ts +26 -9
  278. package/src/resources/moh-729b.resource.ts +25 -0
  279. package/src/resources/moh-731.resource.ts +90 -0
  280. package/src/resources/moh-745.resource.ts +76 -0
  281. package/src/resources/patient-list-page.ts +66 -0
  282. package/src/resources/presumptive-tb.resource.ts +27 -0
  283. package/src/root.component.tsx +79 -8
  284. package/src/root.scss +36 -0
  285. package/src/routes.json +3 -1
  286. package/src/utils/format-indicator.ts +39 -0
  287. package/src/utils/get-base-url.ts +39 -7
  288. package/src/utils/utils.ts +30 -1
  289. package/tsconfig.json +1 -1
  290. package/webpack.config.js +22 -1
  291. package/dist/138.js +0 -2
  292. package/dist/138.js.LICENSE.txt +0 -20
  293. package/dist/138.js.map +0 -1
  294. package/dist/184.js +0 -2
  295. package/dist/184.js.LICENSE.txt +0 -14
  296. package/dist/184.js.map +0 -1
  297. package/dist/205.js +0 -1
  298. package/dist/205.js.map +0 -1
  299. package/dist/812.js +0 -1
  300. package/dist/812.js.map +0 -1
  301. package/dist/879.js +0 -1
  302. package/dist/879.js.map +0 -1
  303. package/dist/ampath-esm-reports-app.js.buildmanifest.json +0 -539
  304. package/dist/main.js +0 -1
  305. 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,6 @@
1
+ .exportRow{
2
+ padding: 5px;
3
+ display: flex;
4
+ flex-direction: row;
5
+ justify-content: flex-end;
6
+ }
@@ -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
+ ];