@openmrs/esm-billing-app 1.0.2-pre.711 → 1.0.2-pre.721

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 (55) hide show
  1. package/dist/4300.js +1 -1
  2. package/dist/4724.js +1 -1
  3. package/dist/4724.js.map +1 -1
  4. package/dist/4739.js +1 -1
  5. package/dist/4739.js.map +1 -1
  6. package/dist/7452.js +1 -1
  7. package/dist/7452.js.map +1 -1
  8. package/dist/8930.js +2 -0
  9. package/dist/8930.js.map +1 -0
  10. package/dist/942.js +1 -0
  11. package/dist/942.js.map +1 -0
  12. package/dist/main.js +1 -1
  13. package/dist/main.js.map +1 -1
  14. package/dist/openmrs-esm-billing-app.js +1 -1
  15. package/dist/openmrs-esm-billing-app.js.buildmanifest.json +46 -70
  16. package/dist/openmrs-esm-billing-app.js.map +1 -1
  17. package/dist/routes.json +1 -1
  18. package/package.json +2 -2
  19. package/src/bill-item-actions/bill-item-actions.scss +0 -4
  20. package/src/bill-item-actions/{edit-bill-item.component.tsx → edit-bill-item.modal.tsx} +58 -60
  21. package/src/bill-item-actions/edit-bill-item.test.tsx +5 -5
  22. package/src/billable-services/bill-waiver/bill-selection.component.tsx +2 -2
  23. package/src/billable-services/billable-services-home.component.tsx +1 -1
  24. package/src/billable-services/billable-services.component.tsx +110 -128
  25. package/src/billable-services/billable-services.scss +3 -0
  26. package/src/billable-services/billable-services.test.tsx +1 -3
  27. package/src/billable-services/cash-point/add-cash-point.modal.tsx +168 -0
  28. package/src/billable-services/cash-point/cash-point-configuration.component.tsx +16 -191
  29. package/src/billable-services/cash-point/cash-point-configuration.scss +1 -5
  30. package/src/billable-services/create-edit/add-billable-service.component.tsx +23 -26
  31. package/src/billable-services/create-edit/add-billable-service.scss +2 -5
  32. package/src/billable-services/create-edit/edit-billable-service.modal.tsx +50 -0
  33. package/src/billable-services/payment-modes/add-payment-mode.modal.tsx +121 -0
  34. package/src/billable-services/payment-modes/delete-payment-mode.modal.tsx +72 -0
  35. package/src/billable-services/payment-modes/payment-modes-config.component.tsx +125 -0
  36. package/src/billable-services/{payyment-modes → payment-modes}/payment-modes-config.scss +5 -1
  37. package/src/billing-form/billing-checkin-form.component.tsx +2 -2
  38. package/src/billing-form/billing-form.component.tsx +2 -2
  39. package/src/helpers/functions.ts +5 -4
  40. package/src/index.ts +16 -6
  41. package/src/invoice/invoice-table.component.tsx +9 -2
  42. package/src/invoice/invoice.component.tsx +5 -1
  43. package/src/invoice/printable-invoice/print-receipt.component.tsx +2 -1
  44. package/src/modal/require-payment-modal.test.tsx +1 -1
  45. package/src/modal/{require-payment-modal.component.tsx → require-payment.modal.tsx} +17 -18
  46. package/src/routes.json +22 -2
  47. package/translations/en.json +12 -10
  48. package/dist/2352.js +0 -1
  49. package/dist/2352.js.map +0 -1
  50. package/dist/8638.js +0 -1
  51. package/dist/8638.js.map +0 -1
  52. package/dist/929.js +0 -2
  53. package/dist/929.js.map +0 -1
  54. package/src/billable-services/payyment-modes/payment-modes-config.component.tsx +0 -280
  55. /package/dist/{929.js.LICENSE.txt → 8930.js.LICENSE.txt} +0 -0
