@kenyaemr/esm-express-workflow-app 5.4.3 → 5.4.4-pre.1

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 (487) hide show
  1. package/.turbo/turbo-build.log +13 -11
  2. package/dist/1074.js +1 -0
  3. package/dist/1074.js.map +1 -0
  4. package/dist/1084.js +1 -0
  5. package/dist/1084.js.map +1 -0
  6. package/dist/12.js +17 -0
  7. package/dist/12.js.map +1 -0
  8. package/dist/126.js +1 -0
  9. package/dist/126.js.map +1 -0
  10. package/dist/1311.js +1 -0
  11. package/dist/1311.js.map +1 -0
  12. package/dist/1323.js +1 -0
  13. package/dist/1323.js.map +1 -0
  14. package/dist/1469.js +1 -0
  15. package/dist/1469.js.map +1 -0
  16. package/dist/1506.js +13 -0
  17. package/dist/1506.js.map +1 -0
  18. package/dist/1760.js +1 -0
  19. package/dist/1760.js.map +1 -0
  20. package/dist/1780.js +1 -0
  21. package/dist/1780.js.map +1 -0
  22. package/dist/1791.js +1 -0
  23. package/dist/1791.js.map +1 -0
  24. package/dist/1884.js +1 -0
  25. package/dist/1884.js.map +1 -0
  26. package/dist/1972.js +1 -0
  27. package/dist/1972.js.map +1 -0
  28. package/dist/1990.js +1 -0
  29. package/dist/1990.js.map +1 -0
  30. package/dist/2016.js +1 -0
  31. package/dist/2016.js.map +1 -0
  32. package/dist/2024.js +1 -0
  33. package/dist/2024.js.map +1 -0
  34. package/dist/2153.js +1 -0
  35. package/dist/2153.js.map +1 -0
  36. package/dist/216.js +1 -0
  37. package/dist/216.js.map +1 -0
  38. package/dist/2225.js +1 -0
  39. package/dist/2225.js.map +1 -0
  40. package/dist/2294.js +1 -0
  41. package/dist/2294.js.map +1 -0
  42. package/dist/2345.js +1 -0
  43. package/dist/2345.js.map +1 -0
  44. package/dist/2386.js +1 -0
  45. package/dist/2386.js.map +1 -0
  46. package/dist/2438.js +1 -0
  47. package/dist/2438.js.map +1 -0
  48. package/dist/2499.js +1 -0
  49. package/dist/2499.js.map +1 -0
  50. package/dist/2500.js +1 -0
  51. package/dist/2500.js.map +1 -0
  52. package/dist/2586.js +1 -0
  53. package/dist/2586.js.map +1 -0
  54. package/dist/2625.js +1 -0
  55. package/dist/2625.js.map +1 -0
  56. package/dist/2685.js +1 -0
  57. package/dist/2685.js.map +1 -0
  58. package/dist/2757.js +1 -0
  59. package/dist/2757.js.map +1 -0
  60. package/dist/2851.js +1 -0
  61. package/dist/2851.js.map +1 -0
  62. package/dist/2881.js +1 -0
  63. package/dist/2881.js.map +1 -0
  64. package/dist/2948.js +1 -0
  65. package/dist/2948.js.map +1 -0
  66. package/dist/2968.js +1 -0
  67. package/dist/2968.js.map +1 -0
  68. package/dist/2998.js +1 -0
  69. package/dist/2998.js.map +1 -0
  70. package/dist/30.js +1 -0
  71. package/dist/30.js.map +1 -0
  72. package/dist/3089.js +1 -0
  73. package/dist/3089.js.map +1 -0
  74. package/dist/3139.js +1 -0
  75. package/dist/3139.js.map +1 -0
  76. package/dist/3220.js +1 -0
  77. package/dist/3220.js.map +1 -0
  78. package/dist/3265.js +1 -0
  79. package/dist/3265.js.map +1 -0
  80. package/dist/3548.js +1 -0
  81. package/dist/3548.js.map +1 -0
  82. package/dist/3567.js +1 -0
  83. package/dist/3567.js.map +1 -0
  84. package/dist/3571.js +1 -0
  85. package/dist/3571.js.map +1 -0
  86. package/dist/3691.js +1 -0
  87. package/dist/3691.js.map +1 -0
  88. package/dist/3730.js +1 -0
  89. package/dist/3730.js.map +1 -0
  90. package/dist/3923.js +1 -0
  91. package/dist/3923.js.map +1 -0
  92. package/dist/3963.js +1 -0
  93. package/dist/3963.js.map +1 -0
  94. package/dist/4024.js +1 -0
  95. package/dist/4024.js.map +1 -0
  96. package/dist/405.js +1 -0
  97. package/dist/405.js.map +1 -0
  98. package/dist/4296.js +1 -0
  99. package/dist/4296.js.map +1 -0
  100. package/dist/4504.js +1 -0
  101. package/dist/4504.js.map +1 -0
  102. package/dist/4564.js +1 -0
  103. package/dist/4564.js.map +1 -0
  104. package/dist/4581.js +1 -0
  105. package/dist/4581.js.map +1 -0
  106. package/dist/4670.js +1 -0
  107. package/dist/4670.js.map +1 -0
  108. package/dist/4680.js +1 -0
  109. package/dist/4680.js.map +1 -0
  110. package/dist/4682.js +1 -0
  111. package/dist/4682.js.map +1 -0
  112. package/dist/4735.js +1 -0
  113. package/dist/4735.js.map +1 -0
  114. package/dist/4737.js +1 -0
  115. package/dist/4737.js.map +1 -0
  116. package/dist/4744.js +1 -0
  117. package/dist/4744.js.map +1 -0
  118. package/dist/4795.js +1 -0
  119. package/dist/4795.js.map +1 -0
  120. package/dist/4813.js +2 -0
  121. package/dist/4813.js.map +1 -0
  122. package/dist/4818.js +1 -0
  123. package/dist/4818.js.map +1 -0
  124. package/dist/4858.js +1 -0
  125. package/dist/4858.js.map +1 -0
  126. package/dist/487.js +1 -0
  127. package/dist/487.js.map +1 -0
  128. package/dist/4970.js +1 -0
  129. package/dist/4970.js.map +1 -0
  130. package/dist/5047.js +1 -0
  131. package/dist/5047.js.map +1 -0
  132. package/dist/5054.js +1 -0
  133. package/dist/5054.js.map +1 -0
  134. package/dist/5202.js +1 -0
  135. package/dist/5202.js.map +1 -0
  136. package/dist/5491.js +1 -0
  137. package/dist/5491.js.map +1 -0
  138. package/dist/5592.js +1 -0
  139. package/dist/5592.js.map +1 -0
  140. package/dist/5669.js +1 -0
  141. package/dist/5669.js.map +1 -0
  142. package/dist/5787.js +1 -0
  143. package/dist/5787.js.map +1 -0
  144. package/dist/586.js +1 -0
  145. package/dist/586.js.map +1 -0
  146. package/dist/5879.js +1 -0
  147. package/dist/5879.js.map +1 -0
  148. package/dist/5904.js +1 -0
  149. package/dist/5904.js.map +1 -0
  150. package/dist/5986.js +1 -0
  151. package/dist/5986.js.map +1 -0
  152. package/dist/6007.js +11 -0
  153. package/dist/6007.js.map +1 -0
  154. package/dist/6075.js +1 -0
  155. package/dist/6075.js.map +1 -0
  156. package/dist/6258.js +1 -0
  157. package/dist/6258.js.map +1 -0
  158. package/dist/629.js +1 -0
  159. package/dist/629.js.map +1 -0
  160. package/dist/6328.js +1 -0
  161. package/dist/6328.js.map +1 -0
  162. package/dist/6355.js +1 -0
  163. package/dist/6355.js.map +1 -0
  164. package/dist/64.js +1 -0
  165. package/dist/64.js.map +1 -0
  166. package/dist/6445.js +1 -0
  167. package/dist/6445.js.map +1 -0
  168. package/dist/6456.js +1 -0
  169. package/dist/6466.js +3 -0
  170. package/dist/6466.js.map +1 -0
  171. package/dist/6663.js +1 -0
  172. package/dist/6663.js.map +1 -0
  173. package/dist/6720.js +1 -0
  174. package/dist/6720.js.map +1 -0
  175. package/dist/6798.js +66 -0
  176. package/dist/6798.js.map +1 -0
  177. package/dist/6925.js +1 -0
  178. package/dist/6925.js.map +1 -0
  179. package/dist/7201.js +1 -0
  180. package/dist/7201.js.map +1 -0
  181. package/dist/7234.js +1 -0
  182. package/dist/7234.js.map +1 -0
  183. package/dist/7261.js +1 -0
  184. package/dist/7261.js.map +1 -0
  185. package/dist/7326.js +1 -0
  186. package/dist/7359.js +1 -0
  187. package/dist/7405.js +1 -0
  188. package/dist/7405.js.map +1 -0
  189. package/dist/7591.js +1 -0
  190. package/dist/7591.js.map +1 -0
  191. package/dist/7602.js +1 -0
  192. package/dist/7602.js.map +1 -0
  193. package/dist/7607.js +1 -0
  194. package/dist/7701.js +1 -0
  195. package/dist/7701.js.map +1 -0
  196. package/dist/7717.js +1 -0
  197. package/dist/7717.js.map +1 -0
  198. package/dist/7739.js +1 -0
  199. package/dist/7739.js.map +1 -0
  200. package/dist/7788.js +1 -0
  201. package/dist/7788.js.map +1 -0
  202. package/dist/7819.js +1 -0
  203. package/dist/7819.js.map +1 -0
  204. package/dist/7820.js +1 -0
  205. package/dist/7820.js.map +1 -0
  206. package/dist/7844.js +1 -0
  207. package/dist/7844.js.map +1 -0
  208. package/dist/7971.js +1 -0
  209. package/dist/7971.js.map +1 -0
  210. package/dist/807.js +1 -0
  211. package/dist/807.js.map +1 -0
  212. package/dist/8159.js +7 -0
  213. package/dist/8159.js.map +1 -0
  214. package/dist/8338.js +1 -0
  215. package/dist/8338.js.map +1 -0
  216. package/dist/845.js +1 -0
  217. package/dist/845.js.map +1 -0
  218. package/dist/8566.js +1 -0
  219. package/dist/8566.js.map +1 -0
  220. package/dist/8570.js +1 -0
  221. package/dist/8570.js.map +1 -0
  222. package/dist/8613.js +1 -0
  223. package/dist/8613.js.map +1 -0
  224. package/dist/8682.js +1 -0
  225. package/dist/8682.js.map +1 -0
  226. package/dist/87.js +1 -0
  227. package/dist/87.js.map +1 -0
  228. package/dist/8727.js +1 -0
  229. package/dist/8766.js +1 -0
  230. package/dist/8766.js.map +1 -0
  231. package/dist/8799.js +1 -0
  232. package/dist/8799.js.map +1 -0
  233. package/dist/8828.js +1 -0
  234. package/dist/8828.js.map +1 -0
  235. package/dist/8860.js +1 -0
  236. package/dist/8860.js.map +1 -0
  237. package/dist/8911.js +1 -0
  238. package/dist/8911.js.map +1 -0
  239. package/dist/8930.js +1 -0
  240. package/dist/8930.js.map +1 -0
  241. package/dist/8971.js +1 -0
  242. package/dist/8971.js.map +1 -0
  243. package/dist/9011.js +1 -0
  244. package/dist/9011.js.map +1 -0
  245. package/dist/9111.js +1 -0
  246. package/dist/9111.js.map +1 -0
  247. package/dist/9124.js +1 -0
  248. package/dist/9124.js.map +1 -0
  249. package/dist/9157.js +1 -0
  250. package/dist/9157.js.map +1 -0
  251. package/dist/9161.js +1 -0
  252. package/dist/9161.js.map +1 -0
  253. package/dist/9182.js +1 -0
  254. package/dist/921.js +1 -0
  255. package/dist/921.js.map +1 -0
  256. package/dist/9212.js +1 -0
  257. package/dist/9212.js.map +1 -0
  258. package/dist/9255.js +1 -0
  259. package/dist/9255.js.map +1 -0
  260. package/dist/9257.js +1 -0
  261. package/dist/9257.js.map +1 -0
  262. package/dist/9343.js +1 -0
  263. package/dist/9343.js.map +1 -0
  264. package/dist/9404.js +1 -0
  265. package/dist/9404.js.map +1 -0
  266. package/dist/9446.js +1 -0
  267. package/dist/9446.js.map +1 -0
  268. package/dist/9449.js +1 -0
  269. package/dist/9449.js.map +1 -0
  270. package/dist/9488.js +1 -0
  271. package/dist/9488.js.map +1 -0
  272. package/dist/9514.js +1 -0
  273. package/dist/9514.js.map +1 -0
  274. package/dist/9528.js +1 -0
  275. package/dist/9528.js.map +1 -0
  276. package/dist/9535.js +1 -0
  277. package/dist/9535.js.map +1 -0
  278. package/dist/9606.js +1 -0
  279. package/dist/9606.js.map +1 -0
  280. package/dist/9834.js +1 -0
  281. package/dist/9834.js.map +1 -0
  282. package/dist/9845.js +1 -0
  283. package/dist/9845.js.map +1 -0
  284. package/dist/9848.js +1 -0
  285. package/dist/9848.js.map +1 -0
  286. package/dist/kenyaemr-esm-express-workflow-app.js +5 -5
  287. package/dist/kenyaemr-esm-express-workflow-app.js.buildmanifest.json +3394 -173
  288. package/dist/kenyaemr-esm-express-workflow-app.js.map +1 -1
  289. package/dist/main.js +7 -106
  290. package/dist/main.js.map +1 -1
  291. package/dist/routes.json +1 -1
  292. package/package.json +7 -8
  293. package/rspack.config.js +1 -1
  294. package/src/components/accounting/index.tsx +11 -10
  295. package/src/components/admissions/admissions-dashboard.component.tsx +2 -2
  296. package/src/components/admissions/index.tsx +11 -10
  297. package/src/components/anaesthetic/anaesthetic-dashboard.meta.ts +8 -0
  298. package/src/components/anaesthetic/anaesthetic-data-form.component.tsx +442 -0
  299. package/src/components/anaesthetic/anaesthetic-data-form.scss +278 -0
  300. package/src/components/anaesthetic/anaesthetic-link.component.tsx +21 -0
  301. package/src/components/anaesthetic/anaesthetic.component.tsx +618 -0
  302. package/src/components/anaesthetic/anaesthetic.resource.ts +1503 -0
  303. package/src/components/anaesthetic/anaesthetic.scss +1885 -0
  304. package/src/components/anaesthetic/forms/anaesthetic-form.component.tsx +304 -0
  305. package/src/components/anaesthetic/forms/anaesthetic-record-form.component.tsx +707 -0
  306. package/src/components/anaesthetic/forms/icd11-diagnosis-search.component.tsx +178 -0
  307. package/src/components/anaesthetic/forms/icd11-diagnosis-search.scss +126 -0
  308. package/src/components/anaesthetic/forms/index.ts +2 -0
  309. package/src/components/anaesthetic/forms/interoperative-record-drug-given-form.component.tsx +231 -0
  310. package/src/components/anaesthetic/forms/post-operative-summary-form.component.tsx +171 -0
  311. package/src/components/anaesthetic/forms/time-picker-dropdown.component.tsx +202 -0
  312. package/src/components/anaesthetic/forms/time-picker-dropdown.scss +107 -0
  313. package/src/components/anaesthetic/forms/time-picker-with-clock.component.tsx +174 -0
  314. package/src/components/anaesthetic/forms/time-picker-with-clock.scss +178 -0
  315. package/src/components/anaesthetic/forms/useAnaestheticData.ts +16 -0
  316. package/src/components/anaesthetic/graphs/anaesthetic-graph-wrapper.component.tsx +266 -0
  317. package/src/components/anaesthetic/graphs/anaesthetic-graph.component.tsx +185 -0
  318. package/src/components/anaesthetic/graphs/index.ts +2 -0
  319. package/src/components/anaesthetic/graphs/interoperative-record-drug-given-graph-wrapper.component.tsx +197 -0
  320. package/src/components/anaesthetic/graphs/interoperative-record-drug-given-graph.component.tsx +93 -0
  321. package/src/components/anaesthetic/resources/anaesthetic-amniotic-fluid.resource.ts +277 -0
  322. package/src/components/anaesthetic/resources/anaesthetic-form.resource.ts +716 -0
  323. package/src/components/anaesthetic/resources/anaesthetic.resource.ts +378 -0
  324. package/src/components/anaesthetic/types/index.ts +1349 -0
  325. package/src/components/appointments/index.ts +10 -8
  326. package/src/components/consultation/clinical-encounter/clinical-encounter.component.tsx +4 -20
  327. package/src/components/consultation/clinical-encounter/encounter-details.component.tsx +9 -9
  328. package/src/components/consultation/clinical-encounter/encounter-details.test.tsx +19 -18
  329. package/src/components/consultation/consultation-context.tsx +19 -0
  330. package/src/components/consultation/consultation-summary-cards.component.tsx +124 -0
  331. package/src/components/consultation/consultation.component.tsx +41 -268
  332. package/src/components/consultation/consultation.resource.ts +67 -24
  333. package/src/components/consultation/consultation.scss +5 -0
  334. package/src/components/consultation/consultation.utils.tsx +222 -0
  335. package/src/components/consultation/dashboard.component.tsx +0 -2
  336. package/src/components/consultation/index.ts +28 -21
  337. package/src/components/consultation/tabs/index.ts +67 -0
  338. package/src/components/facility-dashboard/components/header/home-header.component.tsx +8 -13
  339. package/src/components/facility-dashboard/index.tsx +10 -9
  340. package/src/components/laboratory/index.ts +22 -10
  341. package/src/components/laboratory/lab-table.component.tsx +40 -12
  342. package/src/components/laboratory/laboratory-tabs.component.tsx +3 -17
  343. package/src/components/mch/dashboard.component.tsx +0 -2
  344. package/src/components/mch/index.tsx +10 -9
  345. package/src/components/mch/mch.component.tsx +1 -3
  346. package/src/components/mch/mch.consultation.component.tsx +27 -15
  347. package/src/components/mch/mch.triage.component.tsx +42 -33
  348. package/src/components/pharmacy/index.ts +21 -19
  349. package/src/components/pharmacy/orders/pharmacy-orders.component.tsx +35 -13
  350. package/src/components/pharmacy/orders/pharmacy-orders.test.tsx +8 -7
  351. package/src/components/pharmacy/pharmacy-tabs.component.tsx +4 -20
  352. package/src/components/pharmacy/tabs/index.ts +21 -0
  353. package/src/components/preauth/index.ts +22 -0
  354. package/src/components/preauth/preauth-dashboard.component.tsx +20 -0
  355. package/src/components/procedures/index.ts +27 -10
  356. package/src/components/procedures/procedure-queues/index.ts +13 -0
  357. package/src/components/procedures/procedure-queues/procedure-form-extras.component.tsx +33 -0
  358. package/src/components/procedures/procedure-queues/procedure-form-extras.scss +5 -0
  359. package/src/components/procedures/procedure-queues/procedure-queues.component.tsx +35 -0
  360. package/src/components/procedures/procedure-queues/procedure-queues.resources.ts +37 -0
  361. package/src/components/procedures/procedure-queues/procedure-room-tabs.component.tsx +80 -0
  362. package/src/components/procedures/procedure-queues/procedure-rooms.scss +13 -0
  363. package/src/components/procedures/procedure-queues/queue-procedure-tabs.component.tsx +34 -0
  364. package/src/components/procedures/procedure-queues/summary-cards.component.tsx +81 -0
  365. package/src/components/procedures/procedure-queues/summary-cards.scss +35 -0
  366. package/src/components/procedures/procedures-table.component.tsx +69 -19
  367. package/src/components/procedures/procedures-tabs.component.test.tsx +57 -0
  368. package/src/components/procedures/procedures-tabs.component.tsx +3 -18
  369. package/src/components/radiology-and-imaging/index.ts +25 -10
  370. package/src/components/radiology-and-imaging/radiology-and-imaging-table.component.tsx +62 -21
  371. package/src/components/radiology-and-imaging/radiology-and-imaging.component.tsx +3 -19
  372. package/src/components/registration/card/HIE-card/hie-card.component.tsx +32 -44
  373. package/src/components/registration/card/Local-card/local-card.component.tsx +22 -24
  374. package/src/components/registration/checkin-form-extra/checkin-form-extra.extension.tsx +8 -2
  375. package/src/components/registration/checkin-form-extra/queue-fields.component.tsx +18 -19
  376. package/src/components/registration/dependants/dependants.component.tsx +37 -60
  377. package/src/components/registration/dependants/dependants.resource.ts +79 -50
  378. package/src/components/registration/end-visit-modal/end-visit-dialog.modal.tsx +320 -0
  379. package/src/components/registration/end-visit-modal/end-visit-dialog.scss +12 -0
  380. package/src/components/registration/end-visit-modal/end-visit.resource.tsx +59 -0
  381. package/src/components/registration/end-visit-modal/sha-end-visit.resource.ts +285 -0
  382. package/src/components/registration/helper/index.ts +4 -0
  383. package/src/components/registration/index.ts +10 -9
  384. package/src/components/registration/search-bar/search-bar.resource.ts +32 -93
  385. package/src/components/registration/start-visit-form/hooks/useDefaultFacilityLocation.tsx +15 -0
  386. package/src/components/registration/start-visit-form/hooks/useDefaultVisitLocation.tsx +24 -0
  387. package/src/components/registration/start-visit-form/hooks/useOfflineVisitType.tsx +18 -0
  388. package/src/components/registration/start-visit-form/hooks/useRecommendedVisitTypes.tsx +36 -0
  389. package/src/components/registration/start-visit-form/hooks/useVisitAttributeType.tsx +102 -0
  390. package/src/components/registration/start-visit-form/overflow-menu-extension/custom-end-active-visit.extension.tsx +44 -0
  391. package/src/components/registration/start-visit-form/overflow-menu-extension/overflow-menu-item.extension.tsx +57 -0
  392. package/src/components/registration/start-visit-form/overflow-menu-extension/overflow-menu-item.scss +3 -0
  393. package/src/components/registration/start-visit-form/start-visit-workspace/base-visit-type.component.tsx +126 -0
  394. package/src/components/registration/start-visit-form/start-visit-workspace/base-visit-type.scss +75 -0
  395. package/src/components/registration/start-visit-form/start-visit-workspace/exported-visit-form.workspace.tsx +759 -0
  396. package/src/components/registration/start-visit-form/start-visit-workspace/location-selector.component.tsx +86 -0
  397. package/src/components/registration/start-visit-form/start-visit-workspace/recommended-visit-type.component.tsx +32 -0
  398. package/src/components/registration/start-visit-form/start-visit-workspace/visit-attribute-type.component.tsx +257 -0
  399. package/src/components/registration/start-visit-form/start-visit-workspace/visit-attribute-type.scss +5 -0
  400. package/src/components/registration/start-visit-form/start-visit-workspace/visit-date-time.component.tsx +193 -0
  401. package/src/components/registration/start-visit-form/start-visit-workspace/visit-form.resource.ts +389 -0
  402. package/src/components/registration/start-visit-form/start-visit-workspace/visit-form.scss +144 -0
  403. package/src/components/registration/start-visit-form/visit-form-workspace/visit-form.workspace.tsx +48 -0
  404. package/src/components/registration/type/index.ts +101 -0
  405. package/src/components/reports/index.ts +11 -9
  406. package/src/components/triage/dashboard.component.tsx +0 -2
  407. package/src/components/triage/index.ts +10 -9
  408. package/src/components/triage/triage.component.tsx +92 -42
  409. package/src/components/triage/triage.resource.ts +56 -50
  410. package/src/components/triage/triage.scss +6 -0
  411. package/src/config-schema.ts +482 -0
  412. package/src/hooks/useOrders.tsx +2 -2
  413. package/src/hooks/useServiceQueues.tsx +95 -25
  414. package/src/index.ts +84 -28
  415. package/src/routes.json +290 -32
  416. package/src/shared/dashboard-link/dashboard-link.component.tsx +11 -8
  417. package/src/shared/orders/OrderTable.tsx +19 -3
  418. package/src/shared/otp-verification/index.ts +112 -29
  419. package/src/shared/otp-verification/otp-verification.modal.tsx +1110 -122
  420. package/src/shared/otp-verification/otp-verification.scss +374 -0
  421. package/src/shared/patient-chart/patient-summary-dashboard/patient-summary-dashboard.component.tsx +5 -85
  422. package/src/shared/pin-put/pinput.component.test.tsx +7 -6
  423. package/src/shared/queue/queue-entry/queue-entry-table.component.tsx +99 -88
  424. package/src/shared/queue/queue-entry/queue-entry-table.scss +4 -0
  425. package/src/shared/queue/queue-summary-cards.component.tsx +32 -0
  426. package/src/shared/queue/queue-tab.component.tsx +182 -70
  427. package/src/shared/queue/queue-tab.scss +1 -0
  428. package/src/shared/queue/queue-workflow-context.tsx +90 -0
  429. package/src/shared/tabs/create-tab-extension.tsx +33 -0
  430. package/src/shared/tabs/extension-tabs.component.tsx +51 -30
  431. package/src/shared/utils/index.ts +119 -5
  432. package/src/types/index.ts +29 -2
  433. package/translations/am.json +426 -133
  434. package/translations/en.json +312 -19
  435. package/translations/fr.json +351 -63
  436. package/translations/sw.json +330 -37
  437. package/dist/127.js +0 -1
  438. package/dist/200.js +0 -1
  439. package/dist/200.js.map +0 -1
  440. package/dist/24.js +0 -1
  441. package/dist/24.js.map +0 -1
  442. package/dist/267.js +0 -1
  443. package/dist/267.js.map +0 -1
  444. package/dist/285.js +0 -1
  445. package/dist/285.js.map +0 -1
  446. package/dist/329.js +0 -1
  447. package/dist/329.js.map +0 -1
  448. package/dist/40.js +0 -1
  449. package/dist/466.js +0 -1
  450. package/dist/466.js.map +0 -1
  451. package/dist/472.js +0 -66
  452. package/dist/472.js.map +0 -1
  453. package/dist/490.js +0 -1
  454. package/dist/490.js.map +0 -1
  455. package/dist/54.js +0 -1
  456. package/dist/54.js.map +0 -1
  457. package/dist/689.js +0 -1
  458. package/dist/689.js.map +0 -1
  459. package/dist/697.js +0 -1
  460. package/dist/697.js.map +0 -1
  461. package/dist/704.js +0 -1
  462. package/dist/704.js.map +0 -1
  463. package/dist/710.js +0 -1
  464. package/dist/710.js.map +0 -1
  465. package/dist/729.js +0 -17
  466. package/dist/729.js.map +0 -1
  467. package/dist/805.js +0 -37
  468. package/dist/805.js.map +0 -1
  469. package/dist/847.js +0 -1
  470. package/dist/847.js.map +0 -1
  471. package/dist/85.js +0 -1
  472. package/dist/85.js.map +0 -1
  473. package/dist/882.js +0 -1
  474. package/dist/91.js +0 -1
  475. package/dist/91.js.map +0 -1
  476. package/dist/916.js +0 -1
  477. package/dist/994.js +0 -1
  478. package/dist/994.js.map +0 -1
  479. package/dist/998.js +0 -1
  480. package/dist/998.js.map +0 -1
  481. package/jest.config.js +0 -3
  482. package/src/shared/orders/OrdersTabs.tsx +0 -58
  483. package/src/shared/patient-chart/patient-chart.component.tsx +0 -61
  484. package/src/shared/patient-chart/patient-chart.resources.ts +0 -184
  485. package/src/shared/patient-chart/patient-chart.scss +0 -15
  486. package/src/shared/patient-chart/useInitialize.ts +0 -24
  487. /package/src/shared/{patient-chart/patient-summary-dashboard → tabs}/patient-summary-dashboard.scss +0 -0
