@kenyaemr/esm-express-workflow-app 5.4.4-pre.299 → 5.4.4-pre.3

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 (124) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/dist/126.js +1 -0
  3. package/dist/126.js.map +1 -0
  4. package/dist/2024.js +1 -1
  5. package/dist/2024.js.map +1 -1
  6. package/dist/2225.js +1 -1
  7. package/dist/2225.js.map +1 -1
  8. package/dist/2386.js +1 -0
  9. package/dist/2386.js.map +1 -0
  10. package/dist/2438.js +1 -1
  11. package/dist/2438.js.map +1 -1
  12. package/dist/4504.js +1 -0
  13. package/dist/4504.js.map +1 -0
  14. package/dist/4670.js +1 -0
  15. package/dist/4670.js.map +1 -0
  16. package/dist/4682.js +1 -1
  17. package/dist/4682.js.map +1 -1
  18. package/dist/5047.js +1 -0
  19. package/dist/5047.js.map +1 -0
  20. package/dist/586.js.map +1 -1
  21. package/dist/5986.js +1 -1
  22. package/dist/5986.js.map +1 -1
  23. package/dist/6075.js +1 -0
  24. package/dist/6075.js.map +1 -0
  25. package/dist/6328.js +1 -1
  26. package/dist/6328.js.map +1 -1
  27. package/dist/64.js +1 -0
  28. package/dist/64.js.map +1 -0
  29. package/dist/6456.js +1 -1
  30. package/dist/6720.js +1 -0
  31. package/dist/6720.js.map +1 -0
  32. package/dist/7607.js +1 -1
  33. package/dist/8566.js +1 -0
  34. package/dist/8566.js.map +1 -0
  35. package/dist/8727.js +1 -1
  36. package/dist/8799.js +1 -0
  37. package/dist/8799.js.map +1 -0
  38. package/dist/8911.js +1 -1
  39. package/dist/8911.js.map +1 -1
  40. package/dist/9157.js +1 -1
  41. package/dist/9157.js.map +1 -1
  42. package/dist/9161.js +1 -0
  43. package/dist/9161.js.map +1 -0
  44. package/dist/9182.js +1 -1
  45. package/dist/9343.js +1 -0
  46. package/dist/9343.js.map +1 -0
  47. package/dist/9535.js +1 -1
  48. package/dist/9535.js.map +1 -1
  49. package/dist/9834.js +1 -0
  50. package/dist/{4432.js.map → 9834.js.map} +1 -1
  51. package/dist/kenyaemr-esm-express-workflow-app.js +2 -2
  52. package/dist/kenyaemr-esm-express-workflow-app.js.buildmanifest.json +294 -151
  53. package/dist/kenyaemr-esm-express-workflow-app.js.map +1 -1
  54. package/dist/main.js +2 -2
  55. package/dist/main.js.map +1 -1
  56. package/dist/routes.json +1 -1
  57. package/package.json +1 -1
  58. package/src/components/admissions/index.tsx +0 -1
  59. package/src/components/anaesthetic/anaesthetic.component.tsx +10 -4
  60. package/src/components/anaesthetic/forms/interoperative-record-drug-given-form.component.tsx +2 -26
  61. package/src/components/anaesthetic/graphs/interoperative-record-drug-given-graph-wrapper.component.tsx +66 -25
  62. package/src/components/anaesthetic/resources/anaesthetic.resource.ts +2 -2
  63. package/src/components/consultation/clinical-encounter/clinical-encounter.component.tsx +4 -20
  64. package/src/components/consultation/index.ts +1 -1
  65. package/src/components/consultation/tabs/index.ts +67 -0
  66. package/src/components/facility-dashboard/components/header/home-header.component.tsx +8 -13
  67. package/src/components/laboratory/index.ts +11 -0
  68. package/src/components/laboratory/lab-table.component.tsx +25 -12
  69. package/src/components/laboratory/laboratory-tabs.component.tsx +3 -17
  70. package/src/components/pharmacy/index.ts +1 -1
  71. package/src/components/pharmacy/pharmacy-tabs.component.tsx +4 -20
  72. package/src/components/pharmacy/tabs/index.ts +21 -0
  73. package/src/components/procedures/index.ts +16 -0
  74. package/src/components/procedures/procedures-table.component.tsx +33 -15
  75. package/src/components/procedures/procedures-tabs.component.tsx +3 -22
  76. package/src/components/radiology-and-imaging/index.ts +11 -0
  77. package/src/components/radiology-and-imaging/radiology-and-imaging-table.component.tsx +35 -15
  78. package/src/components/radiology-and-imaging/radiology-and-imaging.component.tsx +3 -19
  79. package/src/components/registration/card/Local-card/local-card.component.tsx +3 -3
  80. package/src/components/registration/dependants/dependants.component.tsx +6 -1
  81. package/src/components/registration/end-visit-modal/end-visit-dialog.modal.tsx +320 -0
  82. package/src/components/registration/end-visit-modal/end-visit-dialog.scss +12 -0
  83. package/src/components/registration/end-visit-modal/end-visit.resource.tsx +59 -0
  84. package/src/components/registration/end-visit-modal/sha-end-visit.resource.ts +285 -0
  85. package/src/components/registration/start-visit-form/overflow-menu-extension/custom-end-active-visit.extension.tsx +44 -0
  86. package/src/components/registration/start-visit-form/start-visit-workspace/exported-visit-form.workspace.tsx +16 -11
  87. package/src/components/registration/type/index.ts +101 -0
  88. package/src/config-schema.ts +23 -1
  89. package/src/index.ts +36 -17
  90. package/src/routes.json +205 -12
  91. package/src/shared/otp-verification/index.ts +3 -0
  92. package/src/shared/otp-verification/otp-verification.modal.tsx +51 -17
  93. package/src/shared/patient-chart/patient-summary-dashboard/patient-summary-dashboard.component.tsx +5 -73
  94. package/src/shared/tabs/create-tab-extension.tsx +33 -0
  95. package/src/shared/tabs/extension-tabs.component.tsx +51 -33
  96. package/src/shared/utils/index.ts +6 -6
  97. package/translations/am.json +32 -24
  98. package/translations/en.json +23 -16
  99. package/translations/fr.json +23 -16
  100. package/translations/sw.json +23 -21
  101. package/Failed to delete encounter/am.json +0 -4
  102. package/Failed to delete encounter/en.json +0 -4
  103. package/Failed to delete encounter/fr.json +0 -4
  104. package/Failed to delete encounter/sw.json +0 -4
  105. package/dist/2332.js +0 -1
  106. package/dist/2332.js.map +0 -1
  107. package/dist/4432.js +0 -1
  108. package/dist/4666.js +0 -1
  109. package/dist/4666.js.map +0 -1
  110. package/dist/5733.js +0 -1
  111. package/dist/5733.js.map +0 -1
  112. package/dist/644.js +0 -1
  113. package/dist/644.js.map +0 -1
  114. package/dist/655.js +0 -1
  115. package/dist/655.js.map +0 -1
  116. package/dist/70.js +0 -1
  117. package/dist/70.js.map +0 -1
  118. package/dist/9387.js +0 -1
  119. package/dist/9387.js.map +0 -1
  120. package/src/components/admissions/admission-medication-summary.tsx +0 -302
  121. package/src/components/admissions/admissions-dashboard.utils.test.ts +0 -48
  122. package/src/components/admissions/admissions-dashboard.utils.tsx +0 -63
  123. package/src/shared/orders/OrdersTabs.tsx +0 -76
  124. /package/src/shared/{patient-chart/patient-summary-dashboard → tabs}/patient-summary-dashboard.scss +0 -0
