nhance/tests/smoke_icici_mis_report.php
2026-08-07 10:19:31 +05:30

141 lines
4.1 KiB
PHP

<?php
/**
* Smoke test: ICICI Portfolio Analysis MIS (service + HTML + PDF).
* Run: php tests/smoke_icici_mis_report.php [policy_id]
*/
declare(strict_types=1);
define('FCPATH', __DIR__ . '/../public/');
chdir(FCPATH);
require FCPATH . '../app/Config/Paths.php';
$paths = new Config\Paths();
require rtrim($paths->systemDirectory, '\\/ ') . DIRECTORY_SEPARATOR . 'bootstrap.php';
require_once SYSTEMPATH . 'Config/DotEnv.php';
(new CodeIgniter\Config\DotEnv(ROOTPATH))->load();
defined('ENVIRONMENT') || define('ENVIRONMENT', env('CI_ENVIRONMENT', 'development'));
$boot = APPPATH . 'Config/Boot/' . ENVIRONMENT . '.php';
if (is_file($boot)) {
require_once $boot;
}
require_once APPPATH . 'Config/Constants.php';
$policyId = (int) ($argv[1] ?? 0);
$db = \Config\Database::connect();
if ($policyId <= 0) {
$row = $db->query(
"SELECT cr.client_policy_id, COUNT(*) AS cnt
FROM claim_report cr
WHERE cr.source_table = 'claims_dump_icici'
AND cr.is_active = 1
AND cr.source_row_id IS NOT NULL
GROUP BY cr.client_policy_id
ORDER BY cnt DESC
LIMIT 1"
)->getRowArray();
$policyId = (int) ($row['client_policy_id'] ?? 0);
echo "Auto-selected policy_id: {$policyId}\n";
}
if ($policyId <= 0) {
echo "FAIL: No policy with ICICI claim_report linkage found.\n";
exit(1);
}
$service = new \App\Libraries\IciciMisReportService();
$built = $service->build($policyId);
if (!$built['status']) {
echo 'FAIL: ' . ($built['message'] ?? 'unknown') . "\n";
exit(1);
}
$data = $built['data'];
$vm = $data['view_model'] ?? [];
$requiredSections = [
'meta', 'premium_lr', 'claims_summary', 'iltc_summary', 'enrollment',
'age_analysis', 'relation_acs', 'amount_bands', 'si_bands', 'iltc_app',
'utilization_employees', 'utilization_dependents', 'disease',
'hospitals', 'cities', 'tat', 'takeaways',
];
foreach ($requiredSections as $key) {
if (!array_key_exists($key, $vm)) {
echo "FAIL: missing view_model.{$key}\n";
exit(1);
}
}
echo "OK policy_id={$policyId}\n";
echo 'Policy: ' . ($data['header']['policy_number'] ?? '') . "\n";
echo 'Client: ' . ($vm['meta']['client_name'] ?? '') . "\n";
echo 'Dump rows: ' . ($data['dump_row_count'] ?? 0) . "\n";
echo 'Claims summary rows: ' . count($vm['claims_summary']['rows'] ?? []) . "\n";
echo 'Age rows: ' . count($vm['age_analysis']['rows'] ?? []) . "\n";
echo 'Disease rows: ' . count($vm['disease']['rows'] ?? []) . "\n";
echo 'Hospitals: ' . count($vm['hospitals']['rows'] ?? []) . "\n";
echo 'Cities: ' . count($vm['cities']['rows'] ?? []) . "\n";
echo 'TAT months: ' . count($vm['tat'] ?? []) . "\n";
$html = view('claims_mis_icici', [
'report' => $data,
'view_model' => $vm,
'policy_id' => $policyId,
'pdf_url' => '',
'embed' => true,
]);
$sectionMarkers = [
'Portfolio Analysis',
'Enrollment Summary',
'Age-wise Analysis',
'Relation ACS',
'Amount Band-wise Analysis',
'SI Band-wise Analysis',
'IL Take Care',
'Disease-Analysis',
'Claim Utilization report',
'Top Hospitals',
'Top Cities',
'TAT Analysis',
];
foreach ($sectionMarkers as $marker) {
if (stripos($html, $marker) === false) {
echo "FAIL: HTML missing section '{$marker}'\n";
exit(1);
}
}
if (stripos($html, 'icici_lambard_new') === false && stripos($html, 'data:image') === false) {
if (stripos($html, 'icici_lambard_new.png') === false) {
echo "FAIL: HTML missing ICICI logo reference\n";
exit(1);
}
}
echo "OK HTML sections present (" . strlen($html) . " bytes)\n";
$pdf = (new \App\Libraries\IciciMisPdfService())->generateFromReport($data, $policyId);
if (!$pdf['status']) {
echo 'FAIL PDF: ' . ($pdf['message'] ?? 'unknown') . "\n";
exit(1);
}
$outDir = WRITEPATH . 'uploads/';
if (!is_dir($outDir)) {
@mkdir($outDir, 0775, true);
}
$outFile = $outDir . ($pdf['filename'] ?? 'ICICI_MIS_smoke.pdf');
file_put_contents($outFile, $pdf['content']);
echo 'OK PDF: ' . $outFile . ' (' . strlen((string) $pdf['content']) . " bytes)\n";
exit(0);