@kenyaemr/esm-ward-app 8.1.2-pre.214 → 8.5.1-pre.18

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 (356) hide show
  1. package/.turbo/turbo-build.log +25 -35
  2. package/README.md +38 -0
  3. package/dist/1119.js +1 -0
  4. package/dist/1197.js +1 -0
  5. package/dist/1663.js +1 -0
  6. package/dist/1663.js.map +1 -0
  7. package/dist/1741.js +1 -0
  8. package/dist/1741.js.map +1 -0
  9. package/dist/1776.js +1 -0
  10. package/dist/1776.js.map +1 -0
  11. package/dist/1879.js +1 -0
  12. package/dist/1879.js.map +1 -0
  13. package/dist/1899.js +1 -0
  14. package/dist/1899.js.map +1 -0
  15. package/dist/1917.js +1 -0
  16. package/dist/1917.js.map +1 -0
  17. package/dist/2146.js +1 -0
  18. package/dist/2372.js +1 -0
  19. package/dist/2372.js.map +1 -0
  20. package/dist/2470.js +1 -0
  21. package/dist/2470.js.map +1 -0
  22. package/dist/2537.js +1 -0
  23. package/dist/2537.js.map +1 -0
  24. package/dist/2557.js +1 -0
  25. package/dist/2557.js.map +1 -0
  26. package/dist/2690.js +1 -0
  27. package/dist/2728.js +2 -0
  28. package/dist/{372.js.LICENSE.txt → 2728.js.LICENSE.txt} +2 -2
  29. package/dist/2728.js.map +1 -0
  30. package/dist/2775.js +2 -0
  31. package/dist/2775.js.LICENSE.txt +59 -0
  32. package/dist/2775.js.map +1 -0
  33. package/dist/2913.js +2 -0
  34. package/dist/2913.js.map +1 -0
  35. package/dist/2932.js +1 -0
  36. package/dist/2932.js.map +1 -0
  37. package/dist/2948.js +1 -0
  38. package/dist/2948.js.map +1 -0
  39. package/dist/3099.js +1 -0
  40. package/dist/3161.js +2 -0
  41. package/dist/{649.js.LICENSE.txt → 3161.js.LICENSE.txt} +2 -2
  42. package/dist/3161.js.map +1 -0
  43. package/dist/3365.js +1 -0
  44. package/dist/3365.js.map +1 -0
  45. package/dist/3373.js +2 -0
  46. package/dist/3373.js.LICENSE.txt +5 -0
  47. package/dist/3373.js.map +1 -0
  48. package/dist/3399.js +1 -0
  49. package/dist/3399.js.map +1 -0
  50. package/dist/3413.js +1 -0
  51. package/dist/3413.js.map +1 -0
  52. package/dist/3423.js +1 -0
  53. package/dist/3423.js.map +1 -0
  54. package/dist/3584.js +1 -0
  55. package/dist/3737.js +1 -0
  56. package/dist/3737.js.map +1 -0
  57. package/dist/3982.js +1 -0
  58. package/dist/3982.js.map +1 -0
  59. package/dist/4041.js +2 -0
  60. package/dist/4041.js.map +1 -0
  61. package/dist/4055.js +1 -0
  62. package/dist/4132.js +1 -0
  63. package/dist/4300.js +1 -0
  64. package/dist/4335.js +1 -0
  65. package/dist/4430.js +2 -0
  66. package/dist/4430.js.LICENSE.txt +29 -0
  67. package/dist/4430.js.map +1 -0
  68. package/dist/4618.js +1 -0
  69. package/dist/465.js +1 -0
  70. package/dist/465.js.map +1 -0
  71. package/dist/4652.js +1 -0
  72. package/dist/4701.js +2 -0
  73. package/dist/4701.js.LICENSE.txt +9 -0
  74. package/dist/4701.js.map +1 -0
  75. package/dist/4743.js +2 -0
  76. package/dist/4743.js.LICENSE.txt +9 -0
  77. package/dist/4743.js.map +1 -0
  78. package/dist/4944.js +1 -0
  79. package/dist/5173.js +1 -0
  80. package/dist/5241.js +1 -0
  81. package/dist/5442.js +1 -0
  82. package/dist/5661.js +1 -0
  83. package/dist/6012.js +2 -0
  84. package/dist/6012.js.LICENSE.txt +5 -0
  85. package/dist/6012.js.map +1 -0
  86. package/dist/6022.js +1 -0
  87. package/dist/6468.js +1 -0
  88. package/dist/6679.js +1 -0
  89. package/dist/6840.js +1 -0
  90. package/dist/6859.js +1 -0
  91. package/dist/7097.js +1 -0
  92. package/dist/7159.js +1 -0
  93. package/dist/7179.js +2 -0
  94. package/dist/7179.js.LICENSE.txt +9 -0
  95. package/dist/7179.js.map +1 -0
  96. package/dist/723.js +1 -0
  97. package/dist/7232.js +2 -0
  98. package/dist/7232.js.LICENSE.txt +9 -0
  99. package/dist/7232.js.map +1 -0
  100. package/dist/7524.js +1 -0
  101. package/dist/7524.js.map +1 -0
  102. package/dist/7617.js +1 -0
  103. package/dist/7661.js +1 -0
  104. package/dist/7661.js.map +1 -0
  105. package/dist/7886.js +1 -0
  106. package/dist/7886.js.map +1 -0
  107. package/dist/795.js +1 -0
  108. package/dist/8163.js +1 -0
  109. package/dist/8205.js +1 -0
  110. package/dist/8205.js.map +1 -0
  111. package/dist/8317.js +2 -0
  112. package/dist/8317.js.LICENSE.txt +15 -0
  113. package/dist/8317.js.map +1 -0
  114. package/dist/8349.js +1 -0
  115. package/dist/8501.js +1 -0
  116. package/dist/8501.js.map +1 -0
  117. package/dist/8522.js +1 -0
  118. package/dist/8522.js.map +1 -0
  119. package/dist/8618.js +1 -0
  120. package/dist/8622.js +1 -0
  121. package/dist/8622.js.map +1 -0
  122. package/dist/89.js +1 -0
  123. package/dist/89.js.map +1 -0
  124. package/dist/890.js +1 -0
  125. package/dist/9045.js +1 -0
  126. package/dist/9045.js.map +1 -0
  127. package/dist/9117.js +1 -0
  128. package/dist/9117.js.map +1 -0
  129. package/dist/9214.js +1 -0
  130. package/dist/9538.js +1 -0
  131. package/dist/9569.js +1 -0
  132. package/dist/986.js +1 -0
  133. package/dist/9876.js +2 -0
  134. package/dist/9876.js.LICENSE.txt +9 -0
  135. package/dist/9876.js.map +1 -0
  136. package/dist/9879.js +1 -0
  137. package/dist/9880.js +1 -0
  138. package/dist/9880.js.map +1 -0
  139. package/dist/9895.js +1 -0
  140. package/dist/9900.js +1 -0
  141. package/dist/9913.js +1 -0
  142. package/dist/kenyaemr-esm-ward-app.js +1 -1
  143. package/dist/kenyaemr-esm-ward-app.js.buildmanifest.json +1479 -235
  144. package/dist/kenyaemr-esm-ward-app.js.map +1 -1
  145. package/dist/main.js +1 -1
  146. package/dist/main.js.LICENSE.txt +0 -35
  147. package/dist/main.js.map +1 -1
  148. package/dist/routes.json +1 -1
  149. package/mock.tsx +15 -2
  150. package/package.json +10 -5
  151. package/src/beds/{empty-bed-skeleton.tsx → empty-bed-skeleton.component.tsx} +2 -2
  152. package/src/config-schema.ts +48 -0
  153. package/src/declarations.d.ts +8 -0
  154. package/src/hooks/useAdmissionLocation.ts +24 -4
  155. package/src/hooks/useInpatientAdmission.ts +14 -10
  156. package/src/hooks/useInpatientAdmissionByPatients.ts +29 -0
  157. package/src/hooks/useInpatientRequest.ts +5 -1
  158. package/src/hooks/useInpatientRequestByPatients.ts +34 -0
  159. package/src/hooks/useIpdDischargeEncounter.ts +137 -0
  160. package/src/hooks/usePatientPendingOrders.ts +1 -1
  161. package/src/hooks/useRestPatient.ts +11 -3
  162. package/src/hooks/useSummaryMetrics.ts +103 -0
  163. package/src/hooks/useWardLocation.test.ts +1 -1
  164. package/src/hooks/useWardLocation.ts +18 -5
  165. package/src/hooks/useWardPatientGrouping.ts +63 -10
  166. package/src/index.ts +24 -4
  167. package/src/location-selector/location-selector.component.tsx +38 -5
  168. package/src/root.component.tsx +2 -2
  169. package/src/routes.json +60 -26
  170. package/src/types/index.ts +17 -6
  171. package/src/ward-patient-card/card-rows/admission-request-note-row.component.tsx +1 -1
  172. package/src/ward-patient-card/card-rows/coded-obs-tags-row.component.tsx +4 -4
  173. package/src/ward-patient-card/card-rows/mother-child-row.component.tsx +6 -6
  174. package/src/ward-patient-card/card-rows/pending-items-row.component.tsx +2 -3
  175. package/src/ward-patient-card/row-elements/{ward-patient-coded-obs-tags.tsx → ward-patient-coded-obs-tags.component.tsx} +5 -5
  176. package/src/ward-patient-card/row-elements/{ward-patient-header-address.tsx → ward-patient-header-address.component.tsx} +2 -2
  177. package/src/ward-patient-card/row-elements/{ward-patient-identifier.tsx → ward-patient-identifier.component.tsx} +7 -1
  178. package/src/ward-patient-card/row-elements/ward-patient-identifier.scss +3 -0
  179. package/src/ward-patient-card/row-elements/{ward-patient-obs.tsx → ward-patient-obs.component.tsx} +5 -5
  180. package/src/ward-patient-card/row-elements/{ward-patient-pending-transfer.tsx → ward-patient-pending-transfer.component.tsx} +3 -5
  181. package/src/ward-patient-card/row-elements/ward-patient-time-on-ward.component.tsx +73 -0
  182. package/src/ward-patient-card/row-elements/ward-patient-time-since-admission.component.tsx +29 -0
  183. package/src/ward-patient-card/ward-patient-card.component.tsx +5 -5
  184. package/src/ward-patient-card/ward-patient-card.scss +2 -6
  185. package/src/ward-patients/admitted-patients.tsx +218 -0
  186. package/src/ward-patients/awaiting-admission-patients.tsx +158 -0
  187. package/src/ward-patients/discharge-in-patients.tsx +183 -0
  188. package/src/ward-patients/discharge-patients.tsx +129 -0
  189. package/src/ward-patients/patient-cells.tsx +75 -0
  190. package/src/ward-patients/table-state-components.tsx +40 -0
  191. package/src/ward-patients/ward-patient.scss +24 -0
  192. package/src/ward-patients/ward-patients-table.tsx +38 -0
  193. package/src/ward-view/default-ward/default-ward-patient-card-header.component.tsx +8 -8
  194. package/src/ward-view/default-ward/default-ward-pending-patients.component.tsx +3 -3
  195. package/src/ward-view/default-ward/default-ward-view.component.tsx +33 -6
  196. package/src/ward-view/linelist-wards/Filters.tsx +25 -0
  197. package/src/ward-view/linelist-wards/Header.tsx +27 -0
  198. package/src/ward-view/linelist-wards/LineListTable.tsx +145 -0
  199. package/src/ward-view/linelist-wards/Metrics.tsx +21 -0
  200. package/src/ward-view/linelist-wards/WardPendingOutCell.tsx +15 -0
  201. package/src/ward-view/linelist-wards/WardsLineList.tsx +30 -0
  202. package/src/ward-view/linelist-wards/linelist-wards.scss +100 -0
  203. package/src/ward-view/materal-ward/maternal-ward-patient-card-header.component.tsx +8 -8
  204. package/src/ward-view/materal-ward/maternal-ward-patient-card.component.tsx +2 -2
  205. package/src/ward-view/materal-ward/maternal-ward-patient-card.test.tsx +1 -1
  206. package/src/ward-view/materal-ward/maternal-ward-pending-patients.component.tsx +1 -1
  207. package/src/ward-view/materal-ward/maternal-ward-view.component.tsx +4 -4
  208. package/src/ward-view/ward-view-content-wrapper.tsx +36 -0
  209. package/src/ward-view/ward-view.resource.ts +26 -8
  210. package/src/ward-view/ward-view.scss +15 -8
  211. package/src/ward-view/ward-view.test.tsx +8 -8
  212. package/src/ward-view/ward.component.tsx +2 -2
  213. package/src/ward-view-header/admission-requests-bar.component.tsx +18 -8
  214. package/src/ward-view-header/admission-requests-bar.test.tsx +3 -3
  215. package/src/ward-view-header/ward-metric.component.tsx +2 -3
  216. package/src/ward-workspace/admission-request-card/admission-request-card-actions.component.tsx +12 -14
  217. package/src/ward-workspace/admission-request-card/admission-request-card-header.component.tsx +5 -5
  218. package/src/ward-workspace/admission-request-card/admission-request-card.component.tsx +1 -1
  219. package/src/ward-workspace/admission-request-workspace/admission-requests-action-button.extension.tsx +18 -0
  220. package/src/ward-workspace/admission-request-workspace/admission-requests-context.ts +20 -0
  221. package/src/ward-workspace/admission-request-workspace/admission-requests-workspace.test.tsx +7 -6
  222. package/src/ward-workspace/admission-request-workspace/admission-requests.workspace.tsx +15 -25
  223. package/src/ward-workspace/admit-patient-button.component.tsx +41 -18
  224. package/src/ward-workspace/admit-patient-form-workspace/admit-patient-form.test.tsx +14 -16
  225. package/src/ward-workspace/admit-patient-form-workspace/admit-patient-form.workspace.tsx +2 -2
  226. package/src/ward-workspace/bed-selector.component.tsx +1 -1
  227. package/src/ward-workspace/cancel-admission-request-workspace/cancel-admission-request.test.tsx +1 -1
  228. package/src/ward-workspace/cancel-admission-request-workspace/cancel-admission-request.workspace.tsx +4 -6
  229. package/src/ward-workspace/create-admission-encounter/create-admission-encounter-action-button.extension.tsx +46 -0
  230. package/src/ward-workspace/create-admission-encounter/create-admission-encounter.test.tsx +241 -0
  231. package/src/ward-workspace/create-admission-encounter/create-admission-encounter.workspace.tsx +152 -0
  232. package/src/ward-workspace/kenya-emr-patient-discharge/discharge-workspace-siderail.component.tsx +23 -0
  233. package/src/ward-workspace/kenya-emr-patient-discharge/patient-discharge.resource.tsx +123 -0
  234. package/src/ward-workspace/kenya-emr-patient-discharge/patient-discharge.workspace.tsx +101 -0
  235. package/src/ward-workspace/patient-discharge/patient-discharge.workspace.tsx +6 -15
  236. package/src/ward-workspace/patient-transfer-bed-swap/{patient-transfer-request-form.component.tsx → patient-admit-or-transfer-request-form.component.tsx} +56 -37
  237. package/src/ward-workspace/patient-transfer-bed-swap/patient-bed-swap-form.component.tsx +13 -3
  238. package/src/ward-workspace/patient-transfer-bed-swap/patient-transfer-swap.workspace.tsx +11 -5
  239. package/src/ward-workspace/patient-transfer-request-workspace/patient-transfer-request.scss +5 -0
  240. package/src/ward-workspace/patient-transfer-request-workspace/patient-transfer-request.workspace.tsx +20 -6
  241. package/src/ward-workspace/ward-patient-notes/form/notes-form.component.tsx +2 -1
  242. package/src/ward-workspace/ward-patient-notes/history/note.component.tsx +3 -3
  243. package/src/ward.resource.ts +9 -3
  244. package/translations/am.json +123 -0
  245. package/translations/ar.json +123 -0
  246. package/translations/ar_SY.json +123 -0
  247. package/translations/bn.json +123 -0
  248. package/translations/de.json +123 -0
  249. package/translations/en.json +31 -3
  250. package/translations/en_US.json +123 -0
  251. package/translations/es.json +123 -0
  252. package/translations/es_MX.json +123 -0
  253. package/translations/fr.json +123 -0
  254. package/translations/he.json +123 -0
  255. package/translations/hi.json +123 -0
  256. package/translations/hi_IN.json +123 -0
  257. package/translations/id.json +123 -0
  258. package/translations/it.json +123 -0
  259. package/translations/ka.json +123 -0
  260. package/translations/km.json +123 -0
  261. package/translations/ku.json +123 -0
  262. package/translations/ky.json +123 -0
  263. package/translations/lg.json +123 -0
  264. package/translations/ne.json +123 -0
  265. package/translations/pl.json +123 -0
  266. package/translations/pt.json +123 -0
  267. package/translations/pt_BR.json +123 -0
  268. package/translations/qu.json +123 -0
  269. package/translations/ro_RO.json +123 -0
  270. package/translations/ru_RU.json +123 -0
  271. package/translations/si.json +123 -0
  272. package/translations/sw.json +123 -0
  273. package/translations/sw_KE.json +123 -0
  274. package/translations/tr.json +123 -0
  275. package/translations/tr_TR.json +123 -0
  276. package/translations/uk.json +123 -0
  277. package/translations/uz.json +123 -0
  278. package/translations/uz@Latn.json +123 -0
  279. package/translations/uz_UZ.json +123 -0
  280. package/translations/vi.json +123 -0
  281. package/translations/zh.json +123 -0
  282. package/translations/zh_CN.json +123 -0
  283. package/dist/109.js +0 -1
  284. package/dist/109.js.map +0 -1
  285. package/dist/124.js +0 -1
  286. package/dist/124.js.map +0 -1
  287. package/dist/125.js +0 -1
  288. package/dist/125.js.map +0 -1
  289. package/dist/126.js +0 -1
  290. package/dist/126.js.map +0 -1
  291. package/dist/130.js +0 -2
  292. package/dist/130.js.LICENSE.txt +0 -5
  293. package/dist/130.js.map +0 -1
  294. package/dist/146.js +0 -1
  295. package/dist/146.js.map +0 -1
  296. package/dist/15.js +0 -1
  297. package/dist/15.js.map +0 -1
  298. package/dist/325.js +0 -1
  299. package/dist/325.js.map +0 -1
  300. package/dist/348.js +0 -1
  301. package/dist/348.js.map +0 -1
  302. package/dist/362.js +0 -1
  303. package/dist/362.js.map +0 -1
  304. package/dist/372.js +0 -2
  305. package/dist/372.js.map +0 -1
  306. package/dist/443.js +0 -1
  307. package/dist/443.js.map +0 -1
  308. package/dist/471.js +0 -1
  309. package/dist/471.js.map +0 -1
  310. package/dist/481.js +0 -1
  311. package/dist/481.js.map +0 -1
  312. package/dist/53.js +0 -1
  313. package/dist/53.js.map +0 -1
  314. package/dist/559.js +0 -1
  315. package/dist/559.js.map +0 -1
  316. package/dist/574.js +0 -1
  317. package/dist/576.js +0 -1
  318. package/dist/576.js.map +0 -1
  319. package/dist/577.js +0 -1
  320. package/dist/577.js.map +0 -1
  321. package/dist/591.js +0 -2
  322. package/dist/591.js.map +0 -1
  323. package/dist/598.js +0 -1
  324. package/dist/598.js.map +0 -1
  325. package/dist/649.js +0 -2
  326. package/dist/649.js.map +0 -1
  327. package/dist/662.js +0 -1
  328. package/dist/662.js.map +0 -1
  329. package/dist/767.js +0 -1
  330. package/dist/767.js.map +0 -1
  331. package/dist/784.js +0 -2
  332. package/dist/784.js.map +0 -1
  333. package/dist/921.js +0 -1
  334. package/dist/921.js.map +0 -1
  335. package/dist/922.js +0 -1
  336. package/dist/922.js.map +0 -1
  337. package/dist/925.js +0 -2
  338. package/dist/925.js.LICENSE.txt +0 -40
  339. package/dist/925.js.map +0 -1
  340. package/dist/940.js +0 -1
  341. package/dist/940.js.map +0 -1
  342. package/dist/969.js +0 -1
  343. package/dist/969.js.map +0 -1
  344. package/dist/983.js +0 -1
  345. package/dist/983.js.map +0 -1
  346. package/package-lock.json +0 -5001
  347. package/src/ward-patient-card/row-elements/ward-patient-time-on-ward.tsx +0 -22
  348. package/src/ward-patient-card/row-elements/ward-patient-time-since-admission.tsx +0 -22
  349. /package/dist/{591.js.LICENSE.txt → 2913.js.LICENSE.txt} +0 -0
  350. /package/dist/{784.js.LICENSE.txt → 4041.js.LICENSE.txt} +0 -0
  351. /package/src/ward-patient-card/row-elements/{ward-patient-age.tsx → ward-patient-age.component.tsx} +0 -0
  352. /package/src/ward-patient-card/row-elements/{ward-patient-bed-number.tsx → ward-patient-bed-number.component.tsx} +0 -0
  353. /package/src/ward-patient-card/row-elements/{ward-patient-location.tsx → ward-patient-location.component.tsx} +0 -0
  354. /package/src/ward-patient-card/row-elements/{ward-patient-name.tsx → ward-patient-name.component.tsx} +0 -0
  355. /package/src/ward-patient-card/row-elements/{ward-patient-responsive-tooltip.tsx → ward-patient-responsive-tooltip.component.tsx} +0 -0
  356. /package/src/ward-patient-card/row-elements/{ward-patient-skeleton-text.tsx → ward-patient-skeleton-text.component.tsx} +0 -0
