@ampath/esm-dha-workflow-app 4.0.0-next.35 → 4.0.0-next.355

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 (793) hide show
  1. package/README.md +19 -0
  2. package/dist/1149.js +1 -0
  3. package/dist/1149.js.map +1 -0
  4. package/dist/1171.js +1 -0
  5. package/dist/1171.js.map +1 -0
  6. package/dist/1197.js +1 -0
  7. package/dist/1239.js +1 -0
  8. package/dist/1239.js.map +1 -0
  9. package/dist/1277.js +1 -0
  10. package/dist/1277.js.map +1 -0
  11. package/dist/1363.js +1 -0
  12. package/dist/1363.js.map +1 -0
  13. package/dist/1551.js +1 -0
  14. package/dist/1551.js.map +1 -0
  15. package/dist/1556.js +1 -0
  16. package/dist/1556.js.map +1 -0
  17. package/dist/1560.js +1 -0
  18. package/dist/1560.js.map +1 -0
  19. package/dist/1925.js +1 -0
  20. package/dist/1925.js.map +1 -0
  21. package/dist/1927.js +1 -0
  22. package/dist/1927.js.map +1 -0
  23. package/dist/2054.js +1 -0
  24. package/dist/2054.js.map +1 -0
  25. package/dist/2093.js +1 -0
  26. package/dist/2093.js.map +1 -0
  27. package/dist/2177.js +2 -0
  28. package/dist/2177.js.map +1 -0
  29. package/dist/2230.js +1 -0
  30. package/dist/2230.js.map +1 -0
  31. package/dist/2493.js +1 -0
  32. package/dist/2493.js.map +1 -0
  33. package/dist/3041.js +1 -0
  34. package/dist/3041.js.map +1 -0
  35. package/dist/3099.js +1 -0
  36. package/dist/3101.js +1 -0
  37. package/dist/3101.js.map +1 -0
  38. package/dist/313.js +1 -0
  39. package/dist/313.js.map +1 -0
  40. package/dist/3184.js +2 -0
  41. package/dist/3184.js.map +1 -0
  42. package/dist/3202.js +1 -0
  43. package/dist/3202.js.map +1 -0
  44. package/dist/3222.js +1 -0
  45. package/dist/3222.js.map +1 -0
  46. package/dist/327.js +1 -0
  47. package/dist/327.js.map +1 -0
  48. package/dist/347.js +1 -0
  49. package/dist/347.js.map +1 -0
  50. package/dist/3595.js +1 -0
  51. package/dist/3595.js.map +1 -0
  52. package/dist/3928.js +1 -0
  53. package/dist/3928.js.map +1 -0
  54. package/dist/3939.js +1 -0
  55. package/dist/3939.js.map +1 -0
  56. package/dist/4003.js +1 -0
  57. package/dist/4003.js.map +1 -0
  58. package/dist/4055.js +1 -0
  59. package/dist/4205.js +1 -0
  60. package/dist/4205.js.map +1 -0
  61. package/dist/4225.js +1 -0
  62. package/dist/4225.js.map +1 -0
  63. package/dist/4231.js +1 -0
  64. package/dist/4231.js.map +1 -0
  65. package/dist/4300.js +1 -0
  66. package/dist/4335.js +1 -0
  67. package/dist/4353.js +1 -0
  68. package/dist/4353.js.map +1 -0
  69. package/dist/4431.js +1 -0
  70. package/dist/4431.js.map +1 -0
  71. package/dist/4454.js +1 -0
  72. package/dist/4454.js.map +1 -0
  73. package/dist/4457.js +2 -0
  74. package/dist/4457.js.LICENSE.txt +282 -0
  75. package/dist/4457.js.map +1 -0
  76. package/dist/4605.js +1 -0
  77. package/dist/4605.js.map +1 -0
  78. package/dist/4611.js +1 -0
  79. package/dist/4611.js.map +1 -0
  80. package/dist/4652.js +1 -0
  81. package/dist/4674.js +1 -0
  82. package/dist/4674.js.map +1 -0
  83. package/dist/4755.js +1 -0
  84. package/dist/4755.js.map +1 -0
  85. package/dist/4856.js +1 -0
  86. package/dist/4856.js.map +1 -0
  87. package/dist/4986.js +1 -0
  88. package/dist/4986.js.map +1 -0
  89. package/dist/5119.js +1 -0
  90. package/dist/5119.js.map +1 -0
  91. package/dist/5167.js +1 -0
  92. package/dist/5167.js.map +1 -0
  93. package/dist/5317.js +1 -0
  94. package/dist/5317.js.map +1 -0
  95. package/dist/5344.js +1 -0
  96. package/dist/5344.js.map +1 -0
  97. package/dist/5380.js +1 -0
  98. package/dist/5380.js.map +1 -0
  99. package/dist/5422.js +1 -0
  100. package/dist/5422.js.map +1 -0
  101. package/dist/5576.js +1 -0
  102. package/dist/5576.js.map +1 -0
  103. package/dist/5724.js +1 -0
  104. package/dist/5724.js.map +1 -0
  105. package/dist/5851.js +1 -0
  106. package/dist/5851.js.map +1 -0
  107. package/dist/5961.js +1 -0
  108. package/dist/5961.js.map +1 -0
  109. package/dist/6177.js +1 -0
  110. package/dist/6177.js.map +1 -0
  111. package/dist/6264.js +1 -0
  112. package/dist/6264.js.map +1 -0
  113. package/dist/6540.js +2 -0
  114. package/dist/6540.js.map +1 -0
  115. package/dist/6606.js +1 -0
  116. package/dist/6606.js.map +1 -0
  117. package/dist/6720.js +1 -0
  118. package/dist/6720.js.map +1 -0
  119. package/dist/6824.js +1 -0
  120. package/dist/6824.js.map +1 -0
  121. package/dist/6942.js +1 -0
  122. package/dist/6942.js.map +1 -0
  123. package/dist/71.js +1 -0
  124. package/dist/71.js.map +1 -0
  125. package/dist/7207.js +1 -0
  126. package/dist/7207.js.map +1 -0
  127. package/dist/7255.js +1 -0
  128. package/dist/7255.js.map +1 -0
  129. package/dist/7420.js +1 -0
  130. package/dist/7420.js.map +1 -0
  131. package/dist/7521.js +1 -0
  132. package/dist/7521.js.map +1 -0
  133. package/dist/7549.js +1 -0
  134. package/dist/7549.js.map +1 -0
  135. package/dist/7557.js +1 -0
  136. package/dist/7557.js.map +1 -0
  137. package/dist/7717.js +1 -0
  138. package/dist/7717.js.map +1 -0
  139. package/dist/7830.js +2 -0
  140. package/dist/7830.js.map +1 -0
  141. package/dist/7857.js +1 -0
  142. package/dist/7857.js.map +1 -0
  143. package/dist/7941.js +1 -0
  144. package/dist/7941.js.map +1 -0
  145. package/dist/8091.js +1 -0
  146. package/dist/8091.js.map +1 -0
  147. package/dist/810.js +1 -0
  148. package/dist/810.js.map +1 -0
  149. package/dist/8146.js +1 -0
  150. package/dist/8146.js.map +1 -0
  151. package/dist/850.js +1 -0
  152. package/dist/850.js.map +1 -0
  153. package/dist/8558.js +1 -0
  154. package/dist/8558.js.map +1 -0
  155. package/dist/8684.js +1 -0
  156. package/dist/8684.js.map +1 -0
  157. package/dist/8895.js +1 -0
  158. package/dist/8895.js.map +1 -0
  159. package/dist/9070.js +1 -0
  160. package/dist/9070.js.map +1 -0
  161. package/dist/9091.js +1 -0
  162. package/dist/9091.js.map +1 -0
  163. package/dist/9093.js +1 -0
  164. package/dist/9093.js.map +1 -0
  165. package/dist/9338.js +1 -0
  166. package/dist/9338.js.map +1 -0
  167. package/dist/9349.js +1 -0
  168. package/dist/9349.js.map +1 -0
  169. package/dist/9418.js +2 -0
  170. package/dist/9418.js.LICENSE.txt +1 -0
  171. package/dist/9418.js.map +1 -0
  172. package/dist/9428.js +1 -0
  173. package/dist/9428.js.map +1 -0
  174. package/dist/9583.js +2 -0
  175. package/dist/9583.js.map +1 -0
  176. package/dist/9871.js +1 -0
  177. package/dist/9871.js.map +1 -0
  178. package/dist/esm-dha-workflow-app.js +1 -1
  179. package/dist/esm-dha-workflow-app.js.buildmanifest.json +1830 -221
  180. package/dist/esm-dha-workflow-app.js.map +1 -1
  181. package/dist/main.js +1 -1
  182. package/dist/main.js.map +1 -1
  183. package/dist/routes.json +1 -1
  184. package/local-config.json +9 -0
  185. package/package.json +16 -6
  186. package/src/admissions/admission-request-list/admission-request-list.scss +0 -0
  187. package/src/admissions/admission-request-list/admission-request-list.tsx +263 -0
  188. package/src/admissions/admissions-dashboard.component.scss +15 -0
  189. package/src/admissions/admissions-dashboard.component.tsx +277 -0
  190. package/src/admissions/admissions.resource.ts +233 -0
  191. package/src/admissions/admitted-list/admitted-patients-list.tsx +206 -0
  192. package/src/admissions/awaiting-discharge-list/awaiting-discharge-list.tsx +197 -0
  193. package/src/admissions/bed-assigment-request/bed-assignment-request-list.tsx +134 -0
  194. package/src/admissions/constants/index.ts +33 -0
  195. package/src/admissions/discharged-list/discharged-list.scss +0 -0
  196. package/src/admissions/discharged-list/discharged-list.tsx +67 -0
  197. package/src/admissions/form-entry-workspace/form-entry-workspace.tsx +62 -0
  198. package/src/admissions/inpatient/admission-history/patient-admission-history.tsx +76 -0
  199. package/src/admissions/inpatient/admission-requests/patient-admission-requests.scss +19 -0
  200. package/src/admissions/inpatient/admission-requests/patient-admission-requests.tsx +72 -0
  201. package/src/admissions/inpatient/inpatient-admissions.component.scss +7 -0
  202. package/src/admissions/inpatient/inpatient-admissions.component.tsx +46 -0
  203. package/src/admissions/modal/add-bill-items/add-bill-items.modal.scss +17 -0
  204. package/src/admissions/modal/add-bill-items/add-bill-items.modal.tsx +233 -0
  205. package/src/admissions/modal/admit-elsewhere/admit-elsewhere.modal.scss +23 -0
  206. package/src/admissions/modal/admit-elsewhere/admit-elsewhere.modal.tsx +156 -0
  207. package/src/admissions/modal/admit-patient/admit-patient.modal.scss +0 -0
  208. package/src/admissions/modal/admit-patient/admit-patient.modal.tsx +111 -0
  209. package/src/admissions/modal/bed-swap/bed-swap.modal.scss +0 -0
  210. package/src/admissions/modal/bed-swap/bed-swap.modal.tsx +102 -0
  211. package/src/admissions/modal/cancel-admission-request/cancel-admission-request.scss +11 -0
  212. package/src/admissions/modal/cancel-admission-request/cancel-admission-request.tsx +105 -0
  213. package/src/admissions/modal/discharge/discharge-patient.modal.scss +13 -0
  214. package/src/admissions/modal/discharge/discharge-patient.modal.tsx +86 -0
  215. package/src/admissions/types/index.ts +263 -0
  216. package/src/appointments/appointments.component.scss +6 -0
  217. package/src/appointments/appointments.component.tsx +8 -1
  218. package/src/billing/api/billing.api.ts +139 -0
  219. package/src/billing/billing-claims.resource.ts +916 -0
  220. package/src/billing/billing-dashboard-link.component.tsx +31 -0
  221. package/src/billing/billing-dashboard-reset.ts +27 -0
  222. package/src/billing/billing-root.tsx +42 -0
  223. package/src/billing/dashboard/billingDashboard.component.scss +0 -0
  224. package/src/billing/dashboard/billingDashboard.component.tsx +25 -0
  225. package/src/billing/dashboard/v2/active-visits/active-visits.component.tsx +257 -0
  226. package/src/billing/dashboard/v2/active-visits/active-visits.resource.ts +85 -0
  227. package/src/billing/dashboard/v2/active-visits/active-visits.scss +15 -0
  228. package/src/billing/dashboard/v2/active-visits.component.tsx +102 -0
  229. package/src/billing/dashboard/v2/admissions/admission-requests-tab.component.tsx +79 -0
  230. package/src/billing/dashboard/v2/billing-claims-dashboard.component.scss +209 -0
  231. package/src/billing/dashboard/v2/billing-claims-dashboard.component.tsx +396 -0
  232. package/src/billing/dashboard/v2/cash-checklist/bill-document.component.scss +90 -0
  233. package/src/billing/dashboard/v2/cash-checklist/bill-document.component.tsx +101 -0
  234. package/src/billing/dashboard/v2/cash-checklist/cash-checklist.component.scss +199 -0
  235. package/src/billing/dashboard/v2/cash-checklist/cash-checklist.component.tsx +361 -0
  236. package/src/billing/dashboard/v2/cash-checklist/cash-checklist.resource.ts +239 -0
  237. package/src/billing/dashboard/v2/cash-checklist/payment-drawer.component.scss +246 -0
  238. package/src/billing/dashboard/v2/cash-checklist/payment-drawer.component.tsx +182 -0
  239. package/src/billing/dashboard/v2/claim-statuses.ts +143 -0
  240. package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.scss +0 -0
  241. package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.tsx +35 -0
  242. package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-panel.component.scss +67 -0
  243. package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-panel.component.tsx +90 -0
  244. package/src/billing/dashboard/v2/claim-visits/claim-doctors/claim-doctors.scss +28 -0
  245. package/src/billing/dashboard/v2/claim-visits/claim-doctors/claim-doctors.tsx +36 -0
  246. package/src/billing/dashboard/v2/claim-visits/claim-history/claim-history.component.scss +119 -0
  247. package/src/billing/dashboard/v2/claim-visits/claim-history/claim-history.component.tsx +198 -0
  248. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-details.component.scss +5 -0
  249. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-details.component.tsx +160 -0
  250. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-panel.component.scss +105 -0
  251. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-panel.component.tsx +184 -0
  252. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/intervention-attachments.component.scss +161 -0
  253. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/intervention-attachments.component.tsx +328 -0
  254. package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-details.component.tsx +96 -0
  255. package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-document.component.tsx +236 -0
  256. package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-panel.component.scss +98 -0
  257. package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-panel.component.tsx +292 -0
  258. package/src/billing/dashboard/v2/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.scss +133 -0
  259. package/src/billing/dashboard/v2/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.tsx +217 -0
  260. package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-details-by-token.component.tsx +150 -0
  261. package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-details-page.component.scss +13 -0
  262. package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-details-page.component.tsx +116 -0
  263. package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-visit-details.component.scss +338 -0
  264. package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-visit-details.component.tsx +616 -0
  265. package/src/billing/dashboard/v2/claim-visits/claim-visits.component.scss +5 -0
  266. package/src/billing/dashboard/v2/claim-visits/claim-visits.component.tsx +133 -0
  267. package/src/billing/dashboard/v2/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.scss +5 -0
  268. package/src/billing/dashboard/v2/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.tsx +49 -0
  269. package/src/billing/dashboard/v2/claim-visits/modal/claim-visit-details/claim-visit-details.modal.scss +17 -0
  270. package/src/billing/dashboard/v2/claim-visits/modal/claim-visit-details/claim-visit-details.modal.tsx +56 -0
  271. package/src/billing/dashboard/v2/claim-visits/modal/close-claim/close-claim.modal.scss +0 -0
  272. package/src/billing/dashboard/v2/claim-visits/modal/close-claim/close-claim.modal.tsx +129 -0
  273. package/src/billing/dashboard/v2/claim-visits/modal/submit-claim/submit-claim.modal.tsx +204 -0
  274. package/src/billing/dashboard/v2/claim-visits/shared/_empty-state.scss +28 -0
  275. package/src/billing/dashboard/v2/claim-visits/shared/record-cards.component.scss +298 -0
  276. package/src/billing/dashboard/v2/claim-visits/shared/record-cards.component.tsx +252 -0
  277. package/src/billing/dashboard/v2/claim-visits/shared/record-details.workspace.scss +42 -0
  278. package/src/billing/dashboard/v2/claim-visits/shared/record-details.workspace.tsx +54 -0
  279. package/src/billing/dashboard/v2/claim-visits/shared/record-table.component.scss +61 -0
  280. package/src/billing/dashboard/v2/claim-visits/shared/record-table.component.tsx +150 -0
  281. package/src/billing/dashboard/v2/claim-visits/switch-intervention/switch-intervention.resource.ts +51 -0
  282. package/src/billing/dashboard/v2/claim-visits/switch-intervention/switch-intervention.workspace.scss +191 -0
  283. package/src/billing/dashboard/v2/claim-visits/switch-intervention/switch-intervention.workspace.tsx +648 -0
  284. package/src/billing/dashboard/v2/claim-workspace/claim-workspace.component.scss +595 -0
  285. package/src/billing/dashboard/v2/claim-workspace/claim-workspace.component.tsx +810 -0
  286. package/src/billing/dashboard/v2/claim-workspace/claim-workspace.resource.ts +282 -0
  287. package/src/billing/dashboard/v2/claims-accounting/bill-utils.ts +134 -0
  288. package/src/billing/dashboard/v2/claims-accounting/claim-detail.component.tsx +346 -0
  289. package/src/billing/dashboard/v2/claims-accounting/claims-accounting.component.scss +546 -0
  290. package/src/billing/dashboard/v2/claims-accounting/claims-accounting.component.tsx +206 -0
  291. package/src/billing/dashboard/v2/claims-accounting/claims-accounting.resource.ts +337 -0
  292. package/src/billing/dashboard/v2/claims-accounting/invoice-document.component.scss +90 -0
  293. package/src/billing/dashboard/v2/claims-accounting/invoice-document.component.tsx +90 -0
  294. package/src/billing/dashboard/v2/claims-accounting/remittances.component.tsx +169 -0
  295. package/src/billing/dashboard/v2/claims-accounting/remittances.resource.ts +46 -0
  296. package/src/billing/dashboard/v2/claims-accounting/status-meta.ts +25 -0
  297. package/src/billing/dashboard/v2/clearance/cash-patients.scss +18 -0
  298. package/src/billing/dashboard/v2/clearance/cash.component.tsx +145 -0
  299. package/src/billing/dashboard/v2/clearance/clearance.component.scss +84 -0
  300. package/src/billing/dashboard/v2/clearance/clearance.component.tsx +225 -0
  301. package/src/billing/dashboard/v2/clearance/pay-cash.component.tsx +202 -0
  302. package/src/billing/dashboard/v2/clearance/pay-cash.scss +28 -0
  303. package/src/billing/dashboard/v2/clearance/prepaid-services.component.tsx +112 -0
  304. package/src/billing/dashboard/v2/facility-bills/claim-status.ts +249 -0
  305. package/src/billing/dashboard/v2/facility-bills/facility-bills.component.scss +140 -0
  306. package/src/billing/dashboard/v2/facility-bills/facility-bills.component.tsx +688 -0
  307. package/src/billing/dashboard/v2/facility-bills/preauths-datatables/pending-preauths.component.tsx +132 -0
  308. package/src/billing/dashboard/v2/facility-bills/preauths-datatables/preauth-preview-table.component.tsx +267 -0
  309. package/src/billing/dashboard/v2/facility-bills/preauths.component.tsx +130 -0
  310. package/src/billing/dashboard/v2/inpatient-requests/inpatient-requests.component.scss +22 -0
  311. package/src/billing/dashboard/v2/inpatient-requests/inpatient-requests.component.tsx +389 -0
  312. package/src/billing/dashboard/v2/inpatient-requests/modal/start-inpatient-claim/start-inpatient-claim.component.scss +0 -0
  313. package/src/billing/dashboard/v2/inpatient-requests/modal/start-inpatient-claim/start-inpatient-claim.component.tsx +0 -0
  314. package/src/billing/dashboard/v2/new-facility-bills/bills-table.component.tsx +78 -0
  315. package/src/billing/dashboard/v2/new-facility-bills/bills-table.scss +18 -0
  316. package/src/billing/dashboard/v2/new-facility-bills/new-facility-bills.component.tsx +64 -0
  317. package/src/billing/dashboard/v2/new-facility-bills/new-facility-bills.scss +146 -0
  318. package/src/billing/dashboard/v2/patient-bill-details/attachments/add-attachments.component.tsx +223 -0
  319. package/src/billing/dashboard/v2/patient-bill-details/attachments/attachment.component.tsx +157 -0
  320. package/src/billing/dashboard/v2/patient-bill-details/attachments/attachments.scss +92 -0
  321. package/src/billing/dashboard/v2/patient-bill-details/attachments/case-summary/case-summary.scss +295 -0
  322. package/src/billing/dashboard/v2/patient-bill-details/attachments/case-summary/case-summary.tsx +326 -0
  323. package/src/billing/dashboard/v2/patient-bill-details/attachments/dialysis/dialysis-chart.scss +238 -0
  324. package/src/billing/dashboard/v2/patient-bill-details/attachments/dialysis/dialysis-chart.tsx +269 -0
  325. package/src/billing/dashboard/v2/patient-bill-details/attachments/discharge-summary/discharge-summary.scss +96 -0
  326. package/src/billing/dashboard/v2/patient-bill-details/attachments/discharge-summary/discharge-summary.tsx +124 -0
  327. package/src/billing/dashboard/v2/patient-bill-details/attachments/final-bill.component.tsx +152 -0
  328. package/src/billing/dashboard/v2/patient-bill-details/attachments/final-bill.scss +225 -0
  329. package/src/billing/dashboard/v2/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.scss +182 -0
  330. package/src/billing/dashboard/v2/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.tsx +173 -0
  331. package/src/billing/dashboard/v2/patient-bill-details/attachments/generate-attachments.component.tsx +371 -0
  332. package/src/billing/dashboard/v2/patient-bill-details/attachments/invoice.component.tsx +151 -0
  333. package/src/billing/dashboard/v2/patient-bill-details/attachments/invoice.scss +225 -0
  334. package/src/billing/dashboard/v2/patient-bill-details/attachments/type.ts +44 -0
  335. package/src/billing/dashboard/v2/patient-bill-details/bill-details/bill-details.scss +107 -0
  336. package/src/billing/dashboard/v2/patient-bill-details/bill-details/bill-details.tsx +508 -0
  337. package/src/billing/dashboard/v2/patient-bill-details/bill-details-page.component.scss +30 -0
  338. package/src/billing/dashboard/v2/patient-bill-details/bill-details-page.component.tsx +94 -0
  339. package/src/billing/dashboard/v2/patient-bill-details/claim-details/claim-details-skeleton.component.scss +89 -0
  340. package/src/billing/dashboard/v2/patient-bill-details/claim-details/claim-details-skeleton.component.tsx +53 -0
  341. package/src/billing/dashboard/v2/patient-bill-details/claim-details/patient-claim-details.component.scss +32 -0
  342. package/src/billing/dashboard/v2/patient-bill-details/claim-details/patient-claim-details.component.tsx +215 -0
  343. package/src/billing/dashboard/v2/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.scss +0 -0
  344. package/src/billing/dashboard/v2/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.tsx +99 -0
  345. package/src/billing/dashboard/v2/patient-bill-details/modals/add-claim-line/add-claim-line.modal.tsx +187 -0
  346. package/src/billing/dashboard/v2/patient-bill-details/patient-bill-details.scss +153 -0
  347. package/src/billing/dashboard/v2/patient-bill-details/patient-bill-details.tsx +458 -0
  348. package/src/billing/dashboard/v2/patient-bill-details/payment-mode.ts +124 -0
  349. package/src/billing/dashboard/v2/patient-bill-details/workspaces/add-claim-line/add-claim-line.workspace.scss +27 -0
  350. package/src/billing/dashboard/v2/patient-bill-details/workspaces/add-claim-line/add-claim-line.workspace.tsx +223 -0
  351. package/src/billing/dashboard/v2/patient-bill-details/workspaces/bill-item-payment/bill-item-payment.workspace.scss +27 -0
  352. package/src/billing/dashboard/v2/patient-bill-details/workspaces/bill-item-payment/bill-item-payment.workspace.tsx +109 -0
  353. package/src/billing/dashboard/v2/preauth/preauth-attachments.component.tsx +389 -0
  354. package/src/billing/dashboard/v2/preauth/preauth-list.component.scss +38 -0
  355. package/src/billing/dashboard/v2/preauth/preauth-list.component.tsx +241 -0
  356. package/src/billing/dashboard/v2/preauth/preauth-status-tag.component.tsx +75 -0
  357. package/src/billing/dashboard/v2/preauth/preauth-typed-fields.md +125 -0
  358. package/src/billing/dashboard/v2/preauth/preauth.resource.ts +1067 -0
  359. package/src/billing/dashboard/v2/preauth/preauth.workspace.scss +91 -0
  360. package/src/billing/dashboard/v2/preauth/preauth.workspace.tsx +1802 -0
  361. package/src/billing/dashboard/v2/preauth/preauthorizations-tab.component.tsx +49 -0
  362. package/src/billing/dashboard/v2/sha-claims/sha-claims-table.component.tsx +36 -0
  363. package/src/billing/dashboard/v2/sha-claims/sha-claims.component.tsx +60 -0
  364. package/src/billing/dashboard/v2/sha-claims/sha-claims.scss +8 -0
  365. package/src/billing/dashboard/v2/shared/dash-board-card/dash-board-card.component.scss +17 -0
  366. package/src/billing/dashboard/v2/shared/dash-board-card/dash-board-card.component.tsx +15 -0
  367. package/src/billing/dashboard/v2/shared/empty-state.component.scss +24 -0
  368. package/src/billing/dashboard/v2/shared/empty-state.component.tsx +13 -0
  369. package/src/billing/dashboard/v2/shared/scroll-to-top.component.scss +54 -0
  370. package/src/billing/dashboard/v2/shared/scroll-to-top.component.tsx +54 -0
  371. package/src/billing/dashboard/v2/shared/table-toolbar.component.scss +77 -0
  372. package/src/billing/dashboard/v2/shared/table-toolbar.component.tsx +48 -0
  373. package/src/billing/dashboard/v2/types/index.ts +514 -0
  374. package/src/billing/dashboard/v3/active-visits/active-visits.component.tsx +256 -0
  375. package/src/billing/dashboard/v3/active-visits/active-visits.resource.ts +57 -0
  376. package/src/billing/dashboard/v3/active-visits/active-visits.scss +15 -0
  377. package/src/billing/dashboard/v3/cash-checklist/bill-document.component.scss +90 -0
  378. package/src/billing/dashboard/v3/cash-checklist/bill-document.component.tsx +101 -0
  379. package/src/billing/dashboard/v3/cash-checklist/cash-checklist.component.scss +199 -0
  380. package/src/billing/dashboard/v3/cash-checklist/cash-checklist.component.tsx +361 -0
  381. package/src/billing/dashboard/v3/cash-checklist/cash-checklist.resource.ts +240 -0
  382. package/src/billing/dashboard/v3/cash-checklist/payment-drawer.component.scss +246 -0
  383. package/src/billing/dashboard/v3/cash-checklist/payment-drawer.component.tsx +182 -0
  384. package/src/billing/dashboard/v3/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.scss +0 -0
  385. package/src/billing/dashboard/v3/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.tsx +44 -0
  386. package/src/billing/dashboard/v3/claim-visits/claim-doctors/claim-doctors.scss +5 -0
  387. package/src/billing/dashboard/v3/claim-visits/claim-doctors/claim-doctors.tsx +42 -0
  388. package/src/billing/dashboard/v3/claim-visits/claim-documents/claim-documents.scss +10 -0
  389. package/src/billing/dashboard/v3/claim-visits/claim-documents/claim-documents.tsx +25 -0
  390. package/src/billing/dashboard/v3/claim-visits/claim-intervention-details/claim-intervention-details.component.tsx +220 -0
  391. package/src/billing/dashboard/v3/claim-visits/claim-invoice-details/claim-invoice-details.component.scss +6 -0
  392. package/src/billing/dashboard/v3/claim-visits/claim-invoice-details/claim-invoice-details.component.tsx +85 -0
  393. package/src/billing/dashboard/v3/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.scss +0 -0
  394. package/src/billing/dashboard/v3/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.tsx +109 -0
  395. package/src/billing/dashboard/v3/claim-visits/claim-visit-details/claim-visit-details.component.scss +97 -0
  396. package/src/billing/dashboard/v3/claim-visits/claim-visit-details/claim-visit-details.component.tsx +343 -0
  397. package/src/billing/dashboard/v3/claim-visits/claim-visits.component.scss +5 -0
  398. package/src/billing/dashboard/v3/claim-visits/claim-visits.component.tsx +139 -0
  399. package/src/billing/dashboard/v3/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.scss +5 -0
  400. package/src/billing/dashboard/v3/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.tsx +49 -0
  401. package/src/billing/dashboard/v3/claim-visits/modal/claim-invoice-lines/claim-invoice-lines.modal.scss +7 -0
  402. package/src/billing/dashboard/v3/claim-visits/modal/claim-invoice-lines/claim-invoice-lines.modal.tsx +35 -0
  403. package/src/billing/dashboard/v3/claim-visits/modal/claim-visit-details/claim-visit-details.modal.scss +6 -0
  404. package/src/billing/dashboard/v3/claim-visits/modal/claim-visit-details/claim-visit-details.modal.tsx +33 -0
  405. package/src/billing/dashboard/v3/claim-visits/modal/close-claim/close-claim.modal.scss +0 -0
  406. package/src/billing/dashboard/v3/claim-visits/modal/close-claim/close-claim.modal.tsx +129 -0
  407. package/src/billing/dashboard/v3/claim-visits/modal/submit-claim/submit-claim.modal.tsx +204 -0
  408. package/src/billing/dashboard/v3/claim-visits/payer-preview/index.scss +140 -0
  409. package/src/billing/dashboard/v3/claim-visits/payer-preview/payer-preview-tile.component.tsx +55 -0
  410. package/src/billing/dashboard/v3/claim-visits/payer-preview/payer-preview-workspace.component.tsx +157 -0
  411. package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-claim-doctors.component.tsx +54 -0
  412. package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-claim-lines.component.tsx +48 -0
  413. package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-claim-notes.component.tsx +47 -0
  414. package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-diagnoses.component.tsx +44 -0
  415. package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-interventions.component.tsx +44 -0
  416. package/src/billing/dashboard/v3/claim-visits/switch-intervention/switch-intervention.resource.ts +51 -0
  417. package/src/billing/dashboard/v3/claim-visits/switch-intervention/switch-intervention.workspace.scss +191 -0
  418. package/src/billing/dashboard/v3/claim-visits/switch-intervention/switch-intervention.workspace.tsx +648 -0
  419. package/src/billing/dashboard/v3/claim-workspace/claim-workspace.component.scss +595 -0
  420. package/src/billing/dashboard/v3/claim-workspace/claim-workspace.component.tsx +810 -0
  421. package/src/billing/dashboard/v3/claim-workspace/claim-workspace.resource.ts +282 -0
  422. package/src/billing/dashboard/v3/claims-accounting/bill-utils.ts +134 -0
  423. package/src/billing/dashboard/v3/claims-accounting/claim-detail.component.tsx +346 -0
  424. package/src/billing/dashboard/v3/claims-accounting/claims-accounting.component.scss +546 -0
  425. package/src/billing/dashboard/v3/claims-accounting/claims-accounting.component.tsx +206 -0
  426. package/src/billing/dashboard/v3/claims-accounting/claims-accounting.resource.ts +337 -0
  427. package/src/billing/dashboard/v3/claims-accounting/invoice-document.component.scss +90 -0
  428. package/src/billing/dashboard/v3/claims-accounting/invoice-document.component.tsx +90 -0
  429. package/src/billing/dashboard/v3/claims-accounting/remittances.component.tsx +169 -0
  430. package/src/billing/dashboard/v3/claims-accounting/remittances.resource.ts +46 -0
  431. package/src/billing/dashboard/v3/claims-accounting/status-meta.ts +25 -0
  432. package/src/billing/dashboard/v3/clearance/clearance.component.scss +100 -0
  433. package/src/billing/dashboard/v3/clearance/clearance.component.tsx +0 -0
  434. package/src/billing/dashboard/v3/clearance/prepaid-services.component.tsx +112 -0
  435. package/src/billing/dashboard/v3/facility-bills/claim-status.ts +243 -0
  436. package/src/billing/dashboard/v3/facility-bills/facility-bills.component.scss +72 -0
  437. package/src/billing/dashboard/v3/facility-bills/facility-bills.component.tsx +181 -0
  438. package/src/billing/dashboard/v3/facility-bills/preauths-datatables/pending-preauths.component.tsx +132 -0
  439. package/src/billing/dashboard/v3/facility-bills/preauths-datatables/preauth-preview-table.component.tsx +232 -0
  440. package/src/billing/dashboard/v3/facility-bills/preauths.component.tsx +127 -0
  441. package/src/billing/dashboard/v3/patient-bill-details/attachments/add-attachments.component.tsx +223 -0
  442. package/src/billing/dashboard/v3/patient-bill-details/attachments/attachment.component.tsx +157 -0
  443. package/src/billing/dashboard/v3/patient-bill-details/attachments/attachments.scss +92 -0
  444. package/src/billing/dashboard/v3/patient-bill-details/attachments/case-summary/case-summary-helper.ts +58 -0
  445. package/src/billing/dashboard/v3/patient-bill-details/attachments/case-summary/case-summary.scss +295 -0
  446. package/src/billing/dashboard/v3/patient-bill-details/attachments/case-summary/case-summary.tsx +287 -0
  447. package/src/billing/dashboard/v3/patient-bill-details/attachments/dialysis/dialysis-chart.scss +238 -0
  448. package/src/billing/dashboard/v3/patient-bill-details/attachments/dialysis/dialysis-chart.tsx +317 -0
  449. package/src/billing/dashboard/v3/patient-bill-details/attachments/dialysis/dialysis-helper.ts +94 -0
  450. package/src/billing/dashboard/v3/patient-bill-details/attachments/discharge-summary/discharge-summary.scss +96 -0
  451. package/src/billing/dashboard/v3/patient-bill-details/attachments/discharge-summary/discharge-summary.tsx +126 -0
  452. package/src/billing/dashboard/v3/patient-bill-details/attachments/final-bill.component.tsx +75 -0
  453. package/src/billing/dashboard/v3/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.scss +182 -0
  454. package/src/billing/dashboard/v3/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.tsx +253 -0
  455. package/src/billing/dashboard/v3/patient-bill-details/attachments/generate-attachments.component.tsx +345 -0
  456. package/src/billing/dashboard/v3/patient-bill-details/attachments/invoice.component.tsx +150 -0
  457. package/src/billing/dashboard/v3/patient-bill-details/attachments/invoice.scss +225 -0
  458. package/src/billing/dashboard/v3/patient-bill-details/attachments/type.ts +259 -0
  459. package/src/billing/dashboard/v3/patient-bill-details/bill-details/bill-details.scss +17 -0
  460. package/src/billing/dashboard/v3/patient-bill-details/bill-details/bill-details.tsx +260 -0
  461. package/src/billing/dashboard/v3/patient-bill-details/claim-details/patient-claim-details.component.scss +0 -0
  462. package/src/billing/dashboard/v3/patient-bill-details/claim-details/patient-claim-details.component.tsx +68 -0
  463. package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.scss +0 -0
  464. package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.tsx +99 -0
  465. package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-line/add-claim-line.modal.scss +14 -0
  466. package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-line/add-claim-line.modal.tsx +112 -0
  467. package/src/billing/dashboard/v3/patient-bill-details/modals/bill-item-payment/bill-item-payment.modal.scss +6 -0
  468. package/src/billing/dashboard/v3/patient-bill-details/modals/bill-item-payment/bill-item-payment.modal.tsx +139 -0
  469. package/src/billing/dashboard/v3/patient-bill-details/patient-bill-details.scss +85 -0
  470. package/src/billing/dashboard/v3/patient-bill-details/patient-bill-details.tsx +343 -0
  471. package/src/billing/dashboard/v3/patient-bill-details/visit-diagnosis-details/visit-diagnosis-details.component.scss +0 -0
  472. package/src/billing/dashboard/v3/patient-bill-details/visit-diagnosis-details/visit-diagnosis-details.component.tsx +92 -0
  473. package/src/billing/dashboard/v3/preauth/elective/elective-authorize.resource.ts +284 -0
  474. package/src/billing/dashboard/v3/preauth/elective/elective-preauth-request.workspace.scss +125 -0
  475. package/src/billing/dashboard/v3/preauth/elective/elective-preauth-request.workspace.tsx +1184 -0
  476. package/src/billing/dashboard/v3/preauth/elective/elective-preauth.component.scss +15 -0
  477. package/src/billing/dashboard/v3/preauth/elective/elective-preauth.component.tsx +377 -0
  478. package/src/billing/dashboard/v3/preauth/elective/elective-preauth.resource.ts +1378 -0
  479. package/src/billing/dashboard/v3/preauth/elective/elective-requests-list.component.tsx +357 -0
  480. package/src/billing/dashboard/v3/preauth/preauth-attachments.component.tsx +389 -0
  481. package/src/billing/dashboard/v3/preauth/preauth-list.component.scss +34 -0
  482. package/src/billing/dashboard/v3/preauth/preauth-list.component.tsx +300 -0
  483. package/src/billing/dashboard/v3/preauth/preauth-status-tag.component.tsx +75 -0
  484. package/src/billing/dashboard/v3/preauth/preauth-typed-fields.md +125 -0
  485. package/src/billing/dashboard/v3/preauth/preauth.resource.ts +1197 -0
  486. package/src/billing/dashboard/v3/preauth/preauth.workspace.scss +176 -0
  487. package/src/billing/dashboard/v3/preauth/preauth.workspace.tsx +2266 -0
  488. package/src/billing/dashboard/v3/preauth/preauthorizations-tab.component.tsx +55 -0
  489. package/src/billing/dashboard/v3/shared/empty-state.component.scss +25 -0
  490. package/src/billing/dashboard/v3/shared/empty-state.component.tsx +13 -0
  491. package/src/billing/dashboard/v3/shared/table-toolbar.component.scss +64 -0
  492. package/src/billing/dashboard/v3/shared/table-toolbar.component.tsx +48 -0
  493. package/src/billing/dashboard/v3/types/index.ts +384 -0
  494. package/src/billing/extensions/generate-order-bill-button/generate-order-bill-button.extension.tsx +55 -0
  495. package/src/billing/extensions/generate-order-bill-button/generate-order-bill-button.scss +16 -0
  496. package/src/billing/extensions/visit-billing/visit-billing.extension.scss +0 -0
  497. package/src/billing/extensions/visit-billing/visit-billing.extension.tsx +509 -0
  498. package/src/billing/invoice/bill.resource.ts +47 -0
  499. package/src/billing/invoice/invoice-header/header-card/header-card.scss +17 -0
  500. package/src/billing/invoice/invoice-header/header-card/header-card.tsx +21 -0
  501. package/src/billing/invoice/invoice.scss +113 -0
  502. package/src/billing/invoice/invoice.tsx +1441 -0
  503. package/src/billing/invoice/line-items/line-items.scss +0 -0
  504. package/src/billing/invoice/line-items/line-items.tsx +120 -0
  505. package/src/billing/invoice/modal/delete-bill-item/delete-bill-item.modal.scss +23 -0
  506. package/src/billing/invoice/modal/delete-bill-item/delete-bill-item.modal.tsx +114 -0
  507. package/src/billing/invoice/modal/edit-bill-item/edit-bill-item.modal.scss +0 -0
  508. package/src/billing/invoice/modal/edit-bill-item/edit-bill-item.modal.tsx +122 -0
  509. package/src/billing/invoice/payment-details/payment-details.scss +0 -0
  510. package/src/billing/invoice/payment-details/payment-details.tsx +43 -0
  511. package/src/billing/invoice/print-invoice/print-receipt.component.tsx +44 -0
  512. package/src/billing/invoice/print-invoice/print-receipt.scss +14 -0
  513. package/src/billing/maternity-discharge.resource.ts +21 -0
  514. package/src/billing/types/index.ts +354 -0
  515. package/src/billing/utils/index.ts +17 -0
  516. package/src/billing/widgets/billingTotalsRow.component.scss +0 -0
  517. package/src/billing/widgets/billingTotalsRow.component.tsx +712 -0
  518. package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.resource.ts +130 -0
  519. package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.scss +58 -0
  520. package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.workspace.tsx +656 -0
  521. package/src/billing/workspaces/create-order-bill-form-workspace/schema.ts +12 -0
  522. package/src/bookings/bookings.component.scss +7 -0
  523. package/src/bookings/bookings.component.tsx +35 -0
  524. package/src/bookings/daily/daily-bookings.resource.ts +2 -1
  525. package/src/case-summary/case-summary.extension.scss +13 -0
  526. package/src/case-summary/case-summary.extension.tsx +40 -0
  527. package/src/case-summary/case-summary.resource.test.ts +69 -0
  528. package/src/case-summary/case-summary.resource.ts +52 -0
  529. package/src/case-summary/components/case-summary-printable.component.scss +174 -0
  530. package/src/case-summary/components/case-summary-printable.component.tsx +288 -0
  531. package/src/case-summary/components/case-summary-printable.utils.ts +51 -0
  532. package/src/case-summary/types/case-summary.types.ts +152 -0
  533. package/src/claims/claims.component.scss +70 -0
  534. package/src/claims/claims.component.tsx +743 -0
  535. package/src/claims/claims.resource.ts +1840 -0
  536. package/src/claims/index.ts +365 -0
  537. package/src/claims/interventions.resource.ts +131 -0
  538. package/src/claims/utils.ts +64 -0
  539. package/src/config-schema.ts +149 -1
  540. package/src/context/patient-context.tsx +27 -0
  541. package/src/createDashboardLink.tsx +9 -0
  542. package/src/dashboard/charts/chart.component.scss +24 -0
  543. package/src/dashboard/charts/chart.component.tsx +56 -0
  544. package/src/dashboard/dashboard.component.scss +48 -3
  545. package/src/dashboard/dashboard.component.tsx +29 -38
  546. package/src/dashboard/overview/overview.component.scss +40 -59
  547. package/src/dashboard/overview/overview.component.tsx +55 -41
  548. package/src/dashboard-meta/accounting-dashboard.meta.ts +6 -0
  549. package/src/dashboard-meta/admissions-dashboard.meta.ts +6 -0
  550. package/src/dashboard-meta/billing-dashboard.meta.ts +6 -0
  551. package/src/dashboard-meta/bookings-dashboard.meta.ts +6 -0
  552. package/src/dashboard-meta/case-summary.meta.ts +6 -0
  553. package/src/dashboard-meta/consultation-dashboard.meta.ts +6 -0
  554. package/src/dashboard-meta/dha-workflow-dashboard.meta.ts +6 -0
  555. package/src/dashboard-meta/elective-preauth.meta.ts +6 -0
  556. package/src/dashboard-meta/emt-dashboard.meta.ts +6 -0
  557. package/src/dashboard-meta/inpatient-admissions.meta.ts +6 -0
  558. package/src/dashboard-meta/maternity-dashboard.meta.ts +6 -0
  559. package/src/dashboard-meta/mch-dashboard.meta.ts +6 -0
  560. package/src/dashboard-meta/pharmacy-dashboard.meta.ts +6 -0
  561. package/src/dashboard-meta/queue-dashboard.meta.ts +6 -0
  562. package/src/dashboard-meta/registers-dashboard.meta.ts +6 -0
  563. package/src/dashboard-meta/registry-dashboard.meta.ts +6 -0
  564. package/src/dashboard-meta/service-queue-admin.meta.ts +6 -0
  565. package/src/dashboard-meta/specialized-clinics-dashboard.meta.ts +6 -0
  566. package/src/dashboard-meta/triage-dashboard.meta.ts +6 -0
  567. package/src/emt/cr-lookup.resource.test.ts +88 -0
  568. package/src/emt/cr-lookup.resource.ts +42 -0
  569. package/src/emt/emt-queue.component.test.tsx +353 -0
  570. package/src/emt/emt-queue.component.tsx +463 -0
  571. package/src/emt/emt-queue.scss +85 -0
  572. package/src/emt/emt.resource.test.ts +247 -0
  573. package/src/emt/emt.resource.ts +150 -0
  574. package/src/emt/handover-modal/handover-modal.component.test.tsx +273 -0
  575. package/src/emt/handover-modal/handover-modal.component.tsx +541 -0
  576. package/src/emt/handover-modal/handover-modal.scss +113 -0
  577. package/src/emt/types/emt.types.ts +137 -0
  578. package/src/index.ts +204 -6
  579. package/src/mnch/maternity/maternity-queues.component.scss +7 -0
  580. package/src/mnch/maternity/maternity-queues.component.tsx +32 -0
  581. package/src/mnch/maternity/queues/triage/maternity-triage.tsx +15 -0
  582. package/src/mnch/mch/mch-queues.component.scss +10 -0
  583. package/src/mnch/mch/mch-queues.component.tsx +36 -0
  584. package/src/mnch/mch/queues/consultation/mch-consultation.tsx +18 -0
  585. package/src/mnch/mch/queues/triage/mch-triage.tsx +15 -0
  586. package/src/mnch/mnch-root.tsx +17 -0
  587. package/src/mortuary/mortuary.component.tsx +13 -0
  588. package/src/pharmacy/pharmacy.component.scss +16 -0
  589. package/src/pharmacy/pharmacy.component.tsx +11 -6
  590. package/src/registers/registers.component.tsx +8 -0
  591. package/src/registry/drawer/emr-compare.component.scss +263 -0
  592. package/src/registry/drawer/emr-compare.component.tsx +302 -0
  593. package/src/registry/drawer/emr-compare.resource.ts +181 -0
  594. package/src/registry/drawer/emr-create-preview.component.tsx +123 -0
  595. package/src/registry/drawer/otp-verification-step.component.tsx +398 -0
  596. package/src/registry/drawer/pomsf-balance.util.test.ts +177 -0
  597. package/src/registry/drawer/pomsf-balance.util.ts +79 -0
  598. package/src/registry/drawer/verification.resource.ts +60 -0
  599. package/src/registry/drawer/workflow-drawer.component.scss +1242 -0
  600. package/src/registry/drawer/workflow-drawer.component.tsx +1478 -0
  601. package/src/registry/eligibility/eligibility-details/eligibility-details.scss +38 -0
  602. package/src/registry/eligibility/eligibility-details/eligibility-details.tsx +101 -0
  603. package/src/registry/eligibility/eliigibility-tags/eligibility-tags.scss +16 -0
  604. package/src/registry/eligibility/eliigibility-tags/eligibility-tags.tsx +120 -0
  605. package/src/registry/eligibility/modal/eligibility-details.modal.scss +0 -0
  606. package/src/registry/eligibility/modal/eligibility-details.modal.tsx +45 -0
  607. package/src/registry/hie.resource.ts +466 -0
  608. package/src/registry/hie.types.ts +63 -0
  609. package/src/registry/modal/biometrics-verification-modal/biometrics-verification-modal.scss +277 -0
  610. package/src/registry/modal/biometrics-verification-modal/biometrics-verification-modal.tsx +218 -0
  611. package/src/registry/modal/biometrics-verification-modal/type.ts +39 -0
  612. package/src/registry/modal/client-details-modal/client-details-modal.tsx +65 -29
  613. package/src/registry/modal/otp-modal/otp-whitlisting-modal.component.tsx +809 -0
  614. package/src/registry/modal/otp-modal/otp-whitlisting-modal.scss +354 -0
  615. package/src/registry/modal/otp-modal/otp-whitlisting.scss +0 -0
  616. package/src/registry/modal/otp-verification-modal/claims-consent.scss +72 -0
  617. package/src/registry/modal/otp-verification-modal/claims-consent.tsx +135 -0
  618. package/src/registry/modal/otp-verification-modal/extension/claims-consent.extension.tsx +130 -0
  619. package/src/registry/modal/otp-verification-modal/otp-verification-modal.scss +30 -0
  620. package/src/registry/modal/otp-verification-modal/otp-verification-modal.tsx +154 -54
  621. package/src/registry/modal/send-to-triage/payment-details.tsx +120 -0
  622. package/src/registry/modal/send-to-triage/payment-method.component.tsx +54 -0
  623. package/src/registry/modal/send-to-triage/send-to-queue.modal.tsx +981 -0
  624. package/src/registry/modal/send-to-triage/send-to-triage.modal.scss +156 -3
  625. package/src/registry/modal/send-to-triage/send-to-triage.modal.tsx +1094 -135
  626. package/src/registry/modal/start-patient-visit/start-patient-visit.modal.scss +34 -0
  627. package/src/registry/modal/start-patient-visit/start-patient-visit.modal.tsx +231 -0
  628. package/src/registry/payment-details/payment-options/payment-options.scss +13 -0
  629. package/src/registry/payment-details/payment-options/payment-options.tsx +61 -14
  630. package/src/registry/registration-list/registration-list.component.scss +32 -0
  631. package/src/registry/registration-list/registration-list.component.tsx +103 -0
  632. package/src/registry/registry-entry.tsx +11 -0
  633. package/src/registry/registry.component.scss +402 -78
  634. package/src/registry/registry.component.tsx +602 -222
  635. package/src/registry/registry.resource.ts +22 -3
  636. package/src/registry/types/index.ts +118 -9
  637. package/src/registry/utils/error-handler.ts +54 -0
  638. package/src/registry/utils/format-dependant-display-data.ts +1 -1
  639. package/src/registry/utils/hie-client-adapter.ts +7 -4
  640. package/src/registry/utils/mask-data.ts +40 -0
  641. package/src/registry/utils/phone-number-formatter.ts +11 -0
  642. package/src/resources/dashboard.resource.ts +20 -0
  643. package/src/resources/identifier-types.ts +2 -0
  644. package/src/resources/patient-resource.ts +6 -1
  645. package/src/resources/queue.resource.ts +24 -1
  646. package/src/resources/superset.resource.ts +21 -0
  647. package/src/resources/visit.resource.ts +19 -1
  648. package/src/root.component.tsx +10 -5
  649. package/src/routes.json +477 -23
  650. package/src/service-queues/admin/queue/modal/create-queue/create-queue.modal.scss +31 -0
  651. package/src/service-queues/admin/queue/modal/create-queue/create-queue.modal.tsx +153 -0
  652. package/src/service-queues/admin/queue/modal/edit-queue/edit-queue.modal.scss +0 -0
  653. package/src/service-queues/admin/queue/modal/edit-queue/edit-queue.modal.tsx +182 -0
  654. package/src/service-queues/admin/queue/queue-list/queue-list.scss +33 -0
  655. package/src/service-queues/admin/queue/queue-list/queue-list.tsx +113 -0
  656. package/src/service-queues/admin/queue-entry/queue-entry-list.component.scss +6 -0
  657. package/src/service-queues/admin/queue-entry/queue-entry-list.component.tsx +137 -0
  658. package/src/service-queues/admin/queue-room/modal/create-queue-room/create-queue-room.modal.scss +31 -0
  659. package/src/service-queues/admin/queue-room/modal/create-queue-room/create-queue-room.modal.tsx +137 -0
  660. package/src/service-queues/admin/queue-room/modal/edit-queue-room/edit-queue-room.modal.scss +0 -0
  661. package/src/service-queues/admin/queue-room/modal/edit-queue-room/edit-queue-room.modal.tsx +146 -0
  662. package/src/service-queues/admin/queue-room/queue-room-list/queue-room-list.scss +22 -0
  663. package/src/service-queues/admin/queue-room/queue-room-list/queue-room-list.tsx +120 -0
  664. package/src/service-queues/admin/service-queue-admin-dashboard.component.scss +6 -0
  665. package/src/service-queues/admin/service-queue-admin-dashboard.component.tsx +34 -0
  666. package/src/service-queues/consultation/consultation.component.tsx +9 -0
  667. package/src/service-queues/extensions/service-queue-patient-banner/service-queue-patient-banner.scss +30 -0
  668. package/src/service-queues/extensions/service-queue-patient-banner/service-queue-patient-banner.tsx +108 -0
  669. package/src/service-queues/modals/daily-report-patient-list/daily-report-patient-list.scss +26 -0
  670. package/src/service-queues/modals/daily-report-patient-list/daily-report-patient-list.tsx +110 -0
  671. package/src/service-queues/modals/move/move-patient.component.scss +1 -1
  672. package/src/service-queues/modals/move/move-patient.component.tsx +31 -17
  673. package/src/service-queues/queue-list/check-in.service.ts +26 -0
  674. package/src/service-queues/queue-list/queue-list.component.scss +37 -0
  675. package/src/service-queues/queue-list/queue-list.component.tsx +256 -56
  676. package/src/service-queues/service-queue/service-queue.component.tsx +151 -8
  677. package/src/service-queues/service-queue/stats/stat-details/stat-details.component.scss +5 -0
  678. package/src/service-queues/service-queue/stats/stat-details/stat-details.component.tsx +36 -7
  679. package/src/service-queues/service-queue.tsx +22 -16
  680. package/src/service-queues/service-queues.resource.ts +197 -1
  681. package/src/service-queues/service.resource.ts +1 -1
  682. package/src/shared/constants/concepts.ts +50 -0
  683. package/src/shared/constants/patient-category.ts +6 -0
  684. package/src/shared/constants/patient-type.ts +10 -0
  685. package/src/shared/constants/visit-types.ts +7 -0
  686. package/src/shared/services/billing.resource.ts +75 -0
  687. package/src/shared/services/claims.resource.ts +47 -0
  688. package/src/shared/services/client-payment-mode.resource.ts +27 -0
  689. package/src/shared/services/client-payment.resource.ts +17 -0
  690. package/src/shared/services/consultation-clearance.resource.ts +210 -0
  691. package/src/shared/services/eligibility.resource.ts +20 -0
  692. package/src/shared/services/encounters.resource.ts +33 -0
  693. package/src/shared/services/location.resource.ts +9 -0
  694. package/src/shared/types/index.ts +156 -0
  695. package/src/shared/ui/aggregate-stat-card/aggregate-stat-card.scss +42 -0
  696. package/src/shared/ui/aggregate-stat-card/aggregate-stat-card.tsx +42 -0
  697. package/src/shared/ui/confirm-modal/confirm.modal.scss +18 -0
  698. package/src/shared/ui/confirm-modal/confirm.modal.tsx +38 -0
  699. package/src/shared/ui/facility-worker-slot/facility-worker.component-slot.component.scss +39 -0
  700. package/src/shared/ui/facility-worker-slot/facility-worker.component-slot.component.tsx +19 -0
  701. package/src/shared/ui/otp-input/otp-input.component.scss +14 -0
  702. package/src/shared/ui/otp-input/otp-input.component.tsx +97 -0
  703. package/src/{service-queues/service-queue/stats → shared/ui}/stat-card/stat-card.component.tsx +6 -3
  704. package/src/shared/ui/timer/timer.component.scss +5 -0
  705. package/src/shared/ui/timer/timer.component.tsx +40 -0
  706. package/src/shared/utils/get-base-url.ts +15 -0
  707. package/src/shared/utils/get-tag-type.ts +75 -0
  708. package/src/side-nav-menu/mnch-nav-link-config.ts +16 -0
  709. package/src/side-nav-menu/mnch-nav-links.tsx +42 -0
  710. package/src/side-nav-menu/nav-link-config.ts +5 -5
  711. package/src/side-nav-menu/specialized-clinics-nav-link-config.ts +36 -0
  712. package/src/side-nav-menu/specialized-clinics-nav-links.tsx +42 -0
  713. package/src/specialized-clinics/critital-care-unit/critical-care-unit-queues.component.scss +7 -0
  714. package/src/specialized-clinics/critital-care-unit/critical-care-unit-queues.component.tsx +36 -0
  715. package/src/specialized-clinics/critital-care-unit/queues/consultation/critical-care-unit-consultation.tsx +15 -0
  716. package/src/specialized-clinics/critital-care-unit/queues/triage/critical-care-unit-triage.tsx +15 -0
  717. package/src/specialized-clinics/dental/dental-queues.component.scss +7 -0
  718. package/src/specialized-clinics/dental/dental-queues.component.tsx +36 -0
  719. package/src/specialized-clinics/dental/queues/consultation/dental-consultation.tsx +15 -0
  720. package/src/specialized-clinics/dental/queues/triage/dental-triage.tsx +15 -0
  721. package/src/specialized-clinics/diagnostic-and-imaging/diagnostic-and-imaging.component.scss +7 -0
  722. package/src/specialized-clinics/diagnostic-and-imaging/diagnostic-and-imaging.component.tsx +36 -0
  723. package/src/specialized-clinics/diagnostic-and-imaging/queues/consultation/diagnosis-and-imaging-consultation.tsx +15 -0
  724. package/src/specialized-clinics/diagnostic-and-imaging/queues/triage/diagnosis-and-imaging-triage.tsx +15 -0
  725. package/src/specialized-clinics/oncology/oncology-queues.component.scss +7 -0
  726. package/src/specialized-clinics/oncology/oncology-queues.component.tsx +36 -0
  727. package/src/specialized-clinics/oncology/queues/consultation/oncology-consultation.tsx +15 -0
  728. package/src/specialized-clinics/oncology/queues/triage/oncology-triage.tsx +15 -0
  729. package/src/specialized-clinics/ophthalmology/ophthalmology-queues.component.scss +7 -0
  730. package/src/specialized-clinics/ophthalmology/ophthalmology-queues.component.tsx +36 -0
  731. package/src/specialized-clinics/ophthalmology/queues/consultation/ophthalmology-consultation.tsx +15 -0
  732. package/src/specialized-clinics/ophthalmology/queues/triage/ophthalmology-triage.tsx +15 -0
  733. package/src/specialized-clinics/psychiatry/psychiatry-queues.component.scss +7 -0
  734. package/src/specialized-clinics/psychiatry/psychiatry-queues.component.tsx +36 -0
  735. package/src/specialized-clinics/psychiatry/queues/consultation/psychiatry-consultation.tsx +15 -0
  736. package/src/specialized-clinics/psychiatry/queues/triage/psychiatry-triage.tsx +15 -0
  737. package/src/specialized-clinics/renal/queues/consultation/dialysis-consultation.tsx +15 -0
  738. package/src/specialized-clinics/renal/queues/triage/renal-triage.tsx +15 -0
  739. package/src/specialized-clinics/renal/renal-queues.component.scss +7 -0
  740. package/src/specialized-clinics/renal/renal-queues.component.tsx +36 -0
  741. package/src/specialized-clinics/specialized-clinics-root.tsx +27 -0
  742. package/src/triage/triage.component.scss +6 -0
  743. package/src/triage/triage.component.tsx +4 -0
  744. package/src/types/types.ts +56 -1
  745. package/webpack.config.js +54 -1
  746. package/dist/104.js +0 -2
  747. package/dist/104.js.map +0 -1
  748. package/dist/15.js +0 -1
  749. package/dist/15.js.map +0 -1
  750. package/dist/184.js +0 -2
  751. package/dist/184.js.map +0 -1
  752. package/dist/197.js +0 -1
  753. package/dist/246.js +0 -2
  754. package/dist/246.js.map +0 -1
  755. package/dist/255.js +0 -1
  756. package/dist/255.js.map +0 -1
  757. package/dist/300.js +0 -1
  758. package/dist/335.js +0 -1
  759. package/dist/339.js +0 -1
  760. package/dist/339.js.map +0 -1
  761. package/dist/353.js +0 -1
  762. package/dist/353.js.map +0 -1
  763. package/dist/420.js +0 -1
  764. package/dist/420.js.map +0 -1
  765. package/dist/540.js +0 -2
  766. package/dist/540.js.map +0 -1
  767. package/dist/55.js +0 -1
  768. package/dist/652.js +0 -1
  769. package/dist/709.js +0 -1
  770. package/dist/709.js.map +0 -1
  771. package/dist/710.js +0 -2
  772. package/dist/710.js.map +0 -1
  773. package/dist/729.js +0 -1
  774. package/dist/729.js.map +0 -1
  775. package/dist/752.js +0 -1
  776. package/dist/752.js.map +0 -1
  777. package/dist/833.js +0 -1
  778. package/dist/833.js.map +0 -1
  779. package/dist/907.js +0 -1
  780. package/dist/907.js.map +0 -1
  781. package/dist/91.js +0 -1
  782. package/dist/91.js.map +0 -1
  783. package/dist/93.js +0 -1
  784. package/dist/93.js.map +0 -1
  785. package/dist/943.js +0 -1
  786. package/dist/943.js.map +0 -1
  787. package/dist/99.js +0 -1
  788. /package/dist/{104.js.LICENSE.txt → 2177.js.LICENSE.txt} +0 -0
  789. /package/dist/{184.js.LICENSE.txt → 3184.js.LICENSE.txt} +0 -0
  790. /package/dist/{540.js.LICENSE.txt → 6540.js.LICENSE.txt} +0 -0
  791. /package/dist/{710.js.LICENSE.txt → 7830.js.LICENSE.txt} +0 -0
  792. /package/dist/{246.js.LICENSE.txt → 9583.js.LICENSE.txt} +0 -0
  793. /package/src/{service-queues/service-queue/stats → shared/ui}/stat-card/stat-card.component.scss +0 -0
