GWM : earned premium calculation correction for hr dashboard
This commit is contained in:
parent
928f12519e
commit
3df39378e8
@ -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 */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user