@openmrs/esm-billing-app 1.0.2-pre.78 → 1.0.2-pre.786

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 (203) hide show
  1. package/.eslintrc +16 -2
  2. package/README.md +54 -9
  3. package/__mocks__/bills.mock.ts +12 -0
  4. package/__mocks__/react-i18next.js +6 -5
  5. package/dist/1119.js +1 -1
  6. package/dist/1146.js +1 -2
  7. package/dist/1146.js.map +1 -1
  8. package/dist/1197.js +1 -1
  9. package/dist/1856.js +1 -0
  10. package/dist/1856.js.map +1 -0
  11. package/dist/2146.js +1 -1
  12. package/dist/2177.js +2 -0
  13. package/dist/2177.js.LICENSE.txt +9 -0
  14. package/dist/2177.js.map +1 -0
  15. package/dist/2524.js +1 -0
  16. package/dist/2524.js.map +1 -0
  17. package/dist/2690.js +1 -1
  18. package/dist/3041.js +1 -0
  19. package/dist/3041.js.map +1 -0
  20. package/dist/3099.js +1 -1
  21. package/dist/3584.js +1 -1
  22. package/dist/4055.js +1 -1
  23. package/dist/4132.js +1 -1
  24. package/dist/4225.js +1 -0
  25. package/dist/4225.js.map +1 -0
  26. package/dist/4300.js +1 -1
  27. package/dist/4335.js +1 -1
  28. package/dist/4618.js +1 -1
  29. package/dist/4652.js +1 -1
  30. package/dist/4724.js +1 -0
  31. package/dist/4724.js.map +1 -0
  32. package/dist/4739.js +1 -1
  33. package/dist/4739.js.map +1 -1
  34. package/dist/4944.js +1 -1
  35. package/dist/5173.js +1 -1
  36. package/dist/5241.js +1 -1
  37. package/dist/5422.js +1 -0
  38. package/dist/5422.js.map +1 -0
  39. package/dist/5442.js +1 -1
  40. package/dist/5661.js +1 -1
  41. package/dist/6022.js +1 -1
  42. package/dist/6468.js +1 -1
  43. package/dist/6540.js +1 -1
  44. package/dist/6540.js.map +1 -1
  45. package/dist/6606.js +1 -0
  46. package/dist/6606.js.map +1 -0
  47. package/dist/6679.js +1 -1
  48. package/dist/6840.js +1 -1
  49. package/dist/6859.js +1 -1
  50. package/dist/7097.js +1 -1
  51. package/dist/7159.js +1 -1
  52. package/dist/723.js +1 -1
  53. package/dist/7452.js +2 -0
  54. package/dist/7452.js.map +1 -0
  55. package/dist/7617.js +1 -1
  56. package/dist/795.js +1 -1
  57. package/dist/8163.js +1 -1
  58. package/dist/8349.js +1 -1
  59. package/dist/8618.js +1 -1
  60. package/dist/890.js +1 -1
  61. package/dist/8930.js +2 -0
  62. package/dist/{6525.js.LICENSE.txt → 8930.js.LICENSE.txt} +16 -4
  63. package/dist/8930.js.map +1 -0
  64. package/dist/9214.js +1 -1
  65. package/dist/942.js +1 -0
  66. package/dist/942.js.map +1 -0
  67. package/dist/9538.js +1 -1
  68. package/dist/9569.js +1 -1
  69. package/dist/961.js +1 -1
  70. package/dist/961.js.map +1 -1
  71. package/dist/986.js +1 -1
  72. package/dist/9879.js +1 -1
  73. package/dist/9895.js +1 -1
  74. package/dist/9900.js +1 -1
  75. package/dist/9913.js +1 -1
  76. package/dist/main.js +1 -1
  77. package/dist/main.js.map +1 -1
  78. package/dist/openmrs-esm-billing-app.js +1 -1
  79. package/dist/openmrs-esm-billing-app.js.buildmanifest.json +368 -262
  80. package/dist/openmrs-esm-billing-app.js.map +1 -1
  81. package/dist/routes.json +1 -1
  82. package/e2e/README.md +19 -18
  83. package/e2e/core/test.ts +1 -1
  84. package/e2e/fixtures/api.ts +1 -1
  85. package/e2e/specs/sample-test.spec.ts +0 -1
  86. package/e2e/support/github/Dockerfile +1 -1
  87. package/package.json +13 -10
  88. package/src/bill-history/bill-history.component.tsx +17 -25
  89. package/src/bill-history/bill-history.scss +4 -94
  90. package/src/bill-history/bill-history.test.tsx +37 -78
  91. package/src/bill-item-actions/bill-item-actions.scss +0 -4
  92. package/src/bill-item-actions/{edit-bill-item.component.tsx → edit-bill-item.modal.tsx} +100 -78
  93. package/src/bill-item-actions/edit-bill-item.test.tsx +116 -31
  94. package/src/billable-services/bill-waiver/bill-selection.component.tsx +2 -2
  95. package/src/billable-services/bill-waiver/patient-bills.component.tsx +3 -3
  96. package/src/billable-services/billable-service.resource.ts +17 -9
  97. package/src/billable-services/billable-services-home.component.tsx +1 -1
  98. package/src/billable-services/billable-services.component.tsx +142 -145
  99. package/src/billable-services/billable-services.scss +3 -0
  100. package/src/billable-services/billable-services.test.tsx +2 -45
  101. package/src/billable-services/cash-point/add-cash-point.modal.tsx +168 -0
  102. package/src/billable-services/cash-point/cash-point-configuration.component.tsx +18 -192
  103. package/src/billable-services/cash-point/cash-point-configuration.scss +1 -5
  104. package/src/billable-services/create-edit/add-billable-service.component.tsx +345 -298
  105. package/src/billable-services/create-edit/add-billable-service.scss +5 -6
  106. package/src/billable-services/create-edit/add-billable-service.test.tsx +37 -36
  107. package/src/billable-services/create-edit/edit-billable-service.modal.tsx +51 -0
  108. package/src/billable-services/payment-modes/add-payment-mode.modal.tsx +121 -0
  109. package/src/billable-services/payment-modes/delete-payment-mode.modal.tsx +72 -0
  110. package/src/billable-services/payment-modes/payment-modes-config.component.tsx +125 -0
  111. package/src/billable-services/{payyment-modes → payment-modes}/payment-modes-config.scss +5 -4
  112. package/src/billing-form/billing-checkin-form.component.tsx +2 -3
  113. package/src/billing-form/billing-checkin-form.test.tsx +97 -24
  114. package/src/billing-form/billing-form.component.tsx +216 -269
  115. package/src/billing-form/billing-form.scss +143 -0
  116. package/src/billing.resource.ts +16 -19
  117. package/src/bills-table/bills-table.test.tsx +98 -54
  118. package/src/config-schema.ts +52 -24
  119. package/src/dashboard.meta.ts +4 -2
  120. package/src/helpers/functions.ts +5 -4
  121. package/src/index.ts +17 -6
  122. package/src/invoice/invoice-table.component.tsx +35 -69
  123. package/src/invoice/invoice-table.scss +1 -5
  124. package/src/invoice/invoice-table.test.tsx +273 -62
  125. package/src/invoice/invoice.component.tsx +36 -29
  126. package/src/invoice/invoice.scss +7 -4
  127. package/src/invoice/invoice.test.tsx +324 -120
  128. package/src/invoice/payments/payment-form/payment-form.component.tsx +31 -29
  129. package/src/invoice/payments/payment-form/payment-form.scss +5 -6
  130. package/src/invoice/payments/payment-form/payment-form.test.tsx +216 -66
  131. package/src/invoice/payments/payment-history/payment-history.component.tsx +6 -4
  132. package/src/invoice/payments/payment-history/payment-history.test.tsx +9 -14
  133. package/src/invoice/payments/payments.component.tsx +53 -65
  134. package/src/invoice/payments/payments.test.tsx +282 -0
  135. package/src/invoice/payments/utils.ts +5 -23
  136. package/src/invoice/printable-invoice/print-receipt.component.tsx +3 -2
  137. package/src/invoice/printable-invoice/print-receipt.test.tsx +14 -25
  138. package/src/invoice/printable-invoice/printable-footer.component.tsx +2 -2
  139. package/src/invoice/printable-invoice/printable-footer.test.tsx +4 -13
  140. package/src/invoice/printable-invoice/printable-invoice-header.component.tsx +12 -11
  141. package/src/invoice/printable-invoice/printable-invoice-header.test.tsx +16 -14
  142. package/src/invoice/printable-invoice/printable-invoice.component.tsx +19 -33
  143. package/src/left-panel-link.test.tsx +1 -4
  144. package/src/metrics-cards/metrics-cards.test.tsx +18 -5
  145. package/src/modal/require-payment-modal.test.tsx +27 -22
  146. package/src/modal/{require-payment-modal.component.tsx → require-payment.modal.tsx} +17 -18
  147. package/src/routes.json +22 -2
  148. package/src/types/index.ts +26 -17
  149. package/translations/am.json +70 -21
  150. package/translations/ar.json +70 -21
  151. package/translations/ar_SY.json +70 -21
  152. package/translations/bn.json +75 -26
  153. package/translations/de.json +70 -21
  154. package/translations/en.json +70 -21
  155. package/translations/en_US.json +70 -21
  156. package/translations/es.json +70 -21
  157. package/translations/es_MX.json +70 -21
  158. package/translations/fr.json +83 -34
  159. package/translations/he.json +70 -21
  160. package/translations/hi.json +70 -21
  161. package/translations/hi_IN.json +70 -21
  162. package/translations/id.json +70 -21
  163. package/translations/it.json +105 -56
  164. package/translations/ka.json +70 -21
  165. package/translations/km.json +70 -21
  166. package/translations/ku.json +70 -21
  167. package/translations/ky.json +70 -21
  168. package/translations/lg.json +70 -21
  169. package/translations/ne.json +70 -21
  170. package/translations/pl.json +70 -21
  171. package/translations/pt.json +70 -21
  172. package/translations/pt_BR.json +70 -21
  173. package/translations/qu.json +70 -21
  174. package/translations/ro_RO.json +214 -165
  175. package/translations/ru_RU.json +70 -21
  176. package/translations/si.json +70 -21
  177. package/translations/sw.json +70 -21
  178. package/translations/sw_KE.json +70 -21
  179. package/translations/tr.json +70 -21
  180. package/translations/tr_TR.json +70 -21
  181. package/translations/uk.json +70 -21
  182. package/translations/uz.json +70 -21
  183. package/translations/uz@Latn.json +70 -21
  184. package/translations/uz_UZ.json +70 -21
  185. package/translations/vi.json +70 -21
  186. package/translations/zh.json +70 -21
  187. package/translations/zh_CN.json +125 -76
  188. package/dist/1146.js.LICENSE.txt +0 -21
  189. package/dist/2352.js +0 -1
  190. package/dist/2352.js.map +0 -1
  191. package/dist/246.js +0 -1
  192. package/dist/246.js.map +0 -1
  193. package/dist/6525.js +0 -2
  194. package/dist/6525.js.map +0 -1
  195. package/dist/8556.js +0 -2
  196. package/dist/8556.js.map +0 -1
  197. package/dist/8638.js +0 -1
  198. package/dist/8638.js.map +0 -1
  199. package/dist/9968.js +0 -1
  200. package/dist/9968.js.map +0 -1
  201. package/src/billable-services/payyment-modes/payment-modes-config.component.tsx +0 -280
  202. package/src/invoice/payments/payments.component.test.tsx +0 -121
  203. /package/dist/{8556.js.LICENSE.txt → 7452.js.LICENSE.txt} +0 -0