@@ -1,81 +1,226 @@
1
1
  import {
2
+ Breadcrumb,
3
+ BreadcrumbItem,
2
4
  Button,
3
5
  Dropdown,
4
- InlineLoading,
6
+ Layer,
7
+ Loading,
5
8
  RadioButton,
6
- RadioButtonGroup,
7
- Table,
8
- TableBody,
9
- TableCell,
10
- TableHead,
11
- TableHeader,
12
- TableRow,
9
+ Tag,
13
10
  TextInput,
14
11
  } from '@carbon/react';
15
- import React, { useState } from 'react';
12
+ import {
13
+ Search,
14
+ SearchLocate,
15
+ WarningAlt,
16
+ WarningAltFilled,
17
+ UserMultiple,
18
+ Identification,
19
+ CheckmarkOutline,
20
+ Close,
21
+ } from '@carbon/react/icons';
22
+ import React, { useEffect, useRef, useState } from 'react';
16
23
  import styles from './registry.component.scss';
17
- import { type HieClient, IDENTIFIER_TYPES, type IdentifierType, type RequestCustomOtpDto } from './types';
24
+ import {
25
+ type ClientRegistrySearchRequest,
26
+ type CreateVisitDto,
27
+ type HieClient,
28
+ HieIdentificationType,
29
+ IDENTIFIER_TYPES,
30
+ type IdentifierType,
31
+ type QueueEntryDto,
32
+ type RequestCustomOtpDto,
33
+ type VisitAttribute,
34
+ } from './types';
35
+ import { createVisit } from '../resources/visit.resource';
36
+ import { createQueueEntry } from '../resources/queue.resource';
37
+ import { QUEUE_PRIORITIES_UUIDS, QUEUE_STATUS_UUIDS } from '../shared/constants/concepts';
38
+ import { VisitTypeUuids } from '../shared/constants/visit-types';
39
+ import {
40
+ createConsultationClearance,
41
+ findOpenPrepaidService,
42
+ fulfillPrepaidService,
43
+ } from '../shared/services/consultation-clearance.resource';
18
44
  import { fetchClientRegistryData } from './registry.resource';
