@ampath/esm-dha-workflow-app 4.0.0-next.34 → 4.0.0-next.340
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/README.md +19 -0
- package/dist/1149.js +1 -0
- package/dist/1149.js.map +1 -0
- package/dist/1197.js +1 -0
- package/dist/1277.js +1 -0
- package/dist/1277.js.map +1 -0
- package/dist/1362.js +1 -0
- package/dist/1362.js.map +1 -0
- package/dist/1551.js +1 -0
- package/dist/1551.js.map +1 -0
- package/dist/1556.js +1 -0
- package/dist/1556.js.map +1 -0
- package/dist/1925.js +1 -0
- package/dist/1925.js.map +1 -0
- package/dist/1927.js +1 -0
- package/dist/1927.js.map +1 -0
- package/dist/203.js +1 -0
- package/dist/203.js.map +1 -0
- package/dist/2054.js +1 -0
- package/dist/2054.js.map +1 -0
- package/dist/2093.js +1 -0
- package/dist/2093.js.map +1 -0
- package/dist/2177.js +2 -0
- package/dist/2177.js.map +1 -0
- package/dist/2200.js +1 -0
- package/dist/2200.js.map +1 -0
- package/dist/2230.js +1 -0
- package/dist/2230.js.map +1 -0
- package/dist/2493.js +1 -0
- package/dist/2493.js.map +1 -0
- package/dist/2914.js +1 -0
- package/dist/2914.js.map +1 -0
- package/dist/2936.js +1 -0
- package/dist/2936.js.map +1 -0
- package/dist/2988.js +1 -0
- package/dist/2988.js.map +1 -0
- package/dist/3041.js +1 -0
- package/dist/3041.js.map +1 -0
- package/dist/307.js +1 -0
- package/dist/307.js.map +1 -0
- package/dist/3099.js +1 -0
- package/dist/3184.js +2 -0
- package/dist/3184.js.map +1 -0
- package/dist/3202.js +1 -0
- package/dist/3202.js.map +1 -0
- package/dist/3222.js +1 -0
- package/dist/3222.js.map +1 -0
- package/dist/347.js +1 -0
- package/dist/347.js.map +1 -0
- package/dist/4003.js +1 -0
- package/dist/4003.js.map +1 -0
- package/dist/4008.js +1 -0
- package/dist/4008.js.map +1 -0
- package/dist/4055.js +1 -0
- package/dist/4205.js +1 -0
- package/dist/4205.js.map +1 -0
- package/dist/4225.js +1 -0
- package/dist/4225.js.map +1 -0
- package/dist/4231.js +1 -0
- package/dist/4231.js.map +1 -0
- package/dist/4300.js +1 -0
- package/dist/4335.js +1 -0
- package/dist/4353.js +1 -0
- package/dist/4353.js.map +1 -0
- package/dist/4431.js +1 -0
- package/dist/4431.js.map +1 -0
- package/dist/4454.js +1 -0
- package/dist/4454.js.map +1 -0
- package/dist/4457.js +2 -0
- package/dist/4457.js.LICENSE.txt +282 -0
- package/dist/4457.js.map +1 -0
- package/dist/446.js +1 -0
- package/dist/446.js.map +1 -0
- package/dist/4605.js +1 -0
- package/dist/4605.js.map +1 -0
- package/dist/4611.js +1 -0
- package/dist/4611.js.map +1 -0
- package/dist/4652.js +1 -0
- package/dist/4674.js +1 -0
- package/dist/4674.js.map +1 -0
- package/dist/4755.js +1 -0
- package/dist/4755.js.map +1 -0
- package/dist/4986.js +1 -0
- package/dist/4986.js.map +1 -0
- package/dist/5097.js +1 -0
- package/dist/5097.js.map +1 -0
- package/dist/5119.js +1 -0
- package/dist/5119.js.map +1 -0
- package/dist/5167.js +1 -0
- package/dist/5167.js.map +1 -0
- package/dist/5380.js +1 -0
- package/dist/5380.js.map +1 -0
- package/dist/5422.js +1 -0
- package/dist/5422.js.map +1 -0
- package/dist/5576.js +1 -0
- package/dist/5576.js.map +1 -0
- package/dist/5851.js +1 -0
- package/dist/5851.js.map +1 -0
- package/dist/5961.js +1 -0
- package/dist/5961.js.map +1 -0
- package/dist/6177.js +1 -0
- package/dist/6177.js.map +1 -0
- package/dist/6264.js +1 -0
- package/dist/6264.js.map +1 -0
- package/dist/6540.js +2 -0
- package/dist/6540.js.map +1 -0
- package/dist/6606.js +1 -0
- package/dist/6606.js.map +1 -0
- package/dist/6720.js +1 -0
- package/dist/6720.js.map +1 -0
- package/dist/6824.js +1 -0
- package/dist/6824.js.map +1 -0
- package/dist/6942.js +1 -0
- package/dist/6942.js.map +1 -0
- package/dist/71.js +1 -0
- package/dist/71.js.map +1 -0
- package/dist/7207.js +1 -0
- package/dist/7207.js.map +1 -0
- package/dist/7240.js +1 -0
- package/dist/7240.js.map +1 -0
- package/dist/7255.js +1 -0
- package/dist/7255.js.map +1 -0
- package/dist/7420.js +1 -0
- package/dist/7420.js.map +1 -0
- package/dist/7521.js +1 -0
- package/dist/7521.js.map +1 -0
- package/dist/7557.js +1 -0
- package/dist/7557.js.map +1 -0
- package/dist/7717.js +1 -0
- package/dist/7717.js.map +1 -0
- package/dist/7830.js +2 -0
- package/dist/7830.js.map +1 -0
- package/dist/7941.js +1 -0
- package/dist/7941.js.map +1 -0
- package/dist/8091.js +1 -0
- package/dist/8091.js.map +1 -0
- package/dist/810.js +1 -2
- package/dist/810.js.map +1 -1
- package/dist/8558.js +1 -0
- package/dist/8558.js.map +1 -0
- package/dist/8733.js +1 -0
- package/dist/8733.js.map +1 -0
- package/dist/874.js +1 -0
- package/dist/874.js.map +1 -0
- package/dist/8895.js +1 -0
- package/dist/8895.js.map +1 -0
- package/dist/9070.js +1 -0
- package/dist/9070.js.map +1 -0
- package/dist/9091.js +1 -0
- package/dist/9091.js.map +1 -0
- package/dist/9093.js +1 -0
- package/dist/9093.js.map +1 -0
- package/dist/9338.js +1 -0
- package/dist/9338.js.map +1 -0
- package/dist/9418.js +2 -0
- package/dist/9418.js.LICENSE.txt +1 -0
- package/dist/9418.js.map +1 -0
- package/dist/9428.js +1 -0
- package/dist/9428.js.map +1 -0
- package/dist/9583.js +2 -0
- package/dist/9583.js.map +1 -0
- package/dist/esm-dha-workflow-app.js +1 -1
- package/dist/esm-dha-workflow-app.js.buildmanifest.json +1627 -214
- package/dist/esm-dha-workflow-app.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/routes.json +1 -1
- package/local-config.json +5 -0
- package/package.json +16 -6
- package/src/admissions/admission-request-list/admission-request-list.scss +0 -0
- package/src/admissions/admission-request-list/admission-request-list.tsx +263 -0
- package/src/admissions/admissions-dashboard.component.scss +15 -0
- package/src/admissions/admissions-dashboard.component.tsx +277 -0
- package/src/admissions/admissions.resource.ts +233 -0
- package/src/admissions/admitted-list/admitted-patients-list.tsx +206 -0
- package/src/admissions/awaiting-discharge-list/awaiting-discharge-list.tsx +197 -0
- package/src/admissions/bed-assigment-request/bed-assignment-request-list.tsx +134 -0
- package/src/admissions/constants/index.ts +33 -0
- package/src/admissions/discharged-list/discharged-list.scss +0 -0
- package/src/admissions/discharged-list/discharged-list.tsx +67 -0
- package/src/admissions/form-entry-workspace/form-entry-workspace.tsx +62 -0
- package/src/admissions/inpatient/admission-history/patient-admission-history.tsx +76 -0
- package/src/admissions/inpatient/admission-requests/patient-admission-requests.scss +19 -0
- package/src/admissions/inpatient/admission-requests/patient-admission-requests.tsx +72 -0
- package/src/admissions/inpatient/inpatient-admissions.component.scss +7 -0
- package/src/admissions/inpatient/inpatient-admissions.component.tsx +46 -0
- package/src/admissions/modal/add-bill-items/add-bill-items.modal.scss +17 -0
- package/src/admissions/modal/add-bill-items/add-bill-items.modal.tsx +233 -0
- package/src/admissions/modal/admit-elsewhere/admit-elsewhere.modal.scss +23 -0
- package/src/admissions/modal/admit-elsewhere/admit-elsewhere.modal.tsx +156 -0
- package/src/admissions/modal/admit-patient/admit-patient.modal.scss +0 -0
- package/src/admissions/modal/admit-patient/admit-patient.modal.tsx +111 -0
- package/src/admissions/modal/bed-swap/bed-swap.modal.scss +0 -0
- package/src/admissions/modal/bed-swap/bed-swap.modal.tsx +102 -0
- package/src/admissions/modal/cancel-admission-request/cancel-admission-request.scss +11 -0
- package/src/admissions/modal/cancel-admission-request/cancel-admission-request.tsx +105 -0
- package/src/admissions/modal/discharge/discharge-patient.modal.scss +13 -0
- package/src/admissions/modal/discharge/discharge-patient.modal.tsx +86 -0
- package/src/admissions/types/index.ts +263 -0
- package/src/appointments/appointments.component.scss +6 -0
- package/src/appointments/appointments.component.tsx +8 -1
- package/src/billing/api/billing.api.ts +139 -0
- package/src/billing/billing-claims.resource.ts +900 -0
- package/src/billing/billing-dashboard-link.component.tsx +31 -0
- package/src/billing/billing-dashboard-reset.ts +27 -0
- package/src/billing/billing-root.tsx +42 -0
- package/src/billing/dashboard/billingDashboard.component.scss +0 -0
- package/src/billing/dashboard/billingDashboard.component.tsx +25 -0
- package/src/billing/dashboard/v2/active-visits/active-visits.component.tsx +257 -0
- package/src/billing/dashboard/v2/active-visits/active-visits.resource.ts +85 -0
- package/src/billing/dashboard/v2/active-visits/active-visits.scss +15 -0
- package/src/billing/dashboard/v2/active-visits.component.tsx +102 -0
- package/src/billing/dashboard/v2/admissions/admission-requests-tab.component.tsx +79 -0
- package/src/billing/dashboard/v2/billing-claims-dashboard.component.scss +209 -0
- package/src/billing/dashboard/v2/billing-claims-dashboard.component.tsx +347 -0
- package/src/billing/dashboard/v2/cash-checklist/bill-document.component.scss +90 -0
- package/src/billing/dashboard/v2/cash-checklist/bill-document.component.tsx +101 -0
- package/src/billing/dashboard/v2/cash-checklist/cash-checklist.component.scss +199 -0
- package/src/billing/dashboard/v2/cash-checklist/cash-checklist.component.tsx +361 -0
- package/src/billing/dashboard/v2/cash-checklist/cash-checklist.resource.ts +239 -0
- package/src/billing/dashboard/v2/cash-checklist/payment-drawer.component.scss +246 -0
- package/src/billing/dashboard/v2/cash-checklist/payment-drawer.component.tsx +182 -0
- package/src/billing/dashboard/v2/claim-statuses.ts +143 -0
- package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.scss +0 -0
- package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.tsx +35 -0
- package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-panel.component.scss +67 -0
- package/src/billing/dashboard/v2/claim-visits/claim-diagnosis-details/claim-diagnosis-panel.component.tsx +90 -0
- package/src/billing/dashboard/v2/claim-visits/claim-doctors/claim-doctors.scss +28 -0
- package/src/billing/dashboard/v2/claim-visits/claim-doctors/claim-doctors.tsx +36 -0
- package/src/billing/dashboard/v2/claim-visits/claim-history/claim-history.component.scss +119 -0
- package/src/billing/dashboard/v2/claim-visits/claim-history/claim-history.component.tsx +198 -0
- package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-details.component.scss +5 -0
- package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-details.component.tsx +160 -0
- package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-panel.component.scss +105 -0
- package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/claim-intervention-panel.component.tsx +184 -0
- package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/intervention-attachments.component.scss +161 -0
- package/src/billing/dashboard/v2/claim-visits/claim-intervention-details/intervention-attachments.component.tsx +328 -0
- package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-details.component.tsx +96 -0
- package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-document.component.tsx +236 -0
- package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-panel.component.scss +98 -0
- package/src/billing/dashboard/v2/claim-visits/claim-invoice-details/claim-invoice-panel.component.tsx +292 -0
- package/src/billing/dashboard/v2/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.scss +133 -0
- package/src/billing/dashboard/v2/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.tsx +217 -0
- package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-details-by-token.component.tsx +150 -0
- package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-details-page.component.scss +13 -0
- package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-details-page.component.tsx +116 -0
- package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-visit-details.component.scss +338 -0
- package/src/billing/dashboard/v2/claim-visits/claim-visit-details/claim-visit-details.component.tsx +616 -0
- package/src/billing/dashboard/v2/claim-visits/claim-visits.component.scss +5 -0
- package/src/billing/dashboard/v2/claim-visits/claim-visits.component.tsx +133 -0
- package/src/billing/dashboard/v2/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.scss +5 -0
- package/src/billing/dashboard/v2/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.tsx +49 -0
- package/src/billing/dashboard/v2/claim-visits/modal/claim-visit-details/claim-visit-details.modal.scss +17 -0
- package/src/billing/dashboard/v2/claim-visits/modal/claim-visit-details/claim-visit-details.modal.tsx +56 -0
- package/src/billing/dashboard/v2/claim-visits/modal/close-claim/close-claim.modal.scss +0 -0
- package/src/billing/dashboard/v2/claim-visits/modal/close-claim/close-claim.modal.tsx +129 -0
- package/src/billing/dashboard/v2/claim-visits/modal/submit-claim/submit-claim.modal.tsx +204 -0
- package/src/billing/dashboard/v2/claim-visits/shared/_empty-state.scss +28 -0
- package/src/billing/dashboard/v2/claim-visits/shared/record-cards.component.scss +298 -0
- package/src/billing/dashboard/v2/claim-visits/shared/record-cards.component.tsx +252 -0
- package/src/billing/dashboard/v2/claim-visits/shared/record-details.workspace.scss +42 -0
- package/src/billing/dashboard/v2/claim-visits/shared/record-details.workspace.tsx +54 -0
- package/src/billing/dashboard/v2/claim-visits/shared/record-table.component.scss +61 -0
- package/src/billing/dashboard/v2/claim-visits/shared/record-table.component.tsx +150 -0
- package/src/billing/dashboard/v2/claim-visits/switch-intervention/switch-intervention.resource.ts +51 -0
- package/src/billing/dashboard/v2/claim-visits/switch-intervention/switch-intervention.workspace.scss +191 -0
- package/src/billing/dashboard/v2/claim-visits/switch-intervention/switch-intervention.workspace.tsx +648 -0
- package/src/billing/dashboard/v2/claim-workspace/claim-workspace.component.scss +595 -0
- package/src/billing/dashboard/v2/claim-workspace/claim-workspace.component.tsx +810 -0
- package/src/billing/dashboard/v2/claim-workspace/claim-workspace.resource.ts +282 -0
- package/src/billing/dashboard/v2/claims-accounting/bill-utils.ts +134 -0
- package/src/billing/dashboard/v2/claims-accounting/claim-detail.component.tsx +346 -0
- package/src/billing/dashboard/v2/claims-accounting/claims-accounting.component.scss +546 -0
- package/src/billing/dashboard/v2/claims-accounting/claims-accounting.component.tsx +206 -0
- package/src/billing/dashboard/v2/claims-accounting/claims-accounting.resource.ts +337 -0
- package/src/billing/dashboard/v2/claims-accounting/invoice-document.component.scss +90 -0
- package/src/billing/dashboard/v2/claims-accounting/invoice-document.component.tsx +90 -0
- package/src/billing/dashboard/v2/claims-accounting/remittances.component.tsx +169 -0
- package/src/billing/dashboard/v2/claims-accounting/remittances.resource.ts +46 -0
- package/src/billing/dashboard/v2/claims-accounting/status-meta.ts +25 -0
- package/src/billing/dashboard/v2/clearance/cash-patients.scss +18 -0
- package/src/billing/dashboard/v2/clearance/cash.component.tsx +149 -0
- package/src/billing/dashboard/v2/clearance/clearance.component.scss +84 -0
- package/src/billing/dashboard/v2/clearance/clearance.component.tsx +225 -0
- package/src/billing/dashboard/v2/clearance/pay-cash.component.tsx +176 -0
- package/src/billing/dashboard/v2/clearance/pay-cash.scss +28 -0
- package/src/billing/dashboard/v2/clearance/prepaid-services.component.tsx +112 -0
- package/src/billing/dashboard/v2/facility-bills/claim-status.ts +249 -0
- package/src/billing/dashboard/v2/facility-bills/facility-bills.component.scss +140 -0
- package/src/billing/dashboard/v2/facility-bills/facility-bills.component.tsx +687 -0
- package/src/billing/dashboard/v2/facility-bills/preauths-datatables/pending-preauths.component.tsx +132 -0
- package/src/billing/dashboard/v2/facility-bills/preauths-datatables/preauth-preview-table.component.tsx +267 -0
- package/src/billing/dashboard/v2/facility-bills/preauths.component.tsx +124 -0
- package/src/billing/dashboard/v2/inpatient-requests/inpatient-requests.component.scss +22 -0
- package/src/billing/dashboard/v2/inpatient-requests/inpatient-requests.component.tsx +389 -0
- package/src/billing/dashboard/v2/inpatient-requests/modal/start-inpatient-claim/start-inpatient-claim.component.scss +0 -0
- package/src/billing/dashboard/v2/inpatient-requests/modal/start-inpatient-claim/start-inpatient-claim.component.tsx +0 -0
- package/src/billing/dashboard/v2/new-facility-bills/bills-table.component.tsx +78 -0
- package/src/billing/dashboard/v2/new-facility-bills/bills-table.scss +18 -0
- package/src/billing/dashboard/v2/new-facility-bills/new-facility-bills.component.tsx +64 -0
- package/src/billing/dashboard/v2/new-facility-bills/new-facility-bills.scss +146 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/add-attachments.component.tsx +223 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/attachment.component.tsx +157 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/attachments.scss +92 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/case-summary/case-summary.scss +295 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/case-summary/case-summary.tsx +326 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/dialysis/dialysis-chart.scss +238 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/dialysis/dialysis-chart.tsx +269 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/discharge-summary/discharge-summary.scss +96 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/discharge-summary/discharge-summary.tsx +124 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/final-bill.component.tsx +152 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/final-bill.scss +225 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.scss +182 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.tsx +173 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/generate-attachments.component.tsx +360 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/invoice.component.tsx +151 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/invoice.scss +225 -0
- package/src/billing/dashboard/v2/patient-bill-details/attachments/type.ts +44 -0
- package/src/billing/dashboard/v2/patient-bill-details/bill-details/bill-details.scss +107 -0
- package/src/billing/dashboard/v2/patient-bill-details/bill-details/bill-details.tsx +508 -0
- package/src/billing/dashboard/v2/patient-bill-details/bill-details-page.component.scss +30 -0
- package/src/billing/dashboard/v2/patient-bill-details/bill-details-page.component.tsx +94 -0
- package/src/billing/dashboard/v2/patient-bill-details/claim-details/claim-details-skeleton.component.scss +89 -0
- package/src/billing/dashboard/v2/patient-bill-details/claim-details/claim-details-skeleton.component.tsx +53 -0
- package/src/billing/dashboard/v2/patient-bill-details/claim-details/patient-claim-details.component.scss +32 -0
- package/src/billing/dashboard/v2/patient-bill-details/claim-details/patient-claim-details.component.tsx +215 -0
- package/src/billing/dashboard/v2/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.scss +0 -0
- package/src/billing/dashboard/v2/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.tsx +99 -0
- package/src/billing/dashboard/v2/patient-bill-details/modals/add-claim-line/add-claim-line.modal.tsx +186 -0
- package/src/billing/dashboard/v2/patient-bill-details/patient-bill-details.scss +153 -0
- package/src/billing/dashboard/v2/patient-bill-details/patient-bill-details.tsx +458 -0
- package/src/billing/dashboard/v2/patient-bill-details/payment-mode.ts +124 -0
- package/src/billing/dashboard/v2/patient-bill-details/workspaces/add-claim-line/add-claim-line.workspace.scss +27 -0
- package/src/billing/dashboard/v2/patient-bill-details/workspaces/add-claim-line/add-claim-line.workspace.tsx +222 -0
- package/src/billing/dashboard/v2/patient-bill-details/workspaces/bill-item-payment/bill-item-payment.workspace.scss +27 -0
- package/src/billing/dashboard/v2/patient-bill-details/workspaces/bill-item-payment/bill-item-payment.workspace.tsx +109 -0
- package/src/billing/dashboard/v2/preauth/preauth-attachments.component.tsx +389 -0
- package/src/billing/dashboard/v2/preauth/preauth-list.component.scss +38 -0
- package/src/billing/dashboard/v2/preauth/preauth-list.component.tsx +226 -0
- package/src/billing/dashboard/v2/preauth/preauth-status-tag.component.tsx +75 -0
- package/src/billing/dashboard/v2/preauth/preauth-typed-fields.md +125 -0
- package/src/billing/dashboard/v2/preauth/preauth.resource.ts +1067 -0
- package/src/billing/dashboard/v2/preauth/preauth.workspace.scss +91 -0
- package/src/billing/dashboard/v2/preauth/preauth.workspace.tsx +1802 -0
- package/src/billing/dashboard/v2/preauth/preauthorizations-tab.component.tsx +45 -0
- package/src/billing/dashboard/v2/sha-claims/sha-claims-table.component.tsx +36 -0
- package/src/billing/dashboard/v2/sha-claims/sha-claims.component.tsx +60 -0
- package/src/billing/dashboard/v2/sha-claims/sha-claims.scss +8 -0
- package/src/billing/dashboard/v2/shared/dash-board-card/dash-board-card.component.scss +17 -0
- package/src/billing/dashboard/v2/shared/dash-board-card/dash-board-card.component.tsx +15 -0
- package/src/billing/dashboard/v2/shared/empty-state.component.scss +24 -0
- package/src/billing/dashboard/v2/shared/empty-state.component.tsx +13 -0
- package/src/billing/dashboard/v2/shared/scroll-to-top.component.scss +54 -0
- package/src/billing/dashboard/v2/shared/scroll-to-top.component.tsx +54 -0
- package/src/billing/dashboard/v2/shared/table-toolbar.component.scss +77 -0
- package/src/billing/dashboard/v2/shared/table-toolbar.component.tsx +48 -0
- package/src/billing/dashboard/v2/types/index.ts +507 -0
- package/src/billing/dashboard/v3/active-visits/active-visits.component.tsx +256 -0
- package/src/billing/dashboard/v3/active-visits/active-visits.resource.ts +57 -0
- package/src/billing/dashboard/v3/active-visits/active-visits.scss +15 -0
- package/src/billing/dashboard/v3/cash-checklist/bill-document.component.scss +90 -0
- package/src/billing/dashboard/v3/cash-checklist/bill-document.component.tsx +101 -0
- package/src/billing/dashboard/v3/cash-checklist/cash-checklist.component.scss +199 -0
- package/src/billing/dashboard/v3/cash-checklist/cash-checklist.component.tsx +361 -0
- package/src/billing/dashboard/v3/cash-checklist/cash-checklist.resource.ts +240 -0
- package/src/billing/dashboard/v3/cash-checklist/payment-drawer.component.scss +246 -0
- package/src/billing/dashboard/v3/cash-checklist/payment-drawer.component.tsx +182 -0
- package/src/billing/dashboard/v3/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.scss +0 -0
- package/src/billing/dashboard/v3/claim-visits/claim-diagnosis-details/claim-diagnosis-details.component.tsx +44 -0
- package/src/billing/dashboard/v3/claim-visits/claim-doctors/claim-doctors.scss +5 -0
- package/src/billing/dashboard/v3/claim-visits/claim-doctors/claim-doctors.tsx +42 -0
- package/src/billing/dashboard/v3/claim-visits/claim-documents/claim-documents.scss +10 -0
- package/src/billing/dashboard/v3/claim-visits/claim-documents/claim-documents.tsx +25 -0
- package/src/billing/dashboard/v3/claim-visits/claim-intervention-details/claim-intervention-details.component.tsx +223 -0
- package/src/billing/dashboard/v3/claim-visits/claim-invoice-details/claim-invoice-details.component.scss +6 -0
- package/src/billing/dashboard/v3/claim-visits/claim-invoice-details/claim-invoice-details.component.tsx +85 -0
- package/src/billing/dashboard/v3/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.scss +0 -0
- package/src/billing/dashboard/v3/claim-visits/claim-invoice-line-details/claim-invoice-line-details.component.tsx +109 -0
- package/src/billing/dashboard/v3/claim-visits/claim-visit-details/claim-visit-details.component.scss +97 -0
- package/src/billing/dashboard/v3/claim-visits/claim-visit-details/claim-visit-details.component.tsx +346 -0
- package/src/billing/dashboard/v3/claim-visits/claim-visits.component.scss +5 -0
- package/src/billing/dashboard/v3/claim-visits/claim-visits.component.tsx +139 -0
- package/src/billing/dashboard/v3/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.scss +5 -0
- package/src/billing/dashboard/v3/claim-visits/modal/claim-doctors/add-claim-doctor/add-claim-doctor.modal.tsx +49 -0
- package/src/billing/dashboard/v3/claim-visits/modal/claim-invoice-lines/claim-invoice-lines.modal.scss +7 -0
- package/src/billing/dashboard/v3/claim-visits/modal/claim-invoice-lines/claim-invoice-lines.modal.tsx +35 -0
- package/src/billing/dashboard/v3/claim-visits/modal/claim-visit-details/claim-visit-details.modal.scss +6 -0
- package/src/billing/dashboard/v3/claim-visits/modal/claim-visit-details/claim-visit-details.modal.tsx +33 -0
- package/src/billing/dashboard/v3/claim-visits/modal/close-claim/close-claim.modal.scss +0 -0
- package/src/billing/dashboard/v3/claim-visits/modal/close-claim/close-claim.modal.tsx +129 -0
- package/src/billing/dashboard/v3/claim-visits/modal/submit-claim/submit-claim.modal.tsx +204 -0
- package/src/billing/dashboard/v3/claim-visits/payer-preview/index.scss +140 -0
- package/src/billing/dashboard/v3/claim-visits/payer-preview/payer-preview-tile.component.tsx +55 -0
- package/src/billing/dashboard/v3/claim-visits/payer-preview/payer-preview-workspace.component.tsx +157 -0
- package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-claim-doctors.component.tsx +54 -0
- package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-claim-lines.component.tsx +48 -0
- package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-claim-notes.component.tsx +47 -0
- package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-diagnoses.component.tsx +44 -0
- package/src/billing/dashboard/v3/claim-visits/payer-preview/tables/payer-interventions.component.tsx +44 -0
- package/src/billing/dashboard/v3/claim-visits/switch-intervention/switch-intervention.resource.ts +51 -0
- package/src/billing/dashboard/v3/claim-visits/switch-intervention/switch-intervention.workspace.scss +191 -0
- package/src/billing/dashboard/v3/claim-visits/switch-intervention/switch-intervention.workspace.tsx +648 -0
- package/src/billing/dashboard/v3/claim-workspace/claim-workspace.component.scss +595 -0
- package/src/billing/dashboard/v3/claim-workspace/claim-workspace.component.tsx +810 -0
- package/src/billing/dashboard/v3/claim-workspace/claim-workspace.resource.ts +282 -0
- package/src/billing/dashboard/v3/claims-accounting/bill-utils.ts +134 -0
- package/src/billing/dashboard/v3/claims-accounting/claim-detail.component.tsx +346 -0
- package/src/billing/dashboard/v3/claims-accounting/claims-accounting.component.scss +546 -0
- package/src/billing/dashboard/v3/claims-accounting/claims-accounting.component.tsx +206 -0
- package/src/billing/dashboard/v3/claims-accounting/claims-accounting.resource.ts +337 -0
- package/src/billing/dashboard/v3/claims-accounting/invoice-document.component.scss +90 -0
- package/src/billing/dashboard/v3/claims-accounting/invoice-document.component.tsx +90 -0
- package/src/billing/dashboard/v3/claims-accounting/remittances.component.tsx +169 -0
- package/src/billing/dashboard/v3/claims-accounting/remittances.resource.ts +46 -0
- package/src/billing/dashboard/v3/claims-accounting/status-meta.ts +25 -0
- package/src/billing/dashboard/v3/clearance/clearance.component.scss +100 -0
- package/src/billing/dashboard/v3/clearance/clearance.component.tsx +0 -0
- package/src/billing/dashboard/v3/clearance/prepaid-services.component.tsx +112 -0
- package/src/billing/dashboard/v3/facility-bills/claim-status.ts +243 -0
- package/src/billing/dashboard/v3/facility-bills/facility-bills.component.scss +9 -0
- package/src/billing/dashboard/v3/facility-bills/facility-bills.component.tsx +172 -0
- package/src/billing/dashboard/v3/facility-bills/preauths-datatables/pending-preauths.component.tsx +132 -0
- package/src/billing/dashboard/v3/facility-bills/preauths-datatables/preauth-preview-table.component.tsx +232 -0
- package/src/billing/dashboard/v3/facility-bills/preauths.component.tsx +124 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/add-attachments.component.tsx +223 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/attachment.component.tsx +157 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/attachments.scss +92 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/case-summary/case-summary-helper.ts +58 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/case-summary/case-summary.scss +295 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/case-summary/case-summary.tsx +273 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/dialysis/dialysis-chart.scss +238 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/dialysis/dialysis-chart.tsx +314 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/discharge-summary/discharge-summary.scss +96 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/discharge-summary/discharge-summary.tsx +126 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/final-bill.component.tsx +75 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.scss +182 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/general-discharge-summary/general-discharge-summary.tsx +253 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/generate-attachments.component.tsx +343 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/invoice.component.tsx +150 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/invoice.scss +225 -0
- package/src/billing/dashboard/v3/patient-bill-details/attachments/type.ts +259 -0
- package/src/billing/dashboard/v3/patient-bill-details/bill-details/bill-details.scss +13 -0
- package/src/billing/dashboard/v3/patient-bill-details/bill-details/bill-details.tsx +235 -0
- package/src/billing/dashboard/v3/patient-bill-details/claim-details/patient-claim-details.component.scss +0 -0
- package/src/billing/dashboard/v3/patient-bill-details/claim-details/patient-claim-details.component.tsx +69 -0
- package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.scss +0 -0
- package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-diagnosis/add-claim-diagnosis.modal.tsx +99 -0
- package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-line/add-claim-line.modal.scss +14 -0
- package/src/billing/dashboard/v3/patient-bill-details/modals/add-claim-line/add-claim-line.modal.tsx +111 -0
- package/src/billing/dashboard/v3/patient-bill-details/modals/bill-item-payment/bill-item-payment.modal.scss +6 -0
- package/src/billing/dashboard/v3/patient-bill-details/modals/bill-item-payment/bill-item-payment.modal.tsx +139 -0
- package/src/billing/dashboard/v3/patient-bill-details/patient-bill-details.scss +85 -0
- package/src/billing/dashboard/v3/patient-bill-details/patient-bill-details.tsx +342 -0
- package/src/billing/dashboard/v3/patient-bill-details/visit-diagnosis-details/visit-diagnosis-details.component.scss +0 -0
- package/src/billing/dashboard/v3/patient-bill-details/visit-diagnosis-details/visit-diagnosis-details.component.tsx +92 -0
- package/src/billing/dashboard/v3/preauth/preauth-attachments.component.tsx +389 -0
- package/src/billing/dashboard/v3/preauth/preauth-list.component.scss +34 -0
- package/src/billing/dashboard/v3/preauth/preauth-list.component.tsx +281 -0
- package/src/billing/dashboard/v3/preauth/preauth-status-tag.component.tsx +75 -0
- package/src/billing/dashboard/v3/preauth/preauth-typed-fields.md +125 -0
- package/src/billing/dashboard/v3/preauth/preauth.resource.ts +1072 -0
- package/src/billing/dashboard/v3/preauth/preauth.workspace.scss +91 -0
- package/src/billing/dashboard/v3/preauth/preauth.workspace.tsx +1806 -0
- package/src/billing/dashboard/v3/preauth/preauthorizations-tab.component.tsx +45 -0
- package/src/billing/dashboard/v3/shared/empty-state.component.scss +25 -0
- package/src/billing/dashboard/v3/shared/empty-state.component.tsx +13 -0
- package/src/billing/dashboard/v3/shared/table-toolbar.component.scss +64 -0
- package/src/billing/dashboard/v3/shared/table-toolbar.component.tsx +48 -0
- package/src/billing/dashboard/v3/types/index.ts +381 -0
- package/src/billing/extensions/generate-order-bill-button/generate-order-bill-button.extension.tsx +55 -0
- package/src/billing/extensions/generate-order-bill-button/generate-order-bill-button.scss +16 -0
- package/src/billing/extensions/visit-billing/visit-billing.extension.scss +0 -0
- package/src/billing/extensions/visit-billing/visit-billing.extension.tsx +509 -0
- package/src/billing/invoice/bill.resource.ts +47 -0
- package/src/billing/invoice/invoice-header/header-card/header-card.scss +17 -0
- package/src/billing/invoice/invoice-header/header-card/header-card.tsx +21 -0
- package/src/billing/invoice/invoice.scss +113 -0
- package/src/billing/invoice/invoice.tsx +1441 -0
- package/src/billing/invoice/line-items/line-items.scss +0 -0
- package/src/billing/invoice/line-items/line-items.tsx +120 -0
- package/src/billing/invoice/modal/delete-bill-item/delete-bill-item.modal.scss +23 -0
- package/src/billing/invoice/modal/delete-bill-item/delete-bill-item.modal.tsx +114 -0
- package/src/billing/invoice/modal/edit-bill-item/edit-bill-item.modal.scss +0 -0
- package/src/billing/invoice/modal/edit-bill-item/edit-bill-item.modal.tsx +122 -0
- package/src/billing/invoice/payment-details/payment-details.scss +0 -0
- package/src/billing/invoice/payment-details/payment-details.tsx +43 -0
- package/src/billing/invoice/print-invoice/print-receipt.component.tsx +44 -0
- package/src/billing/invoice/print-invoice/print-receipt.scss +14 -0
- package/src/billing/maternity-discharge.resource.ts +21 -0
- package/src/billing/types/index.ts +354 -0
- package/src/billing/utils/index.ts +17 -0
- package/src/billing/widgets/billingTotalsRow.component.scss +0 -0
- package/src/billing/widgets/billingTotalsRow.component.tsx +712 -0
- package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.resource.ts +130 -0
- package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.scss +58 -0
- package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.workspace.tsx +645 -0
- package/src/billing/workspaces/create-order-bill-form-workspace/schema.ts +12 -0
- package/src/bookings/bookings.component.scss +7 -0
- package/src/bookings/bookings.component.tsx +35 -0
- package/src/bookings/daily/daily-bookings.resource.ts +2 -1
- package/src/case-summary/case-summary.extension.scss +13 -0
- package/src/case-summary/case-summary.extension.tsx +40 -0
- package/src/case-summary/case-summary.resource.test.ts +69 -0
- package/src/case-summary/case-summary.resource.ts +52 -0
- package/src/case-summary/components/case-summary-printable.component.scss +174 -0
- package/src/case-summary/components/case-summary-printable.component.tsx +288 -0
- package/src/case-summary/components/case-summary-printable.utils.ts +51 -0
- package/src/case-summary/types/case-summary.types.ts +152 -0
- package/src/claims/claims.component.scss +70 -0
- package/src/claims/claims.component.tsx +713 -0
- package/src/claims/claims.resource.ts +1274 -0
- package/src/claims/index.ts +340 -0
- package/src/claims/interventions.resource.ts +131 -0
- package/src/claims/utils.ts +64 -0
- package/src/config-schema.ts +119 -1
- package/src/context/patient-context.tsx +27 -0
- package/src/createDashboardLink.tsx +9 -0
- package/src/dashboard/charts/chart.component.scss +24 -0
- package/src/dashboard/charts/chart.component.tsx +56 -0
- package/src/dashboard/dashboard.component.scss +48 -3
- package/src/dashboard/dashboard.component.tsx +26 -36
- package/src/dashboard/overview/overview.component.scss +40 -59
- package/src/dashboard/overview/overview.component.tsx +53 -41
- package/src/dashboard-meta/accounting-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/admissions-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/billing-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/bookings-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/case-summary.meta.ts +6 -0
- package/src/dashboard-meta/consultation-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/dha-workflow-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/inpatient-admissions.meta.ts +6 -0
- package/src/dashboard-meta/maternity-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/mch-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/pharmacy-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/queue-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/registers-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/registry-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/service-queue-admin.meta.ts +6 -0
- package/src/dashboard-meta/specialized-clinics-dashboard.meta.ts +6 -0
- package/src/dashboard-meta/triage-dashboard.meta.ts +6 -0
- package/src/index.ts +177 -6
- package/src/mnch/maternity/maternity-queues.component.scss +7 -0
- package/src/mnch/maternity/maternity-queues.component.tsx +32 -0
- package/src/mnch/maternity/queues/triage/maternity-triage.tsx +15 -0
- package/src/mnch/mch/mch-queues.component.scss +10 -0
- package/src/mnch/mch/mch-queues.component.tsx +36 -0
- package/src/mnch/mch/queues/consultation/mch-consultation.tsx +18 -0
- package/src/mnch/mch/queues/triage/mch-triage.tsx +15 -0
- package/src/mnch/mnch-root.tsx +17 -0
- package/src/mortuary/mortuary.component.tsx +13 -0
- package/src/pharmacy/pharmacy.component.scss +16 -0
- package/src/pharmacy/pharmacy.component.tsx +11 -6
- package/src/registers/registers.component.tsx +8 -0
- package/src/registry/drawer/emr-compare.component.scss +263 -0
- package/src/registry/drawer/emr-compare.component.tsx +302 -0
- package/src/registry/drawer/emr-compare.resource.ts +181 -0
- package/src/registry/drawer/emr-create-preview.component.tsx +123 -0
- package/src/registry/drawer/otp-verification-step.component.tsx +398 -0
- package/src/registry/drawer/pomsf-balance.util.test.ts +177 -0
- package/src/registry/drawer/pomsf-balance.util.ts +79 -0
- package/src/registry/drawer/verification.resource.ts +60 -0
- package/src/registry/drawer/workflow-drawer.component.scss +1242 -0
- package/src/registry/drawer/workflow-drawer.component.tsx +1476 -0
- package/src/registry/eligibility/eligibility-details/eligibility-details.scss +38 -0
- package/src/registry/eligibility/eligibility-details/eligibility-details.tsx +101 -0
- package/src/registry/eligibility/eliigibility-tags/eligibility-tags.scss +16 -0
- package/src/registry/eligibility/eliigibility-tags/eligibility-tags.tsx +120 -0
- package/src/registry/eligibility/modal/eligibility-details.modal.scss +0 -0
- package/src/registry/eligibility/modal/eligibility-details.modal.tsx +45 -0
- package/src/registry/hie.resource.ts +408 -0
- package/src/registry/hie.types.ts +57 -0
- package/src/registry/modal/biometrics-verification-modal/biometrics-verification-modal.scss +277 -0
- package/src/registry/modal/biometrics-verification-modal/biometrics-verification-modal.tsx +218 -0
- package/src/registry/modal/biometrics-verification-modal/type.ts +39 -0
- package/src/registry/modal/client-details-modal/client-details-modal.tsx +65 -29
- package/src/registry/modal/otp-modal/otp-whitlisting-modal.component.tsx +809 -0
- package/src/registry/modal/otp-modal/otp-whitlisting-modal.scss +354 -0
- package/src/registry/modal/otp-modal/otp-whitlisting.scss +0 -0
- package/src/registry/modal/otp-verification-modal/claims-consent.scss +72 -0
- package/src/registry/modal/otp-verification-modal/claims-consent.tsx +135 -0
- package/src/registry/modal/otp-verification-modal/extension/claims-consent.extension.tsx +124 -0
- package/src/registry/modal/otp-verification-modal/otp-verification-modal.scss +30 -0
- package/src/registry/modal/otp-verification-modal/otp-verification-modal.tsx +154 -54
- package/src/registry/modal/send-to-triage/payment-details.tsx +120 -0
- package/src/registry/modal/send-to-triage/payment-method.component.tsx +54 -0
- package/src/registry/modal/send-to-triage/send-to-queue.modal.tsx +980 -0
- package/src/registry/modal/send-to-triage/send-to-triage.modal.scss +156 -3
- package/src/registry/modal/send-to-triage/send-to-triage.modal.tsx +1101 -131
- package/src/registry/modal/start-patient-visit/start-patient-visit.modal.scss +34 -0
- package/src/registry/modal/start-patient-visit/start-patient-visit.modal.tsx +231 -0
- package/src/registry/payment-details/payment-options/payment-options.scss +13 -0
- package/src/registry/payment-details/payment-options/payment-options.tsx +61 -14
- package/src/registry/registration-list/registration-list.component.scss +32 -0
- package/src/registry/registration-list/registration-list.component.tsx +103 -0
- package/src/registry/registry-entry.tsx +11 -0
- package/src/registry/registry.component.scss +402 -78
- package/src/registry/registry.component.tsx +547 -221
- package/src/registry/registry.resource.ts +22 -3
- package/src/registry/types/index.ts +118 -9
- package/src/registry/utils/error-handler.ts +54 -0
- package/src/registry/utils/format-dependant-display-data.ts +1 -1
- package/src/registry/utils/hie-client-adapter.ts +6 -3
- package/src/registry/utils/mask-data.ts +40 -0
- package/src/registry/utils/phone-number-formatter.ts +11 -0
- package/src/resources/dashboard.resource.ts +20 -0
- package/src/resources/identifier-types.ts +2 -0
- package/src/resources/patient-resource.ts +6 -1
- package/src/resources/queue.resource.ts +24 -1
- package/src/resources/superset.resource.ts +21 -0
- package/src/resources/visit.resource.ts +19 -1
- package/src/root.component.tsx +8 -5
- package/src/routes.json +417 -23
- package/src/service-queues/admin/queue/modal/create-queue/create-queue.modal.scss +31 -0
- package/src/service-queues/admin/queue/modal/create-queue/create-queue.modal.tsx +153 -0
- package/src/service-queues/admin/queue/modal/edit-queue/edit-queue.modal.scss +0 -0
- package/src/service-queues/admin/queue/modal/edit-queue/edit-queue.modal.tsx +182 -0
- package/src/service-queues/admin/queue/queue-list/queue-list.scss +33 -0
- package/src/service-queues/admin/queue/queue-list/queue-list.tsx +113 -0
- package/src/service-queues/admin/queue-entry/queue-entry-list.component.scss +6 -0
- package/src/service-queues/admin/queue-entry/queue-entry-list.component.tsx +137 -0
- package/src/service-queues/admin/queue-room/modal/create-queue-room/create-queue-room.modal.scss +31 -0
- package/src/service-queues/admin/queue-room/modal/create-queue-room/create-queue-room.modal.tsx +137 -0
- package/src/service-queues/admin/queue-room/modal/edit-queue-room/edit-queue-room.modal.scss +0 -0
- package/src/service-queues/admin/queue-room/modal/edit-queue-room/edit-queue-room.modal.tsx +146 -0
- package/src/service-queues/admin/queue-room/queue-room-list/queue-room-list.scss +22 -0
- package/src/service-queues/admin/queue-room/queue-room-list/queue-room-list.tsx +120 -0
- package/src/service-queues/admin/service-queue-admin-dashboard.component.scss +6 -0
- package/src/service-queues/admin/service-queue-admin-dashboard.component.tsx +34 -0
- package/src/service-queues/consultation/consultation.component.tsx +9 -0
- package/src/service-queues/extensions/service-queue-patient-banner/service-queue-patient-banner.scss +30 -0
- package/src/service-queues/extensions/service-queue-patient-banner/service-queue-patient-banner.tsx +108 -0
- package/src/service-queues/modals/daily-report-patient-list/daily-report-patient-list.scss +26 -0
- package/src/service-queues/modals/daily-report-patient-list/daily-report-patient-list.tsx +110 -0
- package/src/service-queues/modals/move/move-patient.component.scss +1 -1
- package/src/service-queues/modals/move/move-patient.component.tsx +31 -17
- package/src/service-queues/queue-list/check-in.service.ts +26 -0
- package/src/service-queues/queue-list/queue-list.component.scss +37 -0
- package/src/service-queues/queue-list/queue-list.component.tsx +256 -56
- package/src/service-queues/service-queue/service-queue.component.tsx +151 -8
- package/src/service-queues/service-queue/stats/stat-details/stat-details.component.scss +5 -0
- package/src/service-queues/service-queue/stats/stat-details/stat-details.component.tsx +36 -7
- package/src/service-queues/service-queue.tsx +22 -16
- package/src/service-queues/service-queues.resource.ts +197 -1
- package/src/service-queues/service.resource.ts +1 -1
- package/src/shared/constants/concepts.ts +50 -0
- package/src/shared/constants/patient-category.ts +6 -0
- package/src/shared/constants/patient-type.ts +10 -0
- package/src/shared/constants/visit-types.ts +7 -0
- package/src/shared/services/billing.resource.ts +75 -0
- package/src/shared/services/claims.resource.ts +47 -0
- package/src/shared/services/client-payment-mode.resource.ts +27 -0
- package/src/shared/services/client-payment.resource.ts +17 -0
- package/src/shared/services/consultation-clearance.resource.ts +210 -0
- package/src/shared/services/eligibility.resource.ts +20 -0
- package/src/shared/services/encounters.resource.ts +33 -0
- package/src/shared/services/location.resource.ts +9 -0
- package/src/shared/types/index.ts +156 -0
- package/src/shared/ui/aggregate-stat-card/aggregate-stat-card.scss +42 -0
- package/src/shared/ui/aggregate-stat-card/aggregate-stat-card.tsx +42 -0
- package/src/shared/ui/confirm-modal/confirm.modal.scss +18 -0
- package/src/shared/ui/confirm-modal/confirm.modal.tsx +38 -0
- package/src/shared/ui/facility-worker-slot/facility-worker.component-slot.component.scss +39 -0
- package/src/shared/ui/facility-worker-slot/facility-worker.component-slot.component.tsx +19 -0
- package/src/shared/ui/otp-input/otp-input.component.scss +14 -0
- package/src/shared/ui/otp-input/otp-input.component.tsx +97 -0
- package/src/{service-queues/service-queue/stats → shared/ui}/stat-card/stat-card.component.tsx +6 -3
- package/src/shared/ui/timer/timer.component.scss +5 -0
- package/src/shared/ui/timer/timer.component.tsx +40 -0
- package/src/shared/utils/get-base-url.ts +10 -0
- package/src/shared/utils/get-tag-type.ts +75 -0
- package/src/side-nav-menu/mnch-nav-link-config.ts +16 -0
- package/src/side-nav-menu/mnch-nav-links.tsx +42 -0
- package/src/side-nav-menu/nav-link-config.ts +1 -5
- package/src/side-nav-menu/specialized-clinics-nav-link-config.ts +36 -0
- package/src/side-nav-menu/specialized-clinics-nav-links.tsx +42 -0
- package/src/specialized-clinics/critital-care-unit/critical-care-unit-queues.component.scss +7 -0
- package/src/specialized-clinics/critital-care-unit/critical-care-unit-queues.component.tsx +36 -0
- package/src/specialized-clinics/critital-care-unit/queues/consultation/critical-care-unit-consultation.tsx +15 -0
- package/src/specialized-clinics/critital-care-unit/queues/triage/critical-care-unit-triage.tsx +15 -0
- package/src/specialized-clinics/dental/dental-queues.component.scss +7 -0
- package/src/specialized-clinics/dental/dental-queues.component.tsx +36 -0
- package/src/specialized-clinics/dental/queues/consultation/dental-consultation.tsx +15 -0
- package/src/specialized-clinics/dental/queues/triage/dental-triage.tsx +15 -0
- package/src/specialized-clinics/diagnostic-and-imaging/diagnostic-and-imaging.component.scss +7 -0
- package/src/specialized-clinics/diagnostic-and-imaging/diagnostic-and-imaging.component.tsx +36 -0
- package/src/specialized-clinics/diagnostic-and-imaging/queues/consultation/diagnosis-and-imaging-consultation.tsx +15 -0
- package/src/specialized-clinics/diagnostic-and-imaging/queues/triage/diagnosis-and-imaging-triage.tsx +15 -0
- package/src/specialized-clinics/oncology/oncology-queues.component.scss +7 -0
- package/src/specialized-clinics/oncology/oncology-queues.component.tsx +36 -0
- package/src/specialized-clinics/oncology/queues/consultation/oncology-consultation.tsx +15 -0
- package/src/specialized-clinics/oncology/queues/triage/oncology-triage.tsx +15 -0
- package/src/specialized-clinics/ophthalmology/ophthalmology-queues.component.scss +7 -0
- package/src/specialized-clinics/ophthalmology/ophthalmology-queues.component.tsx +36 -0
- package/src/specialized-clinics/ophthalmology/queues/consultation/ophthalmology-consultation.tsx +15 -0
- package/src/specialized-clinics/ophthalmology/queues/triage/ophthalmology-triage.tsx +15 -0
- package/src/specialized-clinics/psychiatry/psychiatry-queues.component.scss +7 -0
- package/src/specialized-clinics/psychiatry/psychiatry-queues.component.tsx +36 -0
- package/src/specialized-clinics/psychiatry/queues/consultation/psychiatry-consultation.tsx +15 -0
- package/src/specialized-clinics/psychiatry/queues/triage/psychiatry-triage.tsx +15 -0
- package/src/specialized-clinics/renal/queues/consultation/dialysis-consultation.tsx +15 -0
- package/src/specialized-clinics/renal/queues/triage/renal-triage.tsx +15 -0
- package/src/specialized-clinics/renal/renal-queues.component.scss +7 -0
- package/src/specialized-clinics/renal/renal-queues.component.tsx +36 -0
- package/src/specialized-clinics/specialized-clinics-root.tsx +27 -0
- package/src/triage/triage.component.scss +6 -0
- package/src/triage/triage.component.tsx +4 -0
- package/src/types/types.ts +56 -1
- package/webpack.config.js +54 -1
- package/dist/104.js +0 -2
- package/dist/104.js.map +0 -1
- package/dist/15.js +0 -1
- package/dist/15.js.map +0 -1
- package/dist/184.js +0 -2
- package/dist/184.js.map +0 -1
- package/dist/197.js +0 -1
- package/dist/255.js +0 -1
- package/dist/255.js.map +0 -1
- package/dist/300.js +0 -1
- package/dist/335.js +0 -1
- package/dist/339.js +0 -1
- package/dist/339.js.map +0 -1
- package/dist/353.js +0 -1
- package/dist/353.js.map +0 -1
- package/dist/420.js +0 -1
- package/dist/420.js.map +0 -1
- package/dist/540.js +0 -2
- package/dist/540.js.map +0 -1
- package/dist/55.js +0 -1
- package/dist/652.js +0 -1
- package/dist/709.js +0 -1
- package/dist/709.js.map +0 -1
- package/dist/710.js +0 -2
- package/dist/710.js.map +0 -1
- package/dist/729.js +0 -1
- package/dist/729.js.map +0 -1
- package/dist/752.js +0 -1
- package/dist/752.js.map +0 -1
- package/dist/833.js +0 -1
- package/dist/833.js.map +0 -1
- package/dist/907.js +0 -1
- package/dist/907.js.map +0 -1
- package/dist/91.js +0 -1
- package/dist/91.js.map +0 -1
- package/dist/93.js +0 -1
- package/dist/93.js.map +0 -1
- package/dist/943.js +0 -1
- package/dist/943.js.map +0 -1
- package/dist/99.js +0 -1
- /package/dist/{104.js.LICENSE.txt → 2177.js.LICENSE.txt} +0 -0
- /package/dist/{184.js.LICENSE.txt → 3184.js.LICENSE.txt} +0 -0
- /package/dist/{540.js.LICENSE.txt → 6540.js.LICENSE.txt} +0 -0
- /package/dist/{710.js.LICENSE.txt → 7830.js.LICENSE.txt} +0 -0
- /package/dist/{810.js.LICENSE.txt → 9583.js.LICENSE.txt} +0 -0
- /package/src/{service-queues/service-queue/stats → shared/ui}/stat-card/stat-card.component.scss +0 -0
|
@@ -0,0 +1,687 @@
|
|
|
1
|
+
import React, { useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
type FacilityBillsDto,
|
|
4
|
+
type FacilityBill,
|
|
5
|
+
type ClaimVisitReponse,
|
|
6
|
+
type PatientBill,
|
|
7
|
+
BillLineItem,
|
|
8
|
+
BillPayment,
|
|
9
|
+
} from '../types';
|
|
10
|
+
import {
|
|
11
|
+
Button,
|
|
12
|
+
DataTable,
|
|
13
|
+
DataTableSkeleton,
|
|
14
|
+
Pagination,
|
|
15
|
+
Tab,
|
|
16
|
+
TabList,
|
|
17
|
+
TabPanel,
|
|
18
|
+
TabPanels,
|
|
19
|
+
Table,
|
|
20
|
+
TableBody,
|
|
21
|
+
TableCell,
|
|
22
|
+
TableHead,
|
|
23
|
+
TableHeader,
|
|
24
|
+
TableRow,
|
|
25
|
+
Tabs,
|
|
26
|
+
Tag,
|
|
27
|
+
} from '@carbon/react';
|
|
28
|
+
import { Renew, WarningAltFilled } from '@carbon/react/icons';
|
|
29
|
+
import { formatDate, parseDate, showSnackbar, usePagination } from '@openmrs/esm-framework';
|
|
30
|
+
import { useTranslation } from 'react-i18next';
|
|
31
|
+
import { useNavigate } from 'react-router-dom';
|
|
32
|
+
import {
|
|
33
|
+
claimVisitGuid,
|
|
34
|
+
claimVisitToken,
|
|
35
|
+
fetchFacilityBills,
|
|
36
|
+
useFacilityClaimVisits,
|
|
37
|
+
useLiveClaimStates,
|
|
38
|
+
} from '../../../billing-claims.resource';
|
|
39
|
+
import styles from './facility-bills.component.scss';
|
|
40
|
+
import TableToolbar from '../shared/table-toolbar.component';
|
|
41
|
+
import EmptyState from '../shared/empty-state.component';
|
|
42
|
+
import { ALL_BILL_BUCKETS, CLAIM_BUCKETS, PAYMENT_BUCKETS, type StatusBucket, statusMeta } from './claim-status';
|
|
43
|
+
|
|
44
|
+
// Show the CR with its "CR" prefix, e.g. CR7138388758297-0; dash when absent.
|
|
45
|
+
const formatCr = (value?: string | null): string => {
|
|
46
|
+
const v = (value ?? '').trim();
|
|
47
|
+
if (!v) return '—';
|
|
48
|
+
return /^cr/i.test(v) ? v : `CR${v}`;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// The same CR reaches us with and without its prefix and in either case — the bills
|
|
52
|
+
// endpoint and the claims-visit endpoint don't agree — so both sides are put through
|
|
53
|
+
// this before being matched.
|
|
54
|
+
const crKey = (value?: string | null): string => {
|
|
55
|
+
const v = (value ?? '').trim().toUpperCase();
|
|
56
|
+
if (!v) return '';
|
|
57
|
+
return v.startsWith('CR') ? v : `CR${v}`;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// The bills endpoint carries no payment mode; a consent token means the visit was
|
|
61
|
+
// authorised through SHA/HIE, anything else is settled at the cash point.
|
|
62
|
+
const paymentMode = (bill: PatientBill): string => ((bill.consent_token ?? '').trim() ? 'SHA' : 'Cash');
|
|
63
|
+
|
|
64
|
+
// Claim visits are listed with the time of day, not just the date: the same claim can be
|
|
65
|
+
// recorded against several visits on one day, and the start time is what tells those
|
|
66
|
+
// rows apart.
|
|
67
|
+
const formatVisitDate = (value?: string | null): string => {
|
|
68
|
+
const v = (value ?? '').trim();
|
|
69
|
+
if (!v) {
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
return formatDate(parseDate(v), { time: true, noToday: true });
|
|
74
|
+
} catch {
|
|
75
|
+
return v;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// A bill's paid_status is a comma-separated per-line-item list; the bill is only paid
|
|
80
|
+
// once every line is.
|
|
81
|
+
function formatStatusColumn(status: string): string {
|
|
82
|
+
const statusArr = (status ?? '').split(',');
|
|
83
|
+
if (statusArr.length > 0) {
|
|
84
|
+
if (statusArr.some((s) => s === 'POSTED')) {
|
|
85
|
+
return 'PARTIALLY PAID';
|
|
86
|
+
}
|
|
87
|
+
if (statusArr.some((s) => s === 'PENDING')) {
|
|
88
|
+
return 'PENDING';
|
|
89
|
+
}
|
|
90
|
+
return 'PAID';
|
|
91
|
+
}
|
|
92
|
+
return status;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* One table row, whatever it was built from — a cash bill or a SHA claim. The two
|
|
97
|
+
* sources describe different things (a bill is what was charged, a claim is what was
|
|
98
|
+
* filed with the payer), so they are normalised here rather than at the point of
|
|
99
|
+
* rendering.
|
|
100
|
+
*/
|
|
101
|
+
interface BillRow {
|
|
102
|
+
id: string;
|
|
103
|
+
patientName: string;
|
|
104
|
+
crNumber: string;
|
|
105
|
+
visitType: string;
|
|
106
|
+
/** Raw status, used both for bucketing and for the tag: a claim's workflow_state, or
|
|
107
|
+
a bill's payment status. */
|
|
108
|
+
status: string;
|
|
109
|
+
billDate: string;
|
|
110
|
+
/** Set only when a facility bill backs this row. The bill-details drill-down is keyed
|
|
111
|
+
on the OpenMRS patient uuid, which /claims-visit doesn't carry, so a claim with no
|
|
112
|
+
matching bill has no bill to open. */
|
|
113
|
+
patientUuid: string;
|
|
114
|
+
/** Set on claim rows. Opens the claim itself — the one way in for a claim no bill was
|
|
115
|
+
raised against. */
|
|
116
|
+
consentToken: string;
|
|
117
|
+
/** The claim's authorization guid, which is what its page is addressed by. Empty on
|
|
118
|
+
rows built from a bill, which carries no guid. */
|
|
119
|
+
claimGuid: string;
|
|
120
|
+
/** Everything the free-text search looks at, pre-joined. */
|
|
121
|
+
searchText: string;
|
|
122
|
+
lineItems?: BillLineItem[];
|
|
123
|
+
payments?: BillPayment[];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const billRow = (fb: PatientBill): BillRow => {
|
|
127
|
+
const status = formatStatusColumn(fb.bill_status);
|
|
128
|
+
return {
|
|
129
|
+
id: `bill-${fb.bill_uuid}`,
|
|
130
|
+
patientName: fb.patient_name,
|
|
131
|
+
crNumber: formatCr(fb.identifier),
|
|
132
|
+
visitType: fb.visit_type || '—',
|
|
133
|
+
status,
|
|
134
|
+
billDate: fb.bill_date || '—',
|
|
135
|
+
patientUuid: fb.patient_uuid ?? '',
|
|
136
|
+
consentToken: (fb.consent_token ?? '').trim(),
|
|
137
|
+
claimGuid: '',
|
|
138
|
+
// The cash point is no longer a column but is still searchable — it's how a cashier
|
|
139
|
+
// finds their own bills.
|
|
140
|
+
searchText: `${fb.patient_name} ${formatCr(fb.identifier)} ${fb.receipt_number ?? ''} ${
|
|
141
|
+
fb.visit_type ?? ''
|
|
142
|
+
} ${status} ${fb.cash_point ?? ''}`.toLowerCase(),
|
|
143
|
+
lineItems: fb.bill_items,
|
|
144
|
+
payments: fb.payments,
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// Newest claim visit first, so the most recent work is at the top of the tab. Anything
|
|
149
|
+
// without a usable timestamp sorts by the record id instead.
|
|
150
|
+
const claimTime = (cv: ClaimVisitReponse): number => {
|
|
151
|
+
const parsed = Date.parse(cv.dateCreated ?? cv.visitStart ?? '');
|
|
152
|
+
return Number.isNaN(parsed) ? 0 : parsed;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Every record /claims-visit returns is a row.
|
|
157
|
+
*
|
|
158
|
+
* The same HIE claim can come back more than once — the same claimVisitId and
|
|
159
|
+
* authorization code against several local visits, e.g. ids 59 and 61 of visit
|
|
160
|
+
* 2403e12b — and each of those is its own claim visit with its own visit number, so
|
|
161
|
+
* each is listed. Collapsing them would hide a visit that was actually recorded.
|
|
162
|
+
*/
|
|
163
|
+
const orderClaimVisits = (visits: ClaimVisitReponse[]): ClaimVisitReponse[] =>
|
|
164
|
+
[...(visits ?? [])].sort((a, b) => claimTime(b) - claimTime(a) || (b.id ?? 0) - (a.id ?? 0));
|
|
165
|
+
|
|
166
|
+
// Status buckets for a payer tab: cash, SHA claims, or both vocabularies together.
|
|
167
|
+
const bucketsForTab = (index: number): StatusBucket[] =>
|
|
168
|
+
index === 0 ? PAYMENT_BUCKETS : index === 1 ? CLAIM_BUCKETS : ALL_BILL_BUCKETS;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Which payer an instance of this component lists. Each is a tab of the dashboard now —
|
|
172
|
+
* they were sub-tabs inside this component, and a payer bar under a tab that already
|
|
173
|
+
* named the payer was a second row of tabs saying the same thing.
|
|
174
|
+
*
|
|
175
|
+
* The numbers are the payer vocabulary read throughout — `bucketsForTab`, `activeRows`,
|
|
176
|
+
* `payerNoun` all switch on them — so they are named rather than renumbered.
|
|
177
|
+
*/
|
|
178
|
+
export const CASH_PAYER_TAB = 0;
|
|
179
|
+
export const SHA_PAYER_TAB = 1;
|
|
180
|
+
export const ALL_BILLS_PAYER_TAB = 2;
|
|
181
|
+
|
|
182
|
+
// The status sub-tab a payer opens on: Draft when it has one (SHA / preauths), else
|
|
183
|
+
// Pending (cash), else the first bucket.
|
|
184
|
+
const defaultBucketKey = (buckets: StatusBucket[]): string => {
|
|
185
|
+
const preferred = buckets.find((b) => b.key === 'draft') ?? buckets.find((b) => b.key === 'pending');
|
|
186
|
+
return (preferred ?? buckets[0])?.key ?? '';
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
// The status bucket last being read, held at module scope so it survives this tab
|
|
190
|
+
// unmounting while the user stays inside billing — which is what opening a claim now does,
|
|
191
|
+
// since a claim has its own route. Deliberately not persisted any further: a page reload
|
|
192
|
+
// should start on the defaults. Cleared with the date filter when the user leaves billing
|
|
193
|
+
// altogether (see resetFacilityBillsFilters callers).
|
|
194
|
+
//
|
|
195
|
+
// Kept per payer. Each payer is a separate instance of this component and both are mounted
|
|
196
|
+
// at once inside the dashboard's tab panels, so a single slot would have them overwrite
|
|
197
|
+
// each other's memory on every render — and the buckets aren't even the same vocabulary.
|
|
198
|
+
const lastStatusFilterByPayer: Record<number, string> = {};
|
|
199
|
+
|
|
200
|
+
/** Forget the remembered status buckets, so each tab opens on its default. */
|
|
201
|
+
export function resetFacilityBillsFilters() {
|
|
202
|
+
for (const key of Object.keys(lastStatusFilterByPayer)) {
|
|
203
|
+
delete lastStatusFilterByPayer[Number(key)];
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
interface facilityBillsProps {
|
|
208
|
+
billingDate: string;
|
|
209
|
+
locationUuid: string;
|
|
210
|
+
onDateChange?: (value: string) => void;
|
|
211
|
+
/** Which payer this instance lists — one of the `*_PAYER_TAB` constants. */
|
|
212
|
+
payerTab: number;
|
|
213
|
+
/** Status bucket to open on when a dashboard tile is clicked. `navNonce` changes on
|
|
214
|
+
every click, so clicking the same tile twice still navigates. */
|
|
215
|
+
navStatusKey?: string;
|
|
216
|
+
navNonce?: number;
|
|
217
|
+
}
|
|
218
|
+
const FacilityBills: React.FC<facilityBillsProps> = ({
|
|
219
|
+
billingDate,
|
|
220
|
+
locationUuid,
|
|
221
|
+
onDateChange,
|
|
222
|
+
payerTab,
|
|
223
|
+
navStatusKey,
|
|
224
|
+
navNonce,
|
|
225
|
+
}) => {
|
|
226
|
+
const [facilityBills, setFacilityBills] = useState<PatientBill[]>([]);
|
|
227
|
+
// The SHA claims themselves, straight from /claims-visit — the rows of the SHA tab and
|
|
228
|
+
// the source of every claim status shown on this page. Shared with the dashboard tiles,
|
|
229
|
+
// so a tile and this table can't disagree about which claims exist.
|
|
230
|
+
const {
|
|
231
|
+
claimVisits,
|
|
232
|
+
loading: claimsLoading,
|
|
233
|
+
reload: loadClaimVisits,
|
|
234
|
+
} = useFacilityClaimVisits(locationUuid, billingDate);
|
|
235
|
+
const [search, setSearch] = useState<string>('');
|
|
236
|
+
const [loading, setLoading] = useState<boolean>(true);
|
|
237
|
+
// Fixed for the life of this instance — the dashboard tab that mounted it is what
|
|
238
|
+
// chooses the payer. Kept under the old name because the payer index is read in a dozen
|
|
239
|
+
// places below and it is the same number it always was.
|
|
240
|
+
const tabIndex = payerTab;
|
|
241
|
+
// Selected status bucket key ('' = All). Defaults to the first bucket of the payer
|
|
242
|
+
// (Drafts for SHA claims, Pending for cash).
|
|
243
|
+
const [statusFilter, setStatusFilter] = useState<string>(
|
|
244
|
+
() => lastStatusFilterByPayer[payerTab] ?? defaultBucketKey(bucketsForTab(payerTab)),
|
|
245
|
+
);
|
|
246
|
+
const { t } = useTranslation();
|
|
247
|
+
const navigate = useNavigate();
|
|
248
|
+
const pageSizes = [10, 20, 30, 40, 50];
|
|
249
|
+
const [currentPageSize, setPageSize] = useState(10);
|
|
250
|
+
useEffect(() => {
|
|
251
|
+
if (locationUuid && billingDate) {
|
|
252
|
+
getFacilityBills();
|
|
253
|
+
}
|
|
254
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
255
|
+
}, [billingDate, locationUuid]);
|
|
256
|
+
|
|
257
|
+
// Remember what is being read, so opening a claim — which now navigates away to the
|
|
258
|
+
// claim's own page — and coming back lands on the same status bucket.
|
|
259
|
+
useEffect(() => {
|
|
260
|
+
lastStatusFilterByPayer[payerTab] = statusFilter;
|
|
261
|
+
}, [payerTab, statusFilter]);
|
|
262
|
+
|
|
263
|
+
async function getFacilityBills() {
|
|
264
|
+
setLoading(true);
|
|
265
|
+
const facilityBillsPayload = generateFacilityBillsPayload();
|
|
266
|
+
try {
|
|
267
|
+
const data = await fetchFacilityBills(facilityBillsPayload);
|
|
268
|
+
console.log('FACILITY BILLS', data);
|
|
269
|
+
setFacilityBills(data ?? []);
|
|
270
|
+
} catch (error) {
|
|
271
|
+
showSnackbar({
|
|
272
|
+
kind: 'error',
|
|
273
|
+
title: 'Error fetching facility bills',
|
|
274
|
+
subtitle: 'An error occurred while fetching facility bills, please reload or contact support',
|
|
275
|
+
});
|
|
276
|
+
} finally {
|
|
277
|
+
setLoading(false);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function generateFacilityBillsPayload(): FacilityBillsDto {
|
|
281
|
+
return {
|
|
282
|
+
locationUuid: locationUuid ?? '',
|
|
283
|
+
billingDate: billingDate,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Open a row. The patient name is the way in, on every tab.
|
|
289
|
+
*
|
|
290
|
+
* A claim goes to its own page, addressed by its consent token, so it can be linked to
|
|
291
|
+
* and reloaded and Back returns here. Elsewhere the patient view is the comprehensive
|
|
292
|
+
* one — bill items, diagnosis, payments and the claim together — and it is keyed on the
|
|
293
|
+
* OpenMRS patient uuid, which only a matched bill gives us; the claim page is the
|
|
294
|
+
* fallback for a bill-less claim.
|
|
295
|
+
*/
|
|
296
|
+
function openRowDetails(patientUuid: string, consentToken: string, claimGuid: string) {
|
|
297
|
+
// On the SHA tab every row *is* a claim, so the claim page is what it opens, even
|
|
298
|
+
// when a bill was matched to it.
|
|
299
|
+
if (consentToken && (tabIndex === 1 || !patientUuid)) {
|
|
300
|
+
// Addressed by the claim's authorization guid. The token goes along in router
|
|
301
|
+
// state so the page doesn't have to look the claim up again on the way in — it
|
|
302
|
+
// only falls back to a lookup when the URL is opened cold.
|
|
303
|
+
navigate(`/claim/${encodeURIComponent(claimGuid || consentToken)}`, { state: { consentToken } });
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
if (patientUuid) {
|
|
307
|
+
// The bill has its own route now, the same as the claim above — so it can be linked
|
|
308
|
+
// to and reloaded, and Back returns to this list rather than leaving billing.
|
|
309
|
+
navigate(`/bill/${encodeURIComponent(patientUuid)}`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// Split the bills by payer so each tab shows only its own.
|
|
313
|
+
// const cashBills = useMemo(() => (facilityBills ?? []).filter((fb) => paymentMode(fb) === 'Cash'), [facilityBills]);
|
|
314
|
+
// const shaBills = useMemo(() => (facilityBills ?? []).filter((fb) => paymentMode(fb) === 'SHA'), [facilityBills]);
|
|
315
|
+
const shaBills = useMemo(
|
|
316
|
+
() =>
|
|
317
|
+
(facilityBills ?? []).filter((bill) => bill.bill_items.some((item) => item.price_name?.toUpperCase() === 'SHA')),
|
|
318
|
+
[facilityBills],
|
|
319
|
+
);
|
|
320
|
+
const cashBills = useMemo(
|
|
321
|
+
() =>
|
|
322
|
+
(facilityBills ?? []).filter((bill) => {
|
|
323
|
+
const hasSha = bill.bill_items.some((item) => item.price_name?.toUpperCase() === 'SHA');
|
|
324
|
+
|
|
325
|
+
const hasCash = bill.bill_items.some((item) => item.price_name?.toUpperCase() === 'CASH');
|
|
326
|
+
|
|
327
|
+
return hasCash && !hasSha;
|
|
328
|
+
}),
|
|
329
|
+
[facilityBills],
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
// Every claim listed for this date, by consent token, so its live state can be
|
|
333
|
+
// resolved. Only the tabs that show claim statuses ask for them — the cash tab never
|
|
334
|
+
// reads one, and each is a slow round trip to the HIE.
|
|
335
|
+
const claimTokens = useMemo(() => (claimVisits ?? []).map(claimVisitToken).filter(Boolean), [claimVisits]);
|
|
336
|
+
const {
|
|
337
|
+
states: liveClaimStates,
|
|
338
|
+
settled: statesSettled,
|
|
339
|
+
failed: statesFailed,
|
|
340
|
+
} = useLiveClaimStates(claimTokens, locationUuid, tabIndex !== 0);
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* The SHA tab lists claims, and its rows come from /claims-visit — the endpoint that
|
|
344
|
+
* owns each claim's workflow_state — not from the bills. Deriving them from the bills
|
|
345
|
+
* meant a claim only appeared once a bill had been raised and matched to it, so claims
|
|
346
|
+
* filed against a visit with no bill (or one whose consent token didn't line up) were
|
|
347
|
+
* missing from every status bucket.
|
|
348
|
+
*
|
|
349
|
+
* A bill is still looked up for each claim, for the thing a claim doesn't carry: the
|
|
350
|
+
* OpenMRS patient uuid the bill drill-down needs. /claims-visit identifies the visit
|
|
351
|
+
* two ways and the bills endpoint agrees with each on a different field — the
|
|
352
|
+
* authorization code is the bill's consent token, patientId is its CR number — so both
|
|
353
|
+
* are tried before giving up.
|
|
354
|
+
*/
|
|
355
|
+
const { claimRows, matchedBillIds } = useMemo(() => {
|
|
356
|
+
const byToken = new Map<string, PatientBill>();
|
|
357
|
+
const byCr = new Map<string, PatientBill>();
|
|
358
|
+
shaBills.forEach((fb) => {
|
|
359
|
+
const token = (fb.consent_token ?? '').trim().toUpperCase();
|
|
360
|
+
if (token && !byToken.has(token)) {
|
|
361
|
+
byToken.set(token, fb);
|
|
362
|
+
}
|
|
363
|
+
const cr = crKey(fb.identifier);
|
|
364
|
+
if (cr && !byCr.has(cr)) {
|
|
365
|
+
byCr.set(cr, fb);
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
const matched = new Set<string>();
|
|
370
|
+
const rows = orderClaimVisits(claimVisits ?? []).map((cv) => {
|
|
371
|
+
const claim = cv.visitResponse;
|
|
372
|
+
const consentToken = (cv.authorizationCode || claim?.authorization_code || '').trim();
|
|
373
|
+
const token = consentToken.toUpperCase();
|
|
374
|
+
const cr = crKey(cv.patientId || claim?.member_number);
|
|
375
|
+
const bill = (token ? byToken.get(token) : undefined) ?? (cr ? byCr.get(cr) : undefined);
|
|
376
|
+
if (bill) {
|
|
377
|
+
matched.add(bill.bill_uuid);
|
|
378
|
+
}
|
|
379
|
+
// The live state when the claim preview has answered, and only until then the copy
|
|
380
|
+
// /claims-visit stored when the visit was recorded — that copy is frozen at DRAFT
|
|
381
|
+
// for any claim submitted since.
|
|
382
|
+
const status = liveClaimStates[consentToken] || (claim?.workflow_state ?? '').trim();
|
|
383
|
+
const patientName = claim?.patient_name || bill?.patient_name || '—';
|
|
384
|
+
const crNumber = formatCr(cv.patientId || claim?.member_number);
|
|
385
|
+
const visitType = cv.serviceType || claim?.service_type || bill?.visit_type || '—';
|
|
386
|
+
const visitNumber = cv.claimVisitNumber || claim?.visit_number || '';
|
|
387
|
+
return {
|
|
388
|
+
// Keyed on the record id, not the claim: two records can share a claim.
|
|
389
|
+
id: `claim-${cv.id}`,
|
|
390
|
+
patientName,
|
|
391
|
+
crNumber,
|
|
392
|
+
visitType,
|
|
393
|
+
status,
|
|
394
|
+
billDate: formatVisitDate(cv.visitStart || claim?.visit_start) || bill?.bill_date || '—',
|
|
395
|
+
patientUuid: bill?.patient_uuid ?? '',
|
|
396
|
+
consentToken,
|
|
397
|
+
claimGuid: claimVisitGuid(cv),
|
|
398
|
+
searchText: `${patientName} ${crNumber} ${visitType} ${status} ${visitNumber} ${token} ${
|
|
399
|
+
claim?.invoice_number ?? ''
|
|
400
|
+
} ${bill?.cash_point ?? ''}`.toLowerCase(),
|
|
401
|
+
} as BillRow;
|
|
402
|
+
});
|
|
403
|
+
return { claimRows: rows, matchedBillIds: matched };
|
|
404
|
+
}, [claimVisits, shaBills, liveClaimStates]);
|
|
405
|
+
|
|
406
|
+
const cashRows = useMemo(() => cashBills.map(billRow), [cashBills]);
|
|
407
|
+
// SHA bills no claim was found for. They'd otherwise drop out of "All bills"
|
|
408
|
+
// altogether, so they stay on as bill rows reporting what was paid.
|
|
409
|
+
const unmatchedShaRows = useMemo(
|
|
410
|
+
() => shaBills.filter((fb) => !matchedBillIds.has(fb.bill_uuid)).map(billRow),
|
|
411
|
+
[shaBills, matchedBillIds],
|
|
412
|
+
);
|
|
413
|
+
// 0 = Cash bills, 1 = SHA claims, 2 = All bills (both payers together).
|
|
414
|
+
const allRows = useMemo(
|
|
415
|
+
() => [...cashRows, ...claimRows, ...unmatchedShaRows],
|
|
416
|
+
[cashRows, claimRows, unmatchedShaRows],
|
|
417
|
+
);
|
|
418
|
+
const activeRows: BillRow[] = tabIndex === 0 ? cashRows : tabIndex === 1 ? claimRows : allRows;
|
|
419
|
+
|
|
420
|
+
// Nothing is shown on the claim tabs until both halves are in: the claims themselves,
|
|
421
|
+
// and the live state of every one of them. Rendering in between would put the stored
|
|
422
|
+
// states on screen — DRAFT for claims long since submitted — and let them be acted on
|
|
423
|
+
// before they silently corrected themselves.
|
|
424
|
+
const rowsLoading = tabIndex !== 0 && (claimsLoading || !statesSettled);
|
|
425
|
+
|
|
426
|
+
const statusOf = (row: BillRow): string => (row.status ?? '').trim().toUpperCase();
|
|
427
|
+
/**
|
|
428
|
+
* A status none of the buckets name — a claim state the HIE has added since, say —
|
|
429
|
+
* would be listed under "All" and under no other sub-tab. Collecting the leftovers
|
|
430
|
+
* into their own tab keeps the buckets honest: everything the endpoint returned is
|
|
431
|
+
* reachable from somewhere.
|
|
432
|
+
*/
|
|
433
|
+
const leftoverBucket = (rows: BillRow[], buckets: StatusBucket[]): StatusBucket | null => {
|
|
434
|
+
const known = new Set(buckets.flatMap((b) => b.statuses.map((s) => s.toUpperCase())));
|
|
435
|
+
const leftovers = Array.from(new Set(rows.map(statusOf))).filter((s) => !known.has(s));
|
|
436
|
+
return leftovers.length ? { key: 'other', label: 'Other', statuses: leftovers } : null;
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
const baseBuckets = bucketsForTab(tabIndex);
|
|
440
|
+
// Held back with the rest: an "Other" tab derived from states still being confirmed
|
|
441
|
+
// would appear and then vanish as they land.
|
|
442
|
+
const extraBucket = rowsLoading ? null : leftoverBucket(activeRows, baseBuckets);
|
|
443
|
+
const statusBuckets: StatusBucket[] = extraBucket ? [...baseBuckets, extraBucket] : baseBuckets;
|
|
444
|
+
const selectedBucket = statusBuckets.find((b) => b.key === statusFilter);
|
|
445
|
+
const bucketMatches = (bucket: StatusBucket, row: BillRow): boolean =>
|
|
446
|
+
bucket.statuses.some((s) => s.toUpperCase() === statusOf(row));
|
|
447
|
+
|
|
448
|
+
// Rows in the current status bucket, before the free-text search is applied. Drives
|
|
449
|
+
// whether the search box is shown (only when there's something to search).
|
|
450
|
+
const bucketRows = activeRows.filter((row) => !selectedBucket || bucketMatches(selectedBucket, row));
|
|
451
|
+
const filteredRows = bucketRows.filter((row) => {
|
|
452
|
+
const term = search.trim().toLowerCase();
|
|
453
|
+
return !term || row.searchText.includes(term);
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
const { goTo, results: paginatedRows, currentPage } = usePagination(filteredRows, currentPageSize);
|
|
457
|
+
|
|
458
|
+
// A dashboard tile was clicked: open the payer tab it counted and the bucket it named,
|
|
459
|
+
// so the number on the tile and the rows landed on are the same set.
|
|
460
|
+
useEffect(() => {
|
|
461
|
+
if (!navNonce) {
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
// The payer is fixed by the tab that mounted this, so only the bucket within it is
|
|
465
|
+
// navigable — sending a tile to another payer is the dashboard's job now.
|
|
466
|
+
if (navStatusKey) {
|
|
467
|
+
setStatusFilter(navStatusKey);
|
|
468
|
+
}
|
|
469
|
+
setSearch('');
|
|
470
|
+
goTo(1);
|
|
471
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
472
|
+
}, [navNonce]);
|
|
473
|
+
|
|
474
|
+
const columns = [
|
|
475
|
+
{ id: 'index', header: '#', key: 'index' },
|
|
476
|
+
{ id: 'patientName', header: 'Patient', key: 'patientName' },
|
|
477
|
+
{ id: 'crNumber', header: 'CR number', key: 'crNumber' },
|
|
478
|
+
{ id: 'visitType', header: 'Visit type', key: 'visitType' },
|
|
479
|
+
{ id: 'status', header: 'Status', key: 'status' },
|
|
480
|
+
{ id: 'billDate', header: 'Date', key: 'billDate' },
|
|
481
|
+
// Carried on the row but never shown: what the patient name opens is decided from
|
|
482
|
+
// these three.
|
|
483
|
+
{ id: 'patientUuid', header: '', key: 'patientUuid' },
|
|
484
|
+
{ id: 'consentToken', header: '', key: 'consentToken' },
|
|
485
|
+
{ id: 'claimGuid', header: '', key: 'claimGuid' },
|
|
486
|
+
];
|
|
487
|
+
const hiddenColumns = ['patientUuid', 'consentToken', 'claimGuid'];
|
|
488
|
+
|
|
489
|
+
const rows = paginatedRows.map((row, index) => ({
|
|
490
|
+
id: `${row.id}-${index}`,
|
|
491
|
+
index: (currentPage - 1) * currentPageSize + index + 1,
|
|
492
|
+
patientName: row.patientName,
|
|
493
|
+
crNumber: row.crNumber,
|
|
494
|
+
visitType: row.visitType,
|
|
495
|
+
status: row.status,
|
|
496
|
+
billDate: row.billDate,
|
|
497
|
+
patientUuid: row.patientUuid,
|
|
498
|
+
consentToken: row.consentToken,
|
|
499
|
+
claimGuid: row.claimGuid,
|
|
500
|
+
}));
|
|
501
|
+
|
|
502
|
+
const payerNoun = tabIndex === 1 ? 'SHA claims' : tabIndex === 2 ? 'bills' : 'cash bills';
|
|
503
|
+
const emptyBillsMessage = selectedBucket
|
|
504
|
+
? `No ${payerNoun} under “${selectedBucket.label}”.`
|
|
505
|
+
: search
|
|
506
|
+
? 'No bills match your search.'
|
|
507
|
+
: `No ${payerNoun} for the selected date.`;
|
|
508
|
+
|
|
509
|
+
// Status sub-tabs: one per bucket for the active payer, with "All" last.
|
|
510
|
+
const statusTabItems: StatusBucket[] = [...statusBuckets, { key: '', label: 'All', statuses: [] }];
|
|
511
|
+
// A bucket can disappear between loads — "Other" does, once nothing unrecognised is
|
|
512
|
+
// left. Fall back to All, so no tab is highlighted while the table is unfiltered.
|
|
513
|
+
const selectedTabIndex = statusTabItems.findIndex((b) => b.key === statusFilter);
|
|
514
|
+
const statusTabIndex = selectedTabIndex >= 0 ? selectedTabIndex : statusTabItems.length - 1;
|
|
515
|
+
const countForBucket = (bucket: StatusBucket) =>
|
|
516
|
+
bucket.key === '' ? activeRows.length : activeRows.filter((row) => bucketMatches(bucket, row)).length;
|
|
517
|
+
const countPill = (value: number) => <span className={styles.pill}>{value}</span>;
|
|
518
|
+
|
|
519
|
+
const billsTableBody = rowsLoading ? (
|
|
520
|
+
<div className={styles.tableCard}>
|
|
521
|
+
<DataTableSkeleton role="progressbar" showHeader={false} showToolbar={false} />
|
|
522
|
+
</div>
|
|
523
|
+
) : (
|
|
524
|
+
<>
|
|
525
|
+
{bucketRows.length > 0 ? (
|
|
526
|
+
<TableToolbar
|
|
527
|
+
id="facility-bills"
|
|
528
|
+
search={search}
|
|
529
|
+
onSearch={setSearch}
|
|
530
|
+
searchPlaceholder="Search patient, CR number or status…"
|
|
531
|
+
onDate={onDateChange}
|
|
532
|
+
/>
|
|
533
|
+
) : null}
|
|
534
|
+
{filteredRows.length === 0 ? (
|
|
535
|
+
<div className={styles.tableCard}>
|
|
536
|
+
<EmptyState message={emptyBillsMessage} />
|
|
537
|
+
</div>
|
|
538
|
+
) : (
|
|
539
|
+
<DataTable rows={rows} headers={columns}>
|
|
540
|
+
{({ rows: dtRows, headers, getTableProps, getHeaderProps, getRowProps, getCellProps }) => (
|
|
541
|
+
<div className={styles.tableCard}>
|
|
542
|
+
<Table size="sm" useZebraStyles aria-label="facility bills" {...getTableProps()}>
|
|
543
|
+
<TableHead>
|
|
544
|
+
<TableRow>
|
|
545
|
+
{headers
|
|
546
|
+
.filter((header) => !hiddenColumns.includes(header.key))
|
|
547
|
+
.map((header) => (
|
|
548
|
+
<TableHeader {...getHeaderProps({ header })}>{header.header}</TableHeader>
|
|
549
|
+
))}
|
|
550
|
+
</TableRow>
|
|
551
|
+
</TableHead>
|
|
552
|
+
<TableBody>
|
|
553
|
+
{dtRows.map((row) => {
|
|
554
|
+
const patientUuid = row.cells.find((c) => c.info.header === 'patientUuid')?.value;
|
|
555
|
+
const consentToken = row.cells.find((c) => c.info.header === 'consentToken')?.value;
|
|
556
|
+
const claimGuid = row.cells.find((c) => c.info.header === 'claimGuid')?.value;
|
|
557
|
+
return (
|
|
558
|
+
<TableRow {...getRowProps({ row })}>
|
|
559
|
+
{row.cells.map((cell) => {
|
|
560
|
+
if (hiddenColumns.includes(cell.info.header)) {
|
|
561
|
+
return null;
|
|
562
|
+
}
|
|
563
|
+
if (cell.info.header === 'patientName') {
|
|
564
|
+
const canOpen = Boolean(patientUuid || consentToken);
|
|
565
|
+
return (
|
|
566
|
+
<TableCell key={cell.id}>
|
|
567
|
+
{canOpen ? (
|
|
568
|
+
<button
|
|
569
|
+
type="button"
|
|
570
|
+
className={styles.clickableData}
|
|
571
|
+
onClick={() => openRowDetails(patientUuid, consentToken, claimGuid)}
|
|
572
|
+
>
|
|
573
|
+
{cell.value}
|
|
574
|
+
</button>
|
|
575
|
+
) : (
|
|
576
|
+
cell.value
|
|
577
|
+
)}
|
|
578
|
+
</TableCell>
|
|
579
|
+
);
|
|
580
|
+
}
|
|
581
|
+
if (cell.info.header === 'status') {
|
|
582
|
+
// The claim's workflow_state verbatim — the value the HIE
|
|
583
|
+
// returned, not a re-worded version of it. statusMeta is
|
|
584
|
+
// consulted only for the tag colour.
|
|
585
|
+
return (
|
|
586
|
+
<TableCell key={cell.id}>
|
|
587
|
+
<Tag size="sm" type={statusMeta(cell.value).tag}>
|
|
588
|
+
{cell.value || '—'}
|
|
589
|
+
</Tag>
|
|
590
|
+
</TableCell>
|
|
591
|
+
);
|
|
592
|
+
}
|
|
593
|
+
return (
|
|
594
|
+
<TableCell {...getCellProps({ cell })} key={cell.id}>
|
|
595
|
+
{cell.value}
|
|
596
|
+
</TableCell>
|
|
597
|
+
);
|
|
598
|
+
})}
|
|
599
|
+
</TableRow>
|
|
600
|
+
);
|
|
601
|
+
})}
|
|
602
|
+
</TableBody>
|
|
603
|
+
</Table>
|
|
604
|
+
</div>
|
|
605
|
+
)}
|
|
606
|
+
</DataTable>
|
|
607
|
+
)}
|
|
608
|
+
{filteredRows.length > 0 && (
|
|
609
|
+
<Pagination
|
|
610
|
+
forwardText={t('nextPage', 'Next page')}
|
|
611
|
+
backwardText={t('previousPage', 'Previous page')}
|
|
612
|
+
page={currentPage}
|
|
613
|
+
pageSize={currentPageSize}
|
|
614
|
+
pageSizes={pageSizes}
|
|
615
|
+
totalItems={filteredRows.length}
|
|
616
|
+
onChange={({ pageSize, page }) => {
|
|
617
|
+
if (pageSize !== currentPageSize) setPageSize(pageSize);
|
|
618
|
+
if (page !== currentPage) goTo(page);
|
|
619
|
+
}}
|
|
620
|
+
/>
|
|
621
|
+
)}
|
|
622
|
+
</>
|
|
623
|
+
);
|
|
624
|
+
|
|
625
|
+
// The skeleton already stands for the wait while claim states are confirmed, so
|
|
626
|
+
// nothing is said about it here. What still needs saying is the case the skeleton
|
|
627
|
+
// can't show: states that were asked for and never came back.
|
|
628
|
+
const statusNotice =
|
|
629
|
+
tabIndex === 0 || rowsLoading ? null : statesFailed > 0 ? (
|
|
630
|
+
<div className={`${styles.statusNotice} ${styles.statusNoticeWarning}`}>
|
|
631
|
+
<WarningAltFilled size={16} />
|
|
632
|
+
<span>
|
|
633
|
+
{statesFailed} claim {statesFailed === 1 ? 'status' : 'statuses'} couldn’t be confirmed — those rows show the
|
|
634
|
+
state last recorded, which may be out of date.
|
|
635
|
+
</span>
|
|
636
|
+
</div>
|
|
637
|
+
) : null;
|
|
638
|
+
|
|
639
|
+
const billsTable = (
|
|
640
|
+
<>
|
|
641
|
+
{statusNotice}
|
|
642
|
+
<Tabs
|
|
643
|
+
selectedIndex={statusTabIndex}
|
|
644
|
+
onChange={({ selectedIndex }) => {
|
|
645
|
+
setStatusFilter(statusTabItems[selectedIndex]?.key ?? '');
|
|
646
|
+
goTo(1);
|
|
647
|
+
}}
|
|
648
|
+
>
|
|
649
|
+
<TabList aria-label="Bill statuses" className={styles.statusTabs} scrollDebounceWait={200}>
|
|
650
|
+
{statusTabItems.map((bucket) => (
|
|
651
|
+
<Tab key={bucket.key || 'all'}>
|
|
652
|
+
{bucket.label}
|
|
653
|
+
{/* A count off unconfirmed states would read as fact and then change. */}
|
|
654
|
+
{rowsLoading ? null : countPill(countForBucket(bucket))}
|
|
655
|
+
</Tab>
|
|
656
|
+
))}
|
|
657
|
+
</TabList>
|
|
658
|
+
<TabPanels>
|
|
659
|
+
{statusTabItems.map((bucket) => (
|
|
660
|
+
<TabPanel key={bucket.key || 'all'}>{statusFilter === bucket.key ? billsTableBody : null}</TabPanel>
|
|
661
|
+
))}
|
|
662
|
+
</TabPanels>
|
|
663
|
+
</Tabs>
|
|
664
|
+
</>
|
|
665
|
+
);
|
|
666
|
+
|
|
667
|
+
return (
|
|
668
|
+
<>
|
|
669
|
+
{/* The bill drill-down that used to sit beside this is a route of its own now, so
|
|
670
|
+
the list is all this component renders. */}
|
|
671
|
+
<div className={styles.panel}>
|
|
672
|
+
{/* No heading and no payer bar: the dashboard tab above already names both what
|
|
673
|
+
this list is and whose bills are in it, and the status buckets inside the
|
|
674
|
+
table are the only choice left to make. */}
|
|
675
|
+
{loading ? (
|
|
676
|
+
<div className={styles.tableCard}>
|
|
677
|
+
<DataTableSkeleton role="progressbar" showHeader={false} showToolbar={false} />
|
|
678
|
+
</div>
|
|
679
|
+
) : (
|
|
680
|
+
billsTable
|
|
681
|
+
)}
|
|
682
|
+
</div>
|
|
683
|
+
</>
|
|
684
|
+
);
|
|
685
|
+
};
|
|
686
|
+
|
|
687
|
+
export default FacilityBills;
|