@@ -1,28 +1,12 @@
1
1
  import React from 'react';
2
- import { useConfig } from '@openmrs/esm-framework';
3
- import OrdersTabs from '../../shared/orders/OrdersTabs';
4
- import LabTable from './radiology-and-imaging-table.component';
5
- import { ExpressWorkflowConfig } from '../../config-schema';
2
+ import ExtensionTabs from '../../shared/tabs/extension-tabs.component';
6
3
 
7
4
  type RadiologyAndImagingTabsProps = {
8
5
  patientUuid: string;
9
- patient: fhir.Patient;
10
6
  };
11
- const imagingRadiologyConceptClassUuid = '8caa332c-efe4-4025-8b18-3398328e1323';
12
7
 
13
- const RadiologyAndImagingTabs: React.FC<RadiologyAndImagingTabsProps> = ({ patientUuid, patient }) => {
14
- const { imagingOrderTypeUuid } = useConfig<ExpressWorkflowConfig>();
15
- return (
16
- <OrdersTabs
17
- patientUuid={patientUuid}
18
- patient={patient}
19
- basePath="radiology-and-imaging"
20
- resultsSlotName="ewf-radiology-and-imaging-results-slot"
21
- orderTypeUuid={imagingOrderTypeUuid}
22
- filter={(order) => order.concept?.conceptClass?.uuid === imagingRadiologyConceptClassUuid}
23
- Table={({ orders }) => <LabTable orders={orders} />}
24
- />
25
- );
8
+ const RadiologyAndImagingTabs: React.FC<RadiologyAndImagingTabsProps> = ({ patientUuid }) => {
9
+ return <ExtensionTabs extensionSlotName="patient-imaging-tabs-slot" patientUuid={patientUuid} />;
26
10
  };
27
11
 
28
12
  export default RadiologyAndImagingTabs;
@@ -7,13 +7,21 @@ import styles from '../card.scss';
7
7
  import DependentsComponent from '../../dependants/dependants.component';
8
8
  import { LocalResponse, type HIEBundleResponse, type EligibilityResponse } from '../../type';
9
9
  import { hasDependents } from '../../helper';
10
- import { launchWorkspace, PatientPhoto, showModal, navigate, closeWorkspace } from '@openmrs/esm-framework';
10
+ import {
11
+ launchWorkspace2,
12
+ launchWorkspaceGroup2,
13
+ PatientPhoto,
14
+ showModal,
15
+ navigate,
16
+ type Visit,
17
+ } from '@openmrs/esm-framework';
11
18
  import { EnhancedPatientBannerPatientInfo } from '../../patient-banner/patient-banner.component';
12
19
  import { findExistingLocalPatient, registerOrLaunchHIEPatient } from '../../search-bar/search-bar.resource';
13
20
  import { launchOtpVerificationModal } from '../../../../shared/otp-verification';
14
21
  import { otpManager, useOtpSource, cleanupAllOTPs } from './hie-card.resource';
15
22
  import { useMultipleActiveVisits } from '../../dependants/dependants.resource';
16
23
  import { sanitizePhoneNumber } from '../../../../shared/utils';
24
+ import { VisitFormProps } from '../../start-visit-form/visit-form-workspace/visit-form.workspace';
17
25
 
18
26
  interface HIEDisplayCardProps {
19
27
  bundle: HIEBundleResponse;
@@ -140,6 +148,25 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
140
148
  return '254700000000';
141
149
  };
142
150
 
151
+ const launchCheckInWorkspace = async (patient: any, patientUuid: string) => {
152
+ await launchWorkspaceGroup2('ewf-patient-chart', {
153
+ patient,
154
+ patientUuid,
155
+ visitContext: null as unknown as Visit,
156
+ mutateVisitContext: () => {},
157
+ });
158
+
159
+ launchWorkspace2<VisitFormProps, {}, {}>(
160
+ 'custom-start-visit-workspace-form',
161
+ {
162
+ openedFrom: 'registration-check-in',
163
+ showPatientHeader: false,
164
+ },
165
+ {},
166
+ null,
167
+ );
168
+ };
169
+
143
170
  const handleOTPRequest = (patientUuid: string) => {
144
171
  setOtpRequestedFor((prev) => new Set(prev).add(patientUuid));
145
172
  };
@@ -170,9 +197,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
170
197
  if (!otpSource) {
171
198
  throw new Error('OTP source not configured. Please contact your administrator.');
172
199
  }
173
-
174
200
  otpManager.setOtpSource(otpSource);
175
-
176
201
  await otpManager.requestOTP(sanitizedPhone, patientName, otpExpiryMinutes, searchedNationalId, patientUuid);
177
202
  } catch (error) {
178
203
  throw error;
@@ -184,9 +209,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
184
209
  if (!otpSource) {
185
210
  throw new Error('OTP source not configured. Please contact your administrator.');
186
211
  }
187
-
188
212
  otpManager.setOtpSource(otpSource);
189
-
190
213
  const isValid = await otpManager.verifyOTP(sanitizedPhone, otp, patientUuid);
191
214
  if (!isValid) {
192
215
  throw new Error('OTP verification failed');
@@ -312,21 +335,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
312
335
  <Button
313
336
  kind="secondary"
314
337
  size="sm"
315
- onClick={() => {
316
- const localPatientName =
317
- localPatient?.person?.personName?.display ||
318
- `${localPatient?.person?.personName?.givenName || ''} ${
319
- localPatient?.person?.personName?.middleName || ''
320
- } ${localPatient?.person?.personName?.familyName || ''}`.trim() ||
321
- patientName;
322
-
323
- launchWorkspace('start-visit-workspace-form', {
324
- patientUuid: localPatient.uuid,
325
- workspaceTitle: t('startVisitWorkspaceTitle', 'Start Visit for {{patientName}}', {
326
- patientName: localPatientName,
327
- }),
328
- });
329
- }}>
338
+ onClick={() => launchCheckInWorkspace(localPatient, localPatient.uuid)}>
330
339
  {t('checkIn', 'Check In')}
331
340
  </Button>
332
341
  )}