19
- import { type Patient, showSnackbar, useSession } from '@openmrs/esm-framework';
20
- import OtpVerificationModal from './modal/otp-verification-modal/otp-verification-modal';
21
- import { maskExceptFirstAndLast, maskValue } from './utils/mask-data';
22
- import ClientDetailsModal from './modal/client-details-modal/client-details-modal';
45
+ import { type Patient, showSnackbar, useConfig, useSession } from '@openmrs/esm-framework';
46
+ import { maskCrNumber, maskExceptFirstAndLast } from './utils/mask-data';
23
47
  import { searchPatientByCrNumber } from '../resources/patient-search.resource';
24
48
  import SendToTriageModal from './modal/send-to-triage/send-to-triage.modal';
25
- import { useNavigate } from 'react-router-dom';
26
- import { formatDependantDisplayData } from './utils/format-dependant-display-data';
49
+ import WorkflowDrawer from './drawer/workflow-drawer.component';
27
50
  import { registerHieClientInAmrs } from '../resources/hie-amrs-automatic-registration.service';
28
- import { getErrorMessages } from './utils/error-handler';
51
+ import { getErrorMessages, getReadableErrorMessage } from './utils/error-handler';
52
+ import { IdentifierTypesUuids } from '../resources/identifier-types';
53
+ import { formatPhoneNumberForOTP } from './utils/phone-number-formatter';
54
+ import { usePatient } from '../context/patient-context';
55
+ import FacilityAndWorkerSlot from '../shared/ui/facility-worker-slot/facility-worker.component-slot.component';
56
+ import RegistrationList from './registration-list/registration-list.component';
57
+ import { type ConfigObject } from '../config-schema';
29
58
 
