From 928f12519ed8fe3db58e08a847c79cbcb2acf4f6 Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Thu, 2 Jul 2026 11:46:15 +0530 Subject: [PATCH 1/4] GWM : earned premium calculation correction for hr dashboard --- app/Models/ClaimsCollectionV2DashboardModel.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/Models/ClaimsCollectionV2DashboardModel.php b/app/Models/ClaimsCollectionV2DashboardModel.php index 0e686a53..8178a5f5 100644 --- a/app/Models/ClaimsCollectionV2DashboardModel.php +++ b/app/Models/ClaimsCollectionV2DashboardModel.php @@ -217,10 +217,16 @@ SQL; $sql = <<<'SQL' SELECT /* run days */ + /* DATEDIFF( MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), cp.policy_start_date ) + 1 AS run_days, + */ + DATEDIFF( + LEAST(CURDATE(), cp.policy_end_date), + cp.policy_start_date + ) + 1 AS run_days, /* earned premium */ FORMAT( From 3df39378e88e95646f9db72e5f02b70f84dce2b9 Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Thu, 2 Jul 2026 11:59:12 +0530 Subject: [PATCH 2/4] GWM : earned premium calculation correction for hr dashboard --- .../ClaimsCollectionV2DashboardModel.php | 288 ++++++++++-------- 1 file changed, 153 insertions(+), 135 deletions(-) diff --git a/app/Models/ClaimsCollectionV2DashboardModel.php b/app/Models/ClaimsCollectionV2DashboardModel.php index 8178a5f5..88baf6ce 100644 --- a/app/Models/ClaimsCollectionV2DashboardModel.php +++ b/app/Models/ClaimsCollectionV2DashboardModel.php @@ -214,111 +214,105 @@ SQL; /** Metabase #186: CLAIMS EXPERIENCE SUMMARY */ public function claims_experience_summary(int $policyId): array { - $sql = <<<'SQL' -SELECT - /* run days */ - /* - DATEDIFF( - MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), - cp.policy_start_date - ) + 1 AS run_days, - */ - DATEDIFF( - LEAST(CURDATE(), cp.policy_end_date), - cp.policy_start_date - ) + 1 AS run_days, + $sql = <<<'SQL' + SELECT + /* run days */ + /* + DATEDIFF( + MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), + cp.policy_start_date + ) + 1 AS run_days, - /* earned premium */ - FORMAT( - (prem.premium_as_on_date / 365) - * (DATEDIFF( - MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), - cp.policy_start_date - ) + 1) - , 0) AS earned_premium, - - /* claims reported */ - FORMAT(COUNT(tm.id), 0) AS claims_reported, -\t\t/* incurred claims count */ -\tFORMAT( -\t SUM( -\t CASE -\t WHEN tcs.claim_status IN ('Settled', 'Paid') THEN 1 -\t WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') THEN 1 -\t ELSE 0 -\t END -\t ) -, 0) AS incurred_claims, - - /* incurred amount */ - FORMAT( - COALESCE(SUM( - CASE - WHEN tcs.claim_status IN ('Settled', 'Paid') - THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) - WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') - THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) - ELSE 0 - END - ), 0) - , 0) AS incurred_amount, - - /* incurred ratio */ - CONCAT( - ROUND( - COALESCE(SUM( - CASE - WHEN tcs.claim_status IN ('Settled', 'Paid') - THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) - WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') - THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) - ELSE 0 - END - ), 0) - / NULLIF( + /* earned premium */ + FORMAT( (prem.premium_as_on_date / 365) - * DATEDIFF( + * (DATEDIFF( MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), cp.policy_start_date - ) - , 0) * 100 - , 2) - , '%') AS incurred_ratio, + ) + 1) + , 0) AS earned_premium, + */ - /* rejection rate */ - CONCAT( - ROUND( - SUM(CASE WHEN tcs.claim_status IN ('Rejected', 'Denied') THEN 1 ELSE 0 END) - / NULLIF(COUNT(tm.id), 0) * 100 - , 2) - , '%') AS rejection_rate, + prem.premium_as_on_date, - /* projected claims */ - FORMAT( - ( - COALESCE(SUM( - CASE - WHEN tcs.claim_status IN ('Settled', 'Paid') - THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) - WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') - THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) - ELSE 0 - END - ), 0) - / NULLIF( - DATEDIFF( - MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), - cp.policy_start_date - ), 0 - ) - * 365 - ) * 1.10 - , 0) AS projected_claims, + DATEDIFF( + LEAST(CURDATE(), cp.policy_end_date), + cp.policy_start_date + ) + 1 AS run_days, - /* projected ratio */ - CONCAT( - ROUND( - ( + FORMAT( + (prem.premium_as_on_date / 365) * + ( + DATEDIFF( + LEAST(CURDATE(), cp.policy_end_date), + cp.policy_start_date + ) + 1 + ), + 2 + ) AS earned_premium, + + + + + + /* claims reported */ + FORMAT(COUNT(tm.id), 0) AS claims_reported, + \t\t/* incurred claims count */ + \tFORMAT( + \t SUM( + \t CASE + \t WHEN tcs.claim_status IN ('Settled', 'Paid') THEN 1 + \t WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') THEN 1 + \t ELSE 0 + \t END + \t ) + , 0) AS incurred_claims, + + /* incurred amount */ + FORMAT( + COALESCE(SUM( + CASE + WHEN tcs.claim_status IN ('Settled', 'Paid') + THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) + WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') + THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) + ELSE 0 + END + ), 0) + , 0) AS incurred_amount, + + /* incurred ratio */ + CONCAT( + ROUND( + COALESCE(SUM( + CASE + WHEN tcs.claim_status IN ('Settled', 'Paid') + THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) + WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') + THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) + ELSE 0 + END + ), 0) + / NULLIF( + (prem.premium_as_on_date / 365) + * DATEDIFF( + MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), + cp.policy_start_date + ) + , 0) * 100 + , 2) + , '%') AS incurred_ratio, + + /* rejection rate */ + CONCAT( + ROUND( + SUM(CASE WHEN tcs.claim_status IN ('Rejected', 'Denied') THEN 1 ELSE 0 END) + / NULLIF(COUNT(tm.id), 0) * 100 + , 2) + , '%') AS rejection_rate, + + /* projected claims */ + FORMAT( ( COALESCE(SUM( CASE @@ -337,49 +331,73 @@ SELECT ) * 365 ) * 1.10 - ) - / NULLIF(prem.premium_as_on_date, 0) * 100 - , 2) - , '%') AS projected_ratio + , 0) AS projected_claims, -FROM client_policy cp + /* projected ratio */ + CONCAT( + ROUND( + ( + ( + COALESCE(SUM( + CASE + WHEN tcs.claim_status IN ('Settled', 'Paid') + THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) + WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') + THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) + ELSE 0 + END + ), 0) + / NULLIF( + DATEDIFF( + MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), + cp.policy_start_date + ), 0 + ) + * 365 + ) * 1.10 + ) + / NULLIF(prem.premium_as_on_date, 0) * 100 + , 2) + , '%') AS projected_ratio -JOIN ( - SELECT - ep2.client_policy_id, - COALESCE(SUM( - CASE - WHEN e2.change_event = 'inception' - THEN ep2.rata_premimum - WHEN e2.change_event != 'inception' - AND (ep2.date_of_exit IS NULL OR ep2.date_of_exit = '') - THEN ep2.rata_premimum - WHEN ep2.date_of_exit IS NOT NULL - AND ep2.date_of_exit != '' - AND ep2.claim_status = 0 - THEN -ep2.rata_premimum - ELSE 0 - END - ), 0) AS premium_as_on_date - FROM employee_polices ep2 - JOIN employees e2 ON e2.id = ep2.employee_id - WHERE ep2.client_policy_id = :policy_id: - AND ep2.is_active = 1 - GROUP BY ep2.client_policy_id -) prem ON prem.client_policy_id = cp.id + FROM client_policy cp -JOIN ticket_master tm - ON tm.client_policy_id = cp.id - AND tm.is_active = 1 + JOIN ( + SELECT + ep2.client_policy_id, + COALESCE(SUM( + CASE + WHEN e2.change_event = 'inception' + THEN ep2.rata_premimum + WHEN e2.change_event != 'inception' + AND (ep2.date_of_exit IS NULL OR ep2.date_of_exit = '') + THEN ep2.rata_premimum + WHEN ep2.date_of_exit IS NOT NULL + AND ep2.date_of_exit != '' + AND ep2.claim_status = 0 + THEN -ep2.rata_premimum + ELSE 0 + END + ), 0) AS premium_as_on_date + FROM employee_polices ep2 + JOIN employees e2 ON e2.id = ep2.employee_id + WHERE ep2.client_policy_id = :policy_id: + AND ep2.is_active = 1 + GROUP BY ep2.client_policy_id + ) prem ON prem.client_policy_id = cp.id -JOIN ticket_claim_status tcs - ON tcs.id = tm.claim_status_id + JOIN ticket_master tm + ON tm.client_policy_id = cp.id + AND tm.is_active = 1 -WHERE cp.id = :policy_id: + JOIN ticket_claim_status tcs + ON tcs.id = tm.claim_status_id -GROUP BY cp.id, cp.policy_start_date, prem.premium_as_on_date; -SQL; - return $this->runKpiQuery($sql, $policyId); + WHERE cp.id = :policy_id: + + GROUP BY cp.id, cp.policy_start_date, prem.premium_as_on_date; + SQL; + return $this->runKpiQuery($sql, $policyId); } /** Metabase #190: Claim Amount by Gender */ From 8720bfbe96a0f240aa3e169245249e011a47f4ca Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Thu, 2 Jul 2026 12:06:51 +0530 Subject: [PATCH 3/4] GWM : earned premium calculation correction for hr dashboard --- .../ClaimsCollectionV2DashboardModel.php | 279 ++++++++---------- 1 file changed, 129 insertions(+), 150 deletions(-) diff --git a/app/Models/ClaimsCollectionV2DashboardModel.php b/app/Models/ClaimsCollectionV2DashboardModel.php index 88baf6ce..3067443f 100644 --- a/app/Models/ClaimsCollectionV2DashboardModel.php +++ b/app/Models/ClaimsCollectionV2DashboardModel.php @@ -214,105 +214,108 @@ SQL; /** Metabase #186: CLAIMS EXPERIENCE SUMMARY */ public function claims_experience_summary(int $policyId): array { - $sql = <<<'SQL' - SELECT - /* run days */ - /* - DATEDIFF( - MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), - cp.policy_start_date - ) + 1 AS run_days, - - /* earned premium */ - FORMAT( - (prem.premium_as_on_date / 365) - * (DATEDIFF( - MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), - cp.policy_start_date - ) + 1) - , 0) AS earned_premium, - */ - - prem.premium_as_on_date, + $sql = <<<'SQL' +SELECT + /* run days */ + DATEDIFF( + LEAST(CURDATE(), cp.policy_end_date), + cp.policy_start_date + ) + 1 AS run_days, + /* earned premium */ + FORMAT( + (prem.premium_as_on_date / 365) * + ( DATEDIFF( LEAST(CURDATE(), cp.policy_end_date), cp.policy_start_date - ) + 1 AS run_days, + ) + 1 + ), + 2 + ) AS earned_premium, - FORMAT( - (prem.premium_as_on_date / 365) * - ( - DATEDIFF( - LEAST(CURDATE(), cp.policy_end_date), - cp.policy_start_date - ) + 1 - ), - 2 - ) AS earned_premium, + /* claims reported */ + FORMAT(COUNT(tm.id), 0) AS claims_reported, +\t\t/* incurred claims count */ +\tFORMAT( +\t SUM( +\t CASE +\t WHEN tcs.claim_status IN ('Settled', 'Paid') THEN 1 +\t WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') THEN 1 +\t ELSE 0 +\t END +\t ) +, 0) AS incurred_claims, - + /* incurred amount */ + FORMAT( + COALESCE(SUM( + CASE + WHEN tcs.claim_status IN ('Settled', 'Paid') + THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) + WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') + THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) + ELSE 0 + END + ), 0) + , 0) AS incurred_amount, - + /* incurred ratio */ + CONCAT( + ROUND( + COALESCE(SUM( + CASE + WHEN tcs.claim_status IN ('Settled', 'Paid') + THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) + WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') + THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) + ELSE 0 + END + ), 0) + / NULLIF( + (prem.premium_as_on_date / 365) + * DATEDIFF( + MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), + cp.policy_start_date + ) + , 0) * 100 + , 2) + , '%') AS incurred_ratio, - /* claims reported */ - FORMAT(COUNT(tm.id), 0) AS claims_reported, - \t\t/* incurred claims count */ - \tFORMAT( - \t SUM( - \t CASE - \t WHEN tcs.claim_status IN ('Settled', 'Paid') THEN 1 - \t WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') THEN 1 - \t ELSE 0 - \t END - \t ) - , 0) AS incurred_claims, + /* rejection rate */ + CONCAT( + ROUND( + SUM(CASE WHEN tcs.claim_status IN ('Rejected', 'Denied') THEN 1 ELSE 0 END) + / NULLIF(COUNT(tm.id), 0) * 100 + , 2) + , '%') AS rejection_rate, - /* incurred amount */ - FORMAT( - COALESCE(SUM( - CASE - WHEN tcs.claim_status IN ('Settled', 'Paid') - THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) - WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') - THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) - ELSE 0 - END - ), 0) - , 0) AS incurred_amount, + /* projected claims */ + FORMAT( + ( + COALESCE(SUM( + CASE + WHEN tcs.claim_status IN ('Settled', 'Paid') + THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) + WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') + THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) + ELSE 0 + END + ), 0) + / NULLIF( + DATEDIFF( + MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), + cp.policy_start_date + ), 0 + ) + * 365 + ) * 1.10 + , 0) AS projected_claims, - /* incurred ratio */ - CONCAT( - ROUND( - COALESCE(SUM( - CASE - WHEN tcs.claim_status IN ('Settled', 'Paid') - THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) - WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') - THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) - ELSE 0 - END - ), 0) - / NULLIF( - (prem.premium_as_on_date / 365) - * DATEDIFF( - MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), - cp.policy_start_date - ) - , 0) * 100 - , 2) - , '%') AS incurred_ratio, - - /* rejection rate */ - CONCAT( - ROUND( - SUM(CASE WHEN tcs.claim_status IN ('Rejected', 'Denied') THEN 1 ELSE 0 END) - / NULLIF(COUNT(tm.id), 0) * 100 - , 2) - , '%') AS rejection_rate, - - /* projected claims */ - FORMAT( + /* projected ratio */ + CONCAT( + ROUND( + ( ( COALESCE(SUM( CASE @@ -331,73 +334,49 @@ SQL; ) * 365 ) * 1.10 - , 0) AS projected_claims, + ) + / NULLIF(prem.premium_as_on_date, 0) * 100 + , 2) + , '%') AS projected_ratio - /* projected ratio */ - CONCAT( - ROUND( - ( - ( - COALESCE(SUM( - CASE - WHEN tcs.claim_status IN ('Settled', 'Paid') - THEN CAST(NULLIF(tm.approved_amount, '') AS DECIMAL(15,2)) - WHEN tcs.claim_status NOT IN ('Settled', 'Paid', 'Rejected', 'Denied') - THEN CAST(NULLIF(tm.claim_amount, '') AS DECIMAL(15,2)) - ELSE 0 - END - ), 0) - / NULLIF( - DATEDIFF( - MAX(COALESCE(tm.claim_dump_date, cp.policy_end_date)), - cp.policy_start_date - ), 0 - ) - * 365 - ) * 1.10 - ) - / NULLIF(prem.premium_as_on_date, 0) * 100 - , 2) - , '%') AS projected_ratio +FROM client_policy cp - FROM client_policy cp +JOIN ( + SELECT + ep2.client_policy_id, + COALESCE(SUM( + CASE + WHEN e2.change_event = 'inception' + THEN ep2.rata_premimum + WHEN e2.change_event != 'inception' + AND (ep2.date_of_exit IS NULL OR ep2.date_of_exit = '') + THEN ep2.rata_premimum + WHEN ep2.date_of_exit IS NOT NULL + AND ep2.date_of_exit != '' + AND ep2.claim_status = 0 + THEN -ep2.rata_premimum + ELSE 0 + END + ), 0) AS premium_as_on_date + FROM employee_polices ep2 + JOIN employees e2 ON e2.id = ep2.employee_id + WHERE ep2.client_policy_id = :policy_id: + AND ep2.is_active = 1 + GROUP BY ep2.client_policy_id +) prem ON prem.client_policy_id = cp.id - JOIN ( - SELECT - ep2.client_policy_id, - COALESCE(SUM( - CASE - WHEN e2.change_event = 'inception' - THEN ep2.rata_premimum - WHEN e2.change_event != 'inception' - AND (ep2.date_of_exit IS NULL OR ep2.date_of_exit = '') - THEN ep2.rata_premimum - WHEN ep2.date_of_exit IS NOT NULL - AND ep2.date_of_exit != '' - AND ep2.claim_status = 0 - THEN -ep2.rata_premimum - ELSE 0 - END - ), 0) AS premium_as_on_date - FROM employee_polices ep2 - JOIN employees e2 ON e2.id = ep2.employee_id - WHERE ep2.client_policy_id = :policy_id: - AND ep2.is_active = 1 - GROUP BY ep2.client_policy_id - ) prem ON prem.client_policy_id = cp.id +JOIN ticket_master tm + ON tm.client_policy_id = cp.id + AND tm.is_active = 1 - JOIN ticket_master tm - ON tm.client_policy_id = cp.id - AND tm.is_active = 1 +JOIN ticket_claim_status tcs + ON tcs.id = tm.claim_status_id - JOIN ticket_claim_status tcs - ON tcs.id = tm.claim_status_id +WHERE cp.id = :policy_id: - WHERE cp.id = :policy_id: - - GROUP BY cp.id, cp.policy_start_date, prem.premium_as_on_date; - SQL; - return $this->runKpiQuery($sql, $policyId); +GROUP BY cp.id, cp.policy_start_date, prem.premium_as_on_date; +SQL; + return $this->runKpiQuery($sql, $policyId); } /** Metabase #190: Claim Amount by Gender */ From 565fa516cf670c90a9e9534be3ed2e38bbb55dcb Mon Sep 17 00:00:00 2001 From: Gowtham M Date: Thu, 2 Jul 2026 15:49:46 +0530 Subject: [PATCH 4/4] GWM : wellness link issue same employees in in last year entery --- app/Controllers/EmployeeRestController.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index 606460f0..feeb8634 100755 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -3065,6 +3065,7 @@ class EmployeeRestController extends AdminController ->where('client_id', $this->request->getGet('client_id')) ->where('client_branch_id', $this->request->getGet('client_branch_id')) ->where('family_floater_key', 'self')->where('is_active', 1) + ->orderBy('id', 'DESC') ->get()->getRow(); $employeeName = $employeeSelfData->name ?? ""; @@ -3218,6 +3219,7 @@ class EmployeeRestController extends AdminController $emp_reatail_policy_data = $this->getEmpRetailPolicy($employeeSelfData); $apiServiceController = new ApiServiceController; + // dd($employeeSelfData->id); $emp_wellness_data = $apiServiceController->getWellnessUrl($employeeSelfData->id ?? null); return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result, 'emp_name' => $employeeName, 'pre_policy_count' => $prePolicyCount, 'emp_not_enrolled_count' => $empNotEnrolledCount, 'retail_policy_data' => $emp_reatail_policy_data, 'wellness_data' => $emp_wellness_data], 200);