@ampath/esm-dha-workflow-app 4.0.0-next.34 → 4.0.0-next.340

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 (754) 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/1197.js +1 -0
  5. package/dist/1277.js +1 -0
  6. package/dist/1277.js.map +1 -0
  7. package/dist/1362.js +1 -0
  8. package/dist/1362.js.map +1 -0
  9. package/dist/1551.js +1 -0
  10. package/dist/1551.js.map +1 -0
  11. package/dist/1556.js +1 -0
  12. package/dist/1556.js.map +1 -0
  13. package/dist/1925.js +1 -0
  14. package/dist/1925.js.map +1 -0
  15. package/dist/1927.js +1 -0
  16. package/dist/1927.js.map +1 -0
  17. package/dist/203.js +1 -0
  18. package/dist/203.js.map +1 -0
  19. package/dist/2054.js +1 -0
  20. package/dist/2054.js.map +1 -0
  21. package/dist/2093.js +1 -0
  22. package/dist/2093.js.map +1 -0
  23. package/dist/2177.js +2 -0
  24. package/dist/2177.js.map +1 -0
  25. package/dist/2200.js +1 -0
  26. package/dist/2200.js.map +1 -0
  27. package/dist/2230.js +1 -0
  28. package/dist/2230.js.map +1 -0
  29. package/dist/2493.js +1 -0
  30. package/dist/2493.js.map +1 -0
  31. package/dist/2914.js +1 -0
  32. package/dist/2914.js.map +1 -0
  33. package/dist/2936.js +1 -0
  34. package/dist/2936.js.map +1 -0
  35. package/dist/2988.js +1 -0
  36. package/dist/2988.js.map +1 -0
  37. package/dist/3041.js +1 -0
  38. package/dist/3041.js.map +1 -0
  39. package/dist/307.js +1 -0
  40. package/dist/307.js.map +1 -0
  41. package/dist/3099.js +1 -0
  42. package/dist/3184.js +2 -0
  43. package/dist/3184.js.map +1 -0
  44. package/dist/3202.js +1 -0
  45. package/dist/3202.js.map +1 -0
  46. package/dist/3222.js +1 -0
  47. package/dist/3222.js.map +1 -0
  48. package/dist/347.js +1 -0
  49. package/dist/347.js.map +1 -0
  50. package/dist/4003.js +1 -0
  51. package/dist/4003.js.map +1 -0
  52. package/dist/4008.js +1 -0
  53. package/dist/4008.js.map +1 -0
  54. package/dist/4055.js +1 -0
  55. package/dist/4205.js +1 -0
  56. package/dist/4205.js.map +1 -0
  57. package/dist/4225.js +1 -0
  58. package/dist/4225.js.map +1 -0
  59. package/dist/4231.js +1 -0
  60. package/dist/4231.js.map +1 -0
  61. package/dist/4300.js +1 -0
  62. package/dist/4335.js +1 -0
  63. package/dist/4353.js +1 -0
  64. package/dist/4353.js.map +1 -0
  65. package/dist/4431.js +1 -0
  66. package/dist/4431.js.map +1 -0
  67. package/dist/4454.js +1 -0
  68. package/dist/4454.js.map +1 -0
  69. package/dist/4457.js +2 -0
  70. package/dist/4457.js.LICENSE.txt +282 -0
  71. package/dist/4457.js.map +1 -0
  72. package/dist/446.js +1 -0
  73. package/dist/446.js.map +1 -0
  74. package/dist/4605.js +1 -0
  75. package/dist/4605.js.map +1 -0
  76. package/dist/4611.js +1 -0
  77. package/dist/4611.js.map +1 -0
  78. package/dist/4652.js +1 -0
  79. package/dist/4674.js +1 -0
  80. package/dist/4674.js.map +1 -0
  81. package/dist/4755.js +1 -0
  82. package/dist/4755.js.map +1 -0
  83. package/dist/4986.js +1 -0
  84. package/dist/4986.js.map +1 -0
  85. package/dist/5097.js +1 -0
  86. package/dist/5097.js.map +1 -0
  87. package/dist/5119.js +1 -0
  88. package/dist/5119.js.map +1 -0
  89. package/dist/5167.js +1 -0
  90. package/dist/5167.js.map +1 -0
  91. package/dist/5380.js +1 -0
  92. package/dist/5380.js.map +1 -0
  93. package/dist/5422.js +1 -0
  94. package/dist/5422.js.map +1 -0
  95. package/dist/5576.js +1 -0
  96. package/dist/5576.js.map +1 -0
  97. package/dist/5851.js +1 -0
  98. package/dist/5851.js.map +1 -0
  99. package/dist/5961.js +1 -0
  100. package/dist/5961.js.map +1 -0
  101. package/dist/6177.js +1 -0
  102. package/dist/6177.js.map +1 -0
  103. package/dist/6264.js +1 -0
  104. package/dist/6264.js.map +1 -0
  105. package/dist/6540.js +2 -0
  106. package/dist/6540.js.map +1 -0
  107. package/dist/6606.js +1 -0
  108. package/dist/6606.js.map +1 -0
  109. package/dist/6720.js +1 -0
  110. package/dist/6720.js.map +1 -0
  111. package/dist/6824.js +1 -0
  112. package/dist/6824.js.map +1 -0
  113. package/dist/6942.js +1 -0
  114. package/dist/6942.js.map +1 -0
  115. package/dist/71.js +1 -0
  116. package/dist/71.js.map +1 -0
  117. package/dist/7207.js +1 -0
  118. package/dist/7207.js.map +1 -0
  119. package/dist/7240.js +1 -0
  120. package/dist/7240.js.map +1 -0
  121. package/dist/7255.js +1 -0
  122. package/dist/7255.js.map +1 -0
  123. package/dist/7420.js +1 -0
  124. package/dist/7420.js.map +1 -0
  125. package/dist/7521.js +1 -0
  126. package/dist/7521.js.map +1 -0
  127. package/dist/7557.js +1 -0
  128. package/dist/7557.js.map +1 -0
  129. package/dist/7717.js +1 -0
  130. package/dist/7717.js.map +1 -0
  131. package/dist/7830.js +2 -0
  132. package/dist/7830.js.map +1 -0
  133. package/dist/7941.js +1 -0
  134. package/dist/7941.js.map +1 -0
  135. package/dist/8091.js +1 -0
  136. package/dist/8091.js.map +1 -0
  137. package/dist/810.js +1 -2
  138. package/dist/810.js.map +1 -1
  139. package/dist/8558.js +1 -0
  140. package/dist/8558.js.map +1 -0
  141. package/dist/8733.js +1 -0
  142. package/dist/8733.js.map +1 -0
  143. package/dist/874.js +1 -0
  144. package/dist/874.js.map +1 -0
  145. package/dist/8895.js +1 -0
  146. package/dist/8895.js.map +1 -0
  147. package/dist/9070.js +1 -0
  148. package/dist/9070.js.map +1 -0
  149. package/dist/9091.js +1 -0
  150. package/dist/9091.js.map +1 -0
  151. package/dist/9093.js +1 -0
  152. package/dist/9093.js.map +1 -0
  153. package/dist/9338.js +1 -0
  154. package/dist/9338.js.map +1 -0
  155. package/dist/9418.js +2 -0
  156. package/dist/9418.js.LICENSE.txt +1 -0
  157. package/dist/9418.js.map +1 -0
  158. package/dist/9428.js +1 -0
  159. package/dist/9428.js.map +1 -0
  160. package/dist/9583.js +2 -0
  161. package/dist/9583.js.map +1 -0
  162. package/dist/esm-dha-workflow-app.js +1 -1
  163. package/dist/esm-dha-workflow-app.js.buildmanifest.json +1627 -214
  164. package/dist/esm-dha-workflow-app.js.map +1 -1
  165. package/dist/main.js +1 -1
  166. package/dist/main.js.map +1 -1
  167. package/dist/routes.json +1 -1
  168. package/local-config.json +5 -0
  169. package/package.json +16 -6
  170. package/src/admissions/admission-request-list/admission-request-list.scss +0 -0
  171. package/src/admissions/admission-request-list/admission-request-list.tsx +263 -0
  172. package/src/admissions/admissions-dashboard.component.scss +15 -0
  173. package/src/admissions/admissions-dashboard.component.tsx +277 -0
  174. package/src/admissions/admissions.resource.ts +233 -0
  175. package/src/admissions/admitted-list/admitted-patients-list.tsx +206 -0
  176. package/src/admissions/awaiting-discharge-list/awaiting-discharge-list.tsx +197 -0
  177. package/src/admissions/bed-assigment-request/bed-assignment-request-list.tsx +134 -0
  178. package/src/admissions/constants/index.ts +33 -0
  179. package/src/admissions/discharged-list/discharged-list.scss +0 -0
  180. package/src/admissions/discharged-list/discharged-list.tsx +67 -0
  181. package/src/admissions/form-entry-workspace/form-entry-workspace.tsx +62 -0
  182. package/src/admissions/inpatient/admission-history/patient-admission-history.tsx +76 -0
  183. package/src/admissions/inpatient/admission-requests/patient-admission-requests.scss +19 -0
  184. package/src/admissions/inpatient/admission-requests/patient-admission-requests.tsx +72 -0
  185. package/src/admissions/inpatient/inpatient-admissions.component.scss +7 -0
  186. package/src/admissions/inpatient/inpatient-admissions.component.tsx +46 -0
  187. package/src/admissions/modal/add-bill-items/add-bill-items.modal.scss +17 -0
  188. package/src/admissions/modal/add-bill-items/add-bill-items.modal.tsx +233 -0
  189. package/src/admissions/modal/admit-elsewhere/admit-elsewhere.modal.scss +23 -0
  190. package/src/admissions/modal/admit-elsewhere/admit-elsewhere.modal.tsx +156 -0
  191. package/src/admissions/modal/admit-patient/admit-patient.modal.scss +0 -0
  192. package/src/admissions/modal/admit-patient/admit-patient.modal.tsx +111 -0
  193. package/src/admissions/modal/bed-swap/bed-swap.modal.scss +0 -0
  194. package/src/admissions/modal/bed-swap/bed-swap.modal.tsx +102 -0
  195. package/src/admissions/modal/cancel-admission-request/cancel-admission-request.scss +11 -0
  196. package/src/admissions/modal/cancel-admission-request/cancel-admission-request.tsx +105 -0
  197. package/src/admissions/modal/discharge/discharge-patient.modal.scss +13 -0
  198. package/src/admissions/modal/discharge/discharge-patient.modal.tsx +86 -0
  199. package/src/admissions/types/index.ts +263 -0
  200. package/src/appointments/appointments.component.scss +6 -0
  201. package/src/appointments/appointments.component.tsx +8 -1
  202. package/src/billing/api/billing.api.ts +139 -0
  203. package/src/billing/billing-claims.resource.ts +900 -0
  204. package/src/billing/billing-dashboard-link.component.tsx +31 -0
  205. package/src/billing/billing-dashboard-reset.ts +27 -0
  206. package/src/billing/billing-root.tsx +42 -0
  207. package/src/billing/dashboard/billingDashboard.component.scss +0 -0
  208. package/src/billing/dashboard/billingDashboard.component.tsx +25 -0
  209. package/src/billing/dashboard/v2/active-visits/active-visits.component.tsx +257 -0
  210. package/src/billing/dashboard/v2/active-visits/active-visits.resource.ts +85 -0
  211. package/src/billing/dashboard/v2/active-visits/active-visits.scss +15 -0
  212. package/src/billing/dashboard/v2/active-visits.component.tsx +102 -0
  213. package/src/billing/dashboard/v2/admissions/admission-requests-tab.component.tsx +79 -0
  214. package/src/billing/dashboard/v2/billing-claims-dashboard.component.scss +209 -0
  215. package/src/billing/dashboard/v2/billing-claims-dashboard.component.tsx +347 -0
  216. package/src/billing/dashboard/v2/cash-checklist/bill-document.component.scss +90 -0
  217. package/src/billing/dashboard/v2/cash-checklist/bill-document.component.tsx +101 -0
  218. package/src/billing/dashboard/v2/cash-checklist/cash-checklist.component.scss +199 -0
  219. package/src/billing/dashboard/v2/cash-checklist/cash-checklist.component.tsx +361 -0
  220. package/src/billing/dashboard/v2/cash-checklist/cash-checklist.resource.ts +239 -0
  221. package/src/billing/dashboard/v2/cash-checklist/payment-drawer.component.scss +246 -0
  222. package/src/billing/dashboard/v2/cash-checklist/payment-drawer.component.tsx +182 -0
  223. package/src/billing/dashboard/v2/claim-statuses.ts +143 -0
  224. package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.scss +0 -0
  225. package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.tsx +35 -0
  226. package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-panel.component.scss +67 -0
  227. package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-panel.component.tsx +90 -0
  228. package/src/billing/dashboard/v2/claim-visits/claim-doctors/claim-doctors.scss +28 -0
  229. package/src/billing/dashboard/v2/claim-visits/claim-doctors/claim-doctors.tsx +36 -0
  230. package/src/billing/dashboard/v2/claim-visits/claim-history/claim-history.component.scss +119 -0
  231. package/src/billing/dashboard/v2/claim-visits/claim-history/claim-history.component.tsx +198 -0
  232. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-details.component.scss +5 -0
  233. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-details.component.tsx +160 -0
  234. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-panel.component.scss +105 -0
  235. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-panel.component.tsx +184 -0
  236. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/intervention-attachments.component.scss +161 -0
  237. package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/intervention-attachments.component.tsx +328 -0
  238. package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-details.component.tsx +96 -0
  239. package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-document.component.tsx +236 -0
  240. package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-panel.component.scss +98 -0
  241. package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-panel.component.tsx +292 -0
  242. package/src/billing/dashboard/v2/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.scss +133 -0
  243. package/src/billing/dashboard/v2/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.tsx +217 -0
  244. package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-details-by-token.component.tsx +150 -0
  245. package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-details-page.component.scss +13 -0
  246. package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-details-page.component.tsx +116 -0
  247. package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-visit-details.component.scss +338 -0
  248. package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-visit-details.component.tsx +616 -0
  249. package/src/billing/dashboard/v2/claim-visits/claim-visits.component.scss +5 -0
  250. package/src/billing/dashboard/v2/claim-visits/claim-visits.component.tsx +133 -0
  251. package/src/billing/dashboard/v2/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.scss +5 -0
  252. package/src/billing/dashboard/v2/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.tsx +49 -0
  253. package/src/billing/dashboard/v2/claim-visits/modal/claim-visit-details/claim-visit-details.modal.scss +17 -0
  254. package/src/billing/dashboard/v2/claim-visits/modal/claim-visit-details/claim-visit-details.modal.tsx +56 -0
  255. package/src/billing/dashboard/v2/claim-visits/modal/close-claim/close-claim.modal.scss +0 -0
  256. package/src/billing/dashboard/v2/claim-visits/modal/close-claim/close-claim.modal.tsx +129 -0
  257. package/src/billing/dashboard/v2/claim-visits/modal/submit-claim/submit-claim.modal.tsx +204 -0
  258. package/src/billing/dashboard/v2/claim-visits/shared/_empty-state.scss +28 -0
  259. package/src/billing/dashboard/v2/claim-visits/shared/record-cards.component.scss +298 -0
  260. package/src/billing/dashboard/v2/claim-visits/shared/record-cards.component.tsx +252 -0
  261. package/src/billing/dashboard/v2/claim-visits/shared/record-details.workspace.scss +42 -0
  262. package/src/billing/dashboard/v2/claim-visits/shared/record-details.workspace.tsx +54 -0
  263. package/src/billing/dashboard/v2/claim-visits/shared/record-table.component.scss +61 -0
  264. package/src/billing/dashboard/v2/claim-visits/shared/record-table.component.tsx +150 -0
  265. package/src/billing/dashboard/v2/claim-visits/switch-intervention/switch-intervention.resource.ts +51 -0
  266. package/src/billing/dashboard/v2/claim-visits/switch-intervention/switch-intervention.workspace.scss +191 -0
  267. package/src/billing/dashboard/v2/claim-visits/switch-intervention/switch-intervention.workspace.tsx +648 -0
  268. package/src/billing/dashboard/v2/claim-workspace/claim-workspace.component.scss +595 -0
  269. package/src/billing/dashboard/v2/claim-workspace/claim-workspace.component.tsx +810 -0
  270. package/src/billing/dashboard/v2/claim-workspace/claim-workspace.resource.ts +282 -0
  271. package/src/billing/dashboard/v2/claims-accounting/bill-utils.ts +134 -0
  272. package/src/billing/dashboard/v2/claims-accounting/claim-detail.component.tsx +346 -0
  273. package/src/billing/dashboard/v2/claims-accounting/claims-accounting.component.scss +546 -0
  274. package/src/billing/dashboard/v2/claims-accounting/claims-accounting.component.tsx +206 -0
  275. package/src/billing/dashboard/v2/claims-accounting/claims-accounting.resource.ts +337 -0
  276. package/src/billing/dashboard/v2/claims-accounting/invoice-document.component.scss +90 -0
  277. package/src/billing/dashboard/v2/claims-accounting/invoice-document.component.tsx +90 -0
  278. package/src/billing/dashboard/v2/claims-accounting/remittances.component.tsx +169 -0
  279. package/src/billing/dashboard/v2/claims-accounting/remittances.resource.ts +46 -0
  280. package/src/billing/dashboard/v2/claims-accounting/status-meta.ts +25 -0
  281. package/src/billing/dashboard/v2/clearance/cash-patients.scss +18 -0
  282. package/src/billing/dashboard/v2/clearance/cash.component.tsx +149 -0
  283. package/src/billing/dashboard/v2/clearance/clearance.component.scss +84 -0
  284. package/src/billing/dashboard/v2/clearance/clearance.component.tsx +225 -0
  285. package/src/billing/dashboard/v2/clearance/pay-cash.component.tsx +176 -0
  286. package/src/billing/dashboard/v2/clearance/pay-cash.scss +28 -0
  287. package/src/billing/dashboard/v2/clearance/prepaid-services.component.tsx +112 -0
  288. package/src/billing/dashboard/v2/facility-bills/claim-status.ts +249 -0
  289. package/src/billing/dashboard/v2/facility-bills/facility-bills.component.scss +140 -0
  290. package/src/billing/dashboard/v2/facility-bills/facility-bills.component.tsx +687 -0
  291. package/src/billing/dashboard/v2/facility-bills/preauths-datatables/pending-preauths.component.tsx +132 -0
  292. package/src/billing/dashboard/v2/facility-bills/preauths-datatables/preauth-preview-table.component.tsx +267 -0
  293. package/src/billing/dashboard/v2/facility-bills/preauths.component.tsx +124 -0
  294. package/src/billing/dashboard/v2/inpatient-requests/inpatient-requests.component.scss +22 -0
  295. package/src/billing/dashboard/v2/inpatient-requests/inpatient-requests.component.tsx +389 -0
  296. package/src/billing/dashboard/v2/inpatient-requests/modal/start-inpatient-claim/start-inpatient-claim.component.scss +0 -0
  297. package/src/billing/dashboard/v2/inpatient-requests/modal/start-inpatient-claim/start-inpatient-claim.component.tsx +0 -0
  298. package/src/billing/dashboard/v2/new-facility-bills/bills-table.component.tsx +78 -0
  299. package/src/billing/dashboard/v2/new-facility-bills/bills-table.scss +18 -0
  300. package/src/billing/dashboard/v2/new-facility-bills/new-facility-bills.component.tsx +64 -0
  301. package/src/billing/dashboard/v2/new-facility-bills/new-facility-bills.scss +146 -0
  302. package/src/billing/dashboard/v2/patient-bill-details/attachments/add-attachments.component.tsx +223 -0
  303. package/src/billing/dashboard/v2/patient-bill-details/attachments/attachment.component.tsx +157 -0
  304. package/src/billing/dashboard/v2/patient-bill-details/attachments/attachments.scss +92 -0
  305. package/src/billing/dashboard/v2/patient-bill-details/attachments/case-summary/case-summary.scss +295 -0
  306. package/src/billing/dashboard/v2/patient-bill-details/attachments/case-summary/case-summary.tsx +326 -0
  307. package/src/billing/dashboard/v2/patient-bill-details/attachments/dialysis/dialysis-chart.scss +238 -0
  308. package/src/billing/dashboard/v2/patient-bill-details/attachments/dialysis/dialysis-chart.tsx +269 -0
  309. package/src/billing/dashboard/v2/patient-bill-details/attachments/discharge-summary/discharge-summary.scss +96 -0
  310. package/src/billing/dashboard/v2/patient-bill-details/attachments/discharge-summary/discharge-summary.tsx +124 -0
  311. package/src/billing/dashboard/v2/patient-bill-details/attachments/final-bill.component.tsx +152 -0
  312. package/src/billing/dashboard/v2/patient-bill-details/attachments/final-bill.scss +225 -0
  313. package/src/billing/dashboard/v2/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.scss +182 -0
  314. package/src/billing/dashboard/v2/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.tsx +173 -0
  315. package/src/billing/dashboard/v2/patient-bill-details/attachments/generate-attachments.component.tsx +360 -0
  316. package/src/billing/dashboard/v2/patient-bill-details/attachments/invoice.component.tsx +151 -0
  317. package/src/billing/dashboard/v2/patient-bill-details/attachments/invoice.scss +225 -0
  318. package/src/billing/dashboard/v2/patient-bill-details/attachments/type.ts +44 -0
  319. package/src/billing/dashboard/v2/patient-bill-details/bill-details/bill-details.scss +107 -0
  320. package/src/billing/dashboard/v2/patient-bill-details/bill-details/bill-details.tsx +508 -0
  321. package/src/billing/dashboard/v2/patient-bill-details/bill-details-page.component.scss +30 -0
  322. package/src/billing/dashboard/v2/patient-bill-details/bill-details-page.component.tsx +94 -0
  323. package/src/billing/dashboard/v2/patient-bill-details/claim-details/claim-details-skeleton.component.scss +89 -0
  324. package/src/billing/dashboard/v2/patient-bill-details/claim-details/claim-details-skeleton.component.tsx +53 -0
  325. package/src/billing/dashboard/v2/patient-bill-details/claim-details/patient-claim-details.component.scss +32 -0
  326. package/src/billing/dashboard/v2/patient-bill-details/claim-details/patient-claim-details.component.tsx +215 -0
  327. package/src/billing/dashboard/v2/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.scss +0 -0
  328. package/src/billing/dashboard/v2/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.tsx +99 -0
  329. package/src/billing/dashboard/v2/patient-bill-details/modals/add-claim-line/add-claim-line.modal.tsx +186 -0
  330. package/src/billing/dashboard/v2/patient-bill-details/patient-bill-details.scss +153 -0
  331. package/src/billing/dashboard/v2/patient-bill-details/patient-bill-details.tsx +458 -0
  332. package/src/billing/dashboard/v2/patient-bill-details/payment-mode.ts +124 -0
  333. package/src/billing/dashboard/v2/patient-bill-details/workspaces/add-claim-line/add-claim-line.workspace.scss +27 -0
  334. package/src/billing/dashboard/v2/patient-bill-details/workspaces/add-claim-line/add-claim-line.workspace.tsx +222 -0
  335. package/src/billing/dashboard/v2/patient-bill-details/workspaces/bill-item-payment/bill-item-payment.workspace.scss +27 -0
  336. package/src/billing/dashboard/v2/patient-bill-details/workspaces/bill-item-payment/bill-item-payment.workspace.tsx +109 -0
  337. package/src/billing/dashboard/v2/preauth/preauth-attachments.component.tsx +389 -0
  338. package/src/billing/dashboard/v2/preauth/preauth-list.component.scss +38 -0
  339. package/src/billing/dashboard/v2/preauth/preauth-list.component.tsx +226 -0
  340. package/src/billing/dashboard/v2/preauth/preauth-status-tag.component.tsx +75 -0
  341. package/src/billing/dashboard/v2/preauth/preauth-typed-fields.md +125 -0
  342. package/src/billing/dashboard/v2/preauth/preauth.resource.ts +1067 -0
  343. package/src/billing/dashboard/v2/preauth/preauth.workspace.scss +91 -0
  344. package/src/billing/dashboard/v2/preauth/preauth.workspace.tsx +1802 -0
  345. package/src/billing/dashboard/v2/preauth/preauthorizations-tab.component.tsx +45 -0
  346. package/src/billing/dashboard/v2/sha-claims/sha-claims-table.component.tsx +36 -0
  347. package/src/billing/dashboard/v2/sha-claims/sha-claims.component.tsx +60 -0
  348. package/src/billing/dashboard/v2/sha-claims/sha-claims.scss +8 -0
  349. package/src/billing/dashboard/v2/shared/dash-board-card/dash-board-card.component.scss +17 -0
  350. package/src/billing/dashboard/v2/shared/dash-board-card/dash-board-card.component.tsx +15 -0
  351. package/src/billing/dashboard/v2/shared/empty-state.component.scss +24 -0
  352. package/src/billing/dashboard/v2/shared/empty-state.component.tsx +13 -0
  353. package/src/billing/dashboard/v2/shared/scroll-to-top.component.scss +54 -0
  354. package/src/billing/dashboard/v2/shared/scroll-to-top.component.tsx +54 -0
  355. package/src/billing/dashboard/v2/shared/table-toolbar.component.scss +77 -0
  356. package/src/billing/dashboard/v2/shared/table-toolbar.component.tsx +48 -0
  357. package/src/billing/dashboard/v2/types/index.ts +507 -0
  358. package/src/billing/dashboard/v3/active-visits/active-visits.component.tsx +256 -0
  359. package/src/billing/dashboard/v3/active-visits/active-visits.resource.ts +57 -0
  360. package/src/billing/dashboard/v3/active-visits/active-visits.scss +15 -0
  361. package/src/billing/dashboard/v3/cash-checklist/bill-document.component.scss +90 -0
  362. package/src/billing/dashboard/v3/cash-checklist/bill-document.component.tsx +101 -0
  363. package/src/billing/dashboard/v3/cash-checklist/cash-checklist.component.scss +199 -0
  364. package/src/billing/dashboard/v3/cash-checklist/cash-checklist.component.tsx +361 -0
  365. package/src/billing/dashboard/v3/cash-checklist/cash-checklist.resource.ts +240 -0
  366. package/src/billing/dashboard/v3/cash-checklist/payment-drawer.component.scss +246 -0
  367. package/src/billing/dashboard/v3/cash-checklist/payment-drawer.component.tsx +182 -0
  368. package/src/billing/dashboard/v3/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.scss +0 -0
  369. package/src/billing/dashboard/v3/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.tsx +44 -0
  370. package/src/billing/dashboard/v3/claim-visits/claim-doctors/claim-doctors.scss +5 -0
  371. package/src/billing/dashboard/v3/claim-visits/claim-doctors/claim-doctors.tsx +42 -0
  372. package/src/billing/dashboard/v3/claim-visits/claim-documents/claim-documents.scss +10 -0
  373. package/src/billing/dashboard/v3/claim-visits/claim-documents/claim-documents.tsx +25 -0
  374. package/src/billing/dashboard/v3/claim-visits/claim-intervention-details/claim-intervention-details.component.tsx +223 -0
  375. package/src/billing/dashboard/v3/claim-visits/claim-invoice-details/claim-invoice-details.component.scss +6 -0
  376. package/src/billing/dashboard/v3/claim-visits/claim-invoice-details/claim-invoice-details.component.tsx +85 -0
  377. package/src/billing/dashboard/v3/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.scss +0 -0
  378. package/src/billing/dashboard/v3/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.tsx +109 -0
  379. package/src/billing/dashboard/v3/claim-visits/claim-visit-details/claim-visit-details.component.scss +97 -0
  380. package/src/billing/dashboard/v3/claim-visits/claim-visit-details/claim-visit-details.component.tsx +346 -0
  381. package/src/billing/dashboard/v3/claim-visits/claim-visits.component.scss +5 -0
  382. package/src/billing/dashboard/v3/claim-visits/claim-visits.component.tsx +139 -0
  383. package/src/billing/dashboard/v3/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.scss +5 -0
  384. package/src/billing/dashboard/v3/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.tsx +49 -0
  385. package/src/billing/dashboard/v3/claim-visits/modal/claim-invoice-lines/claim-invoice-lines.modal.scss +7 -0
  386. package/src/billing/dashboard/v3/claim-visits/modal/claim-invoice-lines/claim-invoice-lines.modal.tsx +35 -0
  387. package/src/billing/dashboard/v3/claim-visits/modal/claim-visit-details/claim-visit-details.modal.scss +6 -0
  388. package/src/billing/dashboard/v3/claim-visits/modal/claim-visit-details/claim-visit-details.modal.tsx +33 -0
  389. package/src/billing/dashboard/v3/claim-visits/modal/close-claim/close-claim.modal.scss +0 -0
  390. package/src/billing/dashboard/v3/claim-visits/modal/close-claim/close-claim.modal.tsx +129 -0
  391. package/src/billing/dashboard/v3/claim-visits/modal/submit-claim/submit-claim.modal.tsx +204 -0
  392. package/src/billing/dashboard/v3/claim-visits/payer-preview/index.scss +140 -0
  393. package/src/billing/dashboard/v3/claim-visits/payer-preview/payer-preview-tile.component.tsx +55 -0
  394. package/src/billing/dashboard/v3/claim-visits/payer-preview/payer-preview-workspace.component.tsx +157 -0
  395. package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-claim-doctors.component.tsx +54 -0
  396. package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-claim-lines.component.tsx +48 -0
  397. package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-claim-notes.component.tsx +47 -0
  398. package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-diagnoses.component.tsx +44 -0
  399. package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-interventions.component.tsx +44 -0
  400. package/src/billing/dashboard/v3/claim-visits/switch-intervention/switch-intervention.resource.ts +51 -0
  401. package/src/billing/dashboard/v3/claim-visits/switch-intervention/switch-intervention.workspace.scss +191 -0
  402. package/src/billing/dashboard/v3/claim-visits/switch-intervention/switch-intervention.workspace.tsx +648 -0
  403. package/src/billing/dashboard/v3/claim-workspace/claim-workspace.component.scss +595 -0
  404. package/src/billing/dashboard/v3/claim-workspace/claim-workspace.component.tsx +810 -0
  405. package/src/billing/dashboard/v3/claim-workspace/claim-workspace.resource.ts +282 -0
  406. package/src/billing/dashboard/v3/claims-accounting/bill-utils.ts +134 -0
  407. package/src/billing/dashboard/v3/claims-accounting/claim-detail.component.tsx +346 -0
  408. package/src/billing/dashboard/v3/claims-accounting/claims-accounting.component.scss +546 -0
  409. package/src/billing/dashboard/v3/claims-accounting/claims-accounting.component.tsx +206 -0
  410. package/src/billing/dashboard/v3/claims-accounting/claims-accounting.resource.ts +337 -0
  411. package/src/billing/dashboard/v3/claims-accounting/invoice-document.component.scss +90 -0
  412. package/src/billing/dashboard/v3/claims-accounting/invoice-document.component.tsx +90 -0
  413. package/src/billing/dashboard/v3/claims-accounting/remittances.component.tsx +169 -0
  414. package/src/billing/dashboard/v3/claims-accounting/remittances.resource.ts +46 -0
  415. package/src/billing/dashboard/v3/claims-accounting/status-meta.ts +25 -0
  416. package/src/billing/dashboard/v3/clearance/clearance.component.scss +100 -0
  417. package/src/billing/dashboard/v3/clearance/clearance.component.tsx +0 -0
  418. package/src/billing/dashboard/v3/clearance/prepaid-services.component.tsx +112 -0
  419. package/src/billing/dashboard/v3/facility-bills/claim-status.ts +243 -0
  420. package/src/billing/dashboard/v3/facility-bills/facility-bills.component.scss +9 -0
  421. package/src/billing/dashboard/v3/facility-bills/facility-bills.component.tsx +172 -0
  422. package/src/billing/dashboard/v3/facility-bills/preauths-datatables/pending-preauths.component.tsx +132 -0
  423. package/src/billing/dashboard/v3/facility-bills/preauths-datatables/preauth-preview-table.component.tsx +232 -0
  424. package/src/billing/dashboard/v3/facility-bills/preauths.component.tsx +124 -0
  425. package/src/billing/dashboard/v3/patient-bill-details/attachments/add-attachments.component.tsx +223 -0
  426. package/src/billing/dashboard/v3/patient-bill-details/attachments/attachment.component.tsx +157 -0
  427. package/src/billing/dashboard/v3/patient-bill-details/attachments/attachments.scss +92 -0
  428. package/src/billing/dashboard/v3/patient-bill-details/attachments/case-summary/case-summary-helper.ts +58 -0
  429. package/src/billing/dashboard/v3/patient-bill-details/attachments/case-summary/case-summary.scss +295 -0
  430. package/src/billing/dashboard/v3/patient-bill-details/attachments/case-summary/case-summary.tsx +273 -0
  431. package/src/billing/dashboard/v3/patient-bill-details/attachments/dialysis/dialysis-chart.scss +238 -0
  432. package/src/billing/dashboard/v3/patient-bill-details/attachments/dialysis/dialysis-chart.tsx +314 -0
  433. package/src/billing/dashboard/v3/patient-bill-details/attachments/discharge-summary/discharge-summary.scss +96 -0
  434. package/src/billing/dashboard/v3/patient-bill-details/attachments/discharge-summary/discharge-summary.tsx +126 -0
  435. package/src/billing/dashboard/v3/patient-bill-details/attachments/final-bill.component.tsx +75 -0
  436. package/src/billing/dashboard/v3/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.scss +182 -0
  437. package/src/billing/dashboard/v3/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.tsx +253 -0
  438. package/src/billing/dashboard/v3/patient-bill-details/attachments/generate-attachments.component.tsx +343 -0
  439. package/src/billing/dashboard/v3/patient-bill-details/attachments/invoice.component.tsx +150 -0
  440. package/src/billing/dashboard/v3/patient-bill-details/attachments/invoice.scss +225 -0
  441. package/src/billing/dashboard/v3/patient-bill-details/attachments/type.ts +259 -0
  442. package/src/billing/dashboard/v3/patient-bill-details/bill-details/bill-details.scss +13 -0
  443. package/src/billing/dashboard/v3/patient-bill-details/bill-details/bill-details.tsx +235 -0
  444. package/src/billing/dashboard/v3/patient-bill-details/claim-details/patient-claim-details.component.scss +0 -0
  445. package/src/billing/dashboard/v3/patient-bill-details/claim-details/patient-claim-details.component.tsx +69 -0
  446. package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.scss +0 -0
  447. package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.tsx +99 -0
  448. package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-line/add-claim-line.modal.scss +14 -0
  449. package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-line/add-claim-line.modal.tsx +111 -0
  450. package/src/billing/dashboard/v3/patient-bill-details/modals/bill-item-payment/bill-item-payment.modal.scss +6 -0
  451. package/src/billing/dashboard/v3/patient-bill-details/modals/bill-item-payment/bill-item-payment.modal.tsx +139 -0
  452. package/src/billing/dashboard/v3/patient-bill-details/patient-bill-details.scss +85 -0
  453. package/src/billing/dashboard/v3/patient-bill-details/patient-bill-details.tsx +342 -0
  454. package/src/billing/dashboard/v3/patient-bill-details/visit-diagnosis-details/visit-diagnosis-details.component.scss +0 -0
  455. package/src/billing/dashboard/v3/patient-bill-details/visit-diagnosis-details/visit-diagnosis-details.component.tsx +92 -0
  456. package/src/billing/dashboard/v3/preauth/preauth-attachments.component.tsx +389 -0
  457. package/src/billing/dashboard/v3/preauth/preauth-list.component.scss +34 -0
  458. package/src/billing/dashboard/v3/preauth/preauth-list.component.tsx +281 -0
  459. package/src/billing/dashboard/v3/preauth/preauth-status-tag.component.tsx +75 -0
  460. package/src/billing/dashboard/v3/preauth/preauth-typed-fields.md +125 -0
  461. package/src/billing/dashboard/v3/preauth/preauth.resource.ts +1072 -0
  462. package/src/billing/dashboard/v3/preauth/preauth.workspace.scss +91 -0
  463. package/src/billing/dashboard/v3/preauth/preauth.workspace.tsx +1806 -0
  464. package/src/billing/dashboard/v3/preauth/preauthorizations-tab.component.tsx +45 -0
  465. package/src/billing/dashboard/v3/shared/empty-state.component.scss +25 -0
  466. package/src/billing/dashboard/v3/shared/empty-state.component.tsx +13 -0
  467. package/src/billing/dashboard/v3/shared/table-toolbar.component.scss +64 -0
  468. package/src/billing/dashboard/v3/shared/table-toolbar.component.tsx +48 -0
  469. package/src/billing/dashboard/v3/types/index.ts +381 -0
  470. package/src/billing/extensions/generate-order-bill-button/generate-order-bill-button.extension.tsx +55 -0
  471. package/src/billing/extensions/generate-order-bill-button/generate-order-bill-button.scss +16 -0
  472. package/src/billing/extensions/visit-billing/visit-billing.extension.scss +0 -0
  473. package/src/billing/extensions/visit-billing/visit-billing.extension.tsx +509 -0
  474. package/src/billing/invoice/bill.resource.ts +47 -0
  475. package/src/billing/invoice/invoice-header/header-card/header-card.scss +17 -0
  476. package/src/billing/invoice/invoice-header/header-card/header-card.tsx +21 -0
  477. package/src/billing/invoice/invoice.scss +113 -0
  478. package/src/billing/invoice/invoice.tsx +1441 -0
  479. package/src/billing/invoice/line-items/line-items.scss +0 -0
  480. package/src/billing/invoice/line-items/line-items.tsx +120 -0
  481. package/src/billing/invoice/modal/delete-bill-item/delete-bill-item.modal.scss +23 -0
  482. package/src/billing/invoice/modal/delete-bill-item/delete-bill-item.modal.tsx +114 -0
  483. package/src/billing/invoice/modal/edit-bill-item/edit-bill-item.modal.scss +0 -0
  484. package/src/billing/invoice/modal/edit-bill-item/edit-bill-item.modal.tsx +122 -0
  485. package/src/billing/invoice/payment-details/payment-details.scss +0 -0
  486. package/src/billing/invoice/payment-details/payment-details.tsx +43 -0
  487. package/src/billing/invoice/print-invoice/print-receipt.component.tsx +44 -0
  488. package/src/billing/invoice/print-invoice/print-receipt.scss +14 -0
  489. package/src/billing/maternity-discharge.resource.ts +21 -0
  490. package/src/billing/types/index.ts +354 -0
  491. package/src/billing/utils/index.ts +17 -0
  492. package/src/billing/widgets/billingTotalsRow.component.scss +0 -0
  493. package/src/billing/widgets/billingTotalsRow.component.tsx +712 -0
  494. package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.resource.ts +130 -0
  495. package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.scss +58 -0
  496. package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.workspace.tsx +645 -0
  497. package/src/billing/workspaces/create-order-bill-form-workspace/schema.ts +12 -0
  498. package/src/bookings/bookings.component.scss +7 -0
  499. package/src/bookings/bookings.component.tsx +35 -0
  500. package/src/bookings/daily/daily-bookings.resource.ts +2 -1
  501. package/src/case-summary/case-summary.extension.scss +13 -0
  502. package/src/case-summary/case-summary.extension.tsx +40 -0
  503. package/src/case-summary/case-summary.resource.test.ts +69 -0
  504. package/src/case-summary/case-summary.resource.ts +52 -0
  505. package/src/case-summary/components/case-summary-printable.component.scss +174 -0
  506. package/src/case-summary/components/case-summary-printable.component.tsx +288 -0
  507. package/src/case-summary/components/case-summary-printable.utils.ts +51 -0
  508. package/src/case-summary/types/case-summary.types.ts +152 -0
  509. package/src/claims/claims.component.scss +70 -0
  510. package/src/claims/claims.component.tsx +713 -0
  511. package/src/claims/claims.resource.ts +1274 -0
  512. package/src/claims/index.ts +340 -0
  513. package/src/claims/interventions.resource.ts +131 -0
  514. package/src/claims/utils.ts +64 -0
  515. package/src/config-schema.ts +119 -1
  516. package/src/context/patient-context.tsx +27 -0
  517. package/src/createDashboardLink.tsx +9 -0
  518. package/src/dashboard/charts/chart.component.scss +24 -0
  519. package/src/dashboard/charts/chart.component.tsx +56 -0
  520. package/src/dashboard/dashboard.component.scss +48 -3
  521. package/src/dashboard/dashboard.component.tsx +26 -36
  522. package/src/dashboard/overview/overview.component.scss +40 -59
  523. package/src/dashboard/overview/overview.component.tsx +53 -41
  524. package/src/dashboard-meta/accounting-dashboard.meta.ts +6 -0
  525. package/src/dashboard-meta/admissions-dashboard.meta.ts +6 -0
  526. package/src/dashboard-meta/billing-dashboard.meta.ts +6 -0
  527. package/src/dashboard-meta/bookings-dashboard.meta.ts +6 -0
  528. package/src/dashboard-meta/case-summary.meta.ts +6 -0
  529. package/src/dashboard-meta/consultation-dashboard.meta.ts +6 -0
  530. package/src/dashboard-meta/dha-workflow-dashboard.meta.ts +6 -0
  531. package/src/dashboard-meta/inpatient-admissions.meta.ts +6 -0
  532. package/src/dashboard-meta/maternity-dashboard.meta.ts +6 -0
  533. package/src/dashboard-meta/mch-dashboard.meta.ts +6 -0
  534. package/src/dashboard-meta/pharmacy-dashboard.meta.ts +6 -0
  535. package/src/dashboard-meta/queue-dashboard.meta.ts +6 -0
  536. package/src/dashboard-meta/registers-dashboard.meta.ts +6 -0
  537. package/src/dashboard-meta/registry-dashboard.meta.ts +6 -0
  538. package/src/dashboard-meta/service-queue-admin.meta.ts +6 -0
  539. package/src/dashboard-meta/specialized-clinics-dashboard.meta.ts +6 -0
  540. package/src/dashboard-meta/triage-dashboard.meta.ts +6 -0
  541. package/src/index.ts +177 -6
  542. package/src/mnch/maternity/maternity-queues.component.scss +7 -0
  543. package/src/mnch/maternity/maternity-queues.component.tsx +32 -0
  544. package/src/mnch/maternity/queues/triage/maternity-triage.tsx +15 -0
  545. package/src/mnch/mch/mch-queues.component.scss +10 -0
  546. package/src/mnch/mch/mch-queues.component.tsx +36 -0
  547. package/src/mnch/mch/queues/consultation/mch-consultation.tsx +18 -0
  548. package/src/mnch/mch/queues/triage/mch-triage.tsx +15 -0
  549. package/src/mnch/mnch-root.tsx +17 -0
  550. package/src/mortuary/mortuary.component.tsx +13 -0
  551. package/src/pharmacy/pharmacy.component.scss +16 -0
  552. package/src/pharmacy/pharmacy.component.tsx +11 -6
  553. package/src/registers/registers.component.tsx +8 -0
  554. package/src/registry/drawer/emr-compare.component.scss +263 -0
  555. package/src/registry/drawer/emr-compare.component.tsx +302 -0
  556. package/src/registry/drawer/emr-compare.resource.ts +181 -0
  557. package/src/registry/drawer/emr-create-preview.component.tsx +123 -0
  558. package/src/registry/drawer/otp-verification-step.component.tsx +398 -0
  559. package/src/registry/drawer/pomsf-balance.util.test.ts +177 -0
  560. package/src/registry/drawer/pomsf-balance.util.ts +79 -0
  561. package/src/registry/drawer/verification.resource.ts +60 -0
  562. package/src/registry/drawer/workflow-drawer.component.scss +1242 -0
  563. package/src/registry/drawer/workflow-drawer.component.tsx +1476 -0
  564. package/src/registry/eligibility/eligibility-details/eligibility-details.scss +38 -0
  565. package/src/registry/eligibility/eligibility-details/eligibility-details.tsx +101 -0
  566. package/src/registry/eligibility/eliigibility-tags/eligibility-tags.scss +16 -0
  567. package/src/registry/eligibility/eliigibility-tags/eligibility-tags.tsx +120 -0
  568. package/src/registry/eligibility/modal/eligibility-details.modal.scss +0 -0
  569. package/src/registry/eligibility/modal/eligibility-details.modal.tsx +45 -0
  570. package/src/registry/hie.resource.ts +408 -0
  571. package/src/registry/hie.types.ts +57 -0
  572. package/src/registry/modal/biometrics-verification-modal/biometrics-verification-modal.scss +277 -0
  573. package/src/registry/modal/biometrics-verification-modal/biometrics-verification-modal.tsx +218 -0
  574. package/src/registry/modal/biometrics-verification-modal/type.ts +39 -0
  575. package/src/registry/modal/client-details-modal/client-details-modal.tsx +65 -29
  576. package/src/registry/modal/otp-modal/otp-whitlisting-modal.component.tsx +809 -0
  577. package/src/registry/modal/otp-modal/otp-whitlisting-modal.scss +354 -0
  578. package/src/registry/modal/otp-modal/otp-whitlisting.scss +0 -0
  579. package/src/registry/modal/otp-verification-modal/claims-consent.scss +72 -0
  580. package/src/registry/modal/otp-verification-modal/claims-consent.tsx +135 -0
  581. package/src/registry/modal/otp-verification-modal/extension/claims-consent.extension.tsx +124 -0
  582. package/src/registry/modal/otp-verification-modal/otp-verification-modal.scss +30 -0
  583. package/src/registry/modal/otp-verification-modal/otp-verification-modal.tsx +154 -54
  584. package/src/registry/modal/send-to-triage/payment-details.tsx +120 -0
  585. package/src/registry/modal/send-to-triage/payment-method.component.tsx +54 -0
  586. package/src/registry/modal/send-to-triage/send-to-queue.modal.tsx +980 -0
  587. package/src/registry/modal/send-to-triage/send-to-triage.modal.scss +156 -3
  588. package/src/registry/modal/send-to-triage/send-to-triage.modal.tsx +1101 -131
  589. package/src/registry/modal/start-patient-visit/start-patient-visit.modal.scss +34 -0
  590. package/src/registry/modal/start-patient-visit/start-patient-visit.modal.tsx +231 -0
  591. package/src/registry/payment-details/payment-options/payment-options.scss +13 -0
  592. package/src/registry/payment-details/payment-options/payment-options.tsx +61 -14
  593. package/src/registry/registration-list/registration-list.component.scss +32 -0
  594. package/src/registry/registration-list/registration-list.component.tsx +103 -0
  595. package/src/registry/registry-entry.tsx +11 -0
  596. package/src/registry/registry.component.scss +402 -78
  597. package/src/registry/registry.component.tsx +547 -221
  598. package/src/registry/registry.resource.ts +22 -3
  599. package/src/registry/types/index.ts +118 -9
  600. package/src/registry/utils/error-handler.ts +54 -0
  601. package/src/registry/utils/format-dependant-display-data.ts +1 -1
  602. package/src/registry/utils/hie-client-adapter.ts +6 -3
  603. package/src/registry/utils/mask-data.ts +40 -0
  604. package/src/registry/utils/phone-number-formatter.ts +11 -0
  605. package/src/resources/dashboard.resource.ts +20 -0
  606. package/src/resources/identifier-types.ts +2 -0
  607. package/src/resources/patient-resource.ts +6 -1
  608. package/src/resources/queue.resource.ts +24 -1
  609. package/src/resources/superset.resource.ts +21 -0
  610. package/src/resources/visit.resource.ts +19 -1
  611. package/src/root.component.tsx +8 -5
  612. package/src/routes.json +417 -23
  613. package/src/service-queues/admin/queue/modal/create-queue/create-queue.modal.scss +31 -0
  614. package/src/service-queues/admin/queue/modal/create-queue/create-queue.modal.tsx +153 -0
  615. package/src/service-queues/admin/queue/modal/edit-queue/edit-queue.modal.scss +0 -0
  616. package/src/service-queues/admin/queue/modal/edit-queue/edit-queue.modal.tsx +182 -0
  617. package/src/service-queues/admin/queue/queue-list/queue-list.scss +33 -0
  618. package/src/service-queues/admin/queue/queue-list/queue-list.tsx +113 -0
  619. package/src/service-queues/admin/queue-entry/queue-entry-list.component.scss +6 -0
  620. package/src/service-queues/admin/queue-entry/queue-entry-list.component.tsx +137 -0
  621. package/src/service-queues/admin/queue-room/modal/create-queue-room/create-queue-room.modal.scss +31 -0
  622. package/src/service-queues/admin/queue-room/modal/create-queue-room/create-queue-room.modal.tsx +137 -0
  623. package/src/service-queues/admin/queue-room/modal/edit-queue-room/edit-queue-room.modal.scss +0 -0
  624. package/src/service-queues/admin/queue-room/modal/edit-queue-room/edit-queue-room.modal.tsx +146 -0
  625. package/src/service-queues/admin/queue-room/queue-room-list/queue-room-list.scss +22 -0
  626. package/src/service-queues/admin/queue-room/queue-room-list/queue-room-list.tsx +120 -0
  627. package/src/service-queues/admin/service-queue-admin-dashboard.component.scss +6 -0
  628. package/src/service-queues/admin/service-queue-admin-dashboard.component.tsx +34 -0
  629. package/src/service-queues/consultation/consultation.component.tsx +9 -0
  630. package/src/service-queues/extensions/service-queue-patient-banner/service-queue-patient-banner.scss +30 -0
  631. package/src/service-queues/extensions/service-queue-patient-banner/service-queue-patient-banner.tsx +108 -0
  632. package/src/service-queues/modals/daily-report-patient-list/daily-report-patient-list.scss +26 -0
  633. package/src/service-queues/modals/daily-report-patient-list/daily-report-patient-list.tsx +110 -0
  634. package/src/service-queues/modals/move/move-patient.component.scss +1 -1
  635. package/src/service-queues/modals/move/move-patient.component.tsx +31 -17
  636. package/src/service-queues/queue-list/check-in.service.ts +26 -0
  637. package/src/service-queues/queue-list/queue-list.component.scss +37 -0
  638. package/src/service-queues/queue-list/queue-list.component.tsx +256 -56
  639. package/src/service-queues/service-queue/service-queue.component.tsx +151 -8
  640. package/src/service-queues/service-queue/stats/stat-details/stat-details.component.scss +5 -0
  641. package/src/service-queues/service-queue/stats/stat-details/stat-details.component.tsx +36 -7
  642. package/src/service-queues/service-queue.tsx +22 -16
  643. package/src/service-queues/service-queues.resource.ts +197 -1
  644. package/src/service-queues/service.resource.ts +1 -1
  645. package/src/shared/constants/concepts.ts +50 -0
  646. package/src/shared/constants/patient-category.ts +6 -0
  647. package/src/shared/constants/patient-type.ts +10 -0
  648. package/src/shared/constants/visit-types.ts +7 -0
  649. package/src/shared/services/billing.resource.ts +75 -0
  650. package/src/shared/services/claims.resource.ts +47 -0
  651. package/src/shared/services/client-payment-mode.resource.ts +27 -0
  652. package/src/shared/services/client-payment.resource.ts +17 -0
  653. package/src/shared/services/consultation-clearance.resource.ts +210 -0
  654. package/src/shared/services/eligibility.resource.ts +20 -0
  655. package/src/shared/services/encounters.resource.ts +33 -0
  656. package/src/shared/services/location.resource.ts +9 -0
  657. package/src/shared/types/index.ts +156 -0
  658. package/src/shared/ui/aggregate-stat-card/aggregate-stat-card.scss +42 -0
  659. package/src/shared/ui/aggregate-stat-card/aggregate-stat-card.tsx +42 -0
  660. package/src/shared/ui/confirm-modal/confirm.modal.scss +18 -0
  661. package/src/shared/ui/confirm-modal/confirm.modal.tsx +38 -0
  662. package/src/shared/ui/facility-worker-slot/facility-worker.component-slot.component.scss +39 -0
  663. package/src/shared/ui/facility-worker-slot/facility-worker.component-slot.component.tsx +19 -0
  664. package/src/shared/ui/otp-input/otp-input.component.scss +14 -0
  665. package/src/shared/ui/otp-input/otp-input.component.tsx +97 -0
  666. package/src/{service-queues/service-queue/stats → shared/ui}/stat-card/stat-card.component.tsx +6 -3
  667. package/src/shared/ui/timer/timer.component.scss +5 -0
  668. package/src/shared/ui/timer/timer.component.tsx +40 -0
  669. package/src/shared/utils/get-base-url.ts +10 -0
  670. package/src/shared/utils/get-tag-type.ts +75 -0
  671. package/src/side-nav-menu/mnch-nav-link-config.ts +16 -0
  672. package/src/side-nav-menu/mnch-nav-links.tsx +42 -0
  673. package/src/side-nav-menu/nav-link-config.ts +1 -5
  674. package/src/side-nav-menu/specialized-clinics-nav-link-config.ts +36 -0
  675. package/src/side-nav-menu/specialized-clinics-nav-links.tsx +42 -0
  676. package/src/specialized-clinics/critital-care-unit/critical-care-unit-queues.component.scss +7 -0
  677. package/src/specialized-clinics/critital-care-unit/critical-care-unit-queues.component.tsx +36 -0
  678. package/src/specialized-clinics/critital-care-unit/queues/consultation/critical-care-unit-consultation.tsx +15 -0
  679. package/src/specialized-clinics/critital-care-unit/queues/triage/critical-care-unit-triage.tsx +15 -0
  680. package/src/specialized-clinics/dental/dental-queues.component.scss +7 -0
  681. package/src/specialized-clinics/dental/dental-queues.component.tsx +36 -0
  682. package/src/specialized-clinics/dental/queues/consultation/dental-consultation.tsx +15 -0
  683. package/src/specialized-clinics/dental/queues/triage/dental-triage.tsx +15 -0
  684. package/src/specialized-clinics/diagnostic-and-imaging/diagnostic-and-imaging.component.scss +7 -0
  685. package/src/specialized-clinics/diagnostic-and-imaging/diagnostic-and-imaging.component.tsx +36 -0
  686. package/src/specialized-clinics/diagnostic-and-imaging/queues/consultation/diagnosis-and-imaging-consultation.tsx +15 -0
  687. package/src/specialized-clinics/diagnostic-and-imaging/queues/triage/diagnosis-and-imaging-triage.tsx +15 -0
  688. package/src/specialized-clinics/oncology/oncology-queues.component.scss +7 -0
  689. package/src/specialized-clinics/oncology/oncology-queues.component.tsx +36 -0
  690. package/src/specialized-clinics/oncology/queues/consultation/oncology-consultation.tsx +15 -0
  691. package/src/specialized-clinics/oncology/queues/triage/oncology-triage.tsx +15 -0
  692. package/src/specialized-clinics/ophthalmology/ophthalmology-queues.component.scss +7 -0
  693. package/src/specialized-clinics/ophthalmology/ophthalmology-queues.component.tsx +36 -0
  694. package/src/specialized-clinics/ophthalmology/queues/consultation/ophthalmology-consultation.tsx +15 -0
  695. package/src/specialized-clinics/ophthalmology/queues/triage/ophthalmology-triage.tsx +15 -0
  696. package/src/specialized-clinics/psychiatry/psychiatry-queues.component.scss +7 -0
  697. package/src/specialized-clinics/psychiatry/psychiatry-queues.component.tsx +36 -0
  698. package/src/specialized-clinics/psychiatry/queues/consultation/psychiatry-consultation.tsx +15 -0
  699. package/src/specialized-clinics/psychiatry/queues/triage/psychiatry-triage.tsx +15 -0
  700. package/src/specialized-clinics/renal/queues/consultation/dialysis-consultation.tsx +15 -0
  701. package/src/specialized-clinics/renal/queues/triage/renal-triage.tsx +15 -0
  702. package/src/specialized-clinics/renal/renal-queues.component.scss +7 -0
  703. package/src/specialized-clinics/renal/renal-queues.component.tsx +36 -0
  704. package/src/specialized-clinics/specialized-clinics-root.tsx +27 -0
  705. package/src/triage/triage.component.scss +6 -0
  706. package/src/triage/triage.component.tsx +4 -0
  707. package/src/types/types.ts +56 -1
  708. package/webpack.config.js +54 -1
  709. package/dist/104.js +0 -2
  710. package/dist/104.js.map +0 -1
  711. package/dist/15.js +0 -1
  712. package/dist/15.js.map +0 -1
  713. package/dist/184.js +0 -2
  714. package/dist/184.js.map +0 -1
  715. package/dist/197.js +0 -1
  716. package/dist/255.js +0 -1
  717. package/dist/255.js.map +0 -1
  718. package/dist/300.js +0 -1
  719. package/dist/335.js +0 -1
  720. package/dist/339.js +0 -1
  721. package/dist/339.js.map +0 -1
  722. package/dist/353.js +0 -1
  723. package/dist/353.js.map +0 -1
  724. package/dist/420.js +0 -1
  725. package/dist/420.js.map +0 -1
  726. package/dist/540.js +0 -2
  727. package/dist/540.js.map +0 -1
  728. package/dist/55.js +0 -1
  729. package/dist/652.js +0 -1
  730. package/dist/709.js +0 -1
  731. package/dist/709.js.map +0 -1
  732. package/dist/710.js +0 -2
  733. package/dist/710.js.map +0 -1
  734. package/dist/729.js +0 -1
  735. package/dist/729.js.map +0 -1
  736. package/dist/752.js +0 -1
  737. package/dist/752.js.map +0 -1
  738. package/dist/833.js +0 -1
  739. package/dist/833.js.map +0 -1
  740. package/dist/907.js +0 -1
  741. package/dist/907.js.map +0 -1
  742. package/dist/91.js +0 -1
  743. package/dist/91.js.map +0 -1
  744. package/dist/93.js +0 -1
  745. package/dist/93.js.map +0 -1
  746. package/dist/943.js +0 -1
  747. package/dist/943.js.map +0 -1
  748. package/dist/99.js +0 -1
  749. /package/dist/{104.js.LICENSE.txt → 2177.js.LICENSE.txt} +0 -0
  750. /package/dist/{184.js.LICENSE.txt → 3184.js.LICENSE.txt} +0 -0
  751. /package/dist/{540.js.LICENSE.txt → 6540.js.LICENSE.txt} +0 -0
  752. /package/dist/{710.js.LICENSE.txt → 7830.js.LICENSE.txt} +0 -0
  753. /package/dist/{810.js.LICENSE.txt → 9583.js.LICENSE.txt} +0 -0
  754. /package/src/{service-queues/service-queue/stats → shared/ui}/stat-card/stat-card.component.scss +0 -0
