diff --git a/packages/esm-billing-app/src/claims/claims-management/header/summary-header.component.tsx b/packages/esm-billing-app/src/claims/claims-management/header/summary-header.component.tsx new file mode 100644 index 000000000..770f21352 --- /dev/null +++ b/packages/esm-billing-app/src/claims/claims-management/header/summary-header.component.tsx @@ -0,0 +1,64 @@ +import { DatePicker, DatePickerInput } from '@carbon/react'; +import React, { useState, useEffect } from 'react'; +import { useTranslation } from 'react-i18next'; +import styles from './summary-header.scss'; + + +interface ClaimsSummaryHeaderProps { + filters: { + fromDate: Date | null; + toDate: Date | null; + }; + onFilterChanged: (updateFn: (currentFilters: any) => any) => void; + statusOptions?: string[]; +} + +const ClaimSummaryHeader: React.FC = ({ + filters, + onFilterChanged, +}) => { + const { t } = useTranslation(); + + + const today = new Date(); + const oneMonthAgo = new Date(today); + oneMonthAgo.setMonth(today.getMonth() - 1); + + + useEffect(() => { + if (!filters.fromDate && !filters.toDate) { + onFilterChanged(() => ({ + fromDate: oneMonthAgo, + toDate: today, + })); + } + }, [filters, onFilterChanged, oneMonthAgo, today]); + + return ( +
+ + onFilterChanged((currentFilters) => ({ ...currentFilters, fromDate, toDate })) + } + aria-label={t('datePicker.rangeLabel', 'Select date range')} + > + + + +
+ ); +}; + +export default ClaimSummaryHeader; \ No newline at end of file diff --git a/packages/esm-billing-app/src/claims/claims-management/header/summary-header.scss b/packages/esm-billing-app/src/claims/claims-management/header/summary-header.scss new file mode 100644 index 000000000..db493f540 --- /dev/null +++ b/packages/esm-billing-app/src/claims/claims-management/header/summary-header.scss @@ -0,0 +1,13 @@ +@use '@carbon/layout'; +@use '@carbon/type'; +@use '@carbon/colors'; + +.summaryContainer { + display: flex; + margin-top: layout.$spacing-05; + gap: layout.$spacing-01; +} + +.input { + min-width: 300px; +} diff --git a/packages/esm-billing-app/src/claims/claims-management/main/claims-summary-chart.component.tsx b/packages/esm-billing-app/src/claims/claims-management/main/claims-summary-chart.component.tsx new file mode 100644 index 000000000..d95473120 --- /dev/null +++ b/packages/esm-billing-app/src/claims/claims-management/main/claims-summary-chart.component.tsx @@ -0,0 +1,70 @@ +import React, { useEffect, useState } from 'react'; +import { BarChartOptions, GroupedBarChart, ScaleTypes } from '@carbon/charts-react'; + +const ClaimsSummaryChart = () => { + const [metrics, setMetrics] = useState({ summaryGraph: [] }); + + useEffect(() => { + setTimeout(() => { + // Simulating API data fetch + const data = { + summaryGraph: [ + { month: 'January', claimsA: 1200, claimsB: 1000 }, + { month: 'February', claimsA: 1000, claimsB: 1100 }, + { month: 'March', claimsA: 1400, claimsB: 1300 }, + { month: 'April', claimsA: 800, claimsB: 700 }, + { month: 'May', claimsA: 1100, claimsB: 1200 }, + ], + }; + + setMetrics(data); + }, 1000); // Simulating async fetch + }, []); + + if (!metrics.summaryGraph.length) { + return
Loading data...
; + } + + const transformClaimSummaryChartData = (data) => { + return data.map((item) => [ + { group: item.month, value: item.claimsA }, + { group: item.month, value: item.claimsB }, + ]).flat(); + }; + + const options: BarChartOptions = { + title: 'Claims Comparative Analysis', + legend: { + enabled: true, + }, + axes: { + left: { + title: 'Month', + mapsTo: 'group', + scaleType: ScaleTypes.LABELS, + }, + bottom: { + title: 'Amount (Ksh)', + mapsTo: 'value', + + scaleType: ScaleTypes.LINEAR, + includeZero: true, + }, + }, + height: '400px', + }; + + + const transformedData = transformClaimSummaryChartData(metrics.summaryGraph); + + return ( +
+ +
+ ); +}; + +export default ClaimsSummaryChart; \ No newline at end of file diff --git a/packages/esm-billing-app/src/claims/claims-management/main/claims-summary-main.component.tsx b/packages/esm-billing-app/src/claims/claims-management/main/claims-summary-main.component.tsx new file mode 100644 index 000000000..2acf7a7a7 --- /dev/null +++ b/packages/esm-billing-app/src/claims/claims-management/main/claims-summary-main.component.tsx @@ -0,0 +1,93 @@ +import React, { useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import styles from '../../metrics/metrics.scss'; +import { ClaimsManagementHeader } from '../header/claims-header.component'; +import ClaimsSummaryHeader from '../header/summary-header.component'; +import { ClaimsSummaryFilter } from '../../../types'; +import ClaimsSummaryChart from './claims-summary-chart.component'; + + +import MetricsHeader from '../../metrics/metrics-header.component'; +import MetricsCard from '../../metrics/metrics-card.component'; +import { convertToCurrency } from '../../../helpers'; + + +const MainMetrics = () => { + + + const [filters, setFilters] = useState({ + fromDate: null, + toDate: null, + }); + const onFilterChanged = (updateFn: (currentFilters: any) => any) => { + setFilters(updateFn(filters)); + }; + + + const fromDate = filters.fromDate || new Date(); + const toDate = filters.toDate || new Date(); + // test data values declaration + const totalAmount = 1150000; + const claimedAmount = 120000; + + const pendingAmount = 56000; + + const preApps = 300; + const preAppsApproved = 188; + + const preAppsPending = 20; + + const t = (key, fallback) => fallback; + + return ( +
+ + <> +
+ + + +
+
+ + + +
+ + + + + +
+ + ); +}; + +export default MainMetrics; \ No newline at end of file diff --git a/packages/esm-billing-app/src/hooks/useClaimAggregate.tx b/packages/esm-billing-app/src/hooks/useClaimAggregate.tx new file mode 100644 index 000000000..e69de29bb diff --git a/packages/esm-billing-app/src/index.ts b/packages/esm-billing-app/src/index.ts index cad93dc0c..f9e47f395 100644 --- a/packages/esm-billing-app/src/index.ts +++ b/packages/esm-billing-app/src/index.ts @@ -128,6 +128,13 @@ export const claimsManagementSideNavGroup = getSyncLifecycle( }), options, ); +export const claimsSummaryOverviewDashboardLink = getSyncLifecycle( + createLeftPanelLink({ + name: 'claims-summary', + title: 'Claims Summary', + }), + options, +); export const claimsManagementOverviewDashboardLink = getSyncLifecycle( createLeftPanelLink({ name: 'claims-overview', diff --git a/packages/esm-billing-app/src/root.component.tsx b/packages/esm-billing-app/src/root.component.tsx index 7a25205be..00c9edf02 100644 --- a/packages/esm-billing-app/src/root.component.tsx +++ b/packages/esm-billing-app/src/root.component.tsx @@ -5,6 +5,7 @@ import BillManager from './billable-services/bill-manager/bill-manager.component import { ChargeItemsDashboard } from './billable-services/dashboard/dashboard.component'; import { PaymentHistory } from './billable-services/payment-history/payment-history.component'; import { BillingDashboard } from './billing-dashboard/billing-dashboard.component'; +import ClaimsManagementSummary from './claims/claims-management/main/claims-summary-main.component'; import ClaimsManagementOverview from './claims/claims-management/main/claims-overview-main.component'; import ClaimsManagementPreAuthRequest from './claims/claims-management/main/claims-pre-auth-main.component'; import ClaimScreen from './claims/dashboard/claims-dashboard.component'; @@ -22,6 +23,7 @@ const RootComponent: React.FC = () => { } /> + } /> } /> } /> } /> diff --git a/packages/esm-billing-app/src/routes.json b/packages/esm-billing-app/src/routes.json index e08a43e63..b77e0e501 100644 --- a/packages/esm-billing-app/src/routes.json +++ b/packages/esm-billing-app/src/routes.json @@ -186,11 +186,18 @@ }, "featureFlag": "healthInformationExchange" }, + + { + "component": "claimsSummaryOverviewDashboardLink", + "name": "claims-management-summary-link", + "slot": "claims-management-dashboard-link-slot" + }, { "component": "claimsManagementOverviewDashboardLink", "name": "claims-management-overview-link", "slot": "claims-management-dashboard-link-slot" }, + { "component": "preAuthRequestsDashboardLink", "name": "preauthrequest-overview-link", diff --git a/packages/esm-billing-app/src/types/index.ts b/packages/esm-billing-app/src/types/index.ts index ef9046354..3ee17d9a6 100644 --- a/packages/esm-billing-app/src/types/index.ts +++ b/packages/esm-billing-app/src/types/index.ts @@ -521,6 +521,12 @@ export interface ClaimsPreAuthFilter { search?: string; } +export interface ClaimsSummaryFilter { + fromDate: Date; + toDate: Date; + status: string; +} + export interface BenefitDataResponse { title?: string; allocation?: string;