@kenyaemr/esm-billing-app 5.4.1-pre.2061 → 5.4.1-pre.2073

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/routes.json CHANGED
@@ -1 +1 @@
1
- {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"kenyaemr":"^19.0.0"},"pages":[{"component":"billableServicesHome","route":"billable-services"},{"component":"requirePaymentModal","routeRegex":"^patient/.+/chart","online":true,"offline":false}],"extensions":[{"component":"billingDashboardLink","name":"billing-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"billing","title":"billing","slot":"billing-dashboard-slot"}},{"component":"benefitsPackageDashboardLink","name":"benefits-package-dashboard-link","slot":"patient-chart-dashboard-slot","meta":{"name":"benefits-package","slot":"patient-chart-benefits-dashboard-slot","path":"insurance-benefits","columns":1,"columnSpan":1},"featureFlag":"healthInformationExchange"},{"component":"benefitsPackage","name":"benefits-package","slot":"patient-chart-benefits-dashboard-slot"},{"component":"root","name":"billing-dashboard-root","slot":"billing-dashboard-slot"},{"component":"benefitsEligibilyRequestForm","name":"benefits-eligibility-request-form"},{"component":"benefitsPreAuthForm","name":"benefits-pre-auth-form"},{"name":"billing-patient-summary","component":"billingPatientSummary","slot":"patient-chart-billing-dashboard-slot","order":10,"meta":{"columnSpan":4}},{"name":"billing-summary-dashboard-link","component":"billingSummaryDashboardLink","slot":"patient-chart-dashboard-slot","order":11,"meta":{"columns":1,"columnSpan":1,"slot":"patient-chart-billing-dashboard-slot","path":"Billing","layoutMode":"anchored"}},{"name":"billing-check-in-form","slot":"extra-visit-attribute-slot","component":"billingCheckInForm"},{"name":"require-billing-modal","component":"requirePaymentModal"},{"name":"patient-banner-billing-tags","component":"visitAttributeTags","slot":"patient-banner-tags-slot","order":2},{"name":"initiate-payment-modal","component":"initiatePaymentDialog"},{"name":"delete-billableservice-modal","component":"deleteBillableServiceModal"},{"name":"refund-bill-modal","component":"refundBillModal"},{"name":"delete-bill-modal","component":"deleteBillModal"},{"name":"lab-order-billable-item","component":"labOrder","slot":"top-of-lab-order-form-slot"},{"name":"procedure-order-billable-item","component":"procedureOrder","slot":"top-of-procedure-order-form-slot"},{"name":"imaging-order-billable-item","component":"imagingOrder","slot":"top-of-imaging-order-form-slot"},{"name":"price-info-order","component":"priceInfoOrder"},{"name":"drug-order-billable-item","component":"drugOrder","slot":"medication-info-slot"},{"name":"order-action-button","component":"orderActionButton","slots":["prescription-action-button-slot","imaging-orders-action","procedure-orders-action","tests-ordered-actions-slot"],"order":0},{"component":"billingOverviewLink","name":"billing-overview-link","order":0,"slot":"billing-dashboard-link-slot"},{"component":"paymentHistoryLink","name":"payment-history-link","slot":"billing-dashboard-link-slot"},{"component":"paymentPointsLink","name":"payment-points-link","slot":"billing-dashboard-link-slot"},{"component":"paymentModesLink","name":"payment-modes-link","slot":"billing-dashboard-link-slot"},{"component":"billManagerLink","name":"bill-manager-link","slot":"billing-dashboard-link-slot"},{"component":"chargeableItemsLink","name":"chargeable-items-link","slot":"billing-dashboard-link-slot"},{"component":"billableExemptionsLink","name":"billable-exemptions-link","slot":"billing-dashboard-link-slot"},{"component":"claimsManagementSideNavGroup","name":"claims-management-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"claims-management","title":"Claims management Overview","slot":"case-management-slot"},"featureFlag":"healthInformationExchange"},{"component":"claimsManagementOverviewDashboardLink","name":"claims-management-overview-link","order":0,"slot":"claims-management-dashboard-link-slot"},{"component":"preAuthRequestsDashboardLink","name":"preauthrequest-overview-link","slot":"claims-management-dashboard-link-slot"},{"component":"claimsOverview","name":"claims-overview-dashboard-link","slot":"claims-management-overview-slot"},{"component":"waiveBillActionButton","name":"waive-bill-action-button","slot":"bill-actions-slot"},{"component":"deleteBillActionButton","name":"delete-bill-action-button","slot":"bill-actions-slot"},{"component":"refundLineItem","name":"refund-line-item","slot":"bill-actions-overflow-menu-slot"},{"name":"edit-line-item","component":"editLineItem","slot":"bill-actions-overflow-menu-slot"},{"name":"cancel-line-item","component":"cancelLineItem","slot":"bill-actions-overflow-menu-slot"}],"workspaces":[{"name":"create-bill-workspace","component":"createBillWorkspace","title":"Create Bill Workspace","type":"other-form"},{"name":"waive-bill-form","component":"waiveBillForm","title":"Waive Bill Form","type":"other-form"},{"name":"edit-bill-form","component":"editBillForm","title":"Edit Bill Form","type":"other-form"},{"name":"billable-service-form","component":"addServiceForm","title":"Create Charge Item Form","type":"other-form"},{"name":"commodity-form","component":"addCommodityForm","title":"Create Charge Item Form","type":"other-form"},{"name":"billing-form","component":"billingForm","title":"Billing Form","type":"other-form","width":"extra-wide"},{"name":"payment-mode-workspace","component":"paymentModeWorkspace","title":"Payment Mode Workspace","type":"other-form"},{"name":"cancel-bill-workspace","component":"cancelBillWorkspace","title":"Cancel Bill Workspace","type":"other-form"},{"name":"bill-deposit-workspace","component":"billDepositWorkspace","title":"Bill Deposit Workspace","type":"other-form"}],"modals":[{"name":"create-payment-point","component":"createPaymentPoint"},{"name":"clock-out-modal","component":"clockOut"},{"name":"bulk-import-billable-services-modal","component":"bulkImportBillableServicesModal"},{"name":"delete-payment-mode-modal","component":"deletePaymentModeModal"},{"name":"retry-claim-request-modal","component":"retryClaimRequestModal"},{"name":"paid-bill-receipt-print-preview-modal","component":"paidBillReceiptPrintPreviewModal"},{"name":"clock-in-modal","component":"clockIn"},{"name":"create-bill-item-modal","component":"createBillItemModal"}],"version":"5.4.1-pre.2061"}
1
+ {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"kenyaemr":"^19.0.0"},"pages":[{"component":"billableServicesHome","route":"billable-services"},{"component":"requirePaymentModal","routeRegex":"^patient/.+/chart","online":true,"offline":false}],"extensions":[{"component":"billingDashboardLink","name":"billing-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"billing","title":"billing","slot":"billing-dashboard-slot"}},{"component":"benefitsPackageDashboardLink","name":"benefits-package-dashboard-link","slot":"patient-chart-dashboard-slot","meta":{"name":"benefits-package","slot":"patient-chart-benefits-dashboard-slot","path":"insurance-benefits","columns":1,"columnSpan":1},"featureFlag":"healthInformationExchange"},{"component":"benefitsPackage","name":"benefits-package","slot":"patient-chart-benefits-dashboard-slot"},{"component":"root","name":"billing-dashboard-root","slot":"billing-dashboard-slot"},{"component":"benefitsEligibilyRequestForm","name":"benefits-eligibility-request-form"},{"component":"benefitsPreAuthForm","name":"benefits-pre-auth-form"},{"name":"billing-patient-summary","component":"billingPatientSummary","slot":"patient-chart-billing-dashboard-slot","order":10,"meta":{"columnSpan":4}},{"name":"billing-summary-dashboard-link","component":"billingSummaryDashboardLink","slot":"patient-chart-dashboard-slot","order":11,"meta":{"columns":1,"columnSpan":1,"slot":"patient-chart-billing-dashboard-slot","path":"Billing","layoutMode":"anchored"}},{"name":"billing-check-in-form","slot":"extra-visit-attribute-slot","component":"billingCheckInForm"},{"name":"require-billing-modal","component":"requirePaymentModal"},{"name":"patient-banner-billing-tags","component":"visitAttributeTags","slot":"patient-banner-tags-slot","order":2},{"name":"initiate-payment-modal","component":"initiatePaymentDialog"},{"name":"delete-billableservice-modal","component":"deleteBillableServiceModal"},{"name":"refund-bill-modal","component":"refundBillModal"},{"name":"delete-bill-modal","component":"deleteBillModal"},{"name":"lab-order-billable-item","component":"labOrder","slot":"top-of-lab-order-form-slot"},{"name":"procedure-order-billable-item","component":"procedureOrder","slot":"top-of-procedure-order-form-slot"},{"name":"imaging-order-billable-item","component":"imagingOrder","slot":"top-of-imaging-order-form-slot"},{"name":"price-info-order","component":"priceInfoOrder"},{"name":"drug-order-billable-item","component":"drugOrder","slot":"medication-info-slot"},{"name":"order-action-button","component":"orderActionButton","slots":["prescription-action-button-slot","imaging-orders-action","procedure-orders-action","tests-ordered-actions-slot"],"order":0},{"component":"billingOverviewLink","name":"billing-overview-link","order":0,"slot":"billing-dashboard-link-slot"},{"component":"paymentHistoryLink","name":"payment-history-link","slot":"billing-dashboard-link-slot"},{"component":"paymentPointsLink","name":"payment-points-link","slot":"billing-dashboard-link-slot"},{"component":"paymentModesLink","name":"payment-modes-link","slot":"billing-dashboard-link-slot"},{"component":"billManagerLink","name":"bill-manager-link","slot":"billing-dashboard-link-slot"},{"component":"chargeableItemsLink","name":"chargeable-items-link","slot":"billing-dashboard-link-slot"},{"component":"billableExemptionsLink","name":"billable-exemptions-link","slot":"billing-dashboard-link-slot"},{"component":"claimsManagementSideNavGroup","name":"claims-management-dashboard-link","slot":"homepage-dashboard-slot","meta":{"name":"claims-management","title":"Claims management Overview","slot":"case-management-slot"},"featureFlag":"healthInformationExchange"},{"component":"claimsManagementOverviewDashboardLink","name":"claims-management-overview-link","order":0,"slot":"claims-management-dashboard-link-slot"},{"component":"preAuthRequestsDashboardLink","name":"preauthrequest-overview-link","slot":"claims-management-dashboard-link-slot"},{"component":"claimsOverview","name":"claims-overview-dashboard-link","slot":"claims-management-overview-slot"},{"component":"waiveBillActionButton","name":"waive-bill-action-button","slot":"bill-actions-slot"},{"component":"deleteBillActionButton","name":"delete-bill-action-button","slot":"bill-actions-slot"},{"component":"refundLineItem","name":"refund-line-item","slot":"bill-actions-overflow-menu-slot"},{"name":"edit-line-item","component":"editLineItem","slot":"bill-actions-overflow-menu-slot"},{"name":"cancel-line-item","component":"cancelLineItem","slot":"bill-actions-overflow-menu-slot"}],"workspaces":[{"name":"create-bill-workspace","component":"createBillWorkspace","title":"Create Bill Workspace","type":"other-form"},{"name":"waive-bill-form","component":"waiveBillForm","title":"Waive Bill Form","type":"other-form"},{"name":"edit-bill-form","component":"editBillForm","title":"Edit Bill Form","type":"other-form"},{"name":"billable-service-form","component":"addServiceForm","title":"Create Charge Item Form","type":"other-form"},{"name":"commodity-form","component":"addCommodityForm","title":"Create Charge Item Form","type":"other-form"},{"name":"billing-form","component":"billingForm","title":"Billing Form","type":"other-form","width":"extra-wide"},{"name":"payment-mode-workspace","component":"paymentModeWorkspace","title":"Payment Mode Workspace","type":"other-form"},{"name":"cancel-bill-workspace","component":"cancelBillWorkspace","title":"Cancel Bill Workspace","type":"other-form"},{"name":"bill-deposit-workspace","component":"billDepositWorkspace","title":"Bill Deposit Workspace","type":"other-form"}],"modals":[{"name":"create-payment-point","component":"createPaymentPoint"},{"name":"clock-out-modal","component":"clockOut"},{"name":"bulk-import-billable-services-modal","component":"bulkImportBillableServicesModal"},{"name":"delete-payment-mode-modal","component":"deletePaymentModeModal"},{"name":"retry-claim-request-modal","component":"retryClaimRequestModal"},{"name":"paid-bill-receipt-print-preview-modal","component":"paidBillReceiptPrintPreviewModal"},{"name":"clock-in-modal","component":"clockIn"},{"name":"create-bill-item-modal","component":"createBillItemModal"}],"version":"5.4.1-pre.2073"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kenyaemr/esm-billing-app",
3
- "version": "5.4.1-pre.2061",
3
+ "version": "5.4.1-pre.2073",
4
4
  "description": "Billing app for KenyaEMR",
5
5
  "browser": "dist/kenyaemr-esm-billing-app.js",
6
6
  "main": "src/index.ts",
@@ -80,7 +80,13 @@ const PackageInterventions: React.FC<PackageInterventionsProps> = ({ categories,
80
80
  selectedItems={field.value}
81
81
  label={t('chooseInterventions', 'Choose interventions')}
82
82
  items={interventions_.map((r) => r.interventionCode)}
83
- itemToString={(item) => interventions_.find((r) => r.interventionCode === item)?.interventionName ?? ''}
83
+ itemToString={(item) => {
84
+ const _intervention = interventions_.find((r) => r.interventionCode === item);
85
+ if (!_intervention) {
86
+ return '';
87
+ }
88
+ return `${_intervention.interventionPackage}-${_intervention.interventionName}`;
89
+ }}
84
90
  />
85
91
  )}
86
92
  />
@@ -75,7 +75,13 @@ const SHABenefitPackangesAndInterventions: React.FC<Props> = ({ patientUuid }) =
75
75
  selectedItems={field.value}
76
76
  label={t('choosePackage', 'Choose package')}
77
77
  items={packages.map((r) => r.uuid)}
78
- itemToString={(item) => packages.find((r) => r.uuid === item)?.packageName ?? ''}
78
+ itemToString={(item) => {
79
+ const _package = packages.find((r) => r.uuid === item);
80
+ if (!_package) {
81
+ return '';
82
+ }
83
+ return `${_package.packageCode}-${_package.packageName}`;
84
+ }}
79
85
  />
80
86
  )}
