@ampath/esm-dha-workflow-app 4.0.0-next.333 → 4.0.0-next.337
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.
- package/dist/203.js +1 -1
- package/dist/203.js.map +1 -1
- package/dist/347.js +1 -1
- package/dist/347.js.map +1 -1
- package/dist/4986.js +1 -1
- package/dist/4986.js.map +1 -1
- package/dist/7240.js +1 -1
- package/dist/7240.js.map +1 -1
- package/dist/874.js +1 -1
- package/dist/874.js.map +1 -1
- package/dist/esm-dha-workflow-app.js.buildmanifest.json +15 -15
- package/dist/routes.json +1 -1
- package/package.json +1 -1
- package/src/billing/dashboard/v2/active-visits/active-visits.component.tsx +1 -1
- package/src/billing/dashboard/v2/active-visits.component.tsx +1 -1
- package/src/billing/dashboard/v3/active-visits/active-visits.component.tsx +1 -1
- package/src/billing/dashboard/v3/claim-visits/claim-visit-details/claim-visit-details.component.scss +11 -18
- package/src/billing/dashboard/v3/claim-visits/claim-visit-details/claim-visit-details.component.tsx +11 -1
- package/src/billing/dashboard/v3/patient-bill-details/bill-details/bill-details.tsx +85 -55
- package/src/billing/dashboard/v3/patient-bill-details/claim-details/patient-claim-details.component.tsx +8 -0
- package/src/billing/dashboard/v3/patient-bill-details/patient-bill-details.tsx +49 -40
- package/src/billing/dashboard/v3/patient-bill-details/visit-diagnosis-details/visit-diagnosis-details.component.tsx +68 -56
- package/src/registry/types/index.ts +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import React, { useMemo, useState } from 'react';
|
|
2
|
-
import { type PatientPayment, type PatientFacilityBillDetails } from '../../types';
|
|
1
|
+
import React, { useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { type PatientPayment, type PatientFacilityBillDetails, ClaimsVisit } from '../../types';
|
|
3
3
|
import styles from './bill-details.scss';
|
|
4
|
-
import { OverflowMenu, OverflowMenuItem, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@carbon/react';
|
|
4
|
+
import { Button, OverflowMenu, OverflowMenuItem, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Tag } from '@carbon/react';
|
|
5
5
|
import { formatDate, parseDate } from '@openmrs/esm-framework';
|
|
6
6
|
import BillItemPaymentModal from '../modals/bill-item-payment/bill-item-payment.modal';
|
|
7
7
|
import AddClaimLineModal from '../modals/add-claim-line/add-claim-line.modal';
|
|
@@ -15,51 +15,64 @@ interface billDetailsProps {
|
|
|
15
15
|
amrsVisitDiagnosis: AmrsVisitDiagnosis[];
|
|
16
16
|
consentToken: string;
|
|
17
17
|
locationUuid: string;
|
|
18
|
+
claimsVisit: ClaimsVisit;
|
|
18
19
|
}
|
|
19
|
-
const BillDetails: React.FC<billDetailsProps> = ({ patientBillDetails, patientPayments, amrsVisitDiagnosis, consentToken, locationUuid }) => {
|
|
20
|
-
const [showPaymentModal,setShowPaymentModal] = useState<boolean>(false);
|
|
21
|
-
const [showAddClaimLineModal,setShowAddClaimLineModal] = useState<boolean>(false);
|
|
22
|
-
const [selectedBillItem,setSelectedBillItem] = useState<PatientFacilityBillDetails | null>(null);
|
|
23
|
-
const setDiagnosisInterventionCode = useMemo(()=>getConsultationBillIntervantionCode(),[patientBillDetails]);
|
|
20
|
+
const BillDetails: React.FC<billDetailsProps> = ({ patientBillDetails, patientPayments, amrsVisitDiagnosis, consentToken, locationUuid, claimsVisit }) => {
|
|
21
|
+
const [showPaymentModal, setShowPaymentModal] = useState<boolean>(false);
|
|
22
|
+
const [showAddClaimLineModal, setShowAddClaimLineModal] = useState<boolean>(false);
|
|
23
|
+
const [selectedBillItem, setSelectedBillItem] = useState<PatientFacilityBillDetails | null>(null);
|
|
24
|
+
const setDiagnosisInterventionCode = useMemo(() => getConsultationBillIntervantionCode(), [patientBillDetails]);
|
|
24
25
|
const invalidateProviderClaimPreview = useInvalidateProviderClaimPreview();
|
|
25
|
-
|
|
26
|
+
|
|
26
27
|
if (!patientBillDetails && !patientPayments) {
|
|
27
28
|
return <>No Data</>;
|
|
28
29
|
}
|
|
29
|
-
function handleBillItemPayment(patientBillDetail: PatientFacilityBillDetails){
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
function handleBillItemPayment(patientBillDetail: PatientFacilityBillDetails) {
|
|
31
|
+
setSelectedBillItem(patientBillDetail);
|
|
32
|
+
setShowPaymentModal(true);
|
|
32
33
|
}
|
|
33
|
-
function handleClosePayModal(){
|
|
34
|
-
|
|
34
|
+
function handleClosePayModal() {
|
|
35
|
+
setShowPaymentModal(false);
|
|
35
36
|
}
|
|
36
|
-
function handleSuccessfullPayment(){
|
|
37
|
+
function handleSuccessfullPayment() {
|
|
37
38
|
handleClosePayModal();
|
|
38
39
|
}
|
|
39
|
-
function handleClaimLineAddition(patientBillDetail: PatientFacilityBillDetails){
|
|
40
|
+
function handleClaimLineAddition(patientBillDetail: PatientFacilityBillDetails) {
|
|
40
41
|
setSelectedBillItem(patientBillDetail);
|
|
41
42
|
setShowAddClaimLineModal(true);
|
|
42
43
|
}
|
|
43
|
-
function handleCloseAddClaimItemModal(){
|
|
44
|
-
|
|
44
|
+
function handleCloseAddClaimItemModal() {
|
|
45
|
+
setShowAddClaimLineModal(false);
|
|
45
46
|
}
|
|
46
|
-
function getConsultationBillIntervantionCode(){
|
|
47
|
-
if(!patientBillDetails || patientBillDetails.length === 0){
|
|
48
|
-
|
|
47
|
+
function getConsultationBillIntervantionCode() {
|
|
48
|
+
if (!patientBillDetails || patientBillDetails.length === 0) {
|
|
49
|
+
return '';
|
|
49
50
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if(consultationBill){
|
|
54
|
-
|
|
55
|
-
}else{
|
|
51
|
+
const consultationBill = patientBillDetails.find((b) => {
|
|
52
|
+
return b.billable_service.toLocaleLowerCase().trim().includes('consultation');
|
|
53
|
+
});
|
|
54
|
+
if (consultationBill) {
|
|
55
|
+
return consultationBill.intervention_code;
|
|
56
|
+
} else {
|
|
56
57
|
return patientBillDetails[0].intervention_code ?? '';
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
|
-
function onSuccess
|
|
60
|
+
function onSuccess() {
|
|
60
61
|
handleCloseAddClaimItemModal();
|
|
61
62
|
invalidateProviderClaimPreview();
|
|
62
63
|
}
|
|
64
|
+
function interventionAddedToClaimLine(b: PatientFacilityBillDetails) {
|
|
65
|
+
if (b.intervention_code && b.has_claim_line === 0) {
|
|
66
|
+
if (claimsVisit && claimsVisit.invoices) {
|
|
67
|
+
const lineExists = claimsVisit.invoices.some((inv) =>
|
|
68
|
+
inv.lines.some(l => l.intervention_code === b.intervention_code)
|
|
69
|
+
);
|
|
70
|
+
return lineExists;
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
63
76
|
return (
|
|
64
77
|
<>
|
|
65
78
|
<div className={styles.billDetailsLayout}>
|
|
@@ -97,18 +110,34 @@ const BillDetails: React.FC<billDetailsProps> = ({ patientBillDetails, patientPa
|
|
|
97
110
|
<TableCell>{b.order_no ?? ''}</TableCell>
|
|
98
111
|
<TableCell>{b.service_type ?? ''}</TableCell>
|
|
99
112
|
<TableCell>{b.payment_scheme}</TableCell>
|
|
100
|
-
<TableCell>{b.
|
|
113
|
+
<TableCell>{b.paid_status}</TableCell>
|
|
101
114
|
<TableCell>{b.item_quantity}</TableCell>
|
|
102
115
|
<TableCell>Ksh {b.item_total_price}</TableCell>
|
|
103
116
|
<TableCell>
|
|
104
|
-
<OverflowMenu aria-label="overflow-menu">
|
|
117
|
+
{/* <OverflowMenu aria-label="overflow-menu">
|
|
105
118
|
{
|
|
106
|
-
(b.
|
|
119
|
+
(b.paid_status !== 'PAID' && !b.intervention_code) && <OverflowMenuItem itemText="Pay" onClick={() => handleBillItemPayment(b)} />
|
|
107
120
|
}
|
|
108
121
|
{
|
|
109
122
|
(b.intervention_code && b.has_claim_line === 0) && <OverflowMenuItem itemText="Add Claim Line" onClick={() => handleClaimLineAddition(b)} />
|
|
110
123
|
}
|
|
111
|
-
|
|
124
|
+
</OverflowMenu> */}
|
|
125
|
+
{
|
|
126
|
+
(b.paid_status !== 'PAID' && !b.intervention_code) && <Button size="sm" kind="tertiary" onClick={() => handleBillItemPayment(b)}>Pay</Button>
|
|
127
|
+
}
|
|
128
|
+
{
|
|
129
|
+
b.intervention_code ?
|
|
130
|
+
(
|
|
131
|
+
claimsVisit ?
|
|
132
|
+
(
|
|
133
|
+
claimsVisit.workflow_state === 'DRAFT' ?
|
|
134
|
+
(!interventionAddedToClaimLine(b) && <Button size="sm" kind="tertiary" onClick={() => handleClaimLineAddition(b)}>Add Claim Line</Button>)
|
|
135
|
+
: <Tag>{claimsVisit.workflow_state}</Tag>
|
|
136
|
+
)
|
|
137
|
+
: <></>
|
|
138
|
+
)
|
|
139
|
+
: <></>
|
|
140
|
+
}
|
|
112
141
|
</TableCell>
|
|
113
142
|
</TableRow>
|
|
114
143
|
</>
|
|
@@ -165,37 +194,38 @@ const BillDetails: React.FC<billDetailsProps> = ({ patientBillDetails, patientPa
|
|
|
165
194
|
)}
|
|
166
195
|
{
|
|
167
196
|
amrsVisitDiagnosis.length > 0 ? (<>
|
|
168
|
-
|
|
197
|
+
<div className={styles.billRow}>
|
|
169
198
|
<div>
|
|
170
199
|
<h6>Patient Dignosis</h6>
|
|
171
200
|
</div>
|
|
172
201
|
<div>
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
202
|
+
<VisitDiagnosisDetails
|
|
203
|
+
amrsVisitDiagnosis={amrsVisitDiagnosis}
|
|
204
|
+
consentToken={consentToken}
|
|
205
|
+
locationUuid={locationUuid}
|
|
206
|
+
interventionCode={setDiagnosisInterventionCode}
|
|
207
|
+
claimsVisit={claimsVisit}
|
|
208
|
+
/>
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
|
|
212
|
+
</>) : (<></>)
|
|
183
213
|
}
|
|
184
214
|
{
|
|
185
|
-
(showPaymentModal && selectedBillItem) && <BillItemPaymentModal
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
215
|
+
(showPaymentModal && selectedBillItem) && <BillItemPaymentModal
|
|
216
|
+
open={showPaymentModal}
|
|
217
|
+
billItem={selectedBillItem}
|
|
218
|
+
onClose={handleClosePayModal}
|
|
219
|
+
onPay={handleSuccessfullPayment} />
|
|
190
220
|
}
|
|
191
221
|
{
|
|
192
|
-
(showAddClaimLineModal && selectedBillItem) && <AddClaimLineModal
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
222
|
+
(showAddClaimLineModal && selectedBillItem) && <AddClaimLineModal
|
|
223
|
+
open={showAddClaimLineModal}
|
|
224
|
+
billItem={selectedBillItem}
|
|
225
|
+
onClose={handleCloseAddClaimItemModal}
|
|
226
|
+
onSuccess={onSuccess}
|
|
227
|
+
locationUuid={locationUuid}
|
|
228
|
+
consentToken={consentToken}
|
|
199
229
|
/>
|
|
200
230
|
}
|
|
201
231
|
</div>
|
|
@@ -12,16 +12,24 @@ interface patientClaimDetailsProps {
|
|
|
12
12
|
locationUuid: string;
|
|
13
13
|
patientBillDetails: PatientFacilityBillDetails[];
|
|
14
14
|
onBillDetailsChange?: () => void;
|
|
15
|
+
onLoadingClaimVisit?: (claimVisit: ClaimsVisit) => void;
|
|
15
16
|
}
|
|
16
17
|
const PatientClaimDetails: React.FC<patientClaimDetailsProps> = ({
|
|
17
18
|
consentToken,
|
|
18
19
|
locationUuid,
|
|
19
20
|
patientBillDetails,
|
|
20
21
|
onBillDetailsChange,
|
|
22
|
+
onLoadingClaimVisit
|
|
21
23
|
}) => {
|
|
22
24
|
const [patientBill, setPatientBill] = useState<PatientFacilityBillDetails>();
|
|
23
25
|
const { claimVisit, isLoading, isValidating } = useProviderClaimPreview(consentToken, locationUuid);
|
|
24
26
|
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (claimVisit && !isLoading && !isValidating) {
|
|
29
|
+
onLoadingClaimVisit(claimVisit);
|
|
30
|
+
}
|
|
31
|
+
}, [claimVisit, isLoading, isValidating])
|
|
32
|
+
|
|
25
33
|
useEffect(() => {
|
|
26
34
|
if (consentToken && locationUuid) {
|
|
27
35
|
getPatientBill();
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
type PatientFacilityBillDetails,
|
|
6
6
|
type PatientPaymentsDto,
|
|
7
7
|
type PatientPayment,
|
|
8
|
+
ClaimsVisit,
|
|
8
9
|
} from '../types';
|
|
9
10
|
import {
|
|
10
11
|
fetchMaternityDiagnosis,
|
|
@@ -17,7 +18,7 @@ import { showSnackbar } from '@openmrs/esm-styleguide';
|
|
|
17
18
|
import { Tab, TabList, TabPanel, TabPanels, Tabs } from '@carbon/react';
|
|
18
19
|
import BillDetails from './bill-details/bill-details';
|
|
19
20
|
import PatientClaimDetails from './claim-details/patient-claim-details.component';
|
|
20
|
-
import { type AmrsVisitDiagnosisDto, type AmrsVisitDiagnosis,type AmrsMaternityDiagnosisDto } from '../../../types';
|
|
21
|
+
import { type AmrsVisitDiagnosisDto, type AmrsVisitDiagnosis, type AmrsMaternityDiagnosisDto } from '../../../types';
|
|
21
22
|
import { resolveConsentTokenFromBillLines } from '../../v2/patient-bill-details/payment-mode';
|
|
22
23
|
interface patientBillDetailsProps {
|
|
23
24
|
patientUuid: string;
|
|
@@ -32,13 +33,14 @@ const PatientBillDetails: React.FC<patientBillDetailsProps> = ({ patientUuid, lo
|
|
|
32
33
|
return patientBillDetails[0] ?? null;
|
|
33
34
|
}, [patientBillDetails]);
|
|
34
35
|
const billStatus = useMemo(() => getBillStatus(patientBillDetails), [patientBillDetails]);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
const [visitDiagnosis, setVisitDiagnosis] = useState<AmrsVisitDiagnosis[]>([]);
|
|
37
|
+
const [maternityDiagnosis, setMaternityDiagnosis] = useState<AmrsVisitDiagnosis[]>([]);
|
|
38
|
+
const [encounterDiagnosis, setEncounterDiagnosis] = useState<AmrsVisitDiagnosis[]>([]);
|
|
39
|
+
const patientAmrsVisitDiagnosis = useMemo(
|
|
40
|
+
() => [...visitDiagnosis, ...maternityDiagnosis, ...encounterDiagnosis],
|
|
41
|
+
[visitDiagnosis, maternityDiagnosis, encounterDiagnosis],
|
|
42
|
+
);
|
|
43
|
+
const [claimsVisit, setClaimsVisit] = useState<ClaimsVisit>();
|
|
42
44
|
|
|
43
45
|
|
|
44
46
|
const [visitDiagnosisLoading, setVisitDiagnosisLoading] = useState<boolean>(true);
|
|
@@ -121,40 +123,40 @@ const PatientBillDetails: React.FC<patientBillDetailsProps> = ({ patientUuid, lo
|
|
|
121
123
|
}
|
|
122
124
|
}
|
|
123
125
|
async function getPatientAmrsVisitDiagnosis() {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
126
|
+
setVisitDiagnosisLoading(true);
|
|
127
|
+
const amrsVisitDiagnosisPayload = getPatientAmrsVisitDiagnosisPayload();
|
|
128
|
+
try {
|
|
129
|
+
const resp = await fetchPatientDiagnosis(amrsVisitDiagnosisPayload);
|
|
130
|
+
setVisitDiagnosis(resp ?? []);
|
|
131
|
+
} catch (error) {
|
|
132
|
+
showSnackbar({
|
|
133
|
+
title: 'Error fetching patient diagnosis',
|
|
134
|
+
kind: 'error',
|
|
135
|
+
subtitle: 'An error occurred while fetching the patient diagnosis',
|
|
136
|
+
});
|
|
137
|
+
} finally {
|
|
138
|
+
setVisitDiagnosisLoading(false);
|
|
138
139
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
|
|
140
|
+
}
|
|
141
|
+
async function getPatientAmrsMaternityDiagnosis() {
|
|
142
|
+
setMaternityDiagnosisLoading(true);
|
|
143
|
+
const amrsMaternityDiagnosisPayload = getPatientAmrsMaternityDiagnosisPayload();
|
|
144
|
+
try {
|
|
145
|
+
const resp: any = await fetchMaternityDiagnosis(amrsMaternityDiagnosisPayload);
|
|
146
|
+
const results = (resp ?? [])
|
|
147
|
+
.filter((r) => r?.uuid != null)
|
|
148
|
+
.map((v) => ({ ...v, practitioner_identifier_type: 'National ID' }));
|
|
149
|
+
setMaternityDiagnosis(results);
|
|
150
|
+
} catch (error) {
|
|
151
|
+
showSnackbar({
|
|
152
|
+
title: 'Error fetching patient maternity diagnosis',
|
|
153
|
+
kind: 'error',
|
|
154
|
+
subtitle: 'An error occurred while fetching the patient maternity diagnosis',
|
|
155
|
+
});
|
|
156
|
+
} finally {
|
|
157
|
+
setMaternityDiagnosisLoading(false);
|
|
157
158
|
}
|
|
159
|
+
}
|
|
158
160
|
async function getPatientAmrsEncounterDiagnosis() {
|
|
159
161
|
setEncounterDiagnosisLoading(true);
|
|
160
162
|
const amrsMaternityDiagnosisPayload = getPatientAmrsVisitDiagnosisPayload();
|
|
@@ -185,6 +187,11 @@ const PatientBillDetails: React.FC<patientBillDetailsProps> = ({ patientUuid, lo
|
|
|
185
187
|
billingDate: billingDate
|
|
186
188
|
};
|
|
187
189
|
}
|
|
190
|
+
function onLoadingClaimVisit(claimVisit: ClaimsVisit) {
|
|
191
|
+
if (claimVisit) {
|
|
192
|
+
setClaimsVisit(claimVisit);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
188
195
|
return (
|
|
189
196
|
<>
|
|
190
197
|
<div className={styles.bdLayout}>
|
|
@@ -226,6 +233,7 @@ const PatientBillDetails: React.FC<patientBillDetailsProps> = ({ patientUuid, lo
|
|
|
226
233
|
amrsVisitDiagnosis={patientAmrsVisitDiagnosis}
|
|
227
234
|
locationUuid={locationUuid}
|
|
228
235
|
consentToken={consentToken}
|
|
236
|
+
claimsVisit={claimsVisit}
|
|
229
237
|
/>
|
|
230
238
|
)}
|
|
231
239
|
</TabPanel>
|
|
@@ -237,6 +245,7 @@ const PatientBillDetails: React.FC<patientBillDetailsProps> = ({ patientUuid, lo
|
|
|
237
245
|
patientBillDetails={patientBillDetails}
|
|
238
246
|
consentToken={consentToken}
|
|
239
247
|
onBillDetailsChange={getPatientBillDetails}
|
|
248
|
+
onLoadingClaimVisit={onLoadingClaimVisit}
|
|
240
249
|
/>
|
|
241
250
|
</>
|
|
242
251
|
) : (
|
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
2
|
import styles from './visit-diagnosis-details.component.scss';
|
|
3
3
|
import { type AmrsVisitDiagnosis } from "../../../../types";
|
|
4
|
-
import { OverflowMenu, OverflowMenuItem, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@carbon/react";
|
|
4
|
+
import { Button, OverflowMenu, OverflowMenuItem, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Tag } from "@carbon/react";
|
|
5
5
|
import { formatDate, parseDate } from "@openmrs/esm-framework";
|
|
6
6
|
import AddClaimDiagnosisModal from "../modals/add-claim-diagnosis/add-claim-diagnosis.modal";
|
|
7
7
|
import { useInvalidateProviderClaimPreview } from "../../../../billing-claims.resource";
|
|
8
|
+
import { ClaimsVisit } from "../../types";
|
|
8
9
|
|
|
9
10
|
interface visitDiagnosisDetailsProps {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
amrsVisitDiagnosis: AmrsVisitDiagnosis[];
|
|
12
|
+
consentToken: string;
|
|
13
|
+
interventionCode: string;
|
|
14
|
+
locationUuid: string;
|
|
15
|
+
claimsVisit: ClaimsVisit;
|
|
14
16
|
}
|
|
15
|
-
const VisitDiagnosisDetails: React.FC<visitDiagnosisDetailsProps> = ({amrsVisitDiagnosis,consentToken,interventionCode,locationUuid})=>{
|
|
16
|
-
const [selectedAmrsDiagnosis,setSelectedAmrsDiagnosis] = useState<AmrsVisitDiagnosis | null>(null);
|
|
17
|
-
const [showAddClaimDiagnosisModal,setShowAddClaimDiagnosisModal] = useState<boolean>(false);
|
|
17
|
+
const VisitDiagnosisDetails: React.FC<visitDiagnosisDetailsProps> = ({ amrsVisitDiagnosis, consentToken, interventionCode, locationUuid, claimsVisit }) => {
|
|
18
|
+
const [selectedAmrsDiagnosis, setSelectedAmrsDiagnosis] = useState<AmrsVisitDiagnosis | null>(null);
|
|
19
|
+
const [showAddClaimDiagnosisModal, setShowAddClaimDiagnosisModal] = useState<boolean>(false);
|
|
18
20
|
const invalidateProviderClaimPreview = useInvalidateProviderClaimPreview();
|
|
19
21
|
|
|
20
|
-
function handleCloseModal(){
|
|
21
|
-
|
|
22
|
+
function handleCloseModal() {
|
|
23
|
+
setShowAddClaimDiagnosisModal(false);
|
|
22
24
|
}
|
|
23
|
-
function handleDiagnosisSelection(amrsVisitDiagnosis: AmrsVisitDiagnosis){
|
|
25
|
+
function handleDiagnosisSelection(amrsVisitDiagnosis: AmrsVisitDiagnosis) {
|
|
24
26
|
setSelectedAmrsDiagnosis(amrsVisitDiagnosis);
|
|
25
27
|
setShowAddClaimDiagnosisModal(true);
|
|
26
28
|
}
|
|
@@ -28,53 +30,63 @@ const VisitDiagnosisDetails: React.FC<visitDiagnosisDetailsProps> = ({amrsVisitD
|
|
|
28
30
|
handleCloseModal();
|
|
29
31
|
invalidateProviderClaimPreview();
|
|
30
32
|
}
|
|
33
|
+
const diagnosisAddedToClaim = (d: AmrsVisitDiagnosis): boolean => {
|
|
34
|
+
// Check if diagnosis is already added to the claim
|
|
35
|
+
if (!claimsVisit?.claim_diagnoses) return false;
|
|
36
|
+
return claimsVisit.claim_diagnoses.some(
|
|
37
|
+
(cd) => cd.diagnosis_code === d.icd11_code
|
|
38
|
+
);
|
|
39
|
+
};
|
|
31
40
|
return <>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
41
|
+
<div>
|
|
42
|
+
<Table aria-label="diagnoses" size="sm">
|
|
43
|
+
<TableHead>
|
|
44
|
+
<TableRow>
|
|
45
|
+
<TableHeader>No</TableHeader>
|
|
46
|
+
<TableHeader>Encounter Date</TableHeader>
|
|
47
|
+
<TableHeader>Encounter Type</TableHeader>
|
|
48
|
+
<TableHeader>ICD11 Diagnosis</TableHeader>
|
|
49
|
+
<TableHeader>Actions</TableHeader>
|
|
50
|
+
</TableRow>
|
|
51
|
+
</TableHead>
|
|
52
|
+
<TableBody>
|
|
53
|
+
{amrsVisitDiagnosis &&
|
|
54
|
+
amrsVisitDiagnosis.map((d, index) => {
|
|
55
|
+
return (
|
|
56
|
+
<>
|
|
57
|
+
<TableRow key={d.encounter_id}>
|
|
58
|
+
<TableCell>{index + 1}</TableCell>
|
|
59
|
+
<TableCell>{formatDate(parseDate(d.encounter_datetime))}</TableCell>
|
|
60
|
+
<TableCell>{d.encounter_type}</TableCell>
|
|
61
|
+
<TableCell>{d.icd11_code}</TableCell>
|
|
62
|
+
<TableCell>
|
|
63
|
+
{claimsVisit && claimsVisit.workflow_state === 'DRAFT' && !diagnosisAddedToClaim(d) && (
|
|
64
|
+
<Button size="sm" kind="tertiary" onClick={() => handleDiagnosisSelection(d)}>Add Claim Diagnosis</Button>
|
|
65
|
+
)}
|
|
66
|
+
{claimsVisit && claimsVisit.workflow_state !== 'DRAFT' && (
|
|
67
|
+
<Tag>{claimsVisit.workflow_state}</Tag>
|
|
68
|
+
)}
|
|
69
|
+
</TableCell>
|
|
70
|
+
</TableRow>
|
|
71
|
+
</>
|
|
72
|
+
);
|
|
73
|
+
})}
|
|
74
|
+
</TableBody>
|
|
75
|
+
</Table>
|
|
64
76
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
{
|
|
78
|
+
(showAddClaimDiagnosisModal && selectedAmrsDiagnosis) &&
|
|
79
|
+
<AddClaimDiagnosisModal
|
|
80
|
+
consentToken={consentToken}
|
|
81
|
+
amrsVisitDiagnosis={selectedAmrsDiagnosis}
|
|
82
|
+
locationUuid={locationUuid}
|
|
83
|
+
interventionCode={interventionCode}
|
|
84
|
+
open={showAddClaimDiagnosisModal}
|
|
85
|
+
onClose={handleCloseModal}
|
|
86
|
+
onSuccess={onSuccess}
|
|
87
|
+
/>
|
|
88
|
+
}
|
|
89
|
+
</div>
|
|
78
90
|
</>
|
|
79
91
|
}
|
|
80
92
|
export default VisitDiagnosisDetails;
|
|
@@ -76,7 +76,7 @@ export enum HieIdentificationType {
|
|
|
76
76
|
RefugeeID = 'Refugee ID',
|
|
77
77
|
AlienID = 'Alien ID',
|
|
78
78
|
MandateNumber = 'Mandate Number',
|
|
79
|
-
Cr = '
|
|
79
|
+
Cr = 'ClientRegistry ID',
|
|
80
80
|
TemporaryDependantID = 'Temporary Dependant ID',
|
|
81
81
|
BirthCertificate = 'Birth Certificate',
|
|
82
82
|
BirthNotification = 'Birth Notification',
|