@@ -345,27 +354,8 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
345
354
  kind="secondary"
346
355
  size="sm"
347
356
  onClick={async () => {
348
- const localPatient = await registerOrLaunchHIEPatient(patient, t);
349
- launchWorkspace('start-visit-workspace-form', {
350
- patientUuid: localPatient.uuid,
351
- workspaceTitle: t('checkInPatientWorkspaceTitle', 'Check in patient'),
352
- closeWorkspace: () => {
353
- closeWorkspace('start-visit-workspace-form', {
354
- onWorkspaceClose: () => {
355
- navigate({ to: `\${openmrsSpaBase}/patient/${localPatient.uuid}/chart` });
356
- },
357
- ignoreChanges: true,
358
- });
359
- },
360
- closeWorkspaceWithSavedChanges: () => {
361
- closeWorkspace('start-visit-workspace-form', {
362
- onWorkspaceClose: () => {
363
- navigate({ to: `\${openmrsSpaBase}/patient/${localPatient.uuid}/chart` });
364
- },
365
- ignoreChanges: true,
366
- });
367
- },
368
- });
357
+ const registeredPatient = await registerOrLaunchHIEPatient(patient, t);
358
+ await launchCheckInWorkspace(registeredPatient, registeredPatient.uuid);
369
359
  }}>