@@ -0,0 +1,125 @@
1
+ import React, { useState, useEffect, useCallback } from 'react';
2
+ import {
3
+ Button,
4
+ DataTable,
5
+ OverflowMenu,
6
+ OverflowMenuItem,
7
+ Table,
8
+ TableBody,
9
+ TableCell,
10
+ TableContainer,
11
+ TableHead,
12
+ TableHeader,
13
+ TableRow,
14
+ } from '@carbon/react';
15
+ import { Add } from '@carbon/react/icons';
16
+ import { useTranslation } from 'react-i18next';
17
+ import { showSnackbar, openmrsFetch, restBaseUrl, showModal, getCoreTranslation } from '@openmrs/esm-framework';
18
+ import { CardHeader } from '@openmrs/esm-patient-common-lib';
19
+ import styles from './payment-modes-config.scss';
20
+
21
+ const PaymentModesConfig: React.FC = () => {
22
+ const { t } = useTranslation();
23
+ const [paymentModes, setPaymentModes] = useState([]);
24
+
25
+ const fetchPaymentModes = useCallback(async () => {
26
+ try {
27
+ const response = await openmrsFetch(`${restBaseUrl}/billing/paymentMode?v=full`);
28
+ setPaymentModes(response.data.results || []);
29
+ } catch (err) {
30
+ showSnackbar({
31
+ title: getCoreTranslation('error'),
32
+ subtitle: t('errorFetchingPaymentModes', 'An error occurred while fetching payment modes.'),
33
+ kind: 'error',
34
+ isLowContrast: false,
35
+ });
36
+ }
37
+ }, [t]);
38
+
39
+ useEffect(() => {
40
+ fetchPaymentModes();
41
+ }, [fetchPaymentModes]);
42
+
43
+ const handleAddPaymentMode = () => {
44
+ showModal('add-payment-mode-modal', {
45
+ onPaymentModeAdded: fetchPaymentModes,
46
+ });
47
+ };
48
+
49
+ const handleDeletePaymentMode = (paymentMode) => {
50
+ showModal('delete-payment-mode-modal', {
51
+ paymentModeUuid: paymentMode.uuid,
52
+ paymentModeName: paymentMode.name,
53
+ onPaymentModeDeleted: fetchPaymentModes,
54
+ });
55
+ };
56
+
57
+ const rowData = paymentModes.map((mode) => ({
58
+ id: mode.uuid,
59
+ name: mode.name,
60
+ description: mode.description || '--',
61
+ }));
62
+
63
+ const headerData = [
64
+ { key: 'name', header: t('name', 'Name') },
65
+ { key: 'description', header: t('description', 'Description') },
66
+ { key: 'actions', header: getCoreTranslation('actions') },
67
+ ];
68
+
69
+ return (
70
+ <div className={styles.container}>
71
+ <div className={styles.card}>
72
+ <CardHeader title={t('paymentModeHistory', 'Payment Mode History')}>
73
+ <Button renderIcon={Add} onClick={handleAddPaymentMode} kind="ghost">
74
+ {t('addNewPaymentMode', 'Add New Payment Mode')}
75
+ </Button>
76
+ </CardHeader>
77
+ <div className={styles.historyContainer}>
78
+ <DataTable rows={rowData} headers={headerData} isSortable size="lg">
79
+ {({ rows, headers, getTableProps, getHeaderProps, getRowProps }) => (
80
+ <TableContainer>
81
+ <Table className={styles.table} {...getTableProps()}>
82
+ <TableHead>
83
+ <TableRow>
84
+ {headers.map((header) => (
85
+ <TableHeader key={header.key} {...getHeaderProps({ header })}>
86
+ {header.header}
87
+ </TableHeader>
88
+ ))}
89
+ </TableRow>
90
+ </TableHead>
91
+ <TableBody>
92
+ {rows.map((row) => (
93
+ <TableRow key={row.id} {...getRowProps({ row })}>
94
+ {row.cells.map((cell) =>
95
+ cell.info.header !== 'actions' ? (
96
+ <TableCell key={cell.id}>{cell.value}</TableCell>
97
+ ) : (
98
+ <TableCell key={cell.id}>
99
+ <OverflowMenu>
100
+ <OverflowMenuItem
101
+ className={styles.menuItem}
102
+ itemText={getCoreTranslation('delete')}
103
+ onClick={() => {
104
+ const selected = paymentModes.find((p) => p.uuid === row.id);
105
+ handleDeletePaymentMode(selected);
106
+ }}
107
+ />
108
+ </OverflowMenu>
109
+ </TableCell>
110
+ ),
111
+ )}
112
+ </TableRow>
113
+ ))}
114
+ </TableBody>
115
+ </Table>
116
+ </TableContainer>
117
+ )}
118
+ </DataTable>
119
+ </div>
120
+ </div>
121
+ </div>
122
+ );
123
+ };
124
+
125
+ export default PaymentModesConfig;
@@ -20,4 +20,8 @@
20
20
  .table {
21
21
  width: 100%;
22
22
  table-layout: auto;
23
- }
23
+ }
24
+
25
+ .menuItem {
26
+ max-width: none;
27
+ }
@@ -1,7 +1,7 @@
1
1
  import React, { useCallback, useState } from 'react';