@@ -0,0 +1,44 @@
1
+ import React, { useCallback } from 'react';
2
+ import { useTranslation } from 'react-i18next';
3
+ import { showModal, useVisit } from '@openmrs/esm-framework';
4
+ import { OverflowMenuItem } from '@carbon/react';
5
+ import styles from './overflow-menu-item.scss';
6
+
7
+ interface StopVisitOverflowMenuItemProps {
8
+ patientUuid: string;
9
+ closeMenu?: () => void;
10
+ }
11
+
12
+ let isEndVisitDialogOpen = false;
13
+
14
+ const StopVisitOverflowMenuItem: React.FC<StopVisitOverflowMenuItemProps> = ({ patientUuid, closeMenu }) => {
15
+ const { t } = useTranslation();
16
+ const { activeVisit } = useVisit(patientUuid);
17
+
18
+ const handleLaunchModal = useCallback(() => {
19
+ if (isEndVisitDialogOpen) {
20
+ return;
21
+ }
22
+ isEndVisitDialogOpen = true;
23
+ const dispose = showModal('custom-end-visit-dialog', {
24
+ closeModal: () => {
25
+ isEndVisitDialogOpen = false;
26
+ dispose();
27
+ },
28
+ patientUuid,
29
+ });
30
+ }, [patientUuid]);
31
+
32
+ return (
33
+ activeVisit && (
34
+ <OverflowMenuItem
35
+ className={styles.menuitem}
36
+ itemText={`${t('endCustomActiveVisit', 'End Active Visit')}`}
37
+ onClick={handleLaunchModal}
38
+ closeMenu={closeMenu}
39
+ />
40
+ )
41
+ );
42
+ };
43
+
44
+ export default StopVisitOverflowMenuItem;
@@ -28,6 +28,7 @@ import {
28
28
  useConfig,
29
29
  useConnectivity,
30
30
  useEmrConfiguration,
31
+ useFeatureFlag,
31
32
  useLayoutType,
32
33
  useVisit,
33
34
  Workspace2,
@@ -121,6 +122,7 @@ const ExportedVisitForm: React.FC<Workspace2DefinitionProps<ExportedVisitFormPro
121
122
  const allVisitTypes = useConditionalVisitTypes();
122
123
  const { earliestAllowedStartDate, isLoading: isLoadingBirthdateCheck } =
123
124
  useEarliestAllowedVisitStartDate(patientUuid);
125
+ const hieFeatureFlags = useFeatureFlag('healthInformationExchange');
124
126
 
125
127
  const [errorFetchingResources, setErrorFetchingResources] = useState<{
126
128
  blockSavingForm: boolean;
@@ -314,18 +316,20 @@ const ExportedVisitForm: React.FC<Workspace2DefinitionProps<ExportedVisitFormPro
314
316
  const abortController = new AbortController();
315
317
 
316
318
  if (isOnline) {
317
- setIsAwaitingOtp(true);
318
- try {
319
- for (const [, callbacks] of visitFormCallbacks) {
320
- if (typeof callbacks.onBeforeVisitSave === 'function') {
321
- const canProceed = await callbacks.onBeforeVisitSave();
322
- if (!canProceed) {
323
- return;
319
+ if (hieFeatureFlags) {
320
+ setIsAwaitingOtp(true);
321
+ try {
322
+ for (const [, callbacks] of visitFormCallbacks) {
323
+ if (typeof callbacks.onBeforeVisitSave === 'function') {
324
+ const canProceed = await callbacks.onBeforeVisitSave();
325
+ if (!canProceed) {
326
+ return;
327
+ }
324
328
  }
325
329
  }
330
+ } finally {
331
+ setIsAwaitingOtp(false);
326
332
  }
327
- } finally {
328
- setIsAwaitingOtp(false);
329
333
  }
330
334
 
331
335
  const visitRequest = visitToEdit?.uuid
@@ -450,6 +454,7 @@ const ExportedVisitForm: React.FC<Workspace2DefinitionProps<ExportedVisitFormPro
450
454
  getErrorDescription,
451
455
  globalMutate,
452
456
  handleVisitAttributes,
457
+ hieFeatureFlags,
453
458
  isOnline,
454
459
  onVisitStarted,
455
460
  patientUuid,
@@ -686,7 +691,7 @@ const ExportedVisitForm: React.FC<Workspace2DefinitionProps<ExportedVisitFormPro
686
691
  description={
687
692
  visitToEdit
688
693
  ? t('updatingVisit', 'Updating visit') + '...'
689
- : isAwaitingOtp
694
+ : hieFeatureFlags && isAwaitingOtp
690
695
  ? t('sendingOtp', 'Sending OTP') + '...'
691
696
  : t('startingVisit', 'Starting visit') + '...'
692
697
  }
@@ -697,7 +702,7 @@ const ExportedVisitForm: React.FC<Workspace2DefinitionProps<ExportedVisitFormPro
697
702
  ? t('updateVisit', 'Update visit')
698
703
  : isElectiveNotApproved
699
704
  ? t('awaitingApproval', 'Awaiting approval')
700
- : isSHAVisit
705
+ : hieFeatureFlags && isSHAVisit
701
706
  ? t('verifyAndStartVisit', 'Verify & Start Visit')
702
707
  : t('startVisit', 'Start visit')}
703
708
  </span>
@@ -362,3 +362,104 @@ export interface QueueRoom {
362
362
  export interface OTPSource {
363
363
  otpSource?: string;
364
364
  }
365
+
366
+ export const DISCHARGE_REASONS = [
367
+ { id: 'RECOVERED', label: 'Recovered' },
368
+ { id: 'REFERRED', label: 'Referred' },
369
+ { id: 'ABSCONDED', label: 'Absconded' },
370
+ { id: 'OTHER', label: 'Other' },
371
+ ];
372
+
373
+ export type AuthorizingDeviceOS = 'windows' | 'android';
374
+
375
+ export type OTPResponse = {
376
+ success: boolean;
377
+ otp?: string;
378
+ otp_found?: boolean;
379
+ raw_response?: { message: string };
380
+ error?: string;
381
+ };
382
+
383
+ export type BiometricAuthorizeRequest = {
384
+ agent_id: string;
385
+ patient_id: string;
386
+ interventions: string[];
387
+ service_type: string;
388
+ workstation_id: string;
389
+ authorizing_device_os: string;
390
+ is_emergency?: boolean;
391
+ payment_mechanism?: string;
392
+ patient_uuid?: string;
393
+ is_biometrics_discharge_authorization?: boolean;
394
+ };
395
+
396
+ export type BiometricAuthorizeResponse = {
397
+ success: boolean;
398
+ embed_url?: string;
399
+ authorization_code?: string;
400
+ consent_token?: string;
401
+ token?: string;
402
+ guid?: string;
403
+ error?: string;
404
+ upstream_error?: { error?: string; message?: string };
405
+ };
406
+
407
+ export type BiometricAuthorizationStatus = {
408
+ success: boolean;
409
+ token: string;
410
+ status: 'PENDING' | 'APPROVED' | 'REJECTED';
411
+ is_complete: boolean;
412
+ is_approved: boolean;
413
+ authorization_code: string | null;
414
+ guid: string | null;
415
+ };
416
+
417
+ export type BiometricConfigResponse = {
418
+ agent_url: string;
419
+ agent_timeout_ms: number;
420
+ default_factors: string[];
421
+ };
422
+
423
+ export type ProviderAttributesResponse = {
424
+ attributes: Array<{
425
+ attributeType: { display: string; uuid: string };
426
+ value: string;
427
+ }>;
428
+ };
429
+
430
+ export type WhitelistReason = {
431
+ code: string;
432
+ label: string;
433
+ description: string;
434
+ review_type: 'AUTOMATIC' | 'MANUAL';
435
+ requires_attachments: boolean;
436
+ };
437
+
438
+ export type WhitelistSubmitResponse = {
439
+ success: boolean;
440
+ review_type?: 'AUTOMATIC' | 'MANUAL';
441
+ error?: string;
442
+ };
443
+
444
+ export type WhitelistStatusPoll = {
445
+ beneficiary_cr_id: string;
446
+ is_whitelisted: boolean;
447
+ has_pending: boolean;
448
+ is_rejected: boolean;
449
+ can_submit_new: boolean;
450
+ latest_status: string | null;
451
+ total: number;
452
+ requests: Array<{
453
+ request_id: string | null;
454
+ status: string | null;
455
+ reason_type: string | null;
456
+ reason: string | null;
457
+ biometric_attempts: string | null;
458
+ beneficiary_name: string | null;
459
+ facility_name: string | null;
460
+ reviewed_by: string | null;
461
+ reviewer_note: string | null;
462
+ created_on: string | null;
463
+ reviewed_on: string | null;
464
+ }>;
465
+ };
@@ -154,8 +154,11 @@ export const configSchema = {
154
154
  'Configurable list of maintenance-of-anaesthesia agents shown in the interoperative drug form (e.g. Halothane, Isoflurane). Override per deployment.',
155
155
  _default: [
156
156
  { value: '77343AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', label: 'Halothane' },
157
- { value: '83872AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', label: 'Evoflurane' },
157
+ { value: '83872AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', label: 'Sevoflurane' },
158
158
  { value: '78258AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', label: 'Isoflurane' },
159
+ { value: '82726AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', label: 'Propofol' },
160
+ { value: '78467AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', label: 'Ketamine' },
161
+ { value: '74640AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', label: 'Dexmedetomidine' },
159
162
  ],
160
163
  },
161
164
  proceduresOrderTypeUuid: {
@@ -274,6 +277,22 @@ export const configSchema = {
274
277
  _description: 'Whether the workflow is DHA Workflow',
275
278
  _default: true,
276
279
  },
280
+ crIdentificationNumberUUID: {
281
+ _type: Type.String,
282
+ _description:
283
+ 'The patient identifier type UUID for the SHA Client Registry (CR) number, used for virtual claims and OTP/biometric authentication.',
284
+ _default: '24aedd37-b5be-4e08-8311-3721b8d5100d',
285
+ },
286
+ providerNationalIdUuid: {
287
+ _type: Type.String,
288
+ _description: 'The provider attribute type UUID for the national ID, used in SHA biometric authorization requests.',
289
+ _default: '3d152c97-2293-4a2b-802e-e0f1009b7b15',
290
+ },
291
+ nationalIdUUID: {
292
+ _type: Type.String,
293
+ _description: 'The patient identifier type UUID for the national ID, used for SHA eligibility checks.',
294
+ _default: '49af6cdc-7968-4abb-bf46-de10d7f4859f',
295
+ },
277
296
 
278
297
  anaesthetic: {
279
298
  _type: Type.Object,
@@ -478,6 +497,7 @@ export type ExpressWorkflowConfig = {
478
497
  inPatientVisitTypeUuid: string;
479
498
  defaultFacilityUrl: string; //done
480
499
  offlineVisitTypeUuid: string;
500
+ nationalIdUUID: string;
481
501
  showRecommendedVisitTypeTab: boolean;
482
502
  visitTypeResourceUrl: string;
483
503
  disableChangingVisitLocation: boolean;
@@ -491,6 +511,8 @@ export type ExpressWorkflowConfig = {
491
511
  showUpcomingAppointments: boolean; //done
492
512
  excludedVisitTypeUuids: Array<string>;
493
513
  isDHAWorkflow: boolean;
514
+ crIdentificationNumberUUID: string;
515
+ providerNationalIdUuid: string;
494
516
  };
495
517
  export interface ConfigObject {
496
518
  requireMaritalStatusOnAgeGreaterThanOrEqualTo: number;
package/src/index.ts CHANGED
@@ -1,7 +1,20 @@
1
- import { defineConfigSchema, getAsyncLifecycle, getSyncLifecycle, registerFeatureFlag } from '@openmrs/esm-framework';
1
+ import { defineConfigSchema, getAsyncLifecycle, registerFeatureFlag } from '@openmrs/esm-framework';
2
2
  import { configSchema } from './config-schema';
3
+ export * from './components/accounting';
4
+ export * from './components/admissions';
5
+ export * from './components/appointments';
6
+ export * from './components/consultation';
7
+ export * from './components/facility-dashboard';
8
+ export * from './components/laboratory';
9
+ export * from './components/mch';
10
+ export * from './components/pharmacy';
11
+ export * from './components/preauth';
12
+ export * from './components/procedures';
3
13
  export * from './components/procedures/procedure-queues';
4
-
14
+ export * from './components/radiology-and-imaging';
15
+ export * from './components/registration';
16
+ export * from './components/reports';
17
+ export * from './components/triage';
5
18
  const moduleName = '@kenyaemr/esm-express-workflow-app';
6
19
 
7
20
  const options = {
@@ -19,20 +32,6 @@ export function startupApp() {
19
32
  'Enable/Disable procedure queue in procedure pannel and procedure form',
20
33
  );
21
34
  }
22
- export * from './components/facility-dashboard';
23
- export * from './components/registration';
24
- export * from './components/triage';
25
- export * from './components/accounting';
26
- export * from './components/consultation';
27
- export * from './components/mch';
28
- export * from './components/reports';
29
- export * from './components/pharmacy';
30
- export * from './components/laboratory';
31
- export * from './components/radiology-and-imaging';
32
- export * from './components/procedures';
33
- export * from './components/admissions';
34
- export * from './components/preauth';
35
- export * from './components/appointments';
36
35
 
37
36
  export const root = getAsyncLifecycle(() => import('./root.component'), options);
38
37
  export const otpVerificationModal = getAsyncLifecycle(
@@ -51,7 +50,14 @@ export const patientSummaryDashboard = getAsyncLifecycle(
51
50
  export const customStartVisitOverflowMenuItem = getAsyncLifecycle(
52
51
  () => import('./components/registration/start-visit-form/overflow-menu-extension/overflow-menu-item.extension'),
53
52
  {
54
- featureName: 'patient-actions-slot-deceased-button',
53
+ featureName: 'patient-actions-slot-start-visit-button',
54
+ moduleName,
55
+ },
56
+ );
57
+ export const customStopVisitOverflowMenuItem = getAsyncLifecycle(
58
+ () => import('./components/registration/start-visit-form/overflow-menu-extension/custom-end-active-visit.extension'),
59
+ {
60
+ featureName: 'patient-actions-slot-stop-visit-button',
55
61
  moduleName,
56
62
  },
57
63
  );
@@ -61,6 +67,14 @@ export const visitFormWorkspace = getAsyncLifecycle(
61
67
  options,
62
68
  );
63
69
 
70
+ export const customEndVisitModal = getAsyncLifecycle(
71
+ () => import('./components/registration/end-visit-modal/end-visit-dialog.modal'),
72
+ {
73
+ featureName: 'custom-patient-actions-end-visit-modal',
74
+ moduleName,
75
+ },
76
+ );
77
+
64
78
  export const anaestheticFormWorkspace = getAsyncLifecycle(
65
79
  () => import('./components/anaesthetic/forms/anaesthetic-form.component'),
66
80
  options,
@@ -86,3 +100,8 @@ export const homepageDashboardLink = getAsyncLifecycle(
86
100
  ),
87
101
  options,
88
102
  );
103
+
104
+ export const procedureAndOrdersTab = getAsyncLifecycle(
105
+ () => import('./shared/tabs/create-tab-extension').then((mod) => ({ default: mod.createTabExtension() })),
106
+ options,
107
+ );
package/src/routes.json CHANGED
@@ -24,7 +24,7 @@
24
24
  "slot": "appointments-dashboard-slot",
25
25
  "title": "Appointments"
26
26
  }
27
- },
27
+ },
28
28
  {
29
29
  "name": "ewf-preauth-dashboard-link",
30
30
  "component": "preauthDashboardLink",
@@ -38,10 +38,8 @@
38
38
  "layoutMode": "anchored",
39
39
  "hideDashboardTitle": true
40
40
  }
41
-
42
41
  },
43
42
  {
44
-
45
43
  "name": "ewf-preauth-dashboard",
46
44
  "component": "preauthDashboard",
47
45
  "slot": "ewf-patient-chart-preauth-dashboard-slot",
@@ -332,13 +330,19 @@
332
330
  "online": true,
333
331
  "offline": true
334
332
  },
333
+ {
334
+ "name": "custom-stop-visit-overflow-menu-item",
335
+ "component": "customStopVisitOverflowMenuItem",
336
+ "online": true,
337
+ "offline": true
338
+ },
335
339
  {
336
340
  "name": "procedure-queues",
337
341
  "component": "procedureQueues",
338
342
  "online": true,
339
343
  "offline": false,
340
344
  "featureFlag": "procedureQueues",
341
- "slot":"procedure-orders-dashboard-slot"
345
+ "slot": "procedure-orders-dashboard-slot"
342
346
  },
343
347
  {
344
348
  "name": "procedure-form-extras",
@@ -349,13 +353,198 @@
349
353
  "featureFlag": "procedureQueues"
350
354
  },
351
355
  {
352
- "name": "admission-medication-summary",
353
- "component": "admissionsMedicationSummary",
354
- "slot": "inpatient-dashboard-tabs-slot",
355
- "online": true,
356
- "offline": false,
357
- "meta":{
358
- "title": "medicationSummary"
356
+ "name": "ewf-patient-summary-tab",
357
+ "component": "patientSummary",
358
+ "slot": "ewf-patient-chart-patient-summary-tabs-extension-slot",
359
+ "meta": {
360
+ "title": "patientSummaryTab",
361
+ "slot": "ewf-patient-summary-slot"
362
+ }
363
+ },
364
+ {
365
+ "name": "ewf-patient-vitals-tab",
366
+ "component": "patientVitals",
367
+ "slot": "ewf-patient-chart-patient-summary-tabs-extension-slot",
368
+ "meta": {
369
+ "title": "vitalsAndAnthropometric",
370
+ "slot": "ewf-vitals-slot"
371
+ }
372
+ },
373
+ {
374
+ "name": "ewf-patient-care-panel-tab",
375
+ "component": "carePanel",
376
+ "slot": "ewf-patient-chart-patient-summary-tabs-extension-slot",
377
+ "meta": {
378
+ "title": "carePanel",
379
+ "slot": "ewf-care-panel-slot"
380
+ }
381
+ },
382
+ {
383
+ "name": "ewf-patient-immunization-tab",
384
+ "component": "immunization",
385
+ "slot": "ewf-patient-chart-patient-summary-tabs-extension-slot",
386
+ "meta": {
387
+ "title": "immunizations",
388
+ "slot": "ewf-immunizations-slot"
389
+ }
390
+ },
391
+ {
392
+ "name": "ewf-patient-relationships-tab",
393
+ "component": "relationships",
394
+ "slot": "ewf-patient-chart-patient-summary-tabs-extension-slot",
395
+ "meta": {
396
+ "title": "relationships",
397
+ "slot": "ewf-relationships-slot"
398
+ }
399
+ },
400
+ {
401
+ "name": "ewf-patient-appointments-tab",
402
+ "component": "appointments",
403
+ "slot": "ewf-patient-chart-patient-summary-tabs-extension-slot",
404
+ "meta": {
405
+ "title": "appointments",
406
+ "slot": "ewf-appointments-slot"
407
+ }
408
+ },
409
+ {
410
+ "name": "ewf-patient-attachments-tab",
411
+ "component": "attachments",
412
+ "slot": "ewf-patient-chart-patient-summary-tabs-extension-slot",
413
+ "meta": {
414
+ "title": "attachments",
415
+ "slot": "ewf-attachments-slot"
416
+ }
417
+ },
418
+ {
419
+ "name": "ewf-patient-clinical-encounter-tab",
420
+ "component": "patientClinicalEncounter",
421
+ "slot": "clinical-encounter-tabs-slot",
422
+ "meta": {
423
+ "title": "clinicalEncounterTab",
424
+ "slot": "ewf-clinical-encounter-slot"
425
+ }
426
+ },
427
+ {
428
+ "name": "ewf-patient-visits-tab",
429
+ "component": "patientVisits",
430
+ "slot": "clinical-encounter-tabs-slot",
431
+ "meta": {
432
+ "title": "visits",
433
+ "slot": "ewf-visits-slot"
434
+ }
435
+ },
436
+ {
437
+ "name": "ewf-patient-special-clinics-tab",
438
+ "component": "specialClinics",
439
+ "slot": "clinical-encounter-tabs-slot",
440
+ "meta": {
441
+ "title": "specialClinics",
442
+ "slot": "ewf-special-clinics-slot"
443
+ }
444
+ },
445
+ {
446
+ "name": "ewf-clinical-notes-tab",
447
+ "component": "clinicalNotes",
448
+ "meta": {
449
+ "title": "clinicalNotes",
450
+ "slot": "ewf-clinical-notes-slot"
451
+ }
452
+ },
453
+ {
454
+ "name": "ewf-procedures-and-orders-tab",
455
+ "component": "proceduresAndOrders",
456
+ "meta": {
457
+ "title": "proceduresAndOrders",
458
+ "slot": "ewf-procedures-and-orders-slot"
459
+ }
460
+ },
461
+ {
462
+ "name": "ewf-pharmacy-orders-tab",
463
+ "component": "pharmacyOrdersTab",
464
+ "slot": "pharmacy-tabs-slot",
465
+ "meta": {
466
+ "title": "orders",
467
+ "slot": "ewf-orders-slot"
468
+ }
469
+ },
470
+ {
471
+ "name": "ewf-pharmacy-active-medication-tab",
472
+ "component": "pharmacyActiveMedicationsTab",
473
+ "slot": "pharmacy-tabs-slot",
474
+ "meta": {
475
+ "title": "activeMedications",
476
+ "slot": "ewf-active-medications-slot"
477
+ }
478
+ },
479
+ {
480
+ "name": "ewf-pharmacy-past-medication-tab",
481
+ "component": "pharmacyPastMedicationsTab",
482
+ "slot": "pharmacy-tabs-slot",
483
+ "meta": {
484
+ "title": "pastMedications",
485
+ "slot": "ewf-past-medications-slot"
486
+ }
487
+ },
488
+ {
489
+ "name": "ewf-patient-lab-orders-tab",
490
+ "component": "patientLaboratoryOrdersTab",
491
+ "slot": "patient-laboratory-tabs-slot",
492
+ "meta": {
493
+ "title": "orders"
494
+ }
495
+ },
496
+ {
497
+ "name": "ewf-patient-lab-order-results-tab",
498
+ "component": "patientLaboratoryOrdersResults",
499
+ "slot": "patient-laboratory-tabs-slot",
500
+ "meta": {
501
+ "title": "results",
502
+ "slot": "ewf-laboratory-results-slot",
503
+ "basePath": "laboratory"
504
+ }
505
+ },
506
+ {
507
+ "name": "ewf-patient-procedure-orders-tab",
508
+ "component": "patientProcedureOrdersTab",
509
+ "slot": "patient-procedure-tabs-slot",
510
+ "meta": {
511
+ "title": "orders"
512
+ }
513
+ },
514
+ {
515
+ "name": "ewf-patient-procedure-order-results-tab",
516
+ "component": "patientProcedureOrdersResults",
517
+ "slot": "patient-procedure-tabs-slot",
518
+ "meta": {
519
+ "title": "results",
520
+ "slot": "ewf-procedures-results-slot",
521
+ "basePath": "procedures"
522
+ }
523
+ },
524
+ {
525
+ "name": "ewf-patient-procedure-anaesthetic-tab",
526
+ "component": "patientProcedureAnaestheticTab",
527
+ "slot": "patient-procedure-tabs-slot",
528
+ "meta": {
529
+ "title": "anaesthetic"
530
+ }
531
+ },
532
+ {
533
+ "name": "ewf-patient-imaging-orders-tab",
534
+ "component": "patientImagingOrdersTab",
535
+ "slot": "patient-imaging-tabs-slot",
536
+ "meta": {
537
+ "title": "orders"
538
+ }
539
+ },
540
+ {
541
+ "name": "ewf-patient-imaging-order-results-tab",
542
+ "component": "patientImagingOrdersResults",
543
+ "slot": "patient-imaging-tabs-slot",
544
+ "meta": {
545
+ "title": "results",
546
+ "slot": "ewf-radiology-and-imaging-results-slot",
547
+ "basePath": "radiology-and-imaging"
359
548
  }
360
549
  }
361
550
  ],
@@ -379,7 +568,7 @@
379
568
  "workspaceWindows2": [
380
569
  {
381
570
  "name": "ewf-start-visit",
382
- "group": "ewf-patient-chart",
571
+ "group": "patient-chart",
383
572
  "width": "wider"
384
573
  },
385
574
  {
@@ -402,6 +591,10 @@
402
591
  {
403
592
  "component": "facilityDashboardAuthorizationModal",
404
593
  "name": "facility-dashboard-authorization-form-modal"
594
+ },
595
+ {
596
+ "name": "custom-end-visit-dialog",
597
+ "component": "customEndVisitModal"
405
598
  }
406
599
  ]
407
600
  }
@@ -134,6 +134,9 @@ export type OTPVerificationModalOptions = {
134
134
 
135
135
  /** Expected origin of eKYC postMessage events. Defaults to https://test.ekyc.pesaflow.com. */
136
136
  ekycOrigin?: string;
137
+
138
+ /** Whether this modal is being used to start or end a visit. Defaults to 'start'. Affects progress message text. */
139
+ visitAction?: 'start' | 'end';
137
140
  };
138
141
 
139
142
  /**