From b3c73e670eaac70d1b0c0a137a35b914735dbfb9 Mon Sep 17 00:00:00 2001 From: "venkatesh.r" Date: Mon, 9 Feb 2026 13:52:49 +0530 Subject: [PATCH] FIX_CLAIM_DUMP_ISSUES --- app/Controllers/ClientController.php | 6 +-- app/Controllers/EmployeeController.php | 2 + .../AbhiClaimImportService.php | 25 +++++-------- .../BaseTpaClaimImportService.php | 7 +++- .../FhplClaimImportService.php | 19 ++++++---- .../IciciClaimImportService.php | 35 +++++------------- .../MediAssistClaimImportService.php | 10 ++++- .../RcareClaimImportService.php | 34 +++++------------ .../VidalClaimImportService.php | 15 +++++--- app/Views/claim_dump_file_list.php | 2 +- app/Views/layout/header.php | 4 +- .../sample_claim_dump_upload_excel.xlsx | Bin 0 -> 11636 bytes 12 files changed, 71 insertions(+), 88 deletions(-) create mode 100644 public/sample_excel/sample_claim_dump_upload_excel.xlsx diff --git a/app/Controllers/ClientController.php b/app/Controllers/ClientController.php index b6433edc..6b30ad59 100755 --- a/app/Controllers/ClientController.php +++ b/app/Controllers/ClientController.php @@ -6446,12 +6446,12 @@ class ClientController extends AdminController // $response = $ticketServiceController->getClaimExcelErrorData(["file_id" => 41]); // $response = $ticketServiceController->claimDumpOnBoardProcess(["file_id" => 17]); // $response = $ticketServiceController->extractExcelData("claims_dump_form_client.xlsx"); - // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 52]); //reliance - // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 50]); //fhpl // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 51]); //abhi - // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 48]); //vidal + // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 50]); //fhpl // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 53]); //icici // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 54]); //mediassist + // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 52]); //reliance + // $response = $ticketServiceController->tpaClaimDumpImporter(["file_id" => 48]); //vidal // $response = $ticketServiceController->tpaClaimDumpToTicketMasterImporters(["file_id" => 48]); //vidal // $response = $ticketServiceController->tpaClaimDumpToTicketMasterImporters(["file_id" => 54]); //mediassist diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index b2259ac1..a8bd7c44 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -581,6 +581,8 @@ class EmployeeController extends AdminController $filePath = ROOTPATH . 'public/sample_excel/sample_multievent_file.xlsx'; }else if ($actionType == 'bds_upload') { $filePath = ROOTPATH . 'public/sample_excel/sample_bds_bulk_upload_excel.xlsx'; + }else if ($actionType == 'claim_dump_upload') { + $filePath = ROOTPATH . 'public/sample_excel/sample_claim_dump_upload_excel.xlsx'; } // Check if the file exists diff --git a/app/Libraries/TPAClaimsImportServices/AbhiClaimImportService.php b/app/Libraries/TPAClaimsImportServices/AbhiClaimImportService.php index 3ee5c066..8dcfc672 100644 --- a/app/Libraries/TPAClaimsImportServices/AbhiClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/AbhiClaimImportService.php @@ -148,20 +148,7 @@ class AbhiClaimImportService extends BaseTpaClaimImportService } $builder = $this->db->table('claims_dump_abhi'); - - foreach ($data as $value) { - - if (!$builder->insert($value)) { - - // 🔍 Debug purpose - log_message('error', print_r($this->db->error(), true)); - log_message('error', $this->db->getLastQuery()); - - return false; - } - } - - return true; + return $builder->insertBatch($data); } @@ -321,8 +308,14 @@ class AbhiClaimImportService extends BaseTpaClaimImportService $item['emp_code'] = $employee_data['emp_code'] ?? null; $item['emp_mail'] = $employee_data['email_corporate'] ?? null; $item['emp_mobile'] = $employee_data['mobile'] ?? null; - $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; - $item['insured_name'] = $employee_data['insured_name'] ?? null; + if (!empty($employee_data['insured_emp_id'])) { + $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; + $item['insured_name'] = $employee_data['insured_name'] ?? null; + }else{ + $reason = 'This Dependent employee not exist in our system.'; + $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason]; + continue; + } } else { $reason = 'This employee not exist in our system.'; diff --git a/app/Libraries/TPAClaimsImportServices/BaseTpaClaimImportService.php b/app/Libraries/TPAClaimsImportServices/BaseTpaClaimImportService.php index f2e94cfa..3a6a5777 100644 --- a/app/Libraries/TPAClaimsImportServices/BaseTpaClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/BaseTpaClaimImportService.php @@ -92,6 +92,7 @@ abstract class BaseTpaClaimImportService $message = ''; $hasExecutedTask = false; + $status = true; // Process Mapped Data if (!empty($ticketMasterData['mapped_array'])) { @@ -102,6 +103,8 @@ abstract class BaseTpaClaimImportService } $message .= 'Ticket Master Claim bulk insert success. '; $hasExecutedTask = true; + }else{ + $status = false; } // Process Rejected Reasons @@ -113,7 +116,7 @@ abstract class BaseTpaClaimImportService } $message .= empty($ticketMasterData['mapped_array']) - ? 'Those employees not in our system. ' + ? 'Those employee or dependent not in our system. ' : 'Ticket Master Claim rejected reason updated successfully. '; $hasExecutedTask = true; } @@ -126,7 +129,7 @@ abstract class BaseTpaClaimImportService // 2. Commit the transaction $this->db->transCommit(); - return ['status' => true, 'message' => trim($message)]; + return ['status' => $status, 'message' => trim($message)]; } catch (\Throwable $th) { // 3. Rollback on crash diff --git a/app/Libraries/TPAClaimsImportServices/FhplClaimImportService.php b/app/Libraries/TPAClaimsImportServices/FhplClaimImportService.php index f4410b55..3ad5dde9 100644 --- a/app/Libraries/TPAClaimsImportServices/FhplClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/FhplClaimImportService.php @@ -217,12 +217,9 @@ class FhplClaimImportService extends BaseTpaClaimImportService return false; } - $ClaimsDumpFhplModel = new ClaimsDumpFhplModel(); - $result = $ClaimsDumpFhplModel->insertBatch($data); - - return true; - - } + $builder = $this->db->table('claims_dump_fhpl'); + return $builder->insertBatch($data); + } public function importClaimMaster(array $data): bool @@ -381,8 +378,14 @@ class FhplClaimImportService extends BaseTpaClaimImportService $item['emp_code'] = $employee_data['emp_code'] ?? null; $item['emp_mail'] = $employee_data['email_corporate'] ?? null; $item['emp_mobile'] = $employee_data['mobile'] ?? null; - $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; - $item['insured_name'] = $employee_data['insured_name'] ?? null; + if (!empty($employee_data['insured_emp_id'])) { + $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; + $item['insured_name'] = $employee_data['insured_name'] ?? null; + }else{ + $reason = 'This Dependent employee not exist in our system.'; + $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason]; + continue; + } } else { $reason = 'This employee not exist in our system.'; diff --git a/app/Libraries/TPAClaimsImportServices/IciciClaimImportService.php b/app/Libraries/TPAClaimsImportServices/IciciClaimImportService.php index fb1d731f..2cb09e7a 100644 --- a/app/Libraries/TPAClaimsImportServices/IciciClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/IciciClaimImportService.php @@ -135,29 +135,8 @@ class IciciClaimImportService extends BaseTpaClaimImportService return false; } - try { - - - $ClaimsDumpFhplModel = new ClaimsDumpFhplModel(); - $result = $ClaimsDumpFhplModel->insertBatch($data); - - return true; - - } catch (\Throwable $th) { - - $errorData = [ - 'message' => $th->getMessage(), - 'file' => $th->getFile(), - 'line' => $th->getLine(), - 'code' => $th->getCode(), - 'trace' => $th->getTraceAsString(), - 'trace_array' => $th->getTrace(), // full array version (optional) - 'function' => $th->getTrace()[0]['function'] ?? null, - 'class' => $th->getTrace()[0]['class'] ?? null, - ]; - return false; - } - + $builder = $this->db->table('claims_dump_icici'); + return $builder->insertBatch($data); } @@ -317,8 +296,14 @@ class IciciClaimImportService extends BaseTpaClaimImportService $item['emp_code'] = $employee_data['emp_code'] ?? null; $item['emp_mail'] = $employee_data['email_corporate'] ?? null; $item['emp_mobile'] = $employee_data['mobile'] ?? null; - $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; - $item['insured_name'] = $employee_data['insured_name'] ?? null; + if (!empty($employee_data['insured_emp_id'])) { + $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; + $item['insured_name'] = $employee_data['insured_name'] ?? null; + }else{ + $reason = 'This Dependent employee not exist in our system.'; + $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason]; + continue; + } } else { $reason = 'This employee not exist in our system.'; diff --git a/app/Libraries/TPAClaimsImportServices/MediAssistClaimImportService.php b/app/Libraries/TPAClaimsImportServices/MediAssistClaimImportService.php index 0c68ece9..947775f6 100644 --- a/app/Libraries/TPAClaimsImportServices/MediAssistClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/MediAssistClaimImportService.php @@ -334,8 +334,14 @@ class MediAssistClaimImportService extends BaseTpaClaimImportService $item['emp_code'] = $employee_data['emp_code'] ?? null; $item['emp_mail'] = $employee_data['email_corporate'] ?? null; $item['emp_mobile'] = $employee_data['mobile'] ?? null; - $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; - $item['insured_name'] = $employee_data['insured_name'] ?? null; + if (!empty($employee_data['insured_emp_id'])) { + $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; + $item['insured_name'] = $employee_data['insured_name'] ?? null; + }else{ + $reason = 'This Dependent employee not exist in our system.'; + $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason]; + continue; + } } else { $reason = 'This employee not exist in our system.'; diff --git a/app/Libraries/TPAClaimsImportServices/RcareClaimImportService.php b/app/Libraries/TPAClaimsImportServices/RcareClaimImportService.php index a75289a2..30c12e0d 100644 --- a/app/Libraries/TPAClaimsImportServices/RcareClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/RcareClaimImportService.php @@ -124,28 +124,8 @@ class RcareClaimImportService extends BaseTpaClaimImportService return false; } - try { - - $builder = $this->db->table('claims_dump_reliance'); - $builder->insertBatch($data); - - return true; - - } catch (\Throwable $th) { - - $errorData = [ - 'message' => $th->getMessage(), - 'file' => $th->getFile(), - 'line' => $th->getLine(), - 'code' => $th->getCode(), - 'trace' => $th->getTraceAsString(), - 'trace_array' => $th->getTrace(), // full array version (optional) - 'function' => $th->getTrace()[0]['function'] ?? null, - 'class' => $th->getTrace()[0]['class'] ?? null, - ]; - dd($errorData); - return false; - } + $builder = $this->db->table('claims_dump_reliance'); + return $builder->insertBatch($data); } @@ -305,8 +285,14 @@ class RcareClaimImportService extends BaseTpaClaimImportService $item['emp_code'] = $employee_data['emp_code'] ?? null; $item['emp_mail'] = $employee_data['email_corporate'] ?? null; $item['emp_mobile'] = $employee_data['mobile'] ?? null; - $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; - $item['insured_name'] = $employee_data['insured_name'] ?? null; + if (!empty($employee_data['insured_emp_id'])) { + $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; + $item['insured_name'] = $employee_data['insured_name'] ?? null; + }else{ + $reason = 'This Dependent employee not exist in our system.'; + $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason]; + continue; + } } else { $reason = 'This employee not exist in our system.'; diff --git a/app/Libraries/TPAClaimsImportServices/VidalClaimImportService.php b/app/Libraries/TPAClaimsImportServices/VidalClaimImportService.php index 50ef9924..8fc34700 100644 --- a/app/Libraries/TPAClaimsImportServices/VidalClaimImportService.php +++ b/app/Libraries/TPAClaimsImportServices/VidalClaimImportService.php @@ -364,9 +364,8 @@ class VidalClaimImportService extends BaseTpaClaimImportService } $builder = $this->db->table('claims_dump_vidal'); - $builder->insertBatch($data); + return $builder->insertBatch($data); - return true; } @@ -541,7 +540,7 @@ class VidalClaimImportService extends BaseTpaClaimImportService } // Meta fields - $item['claim_status_id'] = $statusMapping[$row['status']] ?? 61; + $item['claim_status_id'] = $statusMapping[$row['claim_status']] ?? 61; $item['file_id'] = $file_id; $item['claim_dump_ref_id'] = $row['id']; $item['created_by'] = $file_data['created_by'] ?? null; @@ -620,8 +619,14 @@ class VidalClaimImportService extends BaseTpaClaimImportService $item['emp_name'] = $employee_data['id'] ?? null; $item['emp_mail'] = $employee_data['insurer_id'] ?? null; $item['emp_mobile'] = $employee_data['tpa_id'] ?? null; - $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; - $item['insured_name'] = $employee_data['insured_name'] ?? null; + if (!empty($employee_data['insured_emp_id'])) { + $item['insured_emp_id'] = $employee_data['insured_emp_id'] ?? null; + $item['insured_name'] = $employee_data['insured_name'] ?? null; + }else{ + $reason = 'This Dependent employee not exist in our system.'; + $rejecetd_reason[] = ["id" => $row['id'], "master_reject_reason" => $reason]; + continue; + } }else{ $reason = " This policy no ( " . $row['insurer_policy_number'] ." ) does not exist in our system"; $rejecetd_reason[$row['id']] = ["ticket_master_insert_reject_reason" => $reason]; diff --git a/app/Views/claim_dump_file_list.php b/app/Views/claim_dump_file_list.php index 0cf55ed9..e0d66143 100644 --- a/app/Views/claim_dump_file_list.php +++ b/app/Views/claim_dump_file_list.php @@ -185,7 +185,7 @@
-  [ Sample Excel ] +  [ " id="download_sample_file" style="font-size: small; color:red !important;">Download sample file ]
diff --git a/app/Views/layout/header.php b/app/Views/layout/header.php index 73c56916..9a3b72af 100755 --- a/app/Views/layout/header.php +++ b/app/Views/layout/header.php @@ -1863,9 +1863,9 @@
  • Claim Dump Upload
  • -
  • + diff --git a/public/sample_excel/sample_claim_dump_upload_excel.xlsx b/public/sample_excel/sample_claim_dump_upload_excel.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..93b0d7583b41b53cb3a358be710b7b2dff1cae49 GIT binary patch literal 11636 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