2
2
  import { Dropdown, InlineLoading, InlineNotification } from '@carbon/react';
3
3
  import { useTranslation } from 'react-i18next';
4
- import { showSnackbar } from '@openmrs/esm-framework';
4
+ import { showSnackbar, getCoreTranslation } from '@openmrs/esm-framework';
5
5
  import { useCashPoint, useBillableItems, createPatientBill } from './billing-form.resource';
6
6
  import VisitAttributesForm from './visit-attributes/visit-attributes-form.component';
7
7
  import styles from './billing-checkin-form.scss';
@@ -73,7 +73,7 @@ const BillingCheckInForm: React.FC<BillingCheckInFormProps> = ({ patientUuid, se
73
73
  return (
74
74
  <InlineLoading
75
75
  status="active"
76
- iconDescription={t('loading', 'Loading')}
76
+ iconDescription={getCoreTranslation('loading')}
77
77
  description={t('loadingBillingServices', 'Loading billing services...')}
78
78
  />
79
79
  );
@@ -17,7 +17,7 @@ import {
17
17
  TableCell,
18
18
  } from '@carbon/react';
19
19
  import { TrashCan } from '@carbon/react/icons';
20
- import { useConfig, useLayoutType, showSnackbar } from '@openmrs/esm-framework';
20
+ import { useConfig, useLayoutType, showSnackbar, getCoreTranslation } from '@openmrs/esm-framework';
21
21
  import { processBillItems, useBillableServices } from '../billing.resource';
22
22
  import { calculateTotalAmount, convertToCurrency } from '../helpers/functions';
23
23
  import type { BillingConfig } from '../config-schema';
@@ -124,7 +124,7 @@ const BillingForm: React.FC<BillingFormProps> = ({ patientUuid, closeWorkspace }
124
124
  <Form className={styles.form}>
125
125
  <div className={styles.grid}>
126
126
  {isLoading ? (
127
- <InlineLoading description={t('loading', 'Loading') + '...'} />
127
+ <InlineLoading description={getCoreTranslation('loading') + '...'} />
128
128
  ) : error ? (
129
129
  <InlineNotification
130
130
  kind="error"
@@ -1,3 +1,4 @@
1
+ import { getCoreTranslation } from '@openmrs/esm-framework';
1
2
  import { type Payment, type LineItem } from '../types';
2
3
 
3
4
  // amount already paid
@@ -51,13 +52,13 @@ export const convertToCurrency = (amountToConvert: number, currencyType?: string
51
52
  export const getGender = (gender: string, t) => {
52
53
  switch (gender) {
53
54
  case 'male':
54
- return t('male', 'Male');
55
+ return getCoreTranslation('male');
55
56
  case 'female':
56
- return t('female', 'Female');
57
+ return getCoreTranslation('female');
57
58
  case 'other':
58
- return t('other', 'Other');
59
+ return getCoreTranslation('other');
59
60
  case 'unknown':
60
- return t('unknown', 'Unknown');
61
+ return getCoreTranslation('unknown');
61
62
  default:
62
63
  return gender;
63
64
  }
package/src/index.ts CHANGED
@@ -3,12 +3,17 @@ import { createDashboardLink } from '@openmrs/esm-patient-common-lib';
3
3
  import { createLeftPanelLink } from './left-panel-link.component';
4
4
  import { dashboardMeta } from './dashboard.meta';
5
5
  import { defineConfigSchema, getAsyncLifecycle, getSyncLifecycle } from '@openmrs/esm-framework';
6
+ import AddCashPointModal from './billable-services/cash-point/add-cash-point.modal';
7
+ import AddPaymentModeModal from './billable-services/payment-modes/add-payment-mode.modal';
6
8
  import appMenu from './billable-services/billable-services-menu-item/item.component';
7
9
  import BillableServiceHome from './billable-services/billable-services-home.component';
8
10
  import BillableServicesCardLink from './billable-services-admin-card-link.component';
9
11
  import BillHistory from './bill-history/bill-history.component';
10
12
  import BillingCheckInForm from './billing-form/billing-checkin-form.component';
11
- import RequirePaymentModal from './modal/require-payment-modal.component';
13
+ import DeletePaymentModeModal from './billable-services/payment-modes/delete-payment-mode.modal';
14
+ import EditBillableServiceModal from './billable-services/create-edit/edit-billable-service.modal';
15
+ import EditBillLineItemModal from './bill-item-actions/edit-bill-item.modal';
16
+ import RequirePaymentModal from './modal/require-payment.modal';
12
17
  import RootComponent from './root.component';
13
18
  import ServiceMetrics from './billable-services/dashboard/service-metrics.component';
14
19
  import VisitAttributeTags from './invoice/payments/visit-tags/visit-attribute.component';
@@ -53,16 +58,21 @@ export const billingPatientSummary = getSyncLifecycle(BillHistory, options);
53
58
 
54
59
  export const requirePaymentModal = getSyncLifecycle(RequirePaymentModal, options);
55
60
 
61
+ export const addPaymentModeModal = getSyncLifecycle(AddPaymentModeModal, options);
62
+
63
+ export const deletePaymentModeModal = getSyncLifecycle(DeletePaymentModeModal, options);
64
+
65
+ export const addCashPointModal = getSyncLifecycle(AddCashPointModal, options);
66
+
67
+ export const editBillableServiceModal = getSyncLifecycle(EditBillableServiceModal, options);
68
+
69
+ export const editBillLineItemModal = getSyncLifecycle(EditBillLineItemModal, options);
70
+
56
71
  export const root = getSyncLifecycle(RootComponent, options);
57
72
 
58
73
  export const serviceMetrics = getSyncLifecycle(ServiceMetrics, options);
59
74
 
60
75
  export const visitAttributeTags = getSyncLifecycle(VisitAttributeTags, options);
61
76
 
62
- export const editBillLineItemDialog = getAsyncLifecycle(() => import('./bill-item-actions/edit-bill-item.component'), {
63
- featureName: 'edit bill line item',
64
- moduleName,
65
- });
66
-
67
77
  // t('billingForm', 'Billing form')
68
78
  export const billingFormWorkspace = getAsyncLifecycle(() => import('./billing-form/billing-form.component'), options);
@@ -18,7 +18,14 @@ import {
18
18
  type DataTableRow,
19
19
  } from '@carbon/react';
20
20
  import { Edit } from '@carbon/react/icons';
21
- import { isDesktop, showModal, useConfig, useDebounce, useLayoutType } from '@openmrs/esm-framework';
21
+ import {
22
+ isDesktop,
23
+ showModal,
24
+ useConfig,
25
+ useDebounce,
26
+ useLayoutType,
27
+ getCoreTranslation,
28
+ } from '@openmrs/esm-framework';
22
29
  import { type LineItem, type MappedBill } from '../types';
23
30
  import { convertToCurrency } from '../helpers';
24
31
  import type { BillingConfig } from '../config-schema';
@@ -61,7 +68,7 @@ const InvoiceTable: React.FC<InvoiceTableProps> = ({ bill, isLoadingBill }) => {
61
68
  { header: t('quantity', 'Quantity'), key: 'quantity', width: 15 },
62
69
  { header: t('price', 'Price'), key: 'price', width: 24 },
63
70
  { header: t('total', 'Total'), key: 'total', width: 15 },
64
- { header: t('actions', 'Actions'), key: 'actionButton' },
71
+ { header: getCoreTranslation('actions'), key: 'actionButton' },
65
72
  ];
66
73
 
67
74
  const handleSelectBillItem = useCallback(
@@ -52,7 +52,11 @@ const Invoice: React.FC = () => {
52
52
  onAfterPrint: handleAfterPrint,
53
53
  preserveAfterPrint: false,
54
54
  onPrintError: (_, error) =>
55
- showSnackbar({ title: t('printError', 'Error printing invoice'), kind: 'error', subtitle: error.message }),
55
+ showSnackbar({
56
+ title: t('errorPrintingInvoice', 'Error printing invoice'),
57
+ kind: 'error',
58
+ subtitle: error.message,
59
+ }),
56
60
  });
57
61
 
58
62
  useEffect(() => {
@@ -2,6 +2,7 @@ import React, { useState } from 'react';
2
2
  import { Button } from '@carbon/react';
3
3
  import { Printer } from '@carbon/react/icons';
4
4
  import { useTranslation } from 'react-i18next';
5
+ import { getCoreTranslation } from '@openmrs/esm-framework';
5
6
  import { apiBasePath } from '../../constants';
6
7
  import styles from './print-receipt.scss';
7
8
 
@@ -36,7 +37,7 @@ const PrintReceipt: React.FC<PrintReceiptProps> = ({ billId }) => {
36
37
  renderIcon={(props) => <Printer size={24} {...props} />}
37
38
  onClick={handlePrintReceiptClick}
38
39
  disabled={isRedirecting}>
39
- {isRedirecting ? t('loading', 'Loading') : t('printReceipt', 'Print receipt')}
40
+ {isRedirecting ? getCoreTranslation('loading') : t('printReceipt', 'Print receipt')}
40
41
  </Button>
41
42
  );
42
43
  };
@@ -5,7 +5,7 @@ import { getDefaultsFromConfigSchema, useConfig } from '@openmrs/esm-framework';
5
5
  import { useBills } from '../billing.resource';
6
6
  import { type MappedBill } from '../types';
7
7
  import { configSchema, type BillingConfig } from '../config-schema';
8
- import RequirePaymentModal from './require-payment-modal.component';
8
+ import RequirePaymentModal from './require-payment.modal';
9
9
 
10
10
  const mockUseConfig = jest.mocked(useConfig<BillingConfig>);
11
11
  const mockUseBills = jest.mocked<typeof useBills>(useBills);
@@ -12,7 +12,7 @@ import {
12
12
  StructuredListRow,
13
13
  StructuredListWrapper,
14
14
  } from '@carbon/react';
15
- import { useConfig } from '@openmrs/esm-framework';
15
+ import { getCoreTranslation, useConfig } from '@openmrs/esm-framework';
16
16
  import { useBills } from '../billing.resource';
17
17
  import { convertToCurrency } from '../helpers';
18
18
  import styles from './require-payment.scss';
@@ -29,22 +29,23 @@ const RequirePaymentModal: React.FC<RequirePaymentModalProps> = ({ closeModal, p
29
29
  const lineItems = bills.filter((bill) => bill?.status !== 'PAID').flatMap((bill) => bill?.lineItems);
30
30
 
31
31
  return (
32
- <div>
32
+ <>
33
33
  <ModalHeader closeModal={closeModal} title={t('patientBillingAlert', 'Patient Billing Alert')} />
34
34
  <ModalBody>
35
35
  <p className={styles.bodyShort02}>
36
36
  {t(
37
37
  'billPaymentRequiredMessage',
38
- 'The current patient has pending bill. Advice patient to settle bill before receiving services',
38
+ 'The current patient has a pending bill. Advise the patient to settle the bill before receiving services',
39
39
  )}
40
40
  </p>
41
41
  {isLoading && (
42
42
  <InlineLoading
43
43
  status="active"
44
44
  iconDescription="Loading"
45
- description={t('inlineLoading', 'Loading bill items...')}
45
+ description={t('loadingBillItems', 'Loading bill items') + '...'}
46
46
  />
47
47
  )}
48
+
48
49
  <StructuredListWrapper isCondensed>
49
50
  <StructuredListHead>
50
51
  <StructuredListRow head>
@@ -55,30 +56,28 @@ const RequirePaymentModal: React.FC<RequirePaymentModalProps> = ({ closeModal, p
55
56
  </StructuredListRow>
56
57
  </StructuredListHead>
57
58
  <StructuredListBody>
58
- {lineItems.map((lineItem) => {
59
- return (
60
- <StructuredListRow>
61
- <StructuredListCell>{lineItem.billableService || lineItem.item}</StructuredListCell>
62
- <StructuredListCell>{lineItem.quantity}</StructuredListCell>
63
- <StructuredListCell>{convertToCurrency(lineItem.price, defaultCurrency)}</StructuredListCell>
64
- <StructuredListCell>
65
- {convertToCurrency(lineItem.quantity * lineItem.price, defaultCurrency)}
66
- </StructuredListCell>
67
- </StructuredListRow>
68
- );
69
- })}
59
+ {lineItems.map((lineItem) => (
60
+ <StructuredListRow key={lineItem.uuid}>
61
+ <StructuredListCell>{lineItem.billableService || lineItem.item}</StructuredListCell>
62
+ <StructuredListCell>{lineItem.quantity}</StructuredListCell>
63
+ <StructuredListCell>{convertToCurrency(lineItem.price, defaultCurrency)}</StructuredListCell>
64
+ <StructuredListCell>
65
+ {convertToCurrency(lineItem.quantity * lineItem.price, defaultCurrency)}
66
+ </StructuredListCell>
67
+ </StructuredListRow>
68
+ ))}
70
69
  </StructuredListBody>
71
70
  </StructuredListWrapper>
72
71
  </ModalBody>
73
72
  <ModalFooter>
74
73
  <Button kind="secondary" onClick={closeModal}>
75
- {t('cancel', 'Cancel')}
74
+ {getCoreTranslation('cancel')}
76
75
  </Button>
77
76
  <Button kind="primary" onClick={closeModal}>
78
77
  {t('ok', 'OK')}
79
78
  </Button>
80
79
  </ModalFooter>
81
- </div>
80
+ </>
82
81
  );
83
82
  };
84
83
 
package/src/routes.json CHANGED
@@ -81,12 +81,32 @@
81
81
  },
82
82
  {
83
83
  "name": "edit-bill-line-item-dialog",
84
- "component": "editBillLineItemDialog",
84
+ "component": "editBillLineItemModal",
85
85
  "online": true,
86
86
  "offline": true
87
87
  }
88
88
  ],
89
89
  "modals": [
90
+ {
91
+ "name": "add-cash-point-modal",
92
+ "component": "addCashPointModal"
93
+ },
94
+ {
95
+ "name": "add-payment-mode-modal",
96
+ "component": "addPaymentModeModal"
97
+ },
98
+ {
99
+ "name": "delete-payment-mode-modal",
100
+ "component": "deletePaymentModeModal"
101
+ },
102
+ {
103
+ "name": "edit-bill-item-modal",
104
+ "component": "editBillLineItemModal"
105
+ },
106
+ {
107
+ "name": "edit-billable-service-modal",
108
+ "component": "editBillableServiceModal"
109
+ },
90
110
  {
91
111
  "name": "require-billing-modal",
92
112
  "component": "requirePaymentModal"
@@ -107,4 +127,4 @@
107
127
  "description": "This feature introduces navigation links on the patient chart and home page to allow accessing the billing module features"
108
128
  }
109
129
  ]
110
- }
130
+ }
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "action": "Action",
3
- "actions": "Actions",
4
3
  "addBill": "Add bill item(s)",
5
4
  "addBillableServices": "Add Billable Services",
6
5
  "addCashPoint": "Add Cash Point",
@@ -18,6 +17,7 @@
18
17
  "amountToWaiveLabel": "Amount to Waive",
19
18
  "billableService": "Billable service",
20
19
  "billableServices": "Billable Services",
20
+ "billableServices__lower": "billable services",
21
21
  "billAmount": "Bill amount",
22
22
  "billCode": "Bill code",
23
23
  "billedItems": "Billed Items",
@@ -35,7 +35,7 @@
35
35
  "billName": " {{billName}} ",
36
36
  "billPayment": "Bill payment",
37
37
  "billPaymentError": "Bill payment error",
38
- "billPaymentRequiredMessage": "The current patient has pending bill. Advice patient to settle bill before receiving services",
38
+ "billPaymentRequiredMessage": "The current patient has a pending bill. Advise the patient to settle the bill before receiving services",
39
39
  "billProcessingError": "Bill processing error",
40
40
  "billProcessingSuccess": "Bill processing has been successful",
41
41
  "billServicesManagement": "Bill services management",
@@ -44,12 +44,12 @@
44
44
  "billWaiver": "Bill waiver",
45
45
  "billWaiverError": "Bill waiver failed {{error}}",
46
46
  "billWaiverSuccess": "Bill waiver successful",
47
- "cancel": "Cancel",
48
47
  "cashPointConfig": "Cash Point Config",
49
48
  "cashPointHistory": "Cash Point History",
50
49
  "cashPointLocation": "Cash Point Location",
51
50
  "cashPointName": "Cash Point Name",
52
51
  "cashPointNamePlaceholder": "e.g., Pharmacy Cash Point",
52
+ "cashPointNameRequired": "Cash Point Name is required",
53
53
  "cashPointSaved": "Cash point was successfully saved.",
54
54
  "cashPointUuid": "Cash Point UUID",
55
55
  "cashPointUuidPlaceholder": "Enter UUID",
@@ -60,15 +60,13 @@
60
60
  "date": "Date",
61
61
  "dateAndTime": "Date And Time",
62
62
  "dateOfPayment": "Date of payment",
63
- "delete": "Delete",
64
63
  "deletePaymentMode": "Delete Payment Mode",
64
+ "deleting": "Deleting",
65
65
  "description": "Description",
66
66
  "descriptionPlaceholder": "e.g., Used for all cash transactions",
67
67
  "discard": "Discard",
68
68
  "discount": "Discount",
69
69
  "discountAmount": "Discount Amount",
70
- "duplicateCashPointError": "A cash point with the same name or UUID already exists. Please use a unique name and UUID.",
71
- "duplicatePaymentModeError": "A payment mode with the same name already exists. Please create another payment mode",
72
70
  "editBillableService": "Edit billable service",
73
71
  "editBillableServices": "Edit Billable Services",
74
72
  "editBillLineItem": "Edit bill line item?",
@@ -83,6 +81,7 @@
83
81
  "errorFetchingPaymentModes": "An error occurred while fetching payment modes.",
84
82
  "errorLoadingBillServices": "Error loading bill services",
85
83
  "errorLoadingPaymentModes": "Payment modes error",
84
+ "errorPrintingInvoice": "Error printing invoice",
86
85
  "errorSavingCashPoint": "An error occurred while saving the cash point.",
87
86
  "errorSavingPaymentMode": "An error occurred while saving the payment mode.",
88
87
  "filterBy": "Filter by",
@@ -90,8 +89,8 @@
90
89
  "grandTotal": "Grand total",
91
90
  "home": "Home",
92
91
  "identifier": "Identifier",
93
- "inlineLoading": "Loading bill items...",
94
92
  "insuranceScheme": "Insurance scheme",
93
+ "invalidUuidFormat": "Invalid UUID format",
95
94
  "invalidWaiverAmount": "Invalid waiver amount",
96
95
  "inventoryItem": "Inventory item",
97
96
  "invoice": "Invoice",
@@ -106,8 +105,11 @@
106
105
  "loading": "Loading data...",
107
106
  "loadingBillInfo": "Loading bill information...",
108
107
  "loadingBillingServices": "Loading billing services...",
108
+ "loadingBillItems": "Loading bill items",
109
+ "loadingData": "Loading data",
109
110
  "loadingDescription": "Loading",
110
111
  "location": "Select Location",
112
+ "locationRequired": "Location is required",
111
113
  "manageBillableServices": "Manage billable services",
112
114
  "name": "Name",
113
115
  "nextPage": "Next page",
@@ -116,7 +118,6 @@
116
118
  "noMatchingItemsToDisplay": "No matching items to display",
117
119
  "noMatchingServicesToDisplay": "No matching services to display",
118
120
  "noResultsFor": "No results for",
119
- "noServicesToDisplay": "There are no services to display",
120
121
  "number": "No",
121
122
  "ok": "OK",
122
123
  "patientBillingAlert": "Patient Billing Alert",
@@ -131,6 +132,7 @@
131
132
  "paymentModeHistory": "Payment Mode History",
132
133
  "paymentModeName": "Payment Mode Name",
133
134
  "paymentModeNamePlaceholder": "e.g., Cash, Credit Card",
135
+ "paymentModeNameRequired": "Payment Mode Name is required",
134
136
  "paymentModeSaved": "Payment mode was successfully saved.",
135
137
  "paymentModesConfig": "Payment Modes Config",
136
138
  "payments": "Payments",
@@ -142,13 +144,11 @@
142
144
  "priceIsRequired": "Price is required",
143
145
  "prices": "Prices",
144
146
  "printBill": "Print bill",
145
- "printError": "Error printing invoice",
146
147
  "printReceipt": "Print receipt",
147
148
  "processPayment": "Process Payment",
148
149
  "quantity": "Quantity",
149
150
  "quantityRequired": "Quantity is required",
150
151
  "referenceNumber": "Reference number",
151
- "save": "Save",
152
152
  "saveAndClose": "Save and close",
153
153
  "saveBill": "Save Bill",
154
154
  "saving": "Saving",
@@ -178,8 +178,10 @@
178
178
  "totalAmount": "Total Amount",
179
179
  "totalTendered": "Total Tendered",
180
180
  "unitPrice": "Unit price",
181
+ "unitPriceHelperText": "This is the unit price for this item.",
181
182
  "updatedSuccessfully": "Billable service updated successfully",
182
183
  "uuid": "UUID",
184
+ "uuidRequired": "UUID is required",
183
185
  "visitTime": "Visit time",
184
186
  "waiverForm": "Waiver form"
185
187
  }