81
87
  </>
@@ -1,8 +1,8 @@
1
1
  import { FetchResponse, openmrsFetch, restBaseUrl } from '@openmrs/esm-framework';
2
+ import { useMemo } from 'react';
2
3
  import useSWR from 'swr';
3
- import { SHAIntervention } from '../types';
4
4
  import useFacilityLevel from './useFacilityLevel';
5
- import { useMemo } from 'react';
5
+ import { SHAIntervention } from '../types';
6
6
 
7
7
  export type InterventionsFilter = {
8
8
  package_code?: string;
@@ -10,106 +10,123 @@ export type InterventionsFilter = {
10
10
  applicable_gender?: 'MALE' | 'FEMALE';
11
11
  };
12
12
 
13
- type Data = {
13
+ interface Intervention {
14
+ id: number;
15
+ isMultisession: boolean;
16
+ fund: string;
17
+ supportedScheme: string;
18
+ parentBenefitName: string;
19
+ parentBenefitCode: string;
20
+ benefitCode: string;
21
+ benefitName: string;
22
+ guid: string;
23
+ created: string;
24
+ updated: string;
25
+ replicated: string;
26
+ owner: number;
27
+ needsPreauth: boolean;
28
+ levelsApplicable: string[];
29
+ paymentMechanism: string;
30
+ coverageLevel: string;
31
+ annualQuantityLimit: number;
32
+ annualQuantityLimitChoice: string;
33
+ annualQuantityLimitType: string;
34
+ overallTariff: string;
35
+ overallTariffHasLimit: boolean;
36
+ annualLimitValue: string;
37
+ usageFrequencyLimit: string;
38
+ usageFrequencyType: string;
14
39
  status: string;
15
- data: Array<{
16
- interventionName: string;
17
- interventionCode: string;
18
- interventionPackage: string;
19
- interventionSubPackage: string;
20
- interventionDescription?: string;
21
- insuranceSchemes: Array<{
22
- rules: Array<{
23
- ruleName: string;
24
- ruleCode: string;
25
- value: string;
26
- }>;
27
- }>;
28
- }>;
29
- };
30
- export const useInterventions = (filters: InterventionsFilter) => {
31
- const fetcher = (url: string) => {
32
- return openmrsFetch(url, {
33
- method: 'POST',
34
- body: {
35
- searchKeyAndValues: {
36
- ...filters,
37
- // scheme_code: 'UHC',
38
- applicable_gender: filters.applicable_gender ? `ALL,${filters.applicable_gender}` : undefined,
39
- },
40
- },
41
- });
42
- };
40
+ needsManualPreauthApproval: boolean;
41
+ needsDoctorAuthorization: boolean;
42
+ numberOfDoctorsRequired: string;
43
+ needsMemberAuthorization: boolean;
44
+ accessPoint: string;
45
+ name: string;
46
+ code: string;
47
+ active: boolean;
48
+ activeForUhc: boolean;
49
+ diagnosisBlock: string[];
50
+ diagnosisList: string[];
51
+ applicableGender: string;
52
+ applicableFacilityOwnership: string;
53
+ upperAgeLimit: string;
54
+ lowerAgeLimit: string;
55
+ investigationTariff: string;
56
+ investigationTariffHasLimit: boolean;
57
+ managementTariff: string;
58
+ managementTariffHasLimit: boolean;
59
+ isIntraMetro: boolean;
60
+ tariffPerAdditionalKilometer: string;
61
+ needApprovalBeforeClaimSubmission: boolean;
62
+ needsProtocols: boolean;
63
+ level_2_tariff: string;
64
+ level_3_tariff: string;
65
+ level_4_tariff: string;
66
+ level_5_tariff: string;
67
+ level_6_tariff: string;
68
+ protocolUsed: string;
69
+ tariffLimitPerIndividual: string;
70
+ complexity: string;
71
+ comment: string;
72
+ retiredOn: string;
73
+ requiresSurgicalPreauth: boolean;
74
+ requiresRenalPreauth: boolean;
75
+ requiresOncologyPreauth: boolean;
76
+ requiresRadiologyPreauth: boolean;
77
+ requiresOpticalPreauth: boolean;
78
+ applicableSchemes: string[];
79
+ benefit: number;
80
+ }
43
81
 
82
+ export const useInterventions = (filters: InterventionsFilter) => {
44
83
  const { error: facilityLevelError, isLoading: isLoadingFacilityLevel, level } = useFacilityLevel();
45
84
  const urlParams = new URLSearchParams({
46
85
  ...filters,
47
86
  synchronize: 'false',
48
87
  });
49
88
  const url = `${restBaseUrl}/kenyaemr/sha-interventions?${urlParams.toString()}`;
50
- const { isLoading, error, data } = useSWR<FetchResponse<Data>>(url, openmrsFetch);
89
+ const { isLoading, error, data } = useSWR<FetchResponse<{ results: Array<Intervention> }>>(url, openmrsFetch);
90
+ const mapper = ({ benefitCode, benefitName, parentBenefitCode }: Intervention): any => ({
91
+ interventionCode: benefitCode,
92
+ interventionName: benefitName,
93
+ interventionPackage: parentBenefitCode,
94
+ });
95
+
51
96
  const interventions = useMemo(() => {
52
97
  const packageCodes = filters.package_code?.split(',') || [];
53
- return data?.data?.data
98
+ return data?.data?.results
54
99
  ?.filter((d) => {
55
100
  // 1. Filter by package code (only if defined)
56
- if (packageCodes.length > 0 && !packageCodes.includes(d.interventionPackage)) {
101
+ if (packageCodes.length > 0 && !packageCodes.includes(d.parentBenefitCode)) {
57
102
  return false;
58
103
  }
59
104
 
60
105
  // 2. Filter by applicable gender (only if defined)
61
106
  if (
62
107
  filters.applicable_gender &&
63
- d.insuranceSchemes?.some((s) =>
64
- s.rules?.some(
65
- (r) =>
66
- r.ruleCode === 'applicable_gender' &&
67
- r.value && // Ensure value exists
68
- !['ALL', filters.applicable_gender].includes(r.value),
69
- ),
70
- )
108
+ d.applicableGender &&
109
+ !['ALL', filters.applicable_gender].includes(d.applicableGender)
71
110
  ) {
72
111
  return false;
73
112
  }
74
113
 
75
- // 3. Filter by levels applicable (only if level is defined)
76
- if (
77
- level &&
78
- d.insuranceSchemes?.some((s) =>
79
- s.rules?.some(
80
- (r) =>
81
- r.ruleCode === 'levels_applicable' &&
82
- r.value && // Ensure value exists
83
- !String(r.value).includes(level), // Convert to string to avoid array issues
84
- ),
85
- )
86
- ) {
114
+ if (level && d.levelsApplicable && !d.levelsApplicable.some((l) => level.includes(l))) {
87
115
  return false;
88
116
  }
89
117
 
90
118
  return true; // Keep item if it passes all filters
91
119
  })
92
- ?.map(({ interventionCode, interventionName, interventionPackage, interventionSubPackage }) => ({
93
- interventionCode,
94
- subCategoryBenefitsPackage: interventionSubPackage,
95
- interventionName,
96
- interventionPackage,
97
- })) as SHAIntervention[];
120
+ ?.map(mapper);
98
121
  }, [data, filters, level]); // Ensure proper memoization
99
122
  const allInterventions = useMemo(() => {
100
- return (data?.data?.data ?? []).map(
101
- ({ interventionCode, interventionName, interventionPackage, interventionSubPackage }) => ({
102
- interventionCode,
103
- subCategoryBenefitsPackage: interventionSubPackage,
104
- interventionName,
105
- interventionPackage,
106
- }),
107
- ) as SHAIntervention[];
123
+ return (data?.data?.results ?? []).map(mapper);
108
124
  }, [data]);
125
+
109
126
  return {
110
127
  isLoading: isLoading || isLoadingFacilityLevel,
111
- interventions: interventions ?? [],
112
- allInterventions,
128
+ interventions: (interventions ?? []) as Array<SHAIntervention>,
129
+ allInterventions: (allInterventions ?? []) as Array<SHAIntervention>,
113
130
  error: error || facilityLevelError,
114
131
  };
115
132
  };
@@ -10,17 +10,17 @@ const usePackages = () => {
10
10
  const url = `${restBaseUrl}/kenyaemr/sha-benefits-package?synchronize=false`;
11
11
 
12
12
  const { data, isLoading, error } = useSWR<
13
- FetchResponse<{ data: Array<{ code: string; name: string; description?: string }> }>
13
+ FetchResponse<{ result: Array<{ benefitCode: string; benefitName: string; description?: string }> }>
14
14
  >(url, openmrsFetch);
15
15
 
16
16
  return {
17
17
  isLoading,
18
- packages: (data?.data.data ?? []).map(
18
+ packages: (data?.data.result ?? []).map(
19
19
  (category) =>
20
20
  ({
21
- uuid: `${category.code}`,
22
- packageCode: category.code,
23
- packageName: category.name,
21
+ uuid: `${category.benefitCode}`,
22
+ packageCode: category.benefitCode,
23
+ packageName: category.benefitName,
24
24
  } as Package),
25
25
  ),
26
26
  error,