@@ -1,38 +1,49 @@
1
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
1
+ import {
2
+ Button,
3
+ ButtonSet,
4
+ Form,
5
+ InlineNotification,
6
+ RadioButton,
7
+ RadioButtonGroup,
8
+ Stack,
9
+ TextArea,
10
+ } from '@carbon/react';
11
+ import { zodResolver } from '@hookform/resolvers/zod';
12
+ import { ResponsiveWrapper, showSnackbar, useAppContext } from '@openmrs/esm-framework';
2
13
  import classNames from 'classnames';
3
- import { z } from 'zod';
4
- import { Button, ButtonSet, Form, InlineNotification, RadioButton, RadioButtonGroup, TextArea } from '@carbon/react';
14
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
5
15
  import { Controller, useForm } from 'react-hook-form';
6
16
  import { useTranslation } from 'react-i18next';
7
- import { zodResolver } from '@hookform/resolvers/zod';
8
- import { ResponsiveWrapper, showSnackbar, useAppContext, useLayoutType, useSession } from '@openmrs/esm-framework';
9
- import { useCreateEncounter } from '../../ward.resource';
10
- import type { ObsPayload, WardPatientWorkspaceProps, WardViewContext } from '../../types';
17
+ import { z } from 'zod';
11
18
  import useWardLocation from '../../hooks/useWardLocation';