370
360
  {t('checkIn', 'Check In')}
371
361
  </Button>
@@ -376,9 +366,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
376
366
  iconDescription={showDependents ? 'Hide dependents' : 'Show dependents'}
377
367
  kind="tertiary"
378
368
  size="sm"
379
- onClick={() => {
380
- toggleDependentsVisibility(patientKey);
381
- }}
369
+ onClick={() => toggleDependentsVisibility(patientKey)}
382
370
  renderIcon={showDependents ? ChevronUp : ChevronDown}>
383
371
  {showDependents
384
372
  ? t('hideDependents', 'Hide dependents')
@@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next';
5
5
  import classNames from 'classnames';
6
6
  import styles from '../card.scss';
7
7
  import { LocalResponse, type HIEBundleResponse, type EligibilityResponse } from '../../type';
8
- import { launchWorkspace, PatientPhoto, showModal, closeWorkspace, navigate } from '@openmrs/esm-framework';
8
+ import { launchWorkspace2, launchWorkspaceGroup2, PatientPhoto, showModal, type Visit } from '@openmrs/esm-framework';
9
9
  import { EnhancedPatientBannerPatientInfo } from '../../patient-banner/patient-banner.component';
10
10
  import { convertLocalPatientToFHIR, getNationalIdFromPatient, hasDependents } from '../../helper';
11
11
  import { launchOtpVerificationModal } from '../../../../shared/otp-verification';
@@ -13,6 +13,7 @@ import DependentsComponent from '../../dependants/dependants.component';
13
13
  import { useMultipleActiveVisits } from '../../dependants/dependants.resource';
14
14
  import { otpManager, useOtpSource, cleanupAllOTPs } from '../HIE-card/hie-card.resource';
15
15
  import { sanitizePhoneNumber } from '../../../../shared/utils';
16
+ import { VisitFormProps } from '../../start-visit-form/visit-form-workspace/visit-form.workspace';
16
17
 
17
18
  interface LocalPatientCardProps {
18
19
  localSearchResults: LocalResponse;
@@ -46,7 +47,6 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
46
47
  }
47
48
  }, [otpSource]);