@@ -0,0 +1,687 @@
1
+ import React, { useEffect, useMemo, useState } from 'react';
2
+ import {
3
+ type FacilityBillsDto,
4
+ type FacilityBill,
5
+ type ClaimVisitReponse,
6
+ type PatientBill,
7
+ BillLineItem,
8
+ BillPayment,
9
+ } from '../types';
10
+ import {
11
+ Button,
12
+ DataTable,
13
+ DataTableSkeleton,
14
+ Pagination,
15
+ Tab,
16
+ TabList,
17
+ TabPanel,
18
+ TabPanels,
19
+ Table,
20
+ TableBody,
21
+ TableCell,
22
+ TableHead,
23
+ TableHeader,
24
+ TableRow,
25
+ Tabs,
26
+ Tag,
27
+ } from '@carbon/react';
28
+ import { Renew, WarningAltFilled } from '@carbon/react/icons';
29
+ import { formatDate, parseDate, showSnackbar, usePagination } from '@openmrs/esm-framework';
30
+ import { useTranslation } from 'react-i18next';
31
+ import { useNavigate } from 'react-router-dom';
32
+ import {
33
+ claimVisitGuid,
34
+ claimVisitToken,
35
+ fetchFacilityBills,
36
+ useFacilityClaimVisits,
37
+ useLiveClaimStates,
38
+ } from '../../../billing-claims.resource';
39
+ import styles from './facility-bills.component.scss';
40
+ import TableToolbar from '../shared/table-toolbar.component';
41
+ import EmptyState from '../shared/empty-state.component';
42
+ import { ALL_BILL_BUCKETS, CLAIM_BUCKETS, PAYMENT_BUCKETS, type StatusBucket, statusMeta } from './claim-status';
43
+
44
+ // Show the CR with its "CR" prefix, e.g. CR7138388758297-0; dash when absent.
45
+ const formatCr = (value?: string | null): string => {
46
+ const v = (value ?? '').trim();
47
+ if (!v) return '—';
48
+ return /^cr/i.test(v) ? v : `CR${v}`;
49
+ };
50
+
51
+ // The same CR reaches us with and without its prefix and in either case — the bills
52
+ // endpoint and the claims-visit endpoint don't agree — so both sides are put through
53
+ // this before being matched.
54
+ const crKey = (value?: string | null): string => {
55
+ const v = (value ?? '').trim().toUpperCase();
56
+ if (!v) return '';
57
+ return v.startsWith('CR') ? v : `CR${v}`;
58
+ };
59
+
60
+ // The bills endpoint carries no payment mode; a consent token means the visit was
61
+ // authorised through SHA/HIE, anything else is settled at the cash point.
62
+ const paymentMode = (bill: PatientBill): string => ((bill.consent_token ?? '').trim() ? 'SHA' : 'Cash');
63
+
64
+ // Claim visits are listed with the time of day, not just the date: the same claim can be
65
+ // recorded against several visits on one day, and the start time is what tells those
66
+ // rows apart.
67
+ const formatVisitDate = (value?: string | null): string => {
68
+ const v = (value ?? '').trim();
69
+ if (!v) {
70
+ return '';
71
+ }
72
+ try {
73
+ return formatDate(parseDate(v), { time: true, noToday: true });
74
+ } catch {
75
+ return v;
76
+ }
77
+ };
78
+
79
+ // A bill's paid_status is a comma-separated per-line-item list; the bill is only paid
80
+ // once every line is.
81
+ function formatStatusColumn(status: string): string {
82
+ const statusArr = (status ?? '').split(',');
83
+ if (statusArr.length > 0) {
84
+ if (statusArr.some((s) => s === 'POSTED')) {
85
+ return 'PARTIALLY PAID';
86
+ }
87
+ if (statusArr.some((s) => s === 'PENDING')) {
88
+ return 'PENDING';
89
+ }
90
+ return 'PAID';
91
+ }
92
+ return status;
93
+ }
94
+
95
+ /**
96
+ * One table row, whatever it was built from — a cash bill or a SHA claim. The two
97
+ * sources describe different things (a bill is what was charged, a claim is what was
98
+ * filed with the payer), so they are normalised here rather than at the point of
99
+ * rendering.
100
+ */
101
+ interface BillRow {
102
+ id: string;
103
+ patientName: string;
104
+ crNumber: string;
105
+ visitType: string;
106
+ /** Raw status, used both for bucketing and for the tag: a claim's workflow_state, or
107
+ a bill's payment status. */
108
+ status: string;
109
+ billDate: string;
110
+ /** Set only when a facility bill backs this row. The bill-details drill-down is keyed
111
+ on the OpenMRS patient uuid, which /claims-visit doesn't carry, so a claim with no
112
+ matching bill has no bill to open. */
113
+ patientUuid: string;
114
+ /** Set on claim rows. Opens the claim itself — the one way in for a claim no bill was
115
+ raised against. */
116
+ consentToken: string;
117
+ /** The claim's authorization guid, which is what its page is addressed by. Empty on
118
+ rows built from a bill, which carries no guid. */
119
+ claimGuid: string;
120
+ /** Everything the free-text search looks at, pre-joined. */
121
+ searchText: string;
122
+ lineItems?: BillLineItem[];
123
+ payments?: BillPayment[];
124
+ }
125
+
126
+ const billRow = (fb: PatientBill): BillRow => {
127
+ const status = formatStatusColumn(fb.bill_status);
128
+ return {
129
+ id: `bill-${fb.bill_uuid}`,
130
+ patientName: fb.patient_name,
131
+ crNumber: formatCr(fb.identifier),
132
+ visitType: fb.visit_type || '—',
133
+ status,
134
+ billDate: fb.bill_date || '—',
135
+ patientUuid: fb.patient_uuid ?? '',
136
+ consentToken: (fb.consent_token ?? '').trim(),
137
+ claimGuid: '',
138
+ // The cash point is no longer a column but is still searchable — it's how a cashier
139
+ // finds their own bills.
140
+ searchText: `${fb.patient_name} ${formatCr(fb.identifier)} ${fb.receipt_number ?? ''} ${
141
+ fb.visit_type ?? ''
142
+ } ${status} ${fb.cash_point ?? ''}`.toLowerCase(),
143
+ lineItems: fb.bill_items,
144
+ payments: fb.payments,
145
+ };
146
+ };
147
+
148
+ // Newest claim visit first, so the most recent work is at the top of the tab. Anything
149
+ // without a usable timestamp sorts by the record id instead.
150
+ const claimTime = (cv: ClaimVisitReponse): number => {
151
+ const parsed = Date.parse(cv.dateCreated ?? cv.visitStart ?? '');
152
+ return Number.isNaN(parsed) ? 0 : parsed;
153
+ };
154
+
155
+ /**
156
+ * Every record /claims-visit returns is a row.
157
+ *
158
+ * The same HIE claim can come back more than once — the same claimVisitId and
159
+ * authorization code against several local visits, e.g. ids 59 and 61 of visit
160
+ * 2403e12b — and each of those is its own claim visit with its own visit number, so
161
+ * each is listed. Collapsing them would hide a visit that was actually recorded.
162
+ */
163
+ const orderClaimVisits = (visits: ClaimVisitReponse[]): ClaimVisitReponse[] =>
164
+ [...(visits ?? [])].sort((a, b) => claimTime(b) - claimTime(a) || (b.id ?? 0) - (a.id ?? 0));
165
+
166
+ // Status buckets for a payer tab: cash, SHA claims, or both vocabularies together.
167
+ const bucketsForTab = (index: number): StatusBucket[] =>
168
+ index === 0 ? PAYMENT_BUCKETS : index === 1 ? CLAIM_BUCKETS : ALL_BILL_BUCKETS;
169
+
170
+ /**
171
+ * Which payer an instance of this component lists. Each is a tab of the dashboard now —
172
+ * they were sub-tabs inside this component, and a payer bar under a tab that already
173
+ * named the payer was a second row of tabs saying the same thing.
174
+ *
175
+ * The numbers are the payer vocabulary read throughout — `bucketsForTab`, `activeRows`,
176
+ * `payerNoun` all switch on them — so they are named rather than renumbered.
177
+ */
178
+ export const CASH_PAYER_TAB = 0;
179
+ export const SHA_PAYER_TAB = 1;
180
+ export const ALL_BILLS_PAYER_TAB = 2;
181
+
182
+ // The status sub-tab a payer opens on: Draft when it has one (SHA / preauths), else
183
+ // Pending (cash), else the first bucket.
184
+ const defaultBucketKey = (buckets: StatusBucket[]): string => {
185
+ const preferred = buckets.find((b) => b.key === 'draft') ?? buckets.find((b) => b.key === 'pending');
186
+ return (preferred ?? buckets[0])?.key ?? '';
187
+ };
188
+
189
+ // The status bucket last being read, held at module scope so it survives this tab
190
+ // unmounting while the user stays inside billing — which is what opening a claim now does,
191
+ // since a claim has its own route. Deliberately not persisted any further: a page reload
192
+ // should start on the defaults. Cleared with the date filter when the user leaves billing
193
+ // altogether (see resetFacilityBillsFilters callers).
194
+ //
195
+ // Kept per payer. Each payer is a separate instance of this component and both are mounted
196
+ // at once inside the dashboard's tab panels, so a single slot would have them overwrite
197
+ // each other's memory on every render — and the buckets aren't even the same vocabulary.
198
+ const lastStatusFilterByPayer: Record<number, string> = {};
199
+
200
+ /** Forget the remembered status buckets, so each tab opens on its default. */
201
+ export function resetFacilityBillsFilters() {
202
+ for (const key of Object.keys(lastStatusFilterByPayer)) {
203
+ delete lastStatusFilterByPayer[Number(key)];
204
+ }
205
+ }
206
+
207
+ interface facilityBillsProps {
208
+ billingDate: string;
209
+ locationUuid: string;
210
+ onDateChange?: (value: string) => void;
211
+ /** Which payer this instance lists — one of the `*_PAYER_TAB` constants. */
212
+ payerTab: number;
213
+ /** Status bucket to open on when a dashboard tile is clicked. `navNonce` changes on
214
+ every click, so clicking the same tile twice still navigates. */
215
+ navStatusKey?: string;
216
+ navNonce?: number;
217
+ }
218
+ const FacilityBills: React.FC<facilityBillsProps> = ({
219
+ billingDate,
220
+ locationUuid,
221
+ onDateChange,
222
+ payerTab,
223
+ navStatusKey,
224
+ navNonce,
225
+ }) => {
226
+ const [facilityBills, setFacilityBills] = useState<PatientBill[]>([]);
227
+ // The SHA claims themselves, straight from /claims-visit — the rows of the SHA tab and
228
+ // the source of every claim status shown on this page. Shared with the dashboard tiles,
229
+ // so a tile and this table can't disagree about which claims exist.
230
+ const {
231
+ claimVisits,
232
+ loading: claimsLoading,
233
+ reload: loadClaimVisits,
234
+ } = useFacilityClaimVisits(locationUuid, billingDate);
235
+ const [search, setSearch] = useState<string>('');
236
+ const [loading, setLoading] = useState<boolean>(true);
237
+ // Fixed for the life of this instance — the dashboard tab that mounted it is what
238
+ // chooses the payer. Kept under the old name because the payer index is read in a dozen
239
+ // places below and it is the same number it always was.
240
+ const tabIndex = payerTab;
241
+ // Selected status bucket key ('' = All). Defaults to the first bucket of the payer
242
+ // (Drafts for SHA claims, Pending for cash).
243
+ const [statusFilter, setStatusFilter] = useState<string>(
244
+ () => lastStatusFilterByPayer[payerTab] ?? defaultBucketKey(bucketsForTab(payerTab)),
245
+ );
246
+ const { t } = useTranslation();
247
+ const navigate = useNavigate();
248
+ const pageSizes = [10, 20, 30, 40, 50];
249
+ const [currentPageSize, setPageSize] = useState(10);
250
+ useEffect(() => {
251
+ if (locationUuid && billingDate) {
252
+ getFacilityBills();
253
+ }
254
+ // eslint-disable-next-line react-hooks/exhaustive-deps
255
+ }, [billingDate, locationUuid]);
256
+
257
+ // Remember what is being read, so opening a claim — which now navigates away to the
258
+ // claim's own page — and coming back lands on the same status bucket.
259
+ useEffect(() => {
260
+ lastStatusFilterByPayer[payerTab] = statusFilter;
261
+ }, [payerTab, statusFilter]);
262
+
263
+ async function getFacilityBills() {
264
+ setLoading(true);
265
+ const facilityBillsPayload = generateFacilityBillsPayload();
266
+ try {
267
+ const data = await fetchFacilityBills(facilityBillsPayload);
268
+ console.log('FACILITY BILLS', data);
269
+ setFacilityBills(data ?? []);
270
+ } catch (error) {
271
+ showSnackbar({
272
+ kind: 'error',
273
+ title: 'Error fetching facility bills',
274
+ subtitle: 'An error occurred while fetching facility bills, please reload or contact support',
275
+ });
276
+ } finally {
277
+ setLoading(false);
278
+ }
279
+ }
280
+ function generateFacilityBillsPayload(): FacilityBillsDto {
281
+ return {
282
+ locationUuid: locationUuid ?? '',
283
+ billingDate: billingDate,
284
+ };
285
+ }
286
+
287
+ /**
288
+ * Open a row. The patient name is the way in, on every tab.
289
+ *
290
+ * A claim goes to its own page, addressed by its consent token, so it can be linked to
291
+ * and reloaded and Back returns here. Elsewhere the patient view is the comprehensive
292
+ * one — bill items, diagnosis, payments and the claim together — and it is keyed on the
293
+ * OpenMRS patient uuid, which only a matched bill gives us; the claim page is the
294
+ * fallback for a bill-less claim.
295
+ */
296
+ function openRowDetails(patientUuid: string, consentToken: string, claimGuid: string) {
297
+ // On the SHA tab every row *is* a claim, so the claim page is what it opens, even
298
+ // when a bill was matched to it.
299
+ if (consentToken && (tabIndex === 1 || !patientUuid)) {
300
+ // Addressed by the claim's authorization guid. The token goes along in router
301
+ // state so the page doesn't have to look the claim up again on the way in — it
302
+ // only falls back to a lookup when the URL is opened cold.
303
+ navigate(`/claim/${encodeURIComponent(claimGuid || consentToken)}`, { state: { consentToken } });
304
+ return;
305
+ }
306
+ if (patientUuid) {
307
+ // The bill has its own route now, the same as the claim above — so it can be linked
308
+ // to and reloaded, and Back returns to this list rather than leaving billing.
309
+ navigate(`/bill/${encodeURIComponent(patientUuid)}`);
310
+ }
311
+ }
312
+ // Split the bills by payer so each tab shows only its own.
313
+ // const cashBills = useMemo(() => (facilityBills ?? []).filter((fb) => paymentMode(fb) === 'Cash'), [facilityBills]);
314
+ // const shaBills = useMemo(() => (facilityBills ?? []).filter((fb) => paymentMode(fb) === 'SHA'), [facilityBills]);
315
+ const shaBills = useMemo(
316
+ () =>
317
+ (facilityBills ?? []).filter((bill) => bill.bill_items.some((item) => item.price_name?.toUpperCase() === 'SHA')),
318
+ [facilityBills],
319
+ );
320
+ const cashBills = useMemo(
321
+ () =>
322
+ (facilityBills ?? []).filter((bill) => {
323
+ const hasSha = bill.bill_items.some((item) => item.price_name?.toUpperCase() === 'SHA');
324
+
325
+ const hasCash = bill.bill_items.some((item) => item.price_name?.toUpperCase() === 'CASH');
326
+
327
+ return hasCash && !hasSha;
328
+ }),
329
+ [facilityBills],
330
+ );
331
+
332
+ // Every claim listed for this date, by consent token, so its live state can be
333
+ // resolved. Only the tabs that show claim statuses ask for them — the cash tab never
334
+ // reads one, and each is a slow round trip to the HIE.
335
+ const claimTokens = useMemo(() => (claimVisits ?? []).map(claimVisitToken).filter(Boolean), [claimVisits]);
336
+ const {
337
+ states: liveClaimStates,
338
+ settled: statesSettled,
339
+ failed: statesFailed,
340
+ } = useLiveClaimStates(claimTokens, locationUuid, tabIndex !== 0);
341
+
342
+ /**
343
+ * The SHA tab lists claims, and its rows come from /claims-visit — the endpoint that
344
+ * owns each claim's workflow_state — not from the bills. Deriving them from the bills
345
+ * meant a claim only appeared once a bill had been raised and matched to it, so claims
346
+ * filed against a visit with no bill (or one whose consent token didn't line up) were
347
+ * missing from every status bucket.
348
+ *
349
+ * A bill is still looked up for each claim, for the thing a claim doesn't carry: the
350
+ * OpenMRS patient uuid the bill drill-down needs. /claims-visit identifies the visit
351
+ * two ways and the bills endpoint agrees with each on a different field — the
352
+ * authorization code is the bill's consent token, patientId is its CR number — so both
353
+ * are tried before giving up.
354
+ */
355
+ const { claimRows, matchedBillIds } = useMemo(() => {
356
+ const byToken = new Map<string, PatientBill>();
357
+ const byCr = new Map<string, PatientBill>();
358
+ shaBills.forEach((fb) => {
359
+ const token = (fb.consent_token ?? '').trim().toUpperCase();
360
+ if (token && !byToken.has(token)) {
361
+ byToken.set(token, fb);
362
+ }
363
+ const cr = crKey(fb.identifier);
364
+ if (cr && !byCr.has(cr)) {
365
+ byCr.set(cr, fb);
366
+ }
367
+ });
368
+
369
+ const matched = new Set<string>();
370
+ const rows = orderClaimVisits(claimVisits ?? []).map((cv) => {
371
+ const claim = cv.visitResponse;
372
+ const consentToken = (cv.authorizationCode || claim?.authorization_code || '').trim();
373
+ const token = consentToken.toUpperCase();
374
+ const cr = crKey(cv.patientId || claim?.member_number);
375
+ const bill = (token ? byToken.get(token) : undefined) ?? (cr ? byCr.get(cr) : undefined);
376
+ if (bill) {
377
+ matched.add(bill.bill_uuid);
378
+ }
379
+ // The live state when the claim preview has answered, and only until then the copy
380
+ // /claims-visit stored when the visit was recorded — that copy is frozen at DRAFT
381
+ // for any claim submitted since.
382
+ const status = liveClaimStates[consentToken] || (claim?.workflow_state ?? '').trim();
383
+ const patientName = claim?.patient_name || bill?.patient_name || '—';
384
+ const crNumber = formatCr(cv.patientId || claim?.member_number);
385
+ const visitType = cv.serviceType || claim?.service_type || bill?.visit_type || '—';
386
+ const visitNumber = cv.claimVisitNumber || claim?.visit_number || '';
387
+ return {
388
+ // Keyed on the record id, not the claim: two records can share a claim.
389
+ id: `claim-${cv.id}`,
390
+ patientName,
391
+ crNumber,
392
+ visitType,
393
+ status,
394
+ billDate: formatVisitDate(cv.visitStart || claim?.visit_start) || bill?.bill_date || '—',
395
+ patientUuid: bill?.patient_uuid ?? '',
396
+ consentToken,
397
+ claimGuid: claimVisitGuid(cv),
398
+ searchText: `${patientName} ${crNumber} ${visitType} ${status} ${visitNumber} ${token} ${
399
+ claim?.invoice_number ?? ''
400
+ } ${bill?.cash_point ?? ''}`.toLowerCase(),
401
+ } as BillRow;
402
+ });
403
+ return { claimRows: rows, matchedBillIds: matched };
404
+ }, [claimVisits, shaBills, liveClaimStates]);
405
+
406
+ const cashRows = useMemo(() => cashBills.map(billRow), [cashBills]);
407
+ // SHA bills no claim was found for. They'd otherwise drop out of "All bills"
408
+ // altogether, so they stay on as bill rows reporting what was paid.
409
+ const unmatchedShaRows = useMemo(
410
+ () => shaBills.filter((fb) => !matchedBillIds.has(fb.bill_uuid)).map(billRow),
411
+ [shaBills, matchedBillIds],
412
+ );
413
+ // 0 = Cash bills, 1 = SHA claims, 2 = All bills (both payers together).
414
+ const allRows = useMemo(
415
+ () => [...cashRows, ...claimRows, ...unmatchedShaRows],
416
+ [cashRows, claimRows, unmatchedShaRows],
417
+ );
418
+ const activeRows: BillRow[] = tabIndex === 0 ? cashRows : tabIndex === 1 ? claimRows : allRows;
419
+
420
+ // Nothing is shown on the claim tabs until both halves are in: the claims themselves,
421
+ // and the live state of every one of them. Rendering in between would put the stored
422
+ // states on screen — DRAFT for claims long since submitted — and let them be acted on
423
+ // before they silently corrected themselves.
424
+ const rowsLoading = tabIndex !== 0 && (claimsLoading || !statesSettled);
425
+
426
+ const statusOf = (row: BillRow): string => (row.status ?? '').trim().toUpperCase();
427
+ /**
428
+ * A status none of the buckets name — a claim state the HIE has added since, say —
429
+ * would be listed under "All" and under no other sub-tab. Collecting the leftovers
430
+ * into their own tab keeps the buckets honest: everything the endpoint returned is
431
+ * reachable from somewhere.
432
+ */
433
+ const leftoverBucket = (rows: BillRow[], buckets: StatusBucket[]): StatusBucket | null => {
434
+ const known = new Set(buckets.flatMap((b) => b.statuses.map((s) => s.toUpperCase())));
435
+ const leftovers = Array.from(new Set(rows.map(statusOf))).filter((s) => !known.has(s));
436
+ return leftovers.length ? { key: 'other', label: 'Other', statuses: leftovers } : null;
437
+ };
438
+
439
+ const baseBuckets = bucketsForTab(tabIndex);
440
+ // Held back with the rest: an "Other" tab derived from states still being confirmed
441
+ // would appear and then vanish as they land.
442
+ const extraBucket = rowsLoading ? null : leftoverBucket(activeRows, baseBuckets);
443
+ const statusBuckets: StatusBucket[] = extraBucket ? [...baseBuckets, extraBucket] : baseBuckets;
444
+ const selectedBucket = statusBuckets.find((b) => b.key === statusFilter);
445
+ const bucketMatches = (bucket: StatusBucket, row: BillRow): boolean =>
446
+ bucket.statuses.some((s) => s.toUpperCase() === statusOf(row));
447
+
448
+ // Rows in the current status bucket, before the free-text search is applied. Drives
449
+ // whether the search box is shown (only when there's something to search).
450
+ const bucketRows = activeRows.filter((row) => !selectedBucket || bucketMatches(selectedBucket, row));
451
+ const filteredRows = bucketRows.filter((row) => {
452
+ const term = search.trim().toLowerCase();
453
+ return !term || row.searchText.includes(term);
454
+ });
455
+
456
+ const { goTo, results: paginatedRows, currentPage } = usePagination(filteredRows, currentPageSize);
457
+
458
+ // A dashboard tile was clicked: open the payer tab it counted and the bucket it named,
459
+ // so the number on the tile and the rows landed on are the same set.
460
+ useEffect(() => {
461
+ if (!navNonce) {
462
+ return;
463
+ }
464
+ // The payer is fixed by the tab that mounted this, so only the bucket within it is
465
+ // navigable — sending a tile to another payer is the dashboard's job now.
466
+ if (navStatusKey) {
467
+ setStatusFilter(navStatusKey);
468
+ }
469
+ setSearch('');
470
+ goTo(1);
471
+ // eslint-disable-next-line react-hooks/exhaustive-deps
472
+ }, [navNonce]);
473
+
474
+ const columns = [
475
+ { id: 'index', header: '#', key: 'index' },
476
+ { id: 'patientName', header: 'Patient', key: 'patientName' },
477
+ { id: 'crNumber', header: 'CR number', key: 'crNumber' },
478
+ { id: 'visitType', header: 'Visit type', key: 'visitType' },
479
+ { id: 'status', header: 'Status', key: 'status' },
480
+ { id: 'billDate', header: 'Date', key: 'billDate' },
481
+ // Carried on the row but never shown: what the patient name opens is decided from
482
+ // these three.
483
+ { id: 'patientUuid', header: '', key: 'patientUuid' },
484
+ { id: 'consentToken', header: '', key: 'consentToken' },
485
+ { id: 'claimGuid', header: '', key: 'claimGuid' },
486
+ ];
487
+ const hiddenColumns = ['patientUuid', 'consentToken', 'claimGuid'];
488
+
489
+ const rows = paginatedRows.map((row, index) => ({
490
+ id: `${row.id}-${index}`,
491
+ index: (currentPage - 1) * currentPageSize + index + 1,
492
+ patientName: row.patientName,
493
+ crNumber: row.crNumber,
494
+ visitType: row.visitType,
495
+ status: row.status,
496
+ billDate: row.billDate,
497
+ patientUuid: row.patientUuid,
498
+ consentToken: row.consentToken,
499
+ claimGuid: row.claimGuid,
500
+ }));
501
+
502
+ const payerNoun = tabIndex === 1 ? 'SHA claims' : tabIndex === 2 ? 'bills' : 'cash bills';
503
+ const emptyBillsMessage = selectedBucket
504
+ ? `No ${payerNoun} under “${selectedBucket.label}”.`
505
+ : search
506
+ ? 'No bills match your search.'
507
+ : `No ${payerNoun} for the selected date.`;
508
+
509
+ // Status sub-tabs: one per bucket for the active payer, with "All" last.
510
+ const statusTabItems: StatusBucket[] = [...statusBuckets, { key: '', label: 'All', statuses: [] }];
511
+ // A bucket can disappear between loads — "Other" does, once nothing unrecognised is
512
+ // left. Fall back to All, so no tab is highlighted while the table is unfiltered.
513
+ const selectedTabIndex = statusTabItems.findIndex((b) => b.key === statusFilter);
514
+ const statusTabIndex = selectedTabIndex >= 0 ? selectedTabIndex : statusTabItems.length - 1;
515
+ const countForBucket = (bucket: StatusBucket) =>
516
+ bucket.key === '' ? activeRows.length : activeRows.filter((row) => bucketMatches(bucket, row)).length;
517
+ const countPill = (value: number) => <span className={styles.pill}>{value}</span>;
518
+
519
+ const billsTableBody = rowsLoading ? (
520
+ <div className={styles.tableCard}>
521
+ <DataTableSkeleton role="progressbar" showHeader={false} showToolbar={false} />
522
+ </div>
523
+ ) : (
524
+ <>
525
+ {bucketRows.length > 0 ? (
526
+ <TableToolbar
527
+ id="facility-bills"
528
+ search={search}
529
+ onSearch={setSearch}
530
+ searchPlaceholder="Search patient, CR number or status…"
531
+ onDate={onDateChange}
532
+ />
533
+ ) : null}
534
+ {filteredRows.length === 0 ? (
535
+ <div className={styles.tableCard}>
536
+ <EmptyState message={emptyBillsMessage} />
537
+ </div>
538
+ ) : (
539
+ <DataTable rows={rows} headers={columns}>
540
+ {({ rows: dtRows, headers, getTableProps, getHeaderProps, getRowProps, getCellProps }) => (
541
+ <div className={styles.tableCard}>
542
+ <Table size="sm" useZebraStyles aria-label="facility bills" {...getTableProps()}>
543
+ <TableHead>
544
+ <TableRow>
545
+ {headers
546
+ .filter((header) => !hiddenColumns.includes(header.key))
547
+ .map((header) => (
548
+ <TableHeader {...getHeaderProps({ header })}>{header.header}</TableHeader>
549
+ ))}
550
+ </TableRow>
551
+ </TableHead>
552
+ <TableBody>
553
+ {dtRows.map((row) => {
554
+ const patientUuid = row.cells.find((c) => c.info.header === 'patientUuid')?.value;
555
+ const consentToken = row.cells.find((c) => c.info.header === 'consentToken')?.value;
556
+ const claimGuid = row.cells.find((c) => c.info.header === 'claimGuid')?.value;
557
+ return (
558
+ <TableRow {...getRowProps({ row })}>
559
+ {row.cells.map((cell) => {
560
+ if (hiddenColumns.includes(cell.info.header)) {
561
+ return null;
562
+ }
563
+ if (cell.info.header === 'patientName') {
564
+ const canOpen = Boolean(patientUuid || consentToken);
565
+ return (
566
+ <TableCell key={cell.id}>
567
+ {canOpen ? (
568
+ <button
569
+ type="button"
570
+ className={styles.clickableData}
571
+ onClick={() => openRowDetails(patientUuid, consentToken, claimGuid)}
572
+ >
573
+ {cell.value}
574
+ </button>
575
+ ) : (
576
+ cell.value
577
+ )}
578
+ </TableCell>
579
+ );
580
+ }
581
+ if (cell.info.header === 'status') {
582
+ // The claim's workflow_state verbatim — the value the HIE
583
+ // returned, not a re-worded version of it. statusMeta is
584
+ // consulted only for the tag colour.
585
+ return (
586
+ <TableCell key={cell.id}>
587
+ <Tag size="sm" type={statusMeta(cell.value).tag}>
588
+ {cell.value || '—'}
589
+ </Tag>
590
+ </TableCell>
591
+ );
592
+ }
593
+ return (
594
+ <TableCell {...getCellProps({ cell })} key={cell.id}>
595
+ {cell.value}
596
+ </TableCell>
597
+ );
598
+ })}
599
+ </TableRow>
600
+ );
601
+ })}
602
+ </TableBody>
603
+ </Table>
604
+ </div>
605
+ )}
606
+ </DataTable>
607
+ )}
608
+ {filteredRows.length > 0 && (
609
+ <Pagination
610
+ forwardText={t('nextPage', 'Next page')}
611
+ backwardText={t('previousPage', 'Previous page')}
612
+ page={currentPage}
613
+ pageSize={currentPageSize}
614
+ pageSizes={pageSizes}
615
+ totalItems={filteredRows.length}
616
+ onChange={({ pageSize, page }) => {
617
+ if (pageSize !== currentPageSize) setPageSize(pageSize);
618
+ if (page !== currentPage) goTo(page);
619
+ }}
620
+ />
621
+ )}
622
+ </>
623
+ );
624
+
625
+ // The skeleton already stands for the wait while claim states are confirmed, so
626
+ // nothing is said about it here. What still needs saying is the case the skeleton
627
+ // can't show: states that were asked for and never came back.
628
+ const statusNotice =
629
+ tabIndex === 0 || rowsLoading ? null : statesFailed > 0 ? (
630
+ <div className={`${styles.statusNotice} ${styles.statusNoticeWarning}`}>
631
+ <WarningAltFilled size={16} />
632
+ <span>
633
+ {statesFailed} claim {statesFailed === 1 ? 'status' : 'statuses'} couldn’t be confirmed — those rows show the
634
+ state last recorded, which may be out of date.
635
+ </span>
636
+ </div>
637
+ ) : null;
638
+
639
+ const billsTable = (
640
+ <>
641
+ {statusNotice}
642
+ <Tabs
643
+ selectedIndex={statusTabIndex}
644
+ onChange={({ selectedIndex }) => {
645
+ setStatusFilter(statusTabItems[selectedIndex]?.key ?? '');
646
+ goTo(1);
647
+ }}
648
+ >
649
+ <TabList aria-label="Bill statuses" className={styles.statusTabs} scrollDebounceWait={200}>
650
+ {statusTabItems.map((bucket) => (
651
+ <Tab key={bucket.key || 'all'}>
652
+ {bucket.label}
653
+ {/* A count off unconfirmed states would read as fact and then change. */}
654
+ {rowsLoading ? null : countPill(countForBucket(bucket))}
655
+ </Tab>
656
+ ))}
657
+ </TabList>
658
+ <TabPanels>
659
+ {statusTabItems.map((bucket) => (
660
+ <TabPanel key={bucket.key || 'all'}>{statusFilter === bucket.key ? billsTableBody : null}</TabPanel>
661
+ ))}
662
+ </TabPanels>
663
+ </Tabs>
664
+ </>
665
+ );
666
+
667
+ return (
668
+ <>
669
+ {/* The bill drill-down that used to sit beside this is a route of its own now, so
670
+ the list is all this component renders. */}
671
+ <div className={styles.panel}>
672
+ {/* No heading and no payer bar: the dashboard tab above already names both what
673
+ this list is and whose bills are in it, and the status buckets inside the
674
+ table are the only choice left to make. */}
675
+ {loading ? (
676
+ <div className={styles.tableCard}>
677
+ <DataTableSkeleton role="progressbar" showHeader={false} showToolbar={false} />
678
+ </div>
679
+ ) : (
680
+ billsTable
681
+ )}
682
+ </div>
683
+ </>
684
+ );
685
+ };
686
+
687
+ export default FacilityBills;