@@ -1,9 +1,16 @@
1
1
  import React from 'react';
2
2
  import userEvent from '@testing-library/user-event';
3
3
  import { screen, render } from '@testing-library/react';
4
- import { useBillableItems, useCashPoint, createPatientBill, usePaymentMethods } from './billing-form.resource';
4
+ import { useConfig } from '@openmrs/esm-framework';
5
+ import { type BillingConfig } from '../config-schema';
6
+ import { useBillableItems, useCashPoint, usePaymentMethods } from './billing-form.resource';
5
7
  import BillingCheckInForm from './billing-checkin-form.component';
6
8
 
9
+ const mockUseConfig = jest.mocked(useConfig<BillingConfig>);
10
+ const mockUseCashPoint = jest.mocked(useCashPoint);
11
+ const mockUseBillableItems = jest.mocked(useBillableItems);
12
+ const mockUsePaymentMethods = jest.mocked(usePaymentMethods);
13
+
7
14
  const mockCashPoints = [
8
15
  {
9
16
  uuid: '54065383-b4d4-42d2-af4d-d250a1fd2590',
@@ -16,6 +23,7 @@ const mockCashPoints = [
16
23
  const mockBillableItems = [
17
24
  {
18
25
  uuid: 'b37dddd6-4490-4bf7-b694-43bf19d04059',
26
+ name: 'Consultation',
19
27
  conceptUuid: '1926AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
20
28
  conceptName: 'Consultation billable item',
21
29
  hasExpiration: false,
@@ -25,9 +33,21 @@ const mockBillableItems = [
25
33
  categoryName: 'Non Drug',
26
34
  commonName: 'Consultation',
27
35
  acronym: 'CONSULT',
36
+ servicePrices: [
37
+ {
38
+ uuid: 'price-1',
39
+ name: 'Default',
40
+ price: '100.00',
41
+ paymentMode: {
42
+ uuid: '1c30ee58-82d4-4ea4-a8c1-4bf2f9dfc8cf',
43
+ name: 'Insurance',
44
+ },
45
+ },
46
+ ],
28
47
  },
29
48
  {
30
49
  uuid: 'b47dddd6-4490-4bf7-b694-43bf19d04059',
50
+ name: 'Lab Testing',
31
51
  conceptUuid: '1926AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
32
52
  conceptName: 'Lab Testing billable item',
33
53
  hasExpiration: false,
@@ -37,25 +57,65 @@ const mockBillableItems = [
37
57
  categoryName: 'Non Drug',
38
58
  commonName: 'Lab Testing',
39
59
  acronym: 'CONSULT',
60
+ servicePrices: [
61
+ {
62
+ uuid: 'price-2',
63
+ name: 'Default',
64
+ price: '500.00001',
65
+ paymentMode: {
66
+ uuid: '1c30ee58-82d4-4ea4-a8c1-4bf2f9dfc8cf',
67
+ name: 'Insurance',
68
+ },
69
+ },
70
+ ],
40
71
  },
41
72
  ];
42
73
 
43
- const mockUseCashPoint = useCashPoint as jest.MockedFunction<typeof useCashPoint>;
44
- const mockUseBillableItems = useBillableItems as jest.MockedFunction<typeof useBillableItems>;
45
- const mockCreatePatientBill = createPatientBill as jest.MockedFunction<typeof createPatientBill>;
46
- const mockusePaymentMethods = usePaymentMethods as jest.MockedFunction<typeof usePaymentMethods>;
74
+ const mockPaymentMethods = [
75
+ {
76
+ uuid: '1c30ee58-82d4-4ea4-a8c1-4bf2f9dfc8cf',
77
+ name: 'Insurance',
78
+ description: 'Insurance payment',
79
+ },
80
+ {
81
+ uuid: '2c30ee58-82d4-4ea4-a8c1-4bf2f9dfc8cf',
82
+ name: 'Cash',
83
+ description: 'Cash payment',
84
+ },
85
+ ];
47
86
 
48
87
  jest.mock('./billing-form.resource', () => ({
49
88
  useBillableItems: jest.fn(),
50
89
  useCashPoint: jest.fn(),
51
90
  createPatientBill: jest.fn(),
91
+ usePaymentMethods: jest.fn(),
52
92
  }));
53
93
 
54
94
  const testProps = { patientUuid: 'some-patient-uuid', setExtraVisitInfo: jest.fn() };
55
95
 
56
- xdescribe('BillingCheckInForm', () => {
96
+ describe('BillingCheckInForm', () => {
57
97
  beforeEach(() => {
58
98
  jest.resetAllMocks();
99
+ mockUseConfig.mockReturnValue({
100
+ patientCatergory: {
101
+ paymentDetails: 'fbc0702d-b4c9-4968-be63-af8ad3ad6239',
102
+ paymentMethods: '8553afa0-bdb9-4d3c-8a98-05fa9350aa85',
103
+ policyNumber: '3a988e33-a6c0-4b76-b924-01abb998944b',
104
+ insuranceScheme: 'aac48226-d143-4274-80e0-264db4e368ee',
105
+ patientCategory: '3b9dfac8-9e4d-11ee-8c90-0242ac120002',
106
+ formPayloadPending: '919b51c9-8e2e-468f-8354-181bf3e55786',
107
+ },
108
+ catergoryConcepts: {
109
+ payingDetails: '44b34972-6630-4e5a-a9f6-a6eb0f109650',
110
+ nonPayingDetails: 'f3fb2d88-cccd-422c-8766-be101ba7bd2e',
111
+ insuranceDetails: 'beac329b-f1dc-4a33-9e7c-d95821a137a6',
112
+ },
113
+ nonPayingPatientCategories: {
114
+ childUnder5: '1528AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
115
+ student: '159465AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
116
+ },
117
+ } as BillingConfig);
118
+ mockUsePaymentMethods.mockReturnValue({ paymentModes: mockPaymentMethods, isLoading: false, error: null });
59
119
  });
60
120
 
61
121
  test('should show the loading spinner while retrieving data', () => {
@@ -78,53 +138,66 @@ xdescribe('BillingCheckInForm', () => {
78
138
 
79
139
  test('should render the form correctly and generate the required payload', async () => {
80
140
  const user = userEvent.setup();
81
- mockUseCashPoint.mockReturnValue({ cashPoints: [], isLoading: false, error: null });
141
+ mockUseCashPoint.mockReturnValue({ cashPoints: mockCashPoints, isLoading: false, error: null });
82
142
  mockUseBillableItems.mockReturnValue({ lineItems: mockBillableItems, isLoading: false, error: null });
83
143
  renderBillingCheckinForm();
84
144
 
85
145
  const paymentTypeSelect = screen.getByRole('group', { name: 'Payment Details' });
86
146
  expect(paymentTypeSelect).toBeInTheDocument();
87
147
 
148
+ // Select "Paying" radio button
88
149
  const paymentTypeRadio = screen.getByRole('radio', { name: 'Paying' });
89
150
  expect(paymentTypeRadio).toBeInTheDocument();
90
151
  await user.click(paymentTypeRadio);
91
152
 
92
- const billiableSelect = screen.getByRole('combobox', { name: 'Billable service' });
93
- expect(billiableSelect).toBeInTheDocument();
94
- await user.click(screen.getByRole('combobox', { name: 'Billable service' }));
153
+ // Wait for payment methods dropdown to appear and select a payment method
154
+ const paymentMethodsDropdown = await screen.findByRole('combobox', { name: /Payment methods/i });
155
+ expect(paymentMethodsDropdown).toBeInTheDocument();
156
+ await user.click(paymentMethodsDropdown);
95
157
 
96
- await user.click(screen.getByText('Lab Testing'));
158
+ // Select "Insurance" payment method
159
+ const insuranceOption = await screen.findByText('Insurance');
160
+ await user.click(insuranceOption);
161
+
162
+ // Now select billable service
163
+ const billableSelect = screen.getByRole('combobox', { name: 'Billable service' });
164
+ expect(billableSelect).toBeInTheDocument();
165
+ await user.click(billableSelect);
166
+
167
+ // Click on Lab Testing option
168
+ const labTestingOption = await screen.findByText(/Lab Testing \(Default:500\.00001\)/);
169
+ await user.click(labTestingOption);
97
170
 
98
171
  expect(testProps.setExtraVisitInfo).toHaveBeenCalled();
99
172
  expect(testProps.setExtraVisitInfo).toHaveBeenCalledWith({
100
173
  createBillPayload: {
101
174
  lineItems: [
102
175
  {
103
- item: 'b47dddd6-4490-4bf7-b694-43bf19d04059',
176
+ billableService: 'b47dddd6-4490-4bf7-b694-43bf19d04059',
104
177
  quantity: 1,
105
- price: 500.00001,
178
+ price: '500.00001',
106
179
  priceName: 'Default',
107
- priceUuid: '',
180
+ priceUuid: 'price-2',
108
181
  lineItemOrder: 0,
109
182
  paymentStatus: 'PENDING',
110
183
  },
111
184
  ],
112
- cashPoint: '',
185
+ cashPoint: '54065383-b4d4-42d2-af4d-d250a1fd2590',
113
186
  patient: 'some-patient-uuid',
114
187
  status: 'PENDING',
115
188
  payments: [],
116
189
  },
117
190
  handleCreateExtraVisitInfo: expect.anything(),
118
- attributes: [
119
- {
120
- attributeType: 'caf2124f-00a9-4620-a250-efd8535afd6d',
191
+ attributes: expect.arrayContaining([
192
+ expect.objectContaining({
193
+ attributeType: 'fbc0702d-b4c9-4968-be63-af8ad3ad6239',
194
+ value: '44b34972-6630-4e5a-a9f6-a6eb0f109650',
195
+ }),
196
+ expect.objectContaining({
197
+ attributeType: '8553afa0-bdb9-4d3c-8a98-05fa9350aa85',
121
198
  value: '1c30ee58-82d4-4ea4-a8c1-4bf2f9dfc8cf',
122
- },
123
- {
124
- attributeType: '919b51c9-8e2e-468f-8354-181bf3e55786',
125
- value: true,
126
- },
127
- ],
199
+ }),
200
+ ]),
128
201
  });
129
202
  });
130
203
  });