48
49
 
49
- // Clean up OTPs when component unmounts
50
50
  useEffect(() => {
51
51
  return () => {
52
52
  cleanupAllOTPs();
@@ -114,6 +114,25 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
114
114
  return '254700000000';
115
115
  }, []);
116
116
 
117
+ const launchCheckInWorkspace = async (patient: any, patientUuid: string) => {
118
+ const groupProps = {
119
+ patient,
120
+ patientUuid,
121
+ visitContext: null as unknown as Visit,
122
+ mutateVisitContext: () => {},
123
+ };
124
+
125
+ launchWorkspace2<VisitFormProps, {}, {}>(
126
+ 'custom-start-visit-workspace-form',
127
+ {
128
+ openedFrom: 'registration-check-in',
129
+ showPatientHeader: false,
130
+ },
131
+ {},
132
+ groupProps,
133
+ );
134
+ };
135
+
117
136
  const handleOTPRequest = useCallback((patientUuid: string) => {
118
137
  setOtpRequestedFor((prev) => new Set(prev).add(patientUuid));
119
138
  }, []);
@@ -141,9 +160,7 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
141
160
  if (!otpSource) {
142
161
  throw new Error('OTP source not configured. Please contact your administrator.');
143
162
  }
144
-
145
163
  otpManager.setOtpSource(otpSource);
146
-
147
164
  await otpManager.requestOTP(sanitizedPhone, patientName, otpExpiryMinutes, searchedNationalId, patientUuid);
148
165
  } catch (error) {
149
166
  throw error;
@@ -155,9 +172,7 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
155
172
  if (!otpSource) {
156
173
  throw new Error('OTP source not configured. Please contact your administrator.');
157
174
  }
158
-
159
175
  otpManager.setOtpSource(otpSource);
160
-
161
176
  const isValid = await otpManager.verifyOTP(sanitizedPhone, otp, patientUuid);
162
177
  if (!isValid) {
163
178
  throw new Error('OTP verification failed');
@@ -207,7 +222,6 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
207
222
  const hasActiveVisit = !!activeVisit;
208
223
 
209
224
  const hiePatientData: any = findHIEPatientData(localPatient);
210
-
211
225
  const patientHasDependents: boolean = hiePatientData ? hasDependents(hiePatientData) : false;
212
226
  const showDependents: boolean = showDependentsForPatient.has(patientUuid);
213
227
 
@@ -230,7 +244,6 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
230
244
  <div className={styles.patientAvatar} role="img">
231
245
  <PatientPhoto patientUuid={patientUuid} patientName={patientName} />
232
246
  </div>
233
-
234
247
  <EnhancedPatientBannerPatientInfo
235
248
  patient={fhirPatient}
236
249
  renderedFrom="local-search"
@@ -291,22 +304,7 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
291
304
  <Button
292
305
  kind="primary"
293
306
  size="sm"
294
- onClick={() => {
295
- launchWorkspace('start-visit-workspace-form', {
296
- patientUuid: patientUuid,
297
- workspaceTitle: t('checkInPatientWorkspaceTitle', 'Check in patient'),
298
- closeWorkspace: () => {
299
- closeWorkspace('start-visit-workspace-form', {
300
- ignoreChanges: true,
301
- });
302
- },
303
- closeWorkspaceWithSavedChanges: () => {
304
- closeWorkspace('start-visit-workspace-form', {
305
- ignoreChanges: true,
306
- });
307
- },
308
- });
309
- }}>
307
+ onClick={() => launchCheckInWorkspace(localPatient, patientUuid)}>
310
308
  {t('checkIn', 'Check In')}
311
309
  </Button>
312
310
  )}
@@ -13,6 +13,7 @@ export interface CheckinFormExtraExtensionProps {
13
13
  isDHAWorkflow: boolean;
14
14
  };
15
15
  patientUuid: string;
16
+ visitStatus: string;
16
17
  }
17
18
 
18
19
  /**
@@ -20,9 +21,14 @@ export interface CheckinFormExtraExtensionProps {
20
21
  * It is used slotted into the patient-chart's start visit form
21
22
  */
22
23
  const CheckinFormExtraExtension: React.FC<CheckinFormExtraExtensionProps> = (props) => {
23
- const { setVisitFormCallbacks, visitFormOpenedFrom, patientChartConfig } = props;
24
+ const { setVisitFormCallbacks, visitFormOpenedFrom, patientChartConfig, visitStatus } = props;
24
25
  if (patientChartConfig.isDHAWorkflow || visitFormOpenedFrom == 'service-queues-add-patient') {
25
- return <QueueFields setOnSubmit={(onSubmit) => setVisitFormCallbacks({ onVisitCreatedOrUpdated: onSubmit })} />;
26
+ return (
27
+ <QueueFields
28
+ setOnSubmit={(onSubmit) => setVisitFormCallbacks({ onVisitCreatedOrUpdated: onSubmit })}
29
+ visitStatus={visitStatus}
30
+ />
31
+ );
26
32
  } else {
27
33
  return <></>;
28
34
  }
@@ -1,12 +1,4 @@
1
- import {
2
- InlineNotification,
3
- RadioButton,
4
- RadioButtonGroup,
5
- RadioButtonSkeleton,
6
- Select,
7
- SelectItem,
8
- SelectSkeleton,
9
- } from '@carbon/react';
1
+ import { InlineNotification, RadioButton, RadioButtonGroup, Select, SelectItem, SelectSkeleton } from '@carbon/react';
10
2
  import { ResponsiveWrapper, showSnackbar, useConfig, useSession, type Visit } from '@openmrs/esm-framework';
11
3
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
12
4
  import { useTranslation } from 'react-i18next';
@@ -16,21 +8,23 @@ import { ExpressWorkflowConfig } from '../../../config-schema';
16
8
 
17
9
  export interface QueueFieldsProps {
18
10
  setOnSubmit(onSubmit: (visit: Visit) => Promise<any>);
11
+ visitStatus: string;
19
12
  }
20
13
 
21
- const PATIENT_CATEGORIES = [
22
- { id: 'triage', name: 'Triage' },
23
- { id: 'walk-in', name: 'Walk-in' },
24
- ];
25
-
26
14
  /**
27
15
  * This component contains form fields for starting a patient's queue entry.
28
16
  */
29
- const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
17
+ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit, visitStatus }) => {
30
18
  const { t } = useTranslation();
19
+ const patientCategory = useMemo(
20
+ () => [
21
+ { id: 'triage', name: t('triage', 'Triage') },
22
+ { id: 'walk-in', name: t('walkIn', 'Walk-in') },
23
+ ],
24
+ [t],
25
+ );
31
26
  const { queueRooms, isLoading: isLoadingQueueRooms } = useQueueRooms();
32
27
  const { sessionLocation } = useSession();
33
-
34
28
  const {
35
29
  visitQueueNumberAttributeUuid,
36
30
  triageServiceConceptUuid,
@@ -84,7 +78,7 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
84
78
 
85
79
  const onSubmit = useCallback(
86
80
  (visit: Visit) => {
87
- if (selectedQueueRoom) {
81
+ if (selectedQueueRoom && visitStatus !== 'past') {
88
82
  const selectedRoom = filteredQueueRooms.find((room) => room.uuid === selectedQueueRoom);
89
83
  const queueUuid = selectedRoom?.queue?.uuid;
90
84
 
@@ -140,6 +134,7 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
140
134
  sessionLocation.uuid,
141
135
  filteredQueueRooms,
142
136
  t,
137
+ visitStatus,
143
138
  ],
144
139
  );
145
140
 
@@ -157,6 +152,10 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
157
152
  }
158
153
  }, [filteredQueueRooms, selectedQueueRoom]);
159
154
 
155
+ if (visitStatus === 'past') {
156
+ return null;
157
+ }
158
+
160
159
  return (
161
160
  <div>
162
161
  <section className={styles.section}>
@@ -169,7 +168,7 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
169
168
  orientation="vertical"
170
169
  valueSelected={selectedCategory}
171
170
  onChange={(value) => setSelectedCategory(String(value))}>
172
- {PATIENT_CATEGORIES.map((category) => (
171
+ {patientCategory.map((category) => (
173
172
  <RadioButton
174
173
  key={category.id}
175
174
  className={styles.radioButtonOption}
@@ -218,4 +217,4 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
218
217
  );
219
218
  };
220
219
 
221
- export default QueueFields;
220
+ export default React.memo(QueueFields);
@@ -2,16 +2,17 @@ import React, { useState, useEffect, useMemo, useCallback } from 'react';
2
2
  import { DataTable, Table, TableHead, TableBody, TableRow, TableCell, TableHeader, Button, Tag } from '@carbon/react';
3
3
  import { TwoFactorAuthentication } from '@carbon/react/icons';
4
4
  import { useTranslation } from 'react-i18next';
5
- import { launchWorkspace, showSnackbar, showModal, navigate, Visit } from '@openmrs/esm-framework';
5
+ import { launchWorkspace2, launchWorkspaceGroup2, showSnackbar, showModal, type Visit } from '@openmrs/esm-framework';
6
6
  import capitalize from 'lodash/capitalize';
7
7
  import styles from './dependants.scss';
8
8
  import { maskName } from '../helper';
9
9
  import { findExistingLocalPatient, registerOrLaunchDependent } from '../search-bar/search-bar.resource';
10
10
  import { getDependentsFromContacts, useMultipleActiveVisits } from './dependants.resource';
11
- import { DependentWithPhone, HIEBundleResponse, HIEPatient, LocalPatient } from '../type';
11
+ import { DependentWithPhone, HIEPatient } from '../type';
12
12
  import { otpManager, useOtpSource, cleanupAllOTPs } from '../card/HIE-card/hie-card.resource';
13
13
  import { launchOtpVerificationModal } from '../../../shared/otp-verification';
14
14
  import { sanitizePhoneNumber } from '../../../shared/utils';
15
+ import { VisitFormProps } from '../start-visit-form/visit-form-workspace/visit-form.workspace';
15
16
 
16
17
  type DependentProps = {
17
18
  patient: HIEPatient;
@@ -28,12 +29,11 @@ const DependentsComponent: React.FC<DependentProps> = ({
28
29
  const [submittingStates, setSubmittingStates] = useState<Record<string, boolean>>({});
29
30
  const [loadingStates, setLoadingStates] = useState<Record<string, boolean>>({});
30
31
  const [localPatientCache, setLocalPatientCache] = useState<Map<string, any>>(new Map());
31
-
32
32
  const [verifiedSpouses, setVerifiedSpouses] = useState<Set<string>>(new Set());
33
33
  const [otpRequestedForSpouse, setOtpRequestedForSpouse] = useState<Set<string>>(new Set());
34
34
  const [activePhoneNumbers, setActivePhoneNumbers] = useState<Map<string, string>>(new Map());
35
35
 
36
- const { otpSource, isLoading: isLoadingOtpSource, error: otpSourceError } = useOtpSource();
36
+ const { otpSource, isLoading: isLoadingOtpSource } = useOtpSource();
37
37
 
38
38
  useEffect(() => {
39
39
  if (otpSource) {
@@ -74,7 +74,7 @@ const DependentsComponent: React.FC<DependentProps> = ({
74
74
  }, []);
75
75
 
76
76
  const getDependentPhoneNumber = useCallback(
77
- (dependent: HIEPatient | DependentWithPhone): string | undefined => {
77
+ (dependent: HIEPatient | DependentWithPhone): string => {
78
78
  if ('contact' in dependent && dependent.contact && Array.isArray(dependent.contact)) {
79
79
  for (const contact of dependent.contact) {
80
80
  if (contact.telecom && Array.isArray(contact.telecom)) {
@@ -82,7 +82,6 @@ const DependentsComponent: React.FC<DependentProps> = ({
82
82
  (telecom) =>
83
83
  telecom.system === 'phone' && telecom.value && telecom.value !== 'N/A' && telecom.value.trim() !== '',
84
84
  );
85
-
86
85
  if (phoneTelecom) {
87
86
  return sanitizePhoneNumber(phoneTelecom.value);
88
87
  }
@@ -99,7 +98,6 @@ const DependentsComponent: React.FC<DependentProps> = ({
99
98
  attr.value.trim() !== '' &&
100
99
  attr.value.trim().length > 0,
101
100
  );
102
-
103
101
  if (phoneAttribute?.value) {
104
102
  return sanitizePhoneNumber(phoneAttribute.value);
105
103
  }
@@ -152,16 +150,12 @@ const DependentsComponent: React.FC<DependentProps> = ({
152
150
  return {
153
151
  onRequestOtp: async (phoneNumber: string): Promise<void> => {
154
152
  const sanitizedPhone = sanitizePhoneNumber(phoneNumber);
155
-
156
153
  try {
157
154
  if (!otpSource) {
158
155
  throw new Error('OTP source not configured. Please contact your administrator.');
159
156
  }
160
-
161
157
  otpManager.setOtpSource(otpSource);
162
-
163
158
  setActivePhoneNumbers((prev) => new Map(prev.set(dependentId, sanitizedPhone)));
164
-
165
159
  await otpManager.requestOTP(sanitizedPhone, dependentName, otpExpiryMinutes, null, dependentId);
166
160
  } catch (error) {
167
161
  throw error;
@@ -172,12 +166,9 @@ const DependentsComponent: React.FC<DependentProps> = ({
172
166
  if (!otpSource) {
173
167
  throw new Error('OTP source not configured. Please contact your administrator.');
174
168
  }
175
-
176
169
  otpManager.setOtpSource(otpSource);
177
-
178
170
  const activePhone = activePhoneNumbers.get(dependentId) || initialPhone;
179
171
  const sanitizedPhone = sanitizePhoneNumber(activePhone);
180
-
181
172
  const isValid = await otpManager.verifyOTP(sanitizedPhone, otp, dependentId);
182
173
  if (!isValid) {
183
174
  throw new Error('OTP verification failed');
@@ -211,20 +202,29 @@ const DependentsComponent: React.FC<DependentProps> = ({
211
202
  }
212
203
 
213
204
  if (localPatient) {
214
- const localPatientName =
215
- localPatient.person?.personName?.display ||
216
- `${localPatient.person?.personName?.givenName || ''} ${localPatient.person?.personName?.middleName || ''} ${
217
- localPatient.person?.personName?.familyName || ''
218
- }`.trim() ||
219
- dependent.name;
220
-
221
- launchWorkspace('start-visit-workspace-form', {
205
+ await launchWorkspaceGroup2('ewf-patient-chart', {
206
+ patient: localPatient,
222
207
  patientUuid: localPatient.uuid,
223
- workspaceTitle: t('checkInPatientWorkspaceTitle', 'Check in patient'),
208
+ visitContext: null as unknown as Visit,
209
+ mutateVisitContext: () => {},
224
210
  });
211
+
212
+ launchWorkspace2<VisitFormProps, {}, {}>(
213
+ 'custom-start-visit-workspace-form',
214
+ {
215
+ openedFrom: 'dependants-check-in',
216
+ showPatientHeader: false,
217
+ },
218
+ {},
219
+ {
220
+ patient: localPatient,
221
+ patientUuid: localPatient.uuid,
222
+ visitContext: null as unknown as Visit,
223
+ mutateVisitContext: () => {},
224
+ },
225
+ );
225
226
  } else {
226
227
  setSubmittingStates((prev) => ({ ...prev, [dependent.id]: true }));
227
-
228
228
  try {
229
229
  await registerOrLaunchDependent(dependent, t);
230
230
  } catch (error) {
@@ -246,34 +246,13 @@ const DependentsComponent: React.FC<DependentProps> = ({
246
246
 
247
247
  const headers = useMemo(
248
248
  () => [
249
- {
250
- key: 'name',
251
- header: t('name', 'Name'),
252
- },
253
- {
254
- key: 'relationship',
255
- header: t('relationship', 'Relationship'),
256
- },
257
- {
258
- key: 'gender',
259
- header: t('gender', 'Gender'),
260
- },
261
- {
262
- key: 'birthDate',
263
- header: t('birthDate', 'Birth Date'),
264
- },
265
- {
266
- key: 'identifiers',
267
- header: t('identifiers', 'Identifiers'),
268
- },
269
- {
270
- key: 'status',
271
- header: t('status', 'Status'),
272
- },
273
- {
274
- key: 'actions',
275
- header: t('actions', 'Actions'),
276
- },
249
+ { key: 'name', header: t('name', 'Name') },
250
+ { key: 'relationship', header: t('relationship', 'Relationship') },
251
+ { key: 'gender', header: t('gender', 'Gender') },
252
+ { key: 'birthDate', header: t('birthDate', 'Birth Date') },
253
+ { key: 'identifiers', header: t('identifiers', 'Identifiers') },
254
+ { key: 'status', header: t('status', 'Status') },
255
+ { key: 'actions', header: t('actions', 'Actions') },
277
256
  ],
278
257
  [t],
279
258
  );
@@ -475,18 +454,16 @@ const DependentsComponent: React.FC<DependentProps> = ({
475
454
  <Table {...getTableProps()}>
476
455
  <TableHead>
477
456
  <TableRow>
478
- {headers.map((header, index) => (
479
- <TableHeader key={index} {...getHeaderProps({ header })}>
480
- {header.header}
481
- </TableHeader>
457
+ {headers.map((header) => (
458
+ <TableHeader {...getHeaderProps({ header })}>{header.header}</TableHeader>
482
459
  ))}
483
460
  </TableRow>
484
461
  </TableHead>
485
462
  <TableBody>
486
- {rows.map((row, index) => (
487
- <TableRow key={index} {...getRowProps({ row })}>
488
- {row.cells.map((cell, cellIndex) => (
489
- <TableCell key={cellIndex}>{cell.value}</TableCell>
463
+ {rows.map((row) => (
464
+ <TableRow {...getRowProps({ row })}>
465
+ {row.cells.map((cell) => (
466
+ <TableCell key={cell.id}>{cell.value}</TableCell>
490
467
  ))}
491
468
  </TableRow>
492
469
  ))}