30
59
  interface RegistryComponentProps {}
31
60
  const RegistryComponent: React.FC<RegistryComponentProps> = () => {
32
61
  const [identifierType, setIdentifierType] = useState<IdentifierType>('National ID');
33
62
  const [identifierValue, setIdentifierValue] = useState('');
63
+ const [validationError, setValidationError] = useState<string>('');
64
+ const [notFound, setNotFound] = useState<boolean>(false);
65
+ const [fetchError, setFetchError] = useState<string>('');
34
66
  const [loading, setLoading] = useState<boolean>(false);
35
67
  const [principal, setPrincipal] = useState<HieClient>();
36
- const [selectedDependant, setSelectedDependant] = useState<HieClient>();
37
68
  const [amrsPatients, setAmrsPatients] = useState<Patient[]>([]);
69
+ const [amrsChecked, setAmrsChecked] = useState<boolean>(false);
70
+ const [syncingAmrs, setSyncingAmrs] = useState<boolean>(false);
38
71
  const [selectedPatient, setSelectedPatient] = useState<string>('principal');
39
72
  const [displayOtpModal, setDisplayOtpModal] = useState<boolean>(false);
40
73
  const [displayClientDetailsModal, setDisplayClientDetailsModal] = useState<boolean>(false);
41
- const [displaytriageModal, setDisplaytriageModal] = useState<boolean>(false);
74
+ const [displaytStartVisitModal, setdisplaytStartVisitModal] = useState<boolean>(false);
75
+ const [displayDrawer, setDisplayDrawer] = useState<boolean>(false);
42
76
  const [requestCustomOtpDto, setRequestCustomOtpDto] = useState<RequestCustomOtpDto>();
43
77
  const session = useSession();
44
- const locationUuid = session.sessionLocation.uuid;
45
- const navigate = useNavigate();
78
+ const locationUuid = session?.sessionLocation?.uuid;
79
+ const { setPatient } = usePatient();
80
+ const { cashPaymentModeUuid, shaPaymentModeUuid } = useConfig<ConfigObject>();
81
+ const emtHandoffConsumed = useRef(false);
82
+
83
+ // Arriving from an EMT handover (`?emtCrId=...`): skip straight to the
84
+ // found-patient view instead of making staff re-search by an identifier
85
+ // type this form doesn't even offer (CR id isn't one of IDENTIFIER_TYPES
86
+ // here). This component is mounted as a bare extension with no React
87
+ // Router ancestor, so the handoff travels via a plain URL query param —
88
+ // not router `state` — and is read via `window.location`, not `useLocation`.
89
+ useEffect(() => {
90
+ if (emtHandoffConsumed.current || !locationUuid) {
91
+ return;
92
+ }
93
+ const crId = new URLSearchParams(window.location.search).get('emtCrId');
94
+ if (!crId) {
95
+ return;
96
+ }
97
+ emtHandoffConsumed.current = true;
98
+ // Drop the param so a later refresh of this screen doesn't repeat the fetch.
99
+ window.history.replaceState(null, '', window.location.pathname);
100
+ (async () => {
101
+ try {
102
+ const results = await fetchClientRegistryData({
103
+ identificationNumber: crId,
104
+ identificationType: HieIdentificationType.Cr,
105
+ locationUuid,
106
+ });
107
+ const handoffClient = Array.isArray(results) && results.length > 0 ? (results[0] as HieClient) : null;
108
+ if (handoffClient) {
109
+ setPatient(handoffClient);
110
+ setPrincipal(handoffClient);
111
+ setSelectedPatient('principal');
112
+ } else {
113
+ showSnackbar({
114
+ kind: 'warning',
115
+ title: 'Could not locate handed-over patient',
116
+ subtitle: `CR ${crId} was not found in the Client Registry — search manually to continue.`,
117
+ });
118
+ }
119
+ } catch {
120
+ showSnackbar({
121
+ kind: 'warning',
122
+ title: 'Could not locate handed-over patient',
123
+ subtitle: `We couldn't reach the Client Registry for CR ${crId} — search manually to continue.`,
124
+ });
125
+ }
126
+ })();
127
+ }, [locationUuid, setPatient]);
128
+
129
+ const validateForm = (): string => {
130
+ const value = identifierValue.trim();
131
+ if (!value) {
132
+ return `${identifierType} value is required`;
133
+ }
134
+ if (value.length < 4) {
135
+ return `Enter a valid ${identifierType.toLowerCase()} (minimum 4 characters)`;
136
+ }
137
+ if (identifierType === 'National ID' && !/^\d+$/.test(value)) {
138
+ return 'National ID must contain digits only';
139
+ }
140
+ if (!locationUuid) {
141
+ return 'No default location selected. Please set your session location.';
142
+ }
143
+ return '';
144
+ };
46
145
 
47
146
  const handleSearchPatient = async () => {
147
+ const error = validateForm();
148
+ if (error) {
149
+ setValidationError(error);
150
+ return;
151
+ }
152
+ setValidationError('');
153
+ setNotFound(false);
154
+ setFetchError('');
48
155
  setLoading(true);
49
156
  try {
50
- const payload = {
51
- identificationNumber: identifierValue,
52
- identificationType: identifierType,
53
- locationUuid,
54
- };
55
-
56
- if (!isValidCustomSmsPayload(payload)) return false;
157
+ const searchClientPayload = getSearchClientDto();
57
158
 
58
- setRequestCustomOtpDto(payload);
159
+ if (!isValidSeatchClientPayload(searchClientPayload)) return false;
59
160
 
60
- const result = await fetchClientRegistryData(payload);
161
+ const result = await fetchClientRegistryData(searchClientPayload);
61
162
  const patients = Array.isArray(result) ? result : [];
62
163
 
63
164
  if (patients.length === 0) {
64
- handleCancel();
65
- throw new Error('No matching patient found in Client Registry.');
165
+ setPrincipal(null);
166
+ setNotFound(true);
167
+ return;
66
168
  }
67
169
 
68
170
  const patient = patients[0];
171
+ setPatient(patient);
69
172
  setPrincipal(patient);
70
- showAlert('success', 'Client Data Loaded', 'Patient fetched successfully');
173
+ // Auto-select the principal by default so the worker can proceed immediately.
174
+ setSelectedPatient('principal');
71
175
  } catch (err: any) {
72
- const errorMessage = err.message || 'Failed to fetch client data';
73
- handleCancel();
74
- showAlert('error', 'Fetch Failed', errorMessage);
176
+ // Communicate the failure on the page (keep the worker's input so they can retry).
177
+ const errorMessage = getReadableErrorMessage(err, 'We couldn’t reach the Client Registry.');
178
+ setPrincipal(null);
179
+ setFetchError(errorMessage);
75
180
  } finally {
76
181
  setLoading(false);
77
182
  }
78
183
  };
184
+
185
+ const getSearchClientDto = (): ClientRegistrySearchRequest => {
186
+ return {
187
+ identificationNumber: identifierValue.trim(),
188
+ identificationType: identifierType,
189
+ locationUuid,
190
+ };
191
+ };
192
+
193
+ const isValidSeatchClientPayload = (payload: ClientRegistrySearchRequest): boolean => {
194
+ if (!payload.identificationNumber) {
195
+ showAlert('error', 'Please enter a valid identification number', '');
196
+ return false;
197
+ }
198
+ if (!payload.identificationType) {
199
+ showAlert('error', 'Please enter a valid identification type', '');
200
+ return false;
201
+ }
202
+ if (!payload.locationUuid) {
203
+ showAlert('error', 'No default location selected', '');
204
+ return false;
205
+ }
206
+ return true;
207
+ };
208
+
209
+ const generateCustomSmsPayload = (): RequestCustomOtpDto => {
210
+ // Manual search always populates identifierValue/identifierType. The EMT-handoff
211
+ // path (see the `emtCrId` effect above) skips that form entirely, so identifierValue
212
+ // stays blank — fall back to the CR id, which is always present, rather than sending
213
+ // an empty identifier and blocking the request downstream.
214
+ const identificationNumber = identifierValue.trim() || principal?.id || '';
215
+ const identificationType = identifierValue.trim() ? identifierType : HieIdentificationType.Cr;
216
+ return {
217
+ identificationNumber,
218
+ identificationType,
219
+ locationUuid,
220
+ phoneNumber: principal?.phone ? formatPhoneNumberForOTP(principal.phone ?? '') : '',
221
+ };
222
+ };
223
+
79
224
  const isValidCustomSmsPayload = (payload: RequestCustomOtpDto): boolean => {
80
225
  if (!payload.identificationNumber) {
81
226
  showAlert('error', 'Please enter a valid identification number', '');
@@ -89,9 +234,13 @@ const RegistryComponent: React.FC<RegistryComponentProps> = () => {
89
234
  showAlert('error', 'No default location selected', '');
90
235
  return false;
91
236
  }
237
+ // No hard block on a missing phone number: biometric verification (the first step
238
+ // in the workflow drawer) doesn't need one, and if the flow does fall through to
239
+ // OTP, the OTP step already offers an "alternative phone number" override with a
240
+ // "Patient has no phone" reason — this gate was pre-empting that path entirely.
92
241
  return true;
93
242
  };
94
- const showAlert = (alertType: 'error' | 'success', title: string, subtitle: string) => {
243
+ const showAlert = (alertType: 'error' | 'success' | 'info' | 'warning', title: string, subtitle: string) => {
95
244
  showSnackbar({
96
245
  kind: alertType,
97
246
  title: title,
@@ -101,70 +250,96 @@ const RegistryComponent: React.FC<RegistryComponentProps> = () => {
101
250
  const handleSelectedPatient = (sp: string) => {
102
251
  setSelectedPatient(sp);
103
252
  };
104
- const handleOtpVerification = () => {
105
- setDisplayOtpModal(true);
253
+ // Open the registration workflow drawer, which handles biometric + OTP verification,
254
+ // consent and starting the visit inline (replacing the old OTP/client-details modals).
255
+ const handleOtpVerification = async () => {
256
+ const smsPayload = generateCustomSmsPayload();
257
+ if (!isValidCustomSmsPayload(smsPayload)) {
258
+ return;
259
+ }
260
+ setRequestCustomOtpDto(smsPayload);
261
+ const client = getPatient();
262
+ if (client?.id) {
263
+ await searchAmrsPatient(client.id);
264
+ }
265
+ setDisplayDrawer(true);
266
+ };
267
+ const handleClearIdentifier = () => {
268
+ setIdentifierValue('');
269
+ setValidationError('');
270
+ setNotFound(false);
106
271
  };
107
272
  const handleModelClose = () => {
108
273
  setDisplayOtpModal(false);
109
274
  };
110
275
  const onClientDetailsModalClose = () => {
276
+ onClientDetailsModalClose();
111
277
  setDisplayClientDetailsModal(false);
112
278
  };
113
- const handleClientDetailsSubmit = () => {
114
- return;
279
+ const handleClientDetailsSubmit = async (crId: string) => {
280
+ setDisplayClientDetailsModal(false);
281
+ await searchAmrsPatient(crId);
282
+ setDisplayDrawer(true);
115
283
  };
116
284
  const handleEmergencyRegistration = () => {
117
285
  window.location.href = `${window.spaBase}/patient-registration`;
118
286
  };
119
287
  const handleManualRegistration = () => {
120
- setDisplaytriageModal(false);
288
+ setdisplaytStartVisitModal(false);
121
289
  handleEmergencyRegistration();
122
290
  };
123
- const handleSendClientToTriage = async (crId: string) => {
124
- onClientDetailsModalClose();
291
+ // Look the client up in the EMR. The found / not-found result is surfaced in the
292
+ // workflow drawer (see amrsPatients / amrsChecked) so the user can decide whether to
293
+ // create the patient in the EMR or sync an existing record.
294
+ const searchAmrsPatient = async (crId: string) => {
295
+ setAmrsChecked(false);
125
296
  const resp = await searchPatientByCrNumber(crId);
126
297
  if (resp.totalCount > 0) {
127
- showAlert(
128
- 'success',
129
- `${resp.totalCount} ${resp.totalCount > 0 ? 'Patients' : 'Patient'} found in the system with ${crId}`,
130
- '',
131
- );
132
- setAmrsPatients(resp.results);
133
- setDisplaytriageModal(true);
298
+ const validPatients = validateAmrsPatient(crId, resp.results ?? []);
299
+ setAmrsPatients(validPatients);
134
300
  } else {
135
- showAlert('error', 'Patient not found in the system', '');
136
301
  setAmrsPatients([]);
137
- setDisplaytriageModal(true);
302
+ }
303
+ setAmrsChecked(true);
304
+ };
305
+ // Refresh the matched EMR record so the latest state is used for the visit.
306
+ const syncAmrsPatient = async () => {
307
+ const client = getPatient();
308
+ if (!client?.id) {
309
+ return;
310
+ }
311
+ setSyncingAmrs(true);
312
+ try {
313
+ await searchAmrsPatient(client.id);
314
+ showAlert('success', 'EMR record refreshed', '');
315
+ } catch (e) {
316
+ showAlert('error', 'Could not sync the EMR record', '');
317
+ } finally {
318
+ setSyncingAmrs(false);
138
319
  }
139
320
  };
321
+ const validateAmrsPatient = (crNo: string, patients: Patient[]) => {
322
+ return patients.filter((p) => {
323
+ return p.identifiers.some((id) => {
324
+ return id.identifier === crNo && id.identifierType.uuid === IdentifierTypesUuids.CLIENT_REGISTRY_NO_UUID;
325
+ });
326
+ });
327
+ };
140
328
  const onSendToTriageModalClose = (modalCloseResp?: { success: boolean }) => {
141
- setDisplaytriageModal(false);
329
+ setdisplaytStartVisitModal(false);
142
330
  if (modalCloseResp && modalCloseResp.success) {
143
- navigate('/triage');
331
+ window.location.href = `${window.spaBase}/home/triage`;
144
332
  }
145
333
  };
146
334
  const handleSendToTriageModalSubmit = () => {};
147
335
  const getPatient = (): HieClient => {
148
- if (selectedPatient === 'principal') {
149
- return principal;
150
- } else if (selectedPatient === 'dependants') {
151
- return selectedDependant;
152
- } else {
336
+ if (!principal || selectedPatient === 'principal') {
153
337
  return principal;
154
338
  }
339
+ const match = principal.dependants?.find((d) => d.result[0].id === selectedPatient);
340
+ return match ? (match.result[0] as unknown as HieClient) : principal;
155
341
  };
156
- const handleSelectedDependant = (dependantId: string) => {
157
- const dependants = principal.dependants;
158
- if (dependants.length > 0) {
159
- const dependant = dependants.find((d) => {
160
- return d.result[0].id === dependantId;
161
- });
162
- if (dependant) {
163
- setSelectedDependant(dependant.result[0] as unknown as HieClient);
164
- }
165
- }
166
- };
167
- const createAmrsPatient = async () => {
342
+ const createAmrsPatient = async (): Promise<Patient | undefined> => {
168
343
  const patient = getPatient();
169
344
  if (!patient) {
170
345
  showAlert('error', 'Principal or dependant not selected', '');
@@ -175,6 +350,7 @@ const RegistryComponent: React.FC<RegistryComponentProps> = () => {
175
350
  if (resp) {
176
351
  showAlert('success', 'Patient created succesfully', '');
177
352
  setAmrsPatients([resp]);
353
+ return resp;
178
354
  }
179
355
  } catch (e) {
180
356
  const errorResp = e['responseBody'] ?? e.message;
@@ -187,211 +363,415 @@ const RegistryComponent: React.FC<RegistryComponentProps> = () => {
187
363
  }
188
364
  }
189
365
  };
366
+ // Create the AMRS visit for the verified client once the workflow drawer is submitted,
367
+ // add them to the selected triage queue, and raise the consultation clearance so they
368
+ // wait "Awaiting clearance" until Accounting settles the fee (exempt patients auto-clear).
369
+ const getVisitAttributes = (paymentMethod: 'cash' | 'insurance', insurance: string) => {
370
+ const attributes: VisitAttribute[] = [];
371
+ if (paymentMethod) {
372
+ attributes.push({
373
+ attributeType: '8553afa0-bdb9-4d3c-8a98-05fa9350aa85',
374
+ value: paymentMethod === "cash"
375
+ ? cashPaymentModeUuid
376
+ : shaPaymentModeUuid // /sha|shif/i.test(insurance) ? shaPaymentModeUuid : "",
377
+ });
378
+ }
379
+ return attributes;
380
+ }
381
+ const startVisitForClient = async (details: {
382
+ patientCategory: string;
383
+ room: string;
384
+ roomUuid: string;
385
+ visitType: string;
386
+ method?: 'cash' | 'insurance';
387
+ insurance?: string;
388
+ }) => {
389
+ // Ensure the client exists in AMRS before starting a visit.
390
+ let amrsPatient = amrsPatients[0];
391
+ if (!amrsPatient) {
392
+ amrsPatient = await createAmrsPatient();
393
+ }
394
+ if (!amrsPatient?.uuid) {
395
+ showAlert('error', 'No patient available to start a visit for', '');
396
+ return;
397
+ }
398
+ if (!details.roomUuid) {
399
+ showAlert('error', 'Selected triage room could not be resolved to a queue', '');
400
+ return;
401
+ }
402
+ const visitType =
403
+ details.visitType === 'Inpatient'
404
+ ? VisitTypeUuids.INPATIENT_VISIT_TYPE_UUID
405
+ : VisitTypeUuids.OPD_VISIT_TYPE_UUID;
406
+ const visitDto: CreateVisitDto = {
407
+ visitType,
408
+ location: locationUuid ?? '',
409
+ startDatetime: null,
410
+ stopDatetime: null,
411
+ patient: amrsPatient.uuid,
412
+ };
413
+ const visitAttributes = getVisitAttributes(details.method, details.insurance);
414
+ if (visitAttributes.length > 0) {
415
+ visitDto['attributes'] = visitAttributes;
416
+ }
417
+ try {
418
+ const visit = await createVisit(visitDto);
419
+ if (!visit?.uuid) {
420
+ showAlert('error', 'Error creating visit', '');
421
+ return;
422
+ }
423
+
424
+ // Place the patient in the selected triage queue (Waiting / Normal priority).
425
+ const queueEntryDto: QueueEntryDto = {
426
+ visit: { uuid: visit.uuid },
427
+ queueEntry: {
428
+ status: { uuid: QUEUE_STATUS_UUIDS.WAITING_UUID },
429
+ priority: { uuid: QUEUE_PRIORITIES_UUIDS.NORMAL_PRIORITY_UUID },
430
+ queue: { uuid: details.roomUuid },
431
+ patient: { uuid: amrsPatient.uuid },
432
+ startedAt: visit.startDatetime ?? new Date().toISOString(),
433
+ sortWeight: 0,
434
+ },
435
+ };
436
+ await createQueueEntry(queueEntryDto);
437
+
438
+ // Raise the consultation clearance for CASH patients only — they sit
439
+ // "Awaiting payment" in the Accounting dashboard until the fee is settled.
440
+ // SHA/insurance patients are cleared through the SHA claim (their real
441
+ // active visit is the source of truth under "Pending clearance"), so we
442
+ // don't raise a cash clearance record for them.
443
+ /*
444
+ const client = getPatient();
445
+ const isCash = details.method !== 'insurance';
446
+ if (isCash) {
447
+ // A patient who prepaid on an earlier visit clears without a new fee.
448
+ const prepaid = client?.id ? findOpenPrepaidService(client.id) : undefined;
449
+ createConsultationClearance({
450
+ patientName: [client?.first_name, client?.middle_name, client?.last_name].filter(Boolean).join(' '),
451
+ crNumber: client?.id ?? '',
452
+ locationUuid: locationUuid ?? '',
453
+ queue: details.room,
454
+ visitType: details.visitType,
455
+ payer: 'Cash',
456
+ exempt: false,
457
+ preCleared: !!prepaid,
458
+ amountOverride: prepaid?.amount,
459
+ });
460
+ if (prepaid) {
461
+ fulfillPrepaidService(prepaid.id);
462
+ }
463
+ }
464
+ */
465
+
466
+
467
+ showAlert('success', 'Patient sent to the triage queue, awaiting clearance', '');
468
+ // Land on the accounting Pending clearance section so the new patient can be cleared.
469
+ // window.location.href = `${window.spaBase}/home/billing`;
470
+ } catch (e) {
471
+ const errorResp = e['responseBody'] ?? e.message;
472
+ showAlert('error', 'Error creating visit', '');
473
+ const errors = getErrorMessages(errorResp);
474
+ if (errors && errors.length > 0) {
475
+ for (let error of errors) {
476
+ showAlert('error', error, '');
477
+ }
478
+ }
479
+ }
480
+ };
190
481
  const handleCancel = () => {
191
482
  setPrincipal(null);
192
- setSelectedDependant(null);
193
483
  setAmrsPatients([]);
194
484
  setSelectedPatient(null);
195
485
  setIdentifierValue('');
486
+ setValidationError('');
487
+ setNotFound(false);
488
+ setFetchError('');
196
489
  setIdentifierType('National ID');
197
490
  setDisplayClientDetailsModal(false);
198
491
  setDisplayOtpModal(false);
199
- setDisplaytriageModal(false);
492
+ setdisplaytStartVisitModal(false);
200
493
  setSelectedPatient('principal');
201
494
  };
202
495
  const handleOtpSuccessfullVerification = () => {
203
496
  setDisplayOtpModal(false);
204
497
  setDisplayClientDetailsModal(true);
205
498
  };
206
- const registerOnAfyaYangu = () => {
207
- window.open('https://afyayangu.go.ke/', '_blank');
208
- };
209
499
  return (
210
500
  <>
211
501
  <div className={styles.registryLayout}>
502
+ <div className={styles.headerSection}>
503
+ <FacilityAndWorkerSlot />
504
+ </div>
212
505
  <div className={styles.mainContent}>
213
506
  <div className={styles.registryHeader}>
214
- <h4>Client Registry</h4>
507
+ <h4>Registration</h4>
215
508
  <p>Please enter identification number to begin</p>
216
509
  </div>
217
510
  <div className={styles.registryContent}>
218
- <div className={styles.formRow}>
219
- <div className={styles.formControl}>
511
+ <Layer className={styles.card}>
512
+ <div className={styles.sectionHeader}>
513
+ <Identification size={20} className={styles.sectionIcon} />
514
+ <h5 className={styles.sectionTitle}>Search client</h5>
515
+ </div>
516
+ <p className={styles.formIntro}>
517
+ Search the national Client Registry by identification number to begin.
518
+ </p>
519
+ <div className={styles.formGrid}>
220
520
  <Dropdown
221
521
  id="identifier-type-dropdown"
222
- label="Identifier Type"
223
- titleText="Select Identifier Type"
522
+ label="Select identifier type"
523
+ titleText={
524
+ <span className={styles.fieldLabel}>
525
+ Identifier type<span className={styles.required}>*</span>
526
+ </span>
527
+ }
224
528
  items={IDENTIFIER_TYPES}
225
529
  selectedItem={identifierType}
226
- onChange={({ selectedItem }) => setIdentifierType(selectedItem as IdentifierType)}
530
+ onChange={({ selectedItem }) => {
531
+ const nextType = selectedItem as IdentifierType;
532
+ setIdentifierType(nextType);
533
+ if (!identifierValue.trim()) {
534
+ setValidationError(`${nextType} number is required`);
535
+ } else {
536
+ setValidationError('');
537
+ }
538
+ }}
227
539
  />
540
+ <div className={styles.clearableInput}>
541
+ <TextInput
542
+ id="identifier-value"
543
+ labelText={
544
+ <span className={styles.fieldLabel}>
545
+ {identifierType} number<span className={styles.required}>*</span>
546
+ </span>
547
+ }
548
+ value={identifierValue}
549
+ onChange={(e) => {
550
+ setIdentifierValue(e.target.value);
551
+ if (validationError) {
552
+ setValidationError('');
553
+ }
554
+ if (notFound) {
555
+ setNotFound(false);
556
+ }
557
+ }}
558
+ onBlur={() => {
559
+ if (!identifierValue.trim()) {
560
+ setValidationError(`${identifierType} number is required`);
561
+ }
562
+ }}
563
+ onKeyDown={(e) => {
564
+ if (e.key === 'Enter') {
565
+ handleSearchPatient();
566
+ }
567
+ }}
568
+ invalid={!!validationError}
569
+ invalidText={validationError}
570
+ placeholder={`e.g. enter ${identifierType.toLowerCase()} number`}
571
+ />
572
+ {identifierValue && !validationError ? (
573
+ <button
574
+ type="button"
575
+ className={styles.clearBtn}
576
+ onClick={handleClearIdentifier}
577
+ aria-label="Clear field"
578
+ >
579
+ <Close size={16} />
580
+ </button>
581
+ ) : null}
582
+ </div>
228
583
  </div>
229
-
230
- <div className={styles.formControl}>
231
- <TextInput
232
- id="identifier-value"
233
- labelText={`${identifierType} Value`}
234
- value={identifierValue}
235
- onChange={(e) => setIdentifierValue(e.target.value)}
236
- placeholder={`Enter ${identifierType.toLowerCase()} value`}
237
- />
584
+ <div className={styles.formBtn}>
585
+ <Button
586
+ className={styles.searchButton}
587
+ size="sm"
588
+ kind="primary"
589
+ renderIcon={loading ? undefined : Search}
590
+ onClick={handleSearchPatient}
591
+ disabled={loading || !identifierValue.trim()}
592
+ >
593
+ {loading ? (
594
+ <span className={styles.btnLoading}>
595
+ <Loading small withOverlay={false} className={styles.btnSpinner} description="Searching" />
596
+ Searching…
597
+ </span>
598
+ ) : (
599
+ 'Search'
600
+ )}
601
+ </Button>
602
+ <Button size="sm" kind="secondary" renderIcon={WarningAlt} onClick={handleEmergencyRegistration}>
603
+ Emergency Registration
604
+ </Button>
238
605
  </div>
239
- </div>
240
- <div className={styles.formRow}>
241
- <div className={styles.formControl}>
242
- <div className={styles.formBtn}>
243
- <Button
244
- className={styles.registrySearchBtn}
245
- kind="primary"
246
- onClick={handleSearchPatient}
247
- disabled={loading}
248
- >
249
- {loading ? <InlineLoading description="Searching..." /> : 'Search'}
250
- </Button>
251
- <Button className={styles.registrySearchBtn} kind="secondary" onClick={handleEmergencyRegistration}>
252
- Emergency Registration
253
- </Button>
254
- <Button className={styles.registrySearchBtn} kind="tertiary" onClick={registerOnAfyaYangu}>
255
- Register on Afya Yangu
256
- </Button>
606
+ </Layer>
607
+ {notFound ? (
608
+ <div className={styles.emptyState}>
609
+ <div className={styles.emptyIcon}>
610
+ <SearchLocate size={24} />
611
+ </div>
612
+ <div>
613
+ <h5 className={styles.emptyTitle}>No match found</h5>
614
+ <p className={styles.emptyText}>
615
+ No client matching that <strong>{identifierType}</strong> was found in the Client Registry. Ask the
616
+ patient to register on the{' '}
617
+ <a href="https://afyayangu.go.ke/" target="_blank" rel="noopener noreferrer">
618
+ Afya Yangu portal
619
+ </a>{' '}
620
+ first, then search again — or use <strong>Emergency Registration</strong>.
621
+ </p>
257
622
  </div>
258
623
  </div>
259
- </div>
624
+ ) : (
625
+ <></>
626
+ )}
627
+ {fetchError ? (
628
+ <div className={styles.errorState}>
629
+ <div className={styles.errorStateIcon}>
630
+ <WarningAltFilled size={24} />
631
+ </div>
632
+ <div>
633
+ <h5 className={styles.errorStateTitle}>Couldn&apos;t complete the search</h5>
634
+ <p className={styles.errorStateText}>{fetchError} Please check your connection and try again.</p>
635
+ </div>
636
+ </div>
637
+ ) : (
638
+ <></>
639
+ )}
260
640
  {principal ? (
261
- <div className={styles.formRow}>
641
+ <Layer className={styles.card}>
262
642
  <div className={styles.hieData}>
643
+ <div className={styles.sectionHeader}>
644
+ <UserMultiple size={20} className={styles.sectionIcon} />
645
+ <h5 className={styles.sectionTitle}>Principal &amp; dependants</h5>
646
+ </div>
647
+ <p className={styles.formIntro}>
648
+ Select the patient to proceed with, then ask them to share the OTP sent to their phone.
649
+ </p>
263
650
  <div className={styles.selectionHeader}>
264
- <h5>Please select one patient and request patient to share the OTP sent</h5>
651
+ <p className={styles.summaryLine}>
652
+ <span className={styles.summaryPrincipal} />1 principal
653
+ <span className={styles.summaryDot} />
654
+ <span className={styles.summaryDependant} />
655
+ {principal.dependants?.length ?? 0}{' '}
656
+ {(principal.dependants?.length ?? 0) === 1 ? 'dependant' : 'dependants'}
657
+ </p>
265
658
  </div>
266
- <div className={styles.patientSelect}>
267
- <div className={styles.patientSelectRadio}>
268
- <RadioButtonGroup
269
- defaultSelected="principal"
270
- legendText="Patient"
271
- onChange={(v) => handleSelectedPatient(v as string)}
272
- name="radio-button-default-group"
659
+ <div className={styles.principalDependantSection}>
660
+ <div className={styles.optionList}>
661
+ <div
662
+ className={`${styles.optionCard} ${styles.principalOption} ${
663
+ selectedPatient === 'principal' ? styles.optionSelected : ''
664
+ }`}
665
+ onClick={() => handleSelectedPatient('principal')}
273
666
  >
274
- <RadioButton id="principal" labelText="Principal" value="principal" />
275
- <RadioButton id="dependants" labelText="Dependants" value="dependants" />
276
- </RadioButtonGroup>
667
+ <RadioButton
668
+ id="select-principal"
669
+ name="patient-selection"
670
+ labelText=""
671
+ value="principal"
672
+ checked={selectedPatient === 'principal'}
673
+ onChange={() => handleSelectedPatient('principal')}
674
+ />
675
+ <div className={styles.optionBody}>
676
+ <div className={styles.optionTopline}>
677
+ <span className={styles.optionName}>
678
+ {maskExceptFirstAndLast(principal.first_name)} {maskExceptFirstAndLast(principal.middle_name)}{' '}
679
+ {maskExceptFirstAndLast(principal.last_name)}
680
+ </span>
681
+ <Tag type="blue" size="sm">
682
+ Principal
683
+ </Tag>
684
+ </div>
685
+ <span className={styles.optionCr}>CR {maskCrNumber(principal.id)}</span>
686
+ </div>
687
+ </div>
688
+ {principal.dependants
689
+ ?.filter((d) => d?.result?.[0])
690
+ .map((d) => {
691
+ const dependant = d.result[0];
692
+ const relationship = d.relationship;
693
+ return (
694
+ <div
695
+ key={dependant.id}
696
+ className={`${styles.optionCard} ${styles.dependantOption} ${
697
+ selectedPatient === dependant.id ? styles.optionSelected : ''
698
+ }`}
699
+ onClick={() => handleSelectedPatient(dependant.id)}
700
+ >
701
+ <RadioButton
702
+ id={`select-${dependant.id}`}
703
+ name="patient-selection"
704
+ labelText=""
705
+ value={dependant.id}
706
+ checked={selectedPatient === dependant.id}
707
+ onChange={() => handleSelectedPatient(dependant.id)}
708
+ />
709
+ <div className={styles.optionBody}>
710
+ <div className={styles.optionTopline}>
711
+ <span className={styles.optionName}>
712
+ {maskExceptFirstAndLast(dependant.first_name)} {maskExceptFirstAndLast(dependant.middle_name)}{' '}
713
+ {maskExceptFirstAndLast(dependant.last_name)}
714
+ </span>
715
+ <Tag type="teal" size="sm">
716
+ {relationship || 'Dependant'}
717
+ </Tag>
718
+ </div>
719
+ <span className={styles.optionCr}>CR {maskCrNumber(dependant.id)}</span>
720
+ </div>
721
+ </div>
722
+ );
723
+ })}
277
724
  </div>
278
725
  <div className={styles.patientConfirmSelection}>
279
726
  <div className={styles.btnContainer}>
280
- <Button kind="primary" onClick={handleOtpVerification}>
727
+ <Button kind="primary" size="sm" onClick={handleOtpVerification}>
281
728
  {' '}
282
729
  Confirm
283
730
  </Button>
284
731
  </div>
285
732
  <div className={styles.btnContainer}>
286
- <Button kind="secondary" onClick={handleCancel}>
733
+ <Button kind="secondary" size="sm" onClick={handleCancel}>
287
734
  Cancel
288
735
  </Button>
289
736
  </div>
290
737
  </div>
291
- </div>
292
- <div className={styles.principalDependantSection}>
293
- {selectedPatient === 'principal' ? (
294
- <>
295
- <Table>
296
- <TableHead>
297
- <TableRow>
298
- <TableHeader>Name</TableHeader>
299
- <TableHeader>CR</TableHeader>
300
- <TableHeader>Phone No</TableHeader>
301
- <TableHeader>ID No</TableHeader>
302
- </TableRow>
303
- </TableHead>
304
- <TableBody>
305
- <TableRow>
306
- <TableCell>
307
- {principal.first_name} {maskExceptFirstAndLast(principal.middle_name)}{' '}
308
- {maskExceptFirstAndLast(principal.last_name)}
309
- </TableCell>
310
- <TableCell>{maskValue(principal.id)}</TableCell>
311
- <TableCell>{maskValue(principal.phone)}</TableCell>
312
- <TableCell>{maskValue(principal.identification_number)}</TableCell>
313
- </TableRow>
314
- </TableBody>
315
- </Table>
316
- </>
317
- ) : (
318
- <></>
319
- )}
320
- {selectedPatient === 'dependants' ? (
321
- <>
322
- <RadioButtonGroup
323
- defaultSelected=""
324
- helperText=""
325
- invalidText=""
326
- legendText=""
327
- name="dependant-group"
328
- onChange={(dependantId) => handleSelectedDependant(dependantId as string)}
329
- >
330
- {principal.dependants.map((d) => {
331
- const dependant = d.result[0];
332
- const relationship = d.relationship;
333
- return (
334
- <RadioButton
335
- id={dependant.id}
336
- labelText={formatDependantDisplayData(dependant, relationship)}
337
- value={dependant.id}
338
- />
339
- );
340
- })}
341
- </RadioButtonGroup>
342
- </>
343
- ) : (
344
- <></>
345
- )}
346
-
347
- {displayOtpModal ? (
348
- <OtpVerificationModal
349
- requestCustomOtpDto={requestCustomOtpDto}
350
- phoneNumber={principal.phone}
351
- open={displayOtpModal}
352
- onModalClose={handleModelClose}
353
- onOtpSuccessfullVerification={handleOtpSuccessfullVerification}
354
- />
355
- ) : (
356
- <></>
357
- )}
358
-
359
- {principal && displayClientDetailsModal ? (
360
- <>
361
- <ClientDetailsModal
362
- client={getPatient()}
363
- open={displayClientDetailsModal}
364
- onModalClose={onClientDetailsModalClose}
365
- onSubmit={handleClientDetailsSubmit}
366
- onSendClientToTriage={handleSendClientToTriage}
367
- />{' '}
368
- </>
369
- ) : (
370
- <></>
371
- )}
372
738
 
373
- {principal && displaytriageModal ? (
374
- <>
375
- <SendToTriageModal
376
- client={getPatient()}
377
- patients={amrsPatients}
378
- open={displaytriageModal}
379
- onModalClose={onSendToTriageModalClose}
380
- onSubmit={handleSendToTriageModalSubmit}
381
- onCreateAmrsPatient={createAmrsPatient}
382
- onManualRegistration={handleManualRegistration}
383
- />
384
- </>
385
- ) : (
386
- <></>
387
- )}
739
+ <WorkflowDrawer
740
+ open={displayDrawer}
741
+ client={getPatient()}
742
+ clientType={
743
+ selectedPatient === 'principal'
744
+ ? 'Principal'
745
+ : principal.dependants?.find((d) => d.result[0]?.id === selectedPatient)?.relationship ||
746
+ 'Dependant'
747
+ }
748
+ locationUuid={locationUuid}
749
+ requestCustomOtpDto={generateCustomSmsPayload()}
750
+ phoneNumber={principal.phone ? formatPhoneNumberForOTP(principal.phone) : ''}
751
+ amrsPatient={amrsPatients[0] ?? null}
752
+ amrsChecked={amrsChecked}
753
+ syncingAmrs={syncingAmrs}
754
+ onCreatePatient={createAmrsPatient}
755
+ onSyncPatient={syncAmrsPatient}
756
+ onClose={() => {
757
+ setDisplayDrawer(false);
758
+ setAmrsChecked(false);
759
+ }}
760
+ onStartVisit={(details) => {
761
+ setDisplayDrawer(false);
762
+ startVisitForClient(details);
763
+ }}
764
+ />
388
765
  </div>
389
766
  </div>
390
- </div>
767
+ </Layer>
391
768
  ) : (
392
769
  <></>
393
770
  )}
394
771
  </div>
772
+ <div className={styles.registeredPatientsSection}>
773
+ <RegistrationList />
774
+ </div>
395
775
  </div>
396
776
  </div>
397
777
  </>