12
- import AdmissionPatientButton from '../admit-patient-button.component';
13
19
  import LocationSelector from '../../location-selector/location-selector.component';
20
+ import type { ObsPayload, WardPatientWorkspaceProps, WardViewContext } from '../../types';
21
+ import { useCreateEncounter } from '../../ward.resource';
14
22
  import styles from './patient-transfer-swap.scss';
15
23
 
16
- export default function PatientTransferForm({
24
+ /**
25
+ * Form to fill out for:
26
+ * - an admitted patient without pending transfer request, to initiate a transfer request for a patient
27
+ * - an admitted patient with pending transfer request, to create a request to transfer elsewhere
28
+ * - an un-admitted patient, to create a request to admit
29
+ */
30
+ export default function PatientAdmitOrTransferForm({
17
31
  closeWorkspaceWithSavedChanges,
18
32
  wardPatient,
19
33
  promptBeforeClosing,
20
34
  }: WardPatientWorkspaceProps) {
21
35
  const { t } = useTranslation();
22
- const { patient, inpatientAdmission } = wardPatient ?? {};
36
+ const { patient, inpatientRequest, visit } = wardPatient ?? {};
23
37
  const [showErrorNotifications, setShowErrorNotifications] = useState(false);
24
38
  const [isSubmitting, setIsSubmitting] = useState(false);
25
39
  const { createEncounter, emrConfiguration, isLoadingEmrConfiguration, errorFetchingEmrConfiguration } =
26
40
  useCreateEncounter();
27
- const { currentProvider } = useSession();
28
- const { location } = useWardLocation();
29
41
  const dispositionsWithTypeTransfer = useMemo(
30
42
  () => emrConfiguration?.dispositions.filter(({ type }) => type === 'TRANSFER'),
31
43
  [emrConfiguration],
32
44
  );
33
45
  const { wardPatientGroupDetails } = useAppContext<WardViewContext>('ward-view-context') ?? {};
34
- const responsiveSize = useLayoutType() === 'tablet' ? 'lg' : 'md';
35
- const isAdmitted = inpatientAdmission != null;
46
+ const currentAdmission = wardPatientGroupDetails?.inpatientAdmissionsByPatientUuid?.get(patient?.uuid);
36
47
 
37
48
  const zodSchema = useMemo(
38
49
  () =>
@@ -101,7 +112,7 @@ export default function PatientTransferForm({
101
112
  });
102
113
  }
103
114
 
104
- createEncounter(patient, emrConfiguration.transferRequestEncounterType, [
115
+ createEncounter(patient, emrConfiguration.transferRequestEncounterType, visit?.uuid, [
105
116
  {
106
117
  concept: emrConfiguration.dispositionDescriptor.dispositionSetConcept.uuid,
107
118
  groupMembers: obs,
@@ -134,6 +145,7 @@ export default function PatientTransferForm({
134
145
  patient,
135
146
  t,
136
147
  wardPatientGroupDetails,
148
+ visit?.uuid,
137
149
  ],
138
150
  );
139
151
 
@@ -145,30 +157,11 @@ export default function PatientTransferForm({
145
157
  if (!wardPatientGroupDetails) {
146
158
  return <></>;
147
159
  }
148
- if (!isAdmitted) {
149
- return (
150
- <div className={styles.workspaceContent}>
151
- <div className={styles.formError}>
152
- <InlineNotification
153
- kind="info"
154
- title={t('unableToTransferPatient', 'Unable to transfer patient')}
155
- subtitle={t(
156
- 'unableToTransferPatientNotYetAdmitted',
157
- 'This patient is not admitted to this ward. Admit this patient before transferring them to a different location.',
158
- )}
159
- lowContrast
160
- hideCloseButton
161
- />
162
- </div>
163
- <AdmissionPatientButton wardPatient={wardPatient} onAdmitPatientSuccess={closeWorkspaceWithSavedChanges} />
164
- </div>
165
- );
166
- }
167
160
  return (
168
161
  <Form
169
162
  onSubmit={handleSubmit(onSubmit, onError)}
170
163
  className={classNames(styles.formContainer, styles.workspaceContent)}>
171
- <div>
164
+ <Stack gap={4}>
172
165
  {errorFetchingEmrConfiguration && (
173
166
  <div className={styles.formError}>
174
167
  <InlineNotification
@@ -183,13 +176,39 @@ export default function PatientTransferForm({
183
176
  />
184
177
  </div>
185
178
  )}
179
+ {currentAdmission ? (
180
+ inpatientRequest && (
181
+ <InlineNotification
182
+ kind="info"
183
+ lowContrast={true}
184
+ hideCloseButton={true}
185
+ title={t('patientCurrentlyAdmittedToWardLocation', 'Patient currently admitted to {{wardLocation}}', {
186
+ wardLocation: currentAdmission.currentInpatientLocation.display,
187
+ })}
188
+ />
189
+ )
190
+ ) : (
191
+ <InlineNotification
192
+ kind="info"
193
+ lowContrast={true}
194
+ hideCloseButton={true}
195
+ title={t('patientCurrentlyNotAdmitted', 'Patient currently not admitted')}
196
+ />
197
+ )}
186
198
  <div className={styles.field}>
187
199
  <h2 className={styles.productiveHeading02}>{t('selectALocation', 'Select a location')}</h2>
188
200
  <Controller
189
201
  name="location"
190
202
  control={control}
191
203
  render={({ field, fieldState: { error } }) => (
192
- <LocationSelector {...field} invalid={!!error?.message} invalidText={error?.message} />
204
+ <LocationSelector
205
+ name={field.name}
206
+ field={field}
207
+ invalid={!!error?.message}
208
+ invalidText={error?.message}
209
+ ancestorLocation={visit?.location}
210
+ excludeLocations={currentAdmission ? [currentAdmission.currentInpatientLocation] : []}
211
+ />
193
212
  )}
194
213
  />
195
214
  </div>
@@ -234,7 +253,7 @@ export default function PatientTransferForm({
234
253
  ))}
235
254
  </div>
236
255
  )}
237
- </div>
256
+ </Stack>
238
257
  <ButtonSet className={styles.buttonSet}>
239
258
  <Button size="xl" kind="secondary" onClick={closeWorkspaceWithSavedChanges}>
240
259
  {t('cancel', 'Cancel')}
@@ -16,7 +16,7 @@ export default function PatientBedSwapForm({
16
16
  closeWorkspaceWithSavedChanges,
17
17
  wardPatient,
18
18
  }: WardPatientWorkspaceProps) {
19
- const { patient } = wardPatient;
19
+ const { patient, visit } = wardPatient;
20
20
  const { t } = useTranslation();
21
21
  const [showErrorNotifications, setShowErrorNotifications] = useState(false);
22
22
  const { createEncounter, emrConfiguration, isLoadingEmrConfiguration, errorFetchingEmrConfiguration } =
@@ -56,7 +56,7 @@ export default function PatientBedSwapForm({
56
56
  const bedSelected = beds.find((bed) => bed.bedId === values.bedId);
57
57
  setIsSubmitting(true);
58
58
  setShowErrorNotifications(false);
59
- createEncounter(patient, emrConfiguration.bedAssignmentEncounterType)
59
+ createEncounter(patient, emrConfiguration.bedAssignmentEncounterType, visit.uuid)
60
60
  .then(async (response) => {
61
61
  if (response.ok) {
62
62
  if (bedSelected) {
@@ -110,7 +110,16 @@ export default function PatientBedSwapForm({
110
110
  closeWorkspaceWithSavedChanges();
111
111
  });
112
112
  },
113
- [beds, createEncounter, patient, emrConfiguration, t, wardPatientGroupDetails, closeWorkspaceWithSavedChanges],
113
+ [
114
+ beds,
115
+ createEncounter,
116
+ patient,
117
+ emrConfiguration,
118
+ t,
119
+ wardPatientGroupDetails,
120
+ closeWorkspaceWithSavedChanges,
121
+ visit?.uuid,
122
+ ],
114
123
  );
115
124
 
116
125
  const onError = useCallback(() => {
@@ -118,6 +127,7 @@ export default function PatientBedSwapForm({
118
127
  }, []);
119
128
 
120
129
  if (!wardPatientGroupDetails) return <></>;
130
+ if (!visit) return <InlineNotification kind="error" title={t('noVisit', 'No visit found')} />;
121
131
  return (
122
132
  <Form
123
133
  onSubmit={handleSubmit(onSubmit, onError)}
@@ -4,8 +4,8 @@ import React, { useState } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
5
  import type { WardPatientWorkspaceProps } from '../../types';
6
6
  import WardPatientWorkspaceBanner from '../patient-banner/patient-banner.component';
7
+ import PatientAdmitOrTransferForm from './patient-admit-or-transfer-request-form.component';
7
8
  import PatientBedSwapForm from './patient-bed-swap-form.component';
8
- import PatientTransferForm from './patient-transfer-request-form.component';
9
9
  import styles from './patient-transfer-swap.scss';
10
10
 
11
11
  const TransferSection = {
@@ -15,9 +15,15 @@ const TransferSection = {
15
15
 
16
16
  type TransferSectionValues = (typeof TransferSection)[keyof typeof TransferSection];
17
17
 
18
- export default function PatientTransferAndSwapWorkspace(props: WardPatientWorkspaceProps) {
18
+ export default function PatientTransferAndSwapWorkspace({
19
+ defaultTransfersection,
20
+ withContentSwitcher = true,
21
+ ...props
22
+ }: WardPatientWorkspaceProps & { withContentSwitcher?: boolean; defaultTransfersection?: TransferSectionValues }) {
19
23
  const { t } = useTranslation();
20
- const [selectedSection, setSelectedSection] = useState<TransferSectionValues>(TransferSection.TRANSFER);
24
+ const [selectedSection, setSelectedSection] = useState<TransferSectionValues>(
25
+ defaultTransfersection ?? TransferSection.TRANSFER,
26
+ );
21
27
  const isBedManagementModuleInstalled = useFeatureFlag('bedmanagement-module');
22
28
 
23
29
  return (
@@ -25,7 +31,7 @@ export default function PatientTransferAndSwapWorkspace(props: WardPatientWorksp
25
31
  <div className={styles.patientWorkspaceBanner}>
26
32
  <WardPatientWorkspaceBanner wardPatient={props?.wardPatient} />
27
33
  </div>
28
- {isBedManagementModuleInstalled && (
34
+ {isBedManagementModuleInstalled && withContentSwitcher && (
29
35
  <div className={styles.contentSwitcherWrapper}>
30
36
  <h2 className={styles.productiveHeading02}>{t('typeOfTransfer', 'Type of transfer')}</h2>
31
37
  <div className={styles.contentSwitcher}>
@@ -38,7 +44,7 @@ export default function PatientTransferAndSwapWorkspace(props: WardPatientWorksp
38
44
  )}
39
45
  <div className={styles.workspaceForm}>
40
46
  {selectedSection === TransferSection.TRANSFER ? (
41
- <PatientTransferForm {...props} />
47
+ <PatientAdmitOrTransferForm {...props} />
42
48
  ) : (
43
49
  <PatientBedSwapForm {...props} />
44
50
  )}
@@ -0,0 +1,5 @@
1
+ .patientTransferRequestWorkspace {
2
+ height: 100%;
3
+ display: flex;
4
+ flex-direction: column;
5
+ }
@@ -1,11 +1,25 @@
1
- import React from 'react';
2
- import PatientTransferForm from '../patient-transfer-bed-swap/patient-transfer-request-form.component';
1
+ import React, { useEffect } from 'react';
2
+ import { useTranslation } from 'react-i18next';
3
3
  import { type WardPatientWorkspaceProps } from '../../types';
4
+ import WardPatientWorkspaceBanner from '../patient-banner/patient-banner.component';
5
+ import PatientAdmitOrTransferForm from '../patient-transfer-bed-swap/patient-admit-or-transfer-request-form.component';
6
+ import styles from './patient-transfer-request.scss';
4
7
 
5
- interface PatientTransferRequestFormProps extends WardPatientWorkspaceProps {}
8
+ interface PatientTransferRequestWorkspaceProps extends WardPatientWorkspaceProps {}
6
9
 
7
- const PatientTransferRequestForm: React.FC<PatientTransferRequestFormProps> = (props) => {
8
- return <PatientTransferForm {...props} />;
10
+ /**
11
+ * This workspace is launched when the "Transfer elsewhere" / "Admit elsewhere"
12
+ * button on a pending request patient card is clicked on
13
+ */
14
+ const PatientTransferRequestWorkspace: React.FC<PatientTransferRequestWorkspaceProps> = (props) => {
15
+ const { wardPatient } = props;
16
+
17
+ return (
18
+ <div className={styles.patientTransferRequestWorkspace}>
19
+ <WardPatientWorkspaceBanner {...{ wardPatient }} />
20
+ <PatientAdmitOrTransferForm {...props} />
21
+ </div>
22
+ );
9
23
  };
10
24
 
11
- export default PatientTransferRequestForm;
25
+ export default PatientTransferRequestWorkspace;
@@ -16,6 +16,7 @@ import { moduleName } from '../../../constant';
16
16
  import { savePatientNote } from '../notes.resource';
17
17
  import useEmrConfiguration from '../../../hooks/useEmrConfiguration';
18
18
  import styles from './notes-form.scss';
19
+ import { type EncounterPayload } from '../../../types';
19
20
 
20
21
  type NotesFormData = z.infer<typeof noteFormSchema>;
21
22
 
@@ -66,7 +67,7 @@ const PatientNotesForm: React.FC<PatientNotesFormProps> = ({
66
67
  const { wardClinicalNote } = data;
67
68
  setIsSubmitting(true);
68
69
 
69
- const notePayload = {
70
+ const notePayload: EncounterPayload = {
70
71
  patient: patientUuid,
71
72
  location: locationUuid,
72
73
  encounterType: emrConfiguration?.inpatientNoteEncounterType.uuid,
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
- import { type PatientNote } from '../types';
3
- import { SkeletonText, Tag, Tile } from '@carbon/react';
4
- import { useTranslation } from 'react-i18next';
5
2
  import dayjs from 'dayjs';
3
+ import { useTranslation } from 'react-i18next';
4
+ import { SkeletonText, Tag, Tile } from '@carbon/react';
5
+ import { type PatientNote } from '../types';
6
6
  import styles from './styles.scss';
7
7
 
8
8
  export const InPatientNoteSkeleton: React.FC = () => {
@@ -8,7 +8,12 @@ export function useCreateEncounter() {
8
8
  const { currentProvider } = useSession();
9
9
  const { emrConfiguration, isLoadingEmrConfiguration, errorFetchingEmrConfiguration } = useEmrConfiguration();
10
10
 
11
- const createEncounter = (patient: Patient, encounterType: OpenmrsResource, obs: ObsPayload[] = []) => {
11
+ const createEncounter = (
12
+ patient: Patient,
13
+ encounterType: OpenmrsResource,
14
+ visitUuid: string,
15
+ obs: ObsPayload[] = [],
16
+ ) => {
12
17
  const encounterPayload = {
13
18
  patient: patient.uuid,
14
19
  encounterType,
@@ -20,6 +25,7 @@ export function useCreateEncounter() {
20
25
  },
21
26
  ],
22
27
  obs,
28
+ visit: visitUuid,
23
29
  };
24
30
 
25
31
  return openmrsFetch<Encounter>(`${restBaseUrl}/encounter`, {
@@ -38,14 +44,14 @@ export function useAdmitPatient() {
38
44
  const { createEncounter, emrConfiguration, isLoadingEmrConfiguration, errorFetchingEmrConfiguration } =
39
45
  useCreateEncounter();
40
46
 
41
- const admitPatient = (patient: Patient, dispositionType: DispositionType) => {
47
+ const admitPatient = (patient: Patient, dispositionType: DispositionType, visitUuid: string) => {
42
48
  const encounterType =
43
49
  dispositionType === 'ADMIT'
44
50
  ? emrConfiguration.admissionEncounterType
45
51
  : dispositionType === 'TRANSFER'
46
52
  ? emrConfiguration.transferWithinHospitalEncounterType
47
53
  : null;
48
- return createEncounter(patient, encounterType);
54
+ return createEncounter(patient, encounterType, visitUuid);
49
55
  };
50
56
 
51
57
  return { admitPatient, isLoadingEmrConfiguration, errorFetchingEmrConfiguration };
@@ -0,0 +1,123 @@
1
+ {
2
+ "admissionRequestCancelled": "Admission request cancelled.",
3
+ "admissionRequests": "Admission requests",
4
+ "admissionRequestsCount_one": "{{count}} admission request",
5
+ "admissionRequestsCount_other": "{{count}} admission requests",
6
+ "admit": "Admit",
7
+ "admitElsewhere": "Admit elsewhere",
8
+ "admitPatient": "Admit patient",
9
+ "admitting": "Admitting...",
10
+ "backToSearchResults": "Back to search results",
11
+ "bedShare": "Bed share",
12
+ "bedSwap": "Bed swap",
13
+ "cancel": "Cancel",
14
+ "cancelAdmissionRequest": "Cancel admission request",
15
+ "capacity": "Capacity",
16
+ "capacityMetricValue": "{{ metricValue }} %",
17
+ "chooseAnOption": "Choose an option",
18
+ "clinicalForms": "Clinical forms",
19
+ "clinicalNoteLabel": "Write your notes",
20
+ "clinicalNotes": "Clinical notes",
21
+ "countItems_one": "{{count}} {{item}}",
22
+ "countItems_other": "{{count}} {{item}}",
23
+ "days_one": "{{count}} day",
24
+ "days_other": "{{count}} days",
25
+ "discharge": "Discharge",
26
+ "emptyBed": "Empty bed",
27
+ "emptyText": "Empty",
28
+ "encounterDisplay": "{{encounterType}} {{encounterDate}}",
29
+ "Error cancelling admission request": "Error cancelling admission request",
30
+ "errorChangingPatientBedAssignment": "Error changing patient bed assignment",
31
+ "errorConfiguringPatientCard": "Error configuring patient card",
32
+ "errorConfiguringPatientCardMessage": "Unable to find configuration for {{elementType}}, id: {{id}}",
33
+ "errorCreatingEncounter": "Failed to admit patient",
34
+ "errorCreatingTransferRequest": "Error creating transfer request",
35
+ "errorDischargingPatient": "Error discharging patient",
36
+ "errorLoadingBedDetails": "Error loading bed details",
37
+ "errorLoadingChildren": "Error loading children info",
38
+ "errorLoadingMother": "Error loading mother info",
39
+ "errorLoadingPatientAdmissionRequests": "Error loading patient admission requests",
40
+ "errorLoadingPatientInfo": "Error loading patient info",
41
+ "errorLoadingPatients": "Error loading admitted patients",
42
+ "errorLoadingWardLocation": "Error loading ward location",
43
+ "female": "Female",
44
+ "fetchingEmrConfigurationFailed": "Fetching EMR configuration failed. Try refreshing the page or contact your system administrator.",
45
+ "fetchingPatientNotesFailed": "Fetching patient notes failed. Try refreshing the page or contact your system administrator.",
46
+ "freeBeds": "Free beds",
47
+ "freeBedsMetricValue": "{{ metricValue }}",
48
+ "hours_one": "{{count}} hour",
49
+ "hours_other": "{{count}} hours",
50
+ "inpatientNotesWorkspaceTitle": "In-patient notes",
51
+ "invalidLocationSpecified": "Invalid location specified",
52
+ "invalidWardLocation": "Invalid ward location: {{location}}",
53
+ "labelColon": "{{label}}:",
54
+ "male": "Male",
55
+ "manage": "Manage",
56
+ "minutes_one": "{{count}} minutes",
57
+ "minutes_other": "{{count}} minutes",
58
+ "motherChildBedShare": "Mother / Child",
59
+ "nextPage": "Next page",
60
+ "noBed": "No bed",
61
+ "noBedsConfigured": "No beds configured for this location",
62
+ "noBedsConfiguredForLocation": "No beds configured for {{location}} location",
63
+ "noLocationsFound": "No locations found",
64
+ "noPendingPatientRequests": "No pending patient requests",
65
+ "note": "Note",
66
+ "notes": "Notes",
67
+ "notesRequiredForCancellingRequest": "Notes required for cancelling admission or transfer request",
68
+ "Orders": "Orders",
69
+ "other": "Other",
70
+ "patientAdmittedButBedNotAssigned": "Patient admitted successfully but fail to assign bed to patient",
71
+ "patientAdmittedSuccessfully": "Patient admitted successfully",
72
+ "patientAdmittedSuccessfullySubtitle": "{{patientName}} has been successfully admitted and assigned to bed {{bedNumber}}",
73
+ "patientAdmittedWoBed": "Patient admitted successfully to {{location}}",
74
+ "patientAlreadyAdmittedToCurrentLocation": "Patient already admitted to current location",
75
+ "patientAssignedNewBed": "Patient assigned to new bed",
76
+ "patientAssignedNewBedDetail": "{{patientName}} assigned to bed {{bedNumber}}",
77
+ "patientCurrentlyAdmittedToWardLocation": "Patient currently admitted to {{wardLocation}}",
78
+ "patientCurrentlyNotAdmitted": "Patient currently not admitted",
79
+ "patienthasNoActiveVisit": "Patient has no active visit",
80
+ "patientHasPendingAdmissionRequest": "Patient already has a pending admission request to location {{location}}",
81
+ "patientNoteNowVisible": "It should be now visible in the notes history",
82
+ "patientNoteSaveError": "Error saving patient note",
83
+ "patientNotesDidntLoad": "Patient notes didn't load",
84
+ "patients": "Patients",
85
+ "patientsMetricValue": "{{ metricValue }}",
86
+ "patientTransferRequestCreated": "Patient transfer request created",
87
+ "patientUnassignedFromBed": "Patient unassigned from bed",
88
+ "patientUnassignedFromBedDetail": "{{patientName}} is now unassigned from bed",
89
+ "patientWasDischarged": "Patient was discharged",
90
+ "pendingDischarge": "Pending Discharge",
91
+ "pendingOut": "Pending out",
92
+ "pendingOutMetricValue": "{{ metricValue }}",
93
+ "pendingTransfer": "Pending Transfer",
94
+ "pleaseSelectBed": "Please select a bed",
95
+ "pleaseSelectTransferLocation": "Please select transfer location",
96
+ "pleaseSelectTransferType": "Please select transfer type",
97
+ "previousPage": "Previous page",
98
+ "proceedWithPatientDischarge": "Proceed with patient discharge",
99
+ "save": "Save",
100
+ "saving": "Saving...",
101
+ "searchLocations": "Search locations",
102
+ "seconds_one": "{{count}} second",
103
+ "seconds_other": "{{count}} seconds",
104
+ "selectABed": "Select a bed",
105
+ "selectALocation": "Select a location",
106
+ "showingLocations_one": "{{start}}-{{end}} of {{count}} locations",
107
+ "showingLocations_other": "{{start}}-{{end}} of {{count}} locations",
108
+ "somePartsOfTheFormDidntLoad": "Some parts of the form didn't load",
109
+ "timeOnWard": "Time on this ward: {{timeOnWard}}",
110
+ "timeSinceAdmission": "Admitted: {{timeSinceAdmission}}",
111
+ "transfer": "Transfer",
112
+ "transferElsewhere": "Transfer elsewhere",
113
+ "transferPatient": "Transfer patient",
114
+ "transferRequest": "Transfer request",
115
+ "transfers": "Transfers",
116
+ "transferToDispositionLocation": "Transfer to {{location}}",
117
+ "transferType": "Transfer type",
118
+ "typeOfTransfer": "Type of transfer",
119
+ "unknown": "Unknown",
120
+ "visitNoteSaved": "Patient note saved",
121
+ "wardClinicalNotePlaceholder": "Write any notes here",
122
+ "wards": "Wards"
123
+ }
@@ -0,0 +1,123 @@
1
+ {
2
+ "admissionRequestCancelled": "Admission request cancelled.",
3
+ "admissionRequests": "Admission requests",
4
+ "admissionRequestsCount_one": "{{count}} admission request",
5
+ "admissionRequestsCount_other": "{{count}} admission requests",
6
+ "admit": "Admit",
7
+ "admitElsewhere": "Admit elsewhere",
8
+ "admitPatient": "Admit patient",
9
+ "admitting": "Admitting...",
10
+ "backToSearchResults": "Back to search results",
11
+ "bedShare": "Bed share",
12
+ "bedSwap": "Bed swap",
13
+ "cancel": "Cancel",
14
+ "cancelAdmissionRequest": "Cancel admission request",
15
+ "capacity": "Capacity",
16
+ "capacityMetricValue": "{{ metricValue }} %",
17
+ "chooseAnOption": "Choose an option",
18
+ "clinicalForms": "Clinical forms",
19
+ "clinicalNoteLabel": "Write your notes",
20
+ "clinicalNotes": "Clinical notes",
21
+ "countItems_one": "{{count}} {{item}}",
22
+ "countItems_other": "{{count}} {{item}}",
23
+ "days_one": "{{count}} day",
24
+ "days_other": "{{count}} days",
25
+ "discharge": "Discharge",
26
+ "emptyBed": "Empty bed",
27
+ "emptyText": "Empty",
28
+ "encounterDisplay": "{{encounterType}} {{encounterDate}}",
29
+ "Error cancelling admission request": "Error cancelling admission request",
30
+ "errorChangingPatientBedAssignment": "Error changing patient bed assignment",
31
+ "errorConfiguringPatientCard": "Error configuring patient card",
32
+ "errorConfiguringPatientCardMessage": "Unable to find configuration for {{elementType}}, id: {{id}}",
33
+ "errorCreatingEncounter": "Failed to admit patient",
34
+ "errorCreatingTransferRequest": "Error creating transfer request",
35
+ "errorDischargingPatient": "Error discharging patient",
36
+ "errorLoadingBedDetails": "Error loading bed details",
37
+ "errorLoadingChildren": "Error loading children info",
38
+ "errorLoadingMother": "Error loading mother info",
39
+ "errorLoadingPatientAdmissionRequests": "Error loading patient admission requests",
40
+ "errorLoadingPatientInfo": "Error loading patient info",
41
+ "errorLoadingPatients": "Error loading admitted patients",
42
+ "errorLoadingWardLocation": "Error loading ward location",
43
+ "female": "Female",
44
+ "fetchingEmrConfigurationFailed": "Fetching EMR configuration failed. Try refreshing the page or contact your system administrator.",
45
+ "fetchingPatientNotesFailed": "Fetching patient notes failed. Try refreshing the page or contact your system administrator.",
46
+ "freeBeds": "Free beds",
47
+ "freeBedsMetricValue": "{{ metricValue }}",
48
+ "hours_one": "{{count}} hour",
49
+ "hours_other": "{{count}} hours",
50
+ "inpatientNotesWorkspaceTitle": "In-patient notes",
51
+ "invalidLocationSpecified": "Invalid location specified",
52
+ "invalidWardLocation": "Invalid ward location: {{location}}",
53
+ "labelColon": "{{label}}:",
54
+ "male": "Male",
55
+ "manage": "Manage",
56
+ "minutes_one": "{{count}} minutes",
57
+ "minutes_other": "{{count}} minutes",
58
+ "motherChildBedShare": "Mother / Child",
59
+ "nextPage": "Next page",
60
+ "noBed": "No bed",
61
+ "noBedsConfigured": "No beds configured for this location",
62
+ "noBedsConfiguredForLocation": "No beds configured for {{location}} location",
63
+ "noLocationsFound": "No locations found",
64
+ "noPendingPatientRequests": "No pending patient requests",
65
+ "note": "Note",
66
+ "notes": "Notes",
67
+ "notesRequiredForCancellingRequest": "Notes required for cancelling admission or transfer request",
68
+ "Orders": "Orders",
69
+ "other": "Other",
70
+ "patientAdmittedButBedNotAssigned": "Patient admitted successfully but fail to assign bed to patient",
71
+ "patientAdmittedSuccessfully": "Patient admitted successfully",
72
+ "patientAdmittedSuccessfullySubtitle": "{{patientName}} has been successfully admitted and assigned to bed {{bedNumber}}",
73
+ "patientAdmittedWoBed": "Patient admitted successfully to {{location}}",
74
+ "patientAlreadyAdmittedToCurrentLocation": "Patient already admitted to current location",
75
+ "patientAssignedNewBed": "Patient assigned to new bed",
76
+ "patientAssignedNewBedDetail": "{{patientName}} assigned to bed {{bedNumber}}",
77
+ "patientCurrentlyAdmittedToWardLocation": "Patient currently admitted to {{wardLocation}}",
78
+ "patientCurrentlyNotAdmitted": "Patient currently not admitted",
79
+ "patienthasNoActiveVisit": "Patient has no active visit",
80
+ "patientHasPendingAdmissionRequest": "Patient already has a pending admission request to location {{location}}",
81
+ "patientNoteNowVisible": "It should be now visible in the notes history",
82
+ "patientNoteSaveError": "Error saving patient note",
83
+ "patientNotesDidntLoad": "Patient notes didn't load",
84
+ "patients": "Patients",
85
+ "patientsMetricValue": "{{ metricValue }}",
86
+ "patientTransferRequestCreated": "Patient transfer request created",
87
+ "patientUnassignedFromBed": "Patient unassigned from bed",
88
+ "patientUnassignedFromBedDetail": "{{patientName}} is now unassigned from bed",
89
+ "patientWasDischarged": "Patient was discharged",
90
+ "pendingDischarge": "Pending Discharge",
91
+ "pendingOut": "Pending out",
92
+ "pendingOutMetricValue": "{{ metricValue }}",
93
+ "pendingTransfer": "Pending Transfer",
94
+ "pleaseSelectBed": "Please select a bed",
95
+ "pleaseSelectTransferLocation": "Please select transfer location",
96
+ "pleaseSelectTransferType": "Please select transfer type",
97
+ "previousPage": "Previous page",
98
+ "proceedWithPatientDischarge": "Proceed with patient discharge",
99
+ "save": "Save",
100
+ "saving": "Saving...",
101
+ "searchLocations": "Search locations",
102
+ "seconds_one": "{{count}} second",
103
+ "seconds_other": "{{count}} seconds",
104
+ "selectABed": "Select a bed",
105
+ "selectALocation": "Select a location",
106
+ "showingLocations_one": "{{start}}-{{end}} of {{count}} locations",
107
+ "showingLocations_other": "{{start}}-{{end}} of {{count}} locations",
108
+ "somePartsOfTheFormDidntLoad": "Some parts of the form didn't load",
109
+ "timeOnWard": "Time on this ward: {{timeOnWard}}",
110
+ "timeSinceAdmission": "Admitted: {{timeSinceAdmission}}",
111
+ "transfer": "Transfer",
112
+ "transferElsewhere": "Transfer elsewhere",
113
+ "transferPatient": "Transfer patient",
114
+ "transferRequest": "Transfer request",
115
+ "transfers": "Transfers",
116
+ "transferToDispositionLocation": "Transfer to {{location}}",
117
+ "transferType": "Transfer type",
118
+ "typeOfTransfer": "Type of transfer",
119
+ "unknown": "Unknown",
120
+ "visitNoteSaved": "Patient note saved",
121
+ "wardClinicalNotePlaceholder": "Write any notes here",
122
+ "wards": "Wards"
123
+ }