myLogger = \Config\Services::mylogger(); set_session_context('Ticket Service Controller'); $this->claimDumpFileModel = new ClaimDumpFileModel(); $this->clientModel = new ClientModel(); $this->insurerModel = new InsurerModel(); $this->TPAModel = new TPAModel(); $this->ticketClaimStatusModel = new TicketClaimStatusModel(); $this->clientPolicyModel = new ClientPolicyModel(); $this->claim_dump_excel_columns = [ // Mandatory Fields 'sno' => [ 'col_idx' => 0, 'col_cell_name' => 'A', 'col_name' => 'S.No.', 'is_mandatory' => true, 'data_type' => 'int', 'format' => null, 'allowed_values' => null ], 'policy_type' => [ 'col_idx' => 1, 'col_cell_name' => 'B', 'col_name' => 'Policy Type', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => ['GMC', 'GPA', 'EDLI', 'GTLI'] ], 'status' => [ 'col_idx' => 2, 'col_cell_name' => 'C', 'col_name' => 'Status', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'client_short_name' => [ 'col_idx' => 3, 'col_cell_name' => 'D', 'col_name' => 'Corporate Name', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'insurer' => [ 'col_idx' => 4, 'col_cell_name' => 'E', 'col_name' => 'Insurer', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'tpa' => [ 'col_idx' => 5, 'col_cell_name' => 'F', 'col_name' => 'TPA', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'policy_no' => [ 'col_idx' => 6, 'col_cell_name' => 'G', 'col_name' => 'Policy No', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'employee_code' => [ 'col_idx' => 7, 'col_cell_name' => 'H', 'col_name' => 'Employee Code', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'employee_name' => [ 'col_idx' => 8, 'col_cell_name' => 'I', 'col_name' => 'Employee Name', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'insured_name' => [ 'col_idx' => 9, 'col_cell_name' => 'J', 'col_name' => 'Insured Name', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'relationship' => [ 'col_idx' => 10, 'col_cell_name' => 'K', 'col_name' => 'Relationship', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => ['Self', 'Spouse', 'Child', 'Parent', 'Other'] ], 'mode_of_intimation' => [ 'col_idx' => 11, 'col_cell_name' => 'L', 'col_name' => 'Mode of Intimation', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => ['Email', 'Phone', 'Portal', 'Physical'] ], 'acm' => [ 'col_idx' => 12, 'col_cell_name' => 'M', 'col_name' => 'ACM', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'claim_type' => [ 'col_idx' => 13, 'col_cell_name' => 'N', 'col_name' => 'Claim Type', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'priority' => [ 'col_idx' => 14, 'col_cell_name' => 'O', 'col_name' => 'Priority', 'is_mandatory' => true, 'data_type' => 'str', 'format' => null, 'allowed_values' => ['Critical', 'Emergency', 'Urgent', 'High', 'Medium', 'Low'] ], // Common Fields 'date_of_birth' => [ 'col_idx' => 15, 'col_cell_name' => 'P', 'col_name' => 'Date of Birth', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'employee_mobile' => [ 'col_idx' => 16, 'col_cell_name' => 'Q', 'col_name' => 'Employee Mobile', 'is_mandatory' => false, 'data_type' => 'str', 'format' => '/^[0-9]{10}$/', 'allowed_values' => null ], 'employee_email' => [ 'col_idx' => 17, 'col_cell_name' => 'R', 'col_name' => 'Employee Email', 'is_mandatory' => false, 'data_type' => 'str', 'format' => 'email', 'allowed_values' => null ], 'employee_personal_email' => [ 'col_idx' => 18, 'col_cell_name' => 'S', 'col_name' => 'Employee Personal Email', 'is_mandatory' => false, 'data_type' => 'str', 'format' => 'email', 'allowed_values' => null ], // GMC Specific Fields 'hospital_name' => [ 'col_idx' => 19, 'col_cell_name' => 'T', 'col_name' => 'Hospital Name', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'doa' => [ 'col_idx' => 20, 'col_cell_name' => 'U', 'col_name' => 'DOA (Date of Admission)', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'dod' => [ 'col_idx' => 21, 'col_cell_name' => 'V', 'col_name' => 'DOD (Date of Discharge)', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'claim_amount' => [ 'col_idx' => 22, 'col_cell_name' => 'W', 'col_name' => 'Claim Amount', 'is_mandatory' => false, 'data_type' => 'decimal', 'format' => '2', 'allowed_values' => null ], 'pod_no' => [ 'col_idx' => 23, 'col_cell_name' => 'X', 'col_name' => 'POD No.', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'tpa_id' => [ 'col_idx' => 24, 'col_cell_name' => 'Y', 'col_name' => 'TPA ID', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'claim_number' => [ 'col_idx' => 25, 'col_cell_name' => 'Z', 'col_name' => 'Claim Number', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], // GPA Specific Fields 'sum_insured' => [ 'col_idx' => 26, 'col_cell_name' => 'AA', 'col_name' => 'Sum Insured', 'is_mandatory' => false, 'data_type' => 'decimal', 'format' => '2', 'allowed_values' => null ], 'date_of_join' => [ 'col_idx' => 27, 'col_cell_name' => 'AB', 'col_name' => 'Date of Join', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'date_of_inception' => [ 'col_idx' => 28, 'col_cell_name' => 'AC', 'col_name' => 'Date of Inception', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'date_of_accident' => [ 'col_idx' => 29, 'col_cell_name' => 'AD', 'col_name' => 'Date of Accident', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'date_of_death' => [ 'col_idx' => 30, 'col_cell_name' => 'AE', 'col_name' => 'Date of Death', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'date_of_intimate' => [ 'col_idx' => 31, 'col_cell_name' => 'AF', 'col_name' => 'Date of Intimate', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], // Status Wise Column Mandatory 'raised_date' => [ 'col_idx' => 32, 'col_cell_name' => 'AG', 'col_name' => 'Raised Date', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'registration_date' => [ 'col_idx' => 33, 'col_cell_name' => 'AH', 'col_name' => 'Registration Date', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'query_received_date' => [ 'col_idx' => 34, 'col_cell_name' => 'AI', 'col_name' => 'Query Received Date', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'payment_initiate_date' => [ 'col_idx' => 35, 'col_cell_name' => 'AJ', 'col_name' => 'Payment Initiate Date', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'denial_reason' => [ 'col_idx' => 36, 'col_cell_name' => 'AK', 'col_name' => 'Denial Reason', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'denial_date' => [ 'col_idx' => 37, 'col_cell_name' => 'AL', 'col_name' => 'Denial Date', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'approved_date' => [ 'col_idx' => 38, 'col_cell_name' => 'AM', 'col_name' => 'Approved Date', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'approved_letter' => [ 'col_idx' => 39, 'col_cell_name' => 'AN', 'col_name' => 'Approved Letter', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'approved_amount' => [ 'col_idx' => 40, 'col_cell_name' => 'AO', 'col_name' => 'Approved Amount', 'is_mandatory' => false, 'data_type' => 'decimal', 'format' => '2', 'allowed_values' => null ], 'approved_description' => [ 'col_idx' => 41, 'col_cell_name' => 'AP', 'col_name' => 'Approved Description', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'utr_details' => [ 'col_idx' => 42, 'col_cell_name' => 'AQ', 'col_name' => 'UTR Details', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'settle_letter' => [ 'col_idx' => 43, 'col_cell_name' => 'AR', 'col_name' => 'Settle Letter', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'settled_date' => [ 'col_idx' => 44, 'col_cell_name' => 'AS', 'col_name' => 'Settled Date', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd-m-Y', 'allowed_values' => null ], 'return_remark' => [ 'col_idx' => 45, 'col_cell_name' => 'AT', 'col_name' => 'Return Remark', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'cancel_remark' => [ 'col_idx' => 46, 'col_cell_name' => 'AU', 'col_name' => 'Cancel Remark', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'awb_courier' => [ 'col_idx' => 47, 'col_cell_name' => 'AV', 'col_name' => 'AWB No. and Courier Name', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], 'non_id_reason' => [ 'col_idx' => 48, 'col_cell_name' => 'AW', 'col_name' => 'Non ID Reason', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ] ]; $this->tableHeaders = [ "S NO", "POLICY #", "Status", "Account manager", "Insurer", "TPA", "Corporate", "Emp ID", "TPA ID", "Claim ID", "Employee Name", "Insured Name", "Relationship", "Emp. Mobile", "Emp mail id", "Claim Collection", "Source Detail", "Claim Type", "Hospital", "DOA", "DOD", "Claim Amount", "Date of Claim Receipt", "Date sent to TPA", "Date of Claim Registration", "Date - Latest Query Raise", "Date - Latest Query Resolution", "Approved Amt", "Date of Approval", "UTR - Settlement", "Date of Settlement", "Reason", "Remarks", "Approval Letter", "Settlement Letter", "Denial Letter", ]; $this->actualHeaders = [ "sno" => [ 'col_idx' => 0, 'col_cell_name' => 'A', 'col_name' => 'S NO', 'is_mandatory' => true, 'data_type' => 'int', 'format' => null, 'allowed_values' => null ], "corporate" => [ 'col_idx' => 6, 'col_cell_name' => 'G', 'col_name' => 'Corporate', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => null, 'custom' => 'check_client', 'params' => ['client_excel_name'] ], "policy_no" => [ 'col_idx' => 1, 'col_cell_name' => 'B', 'col_name' => 'POLICY #', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => null, ], "status" => [ 'col_idx' => 2, 'col_cell_name' => 'C', 'col_name' => 'Status', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => null, 'custom' => 'check_status', 'params' => ['excel_status_data'] ], "acm" => [ 'col_idx' => 3, 'col_cell_name' => 'D', 'col_name' => 'Account manager', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "insurer" => [ 'col_idx' => 4, 'col_cell_name' => 'E', 'col_name' => 'Insurer', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => null, 'custom' => 'check_insurer', 'params' => ['insurer_excel_name'] ], "tpa" => [ 'col_idx' => 5, 'col_cell_name' => 'F', 'col_name' => 'TPA', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null, 'custom' => 'check_tpa', 'params' => ['tpa_excel_name'] ], "emp_id" => [ 'col_idx' => 7, 'col_cell_name' => 'H', 'col_name' => 'Emp ID', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "tpa_id" => [ 'col_idx' => 8, 'col_cell_name' => 'I', 'col_name' => 'TPA ID', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "claim_id" => [ 'col_idx' => 9, 'col_cell_name' => 'J', 'col_name' => 'Claim ID', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "employee_name" => [ 'col_idx' => 10, 'col_cell_name' => 'K', 'col_name' => 'Employee Name', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "insured_name" => [ 'col_idx' => 11, 'col_cell_name' => 'L', 'col_name' => 'Insured Name', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "relationship" => [ 'col_idx' => 12, 'col_cell_name' => 'M', 'col_name' => 'Relationship', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => ['self', 'spouse', 'son', 'daughter', 'father', 'mother', 'father-in-law', 'mother-in-law'] ], "emp_mobile" => [ 'col_idx' => 13, 'col_cell_name' => 'N', 'col_name' => 'Emp. Mobile', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "emp_email" => [ 'col_idx' => 14, 'col_cell_name' => 'O', 'col_name' => 'Emp mail id', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "claim_collection" => [ 'col_idx' => 15, 'col_cell_name' => 'P', 'col_name' => 'Claim Collection', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => ["In Person", "Courier", "Online Mode - Email", "Smart Service Desk", "Direct to TPA"] ], "source_detail" => [ 'col_idx' => 16, 'col_cell_name' => 'Q', 'col_name' => 'Source Detail', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "claim_type" => [ 'col_idx' => 17, 'col_cell_name' => 'R', 'col_name' => 'Claim Type', 'is_mandatory' => true, 'data_type' => 'string', 'format' => null, 'allowed_values' => ["Claim", "Main Hospitalization", "Pre / Post", "OPD", "ReOpen", "TTD", "PTD", "PPD", "Death"] ], "hospital" => [ 'col_idx' => 18, 'col_cell_name' => 'S', 'col_name' => 'Hospital', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "doa" => [ 'col_idx' => 19, 'col_cell_name' => 'T', 'col_name' => 'DOA', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd/m/Y', 'allowed_values' => null ], "dod" => [ 'col_idx' => 20, 'col_cell_name' => 'U', 'col_name' => 'DOD', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd/m/Y', 'allowed_values' => null ], "claim_amount" => [ 'col_idx' => 21, 'col_cell_name' => 'V', 'col_name' => 'Claim Amount', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], "date_claim_receipt" => [ 'col_idx' => 22, 'col_cell_name' => 'W', 'col_name' => 'Date of Claim Receipt', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd/m/Y', 'allowed_values' => null ], "date_claim_registration" => [ 'col_idx' => 24, 'col_cell_name' => 'Y', 'col_name' => 'Date of Claim Registration', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd/m/Y', 'allowed_values' => null ], "date_latest_query_raise" => [ 'col_idx' => 25, 'col_cell_name' => 'Z', 'col_name' => 'Date - Latest Query Raise', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd/m/Y', 'allowed_values' => null ], "date_latest_query_resolution" => [ 'col_idx' => 26, 'col_cell_name' => 'AA', 'col_name' => 'Date - Latest Query Resolution', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd/m/Y', 'allowed_values' => null ], "approved_amt" => [ 'col_idx' => 27, 'col_cell_name' => 'AB', 'col_name' => 'Approved Amt', 'is_mandatory' => false, 'data_type' => 'str', 'format' => null, 'allowed_values' => null ], "date_approval" => [ 'col_idx' => 28, 'col_cell_name' => 'AC', 'col_name' => 'Date of Approval', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd/m/Y', 'allowed_values' => null ], "utr_settlement" => [ 'col_idx' => 29, 'col_cell_name' => 'AD', 'col_name' => 'UTR - Settlement', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "date_settlement" => [ 'col_idx' => 30, 'col_cell_name' => 'AE', 'col_name' => 'Date of Settlement', 'is_mandatory' => false, 'data_type' => 'date', 'format' => 'd/m/Y', 'allowed_values' => null ], "reason" => [ 'col_idx' => 31, 'col_cell_name' => 'AF', 'col_name' => 'Reason', 'is_mandatory' => false, 'data_type' => 'text', 'format' => null, 'allowed_values' => null ], "remarks" => [ 'col_idx' => 32, 'col_cell_name' => 'AG', 'col_name' => 'Remarks', 'is_mandatory' => false, 'data_type' => 'text', 'format' => null, 'allowed_values' => null ], "approval_letter" => [ 'col_idx' => 33, 'col_cell_name' => 'AH', 'col_name' => 'Approval Letter', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "settlement_letter" => [ 'col_idx' => 34, 'col_cell_name' => 'AI', 'col_name' => 'Settlement Letter', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ], "denial_letter" => [ 'col_idx' => 35, 'col_cell_name' => 'AJ', 'col_name' => 'Denial Letter', 'is_mandatory' => false, 'data_type' => 'string', 'format' => null, 'allowed_values' => null ] ]; } //create a sample excel for development public function createSampleClaimDumpExcelFileWithHeaderOnly() { // create a sample file $headers = []; foreach ($this->claim_dump_excel_columns as $key => $value) { $headers[] = $value['col_name']; } generateExcelWithHeader($headers, 'claim_dump_sample.xlsx'); dd($headers); } // --------------------------------------------------------------------------------------------------------- public function claimDumpExcelFileFormatValidation($params) { $file_id = $params['file_id']; $file = $this->claimDumpFileModel->where("id", $file_id)->first(); $this->myLogger->logme('error', "Start the claim dump file format validataion with the file id : " . $file_id); // dd($file); $return = []; if (empty($file)) { return array('status' => false, 'message' => 'File not found in Database'); } $file_name_with_path = WRITEPATH . "/uploads/claim_dump_excel/" . $file['file_name']; //check physical file exist if (!file_exists($file_name_with_path)) { $message = "Physcial file not found"; $this->myLogger->logme('error', ($message . ' for file id : ' . $file_id)); $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); return array('error_summary' => [5], 'error_data' => $message); } //Read the excel file try { $excel_data_and_headers = $this->extractExcelData($file['file_name']); $excel_data = $excel_data_and_headers['excel_data']; } catch (\Exception $e) { $errorDetails = [ 'error_message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack_trace' => $e->getTraceAsString(), ]; $message = "Contact system admin"; $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); $this->myLogger->logme("error", 'Excel data extraction failed due to : ' . json_encode($errorDetails ?? [])); return $errorDetails; } // dd($excel_data_and_headers); //Claim dump excel colums $columns_to_check = $excel_data_and_headers['claim_dump_excel_columns']; // dd($columns_to_check); //if upload the unwanted file upload handle if(count($columns_to_check) == 0){ $message = "Wrong file was uploaded"; $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); return array('error_summary' => [5], 'error_data' => $message); } //Store the error data by this structure $result = ['error_type' => 1, 'error_summary' => [], 'error_data' => []]; //excel data is empty than through the error if(count($excel_data ?? []) <= 1){ $message = "Uploaded file is empty"; $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); return array('error_summary' => [5], 'error_data' => $message); } //check no of columns in excel $excel_columns = ($excel_data[0]); // $keys = array_keys($columns_to_check); //check columns order in excel $column_count_res = check_columns_name($columns_to_check, $excel_columns); // dd($column_count_res); if (isset($column_count_res) && count($column_count_res)) { //columns count mismatch $message = implode("\n", $column_count_res); $this->myLogger->logme('error', ($message . ' for file id ' . $file_id)); $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([6]), 'error_data' => $message])])->update(); return array('error_summary' => [6], 'error_data' => $message); } $client_data = $this->clientModel->where('is_active', 1)->where('client_type', 1)->findAll(); $insurer_data = $this->insurerModel->where('is_active', 1)->findAll(); $tpa_data = $this->TPAModel->where('is_active', 1)->findAll(); $claim_status_data = $this->ticketClaimStatusModel->select('id, claim_status')->where('is_active', 1)->orderBy('id', 'asc')->groupBy('claim_status')->findAll(); //remove header unset($excel_data[0]); try { foreach ($excel_data as $row_key => $row) { //avoid empty rows if (check_row_is_empty_or_null($row)) { break; } //iterate each row for columns validations foreach ($row as $col_key => $col) { if (!isset($columns_to_check[$col_key])) { continue; } $is_mandatory = $columns_to_check[$col_key]['is_mandatory']; $format = $columns_to_check[$col_key]['format']; $allowed_values = $columns_to_check[$col_key]['allowed_values']; $custom_function = isset($columns_to_check[$col_key]['custom']) ? $columns_to_check[$col_key]['custom'] : null; $binding_params = isset($columns_to_check[$col_key]['params']) ? $columns_to_check[$col_key]['params'] : null; $column_dispaly_name = $columns_to_check[$col_key]['col_name']; $column_index = $columns_to_check[$col_key]['col_idx']; $column_cell = $columns_to_check[$col_key]['col_cell_name']; if ($column_dispaly_name == "Corporate") { $client_excel_name = ["client_name" => $col, "client_data" => $client_data]; } if ($column_dispaly_name == "Insurer") { $insurer_excel_name = ["insurer_name" => $col, "insurer_data" => $insurer_data]; } if ($column_dispaly_name == "TPA") { $tpa_excel_name = ["tpa_name" => $col, "tpa_data" => $tpa_data]; } if ($column_dispaly_name == "Status") { $excel_status_data = ["value" => $col, "data" => $claim_status_data]; } //mandatory check if (is_bool($is_mandatory) && $is_mandatory === true) { if ($col == "" || $col == NULL) { array_push($result['error_summary'], 1); //push error code for summary $result['error_data'][$row_key][$col_key]['col_name'] = $column_dispaly_name; //push column name $result['error_data'][$row_key][$col_key]['col_idx'] = $column_index; //push column index $result['error_data'][$row_key][$col_key]['error'][] = 'Value is mandatory'; //push exact error desc } } //format check if (isset($format)) { $format_error = dynamic_check_excel_date_format($col, $format); if (!$format_error['status']) { array_push($result['error_summary'], 2); $result['error_data'][$row_key][$col_key]['col_name'] = $column_dispaly_name; //push column name $result['error_data'][$row_key][$col_key]['col_idx'] = $column_index; //push column index $result['error_data'][$row_key][$col_key]['error'][] = $format_error['error']; } } //allowed values check if (($is_mandatory === true && isset($allowed_values) && is_array($allowed_values)) || (is_array($is_mandatory) && (isset($allowed_values) && is_array($allowed_values)))) { if (!in_array((trim($col)), $allowed_values)) { array_push($result['error_summary'], 3); $result['error_data'][$row_key][$col_key]['col_name'] = $column_dispaly_name; //push column name $result['error_data'][$row_key][$col_key]['col_idx'] = $column_index; //push column index $result['error_data'][$row_key][$col_key]['error'][] = "Value not allowed: Expected " . implode(",", $allowed_values) . " and received $col"; } } //custom function check if (isset($custom_function)) { // convert string params into PHP variables // Create an array of variables to pass custom helper funcitons $param_values = []; foreach ($binding_params as $bkey => $bparam) { $param_values[] = ($$bparam); } $res = call_user_func_array($custom_function, $param_values); if ($res['status'] === false) { array_push($result['error_summary'], 4); $result['error_data'][$row_key][$col_key]['col_name'] = $column_dispaly_name; //push column name $result['error_data'][$row_key][$col_key]['col_idx'] = $column_index; //push column index $result['error_data'][$row_key][$col_key]['error'][] = $res['error']; } } } } } catch (\Exception $e) { $errorDetails = [ 'error_message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack_trace' => $e->getTraceAsString(), ]; $message = "Contact system admin"; $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); $this->myLogger->logme("error", 'Claim dump file format validation failed due to : ' . json_encode($errorDetails ?? [])); return $errorDetails; } if (isset($result['error_summary']) && count($result['error_summary'])) { $result['error_summary'] = array_count_values($result['error_summary']); $status = 'failed'; $failure_reason = ((json_encode($result))); $this->claimDumpFileModel->where('id', $file_id)->set(['status' => $status, 'reason' => $failure_reason])->update(); $this->myLogger->logme("error", '{file_id} uploaded failed', ['file_id' => $file_id]); } else { //trigger next data validation via job queue server //proceed next data level validation in JOB queue $r = Jobs::addJob(['job_name' => 'claimDumpExcelFileDataValidation', 'payload' => ['file_id' => $file_id]]); // $response = $this->claimDumpExcelFileDataValidation(['file_id' => $file_id]); } return $result; } public function claimDumpExcelFileDataValidation($params) { //get file name $file_id = $params['file_id']; $file = $this->claimDumpFileModel->find($file_id); $this->myLogger->logme('error', "Start the claim dump File Data Validataion with the file id : " . $file_id); // dd($file); if (!isset($file)) { return array('status' => false, 'message' => 'File not found in Database'); } $file_name_with_path = WRITEPATH . "/uploads/claim_dump_excel/" . $file['file_name']; //check physical file if (!file_exists($file_name_with_path)) { $message = "Physical file not found"; $this->myLogger->logme('error', ($message . ' for file id ' . $file_id)); $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); return array('error_summary' => [5], 'error_data' => $message); } //Read the excel file try { $excel_data_and_headers = $this->extractExcelData($file['file_name'], "modified_column"); $excel_data = $excel_data_and_headers['excel_data']; } catch (\Exception $e) { $errorDetails = [ 'error_message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack_trace' => $e->getTraceAsString(), ]; $message = "Contact system admin"; $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); $this->myLogger->logme("error", 'Excel data extraction failed due to : ' . json_encode($errorDetails ?? [])); return $errorDetails; } // dd($excel_data_and_headers); // print_rr($excel_data); //Claim dump excel colums $columns_to_check = $excel_data_and_headers['claim_dump_excel_columns']; // dd($columns_to_check); $result = ['error_type' => 1, 'error_summary' => [], 'error_data' => []]; //remove header unset($excel_data[0]); try { foreach ($excel_data as $row_key => $row) { //avoid empty rows if (check_row_is_empty_or_null($row)) { break; } $client_column_index = $columns_to_check['corporate']['col_idx']; $policy_no_column_index = $columns_to_check['policy_no']['col_idx']; $insurer_column_index = $columns_to_check['insurer']['col_idx']; $tpa_column_index = $columns_to_check['tpa']['col_idx']; $emp_id_column_index = $columns_to_check['emp_id']['col_idx']; $emp_name_column_index = $columns_to_check['employee_name']['col_idx']; $insured_name_column_index = $columns_to_check['insured_name']['col_idx']; $claim_no_column_index = $columns_to_check['claim_id']['col_idx']; $tpa_no_column_index = $columns_to_check['tpa_id']['col_idx']; $relation_column_index = $columns_to_check['relationship']['col_idx']; $acm_column_index = $columns_to_check['acm']['col_idx']; //excel file Account Manager Details like Name and Mobile Number $excel_acm_data = $row[$acm_column_index] ?? null; // var_dump($excel_acm_data); die; $acm_name = null; $acm_mobile = null; //seperate the Account Manager Name and Mobile No if (!empty($excel_acm_data)) { $excel_acm_data = str_replace(['–', '—'], '-', $excel_acm_data); $parts = array_map('trim', explode('-', $excel_acm_data, 2)); $acm_name = $parts[0] ?? null; $acm_mobile = $parts[1] ?? null; // ensure mobile number is digits only if ($acm_mobile !== null) { $acm_mobile = preg_replace('/\D/', '', $acm_mobile); } } // dd($acm_name, $acm_mobile); $params = [ 'client_name' => $row[$client_column_index] ?? null, 'policy_no' => $row[$policy_no_column_index] ?? null, 'insurer_short_name' => $row[$insurer_column_index] ?? null, 'tpa_short_name' => $row[$tpa_column_index] ?? null, 'emp_code' => $row[$emp_id_column_index] ?? null, 'emp_name' => $row[$emp_name_column_index] ?? null, 'insured_name' => $row[$insured_name_column_index] ?? null, 'claim_no' => $row[$claim_no_column_index] ?? null, 'tpa_no' => $row[$tpa_no_column_index] ?? null, 'relationship' => $row[$relation_column_index] ?? null, 'acm_mobile' => $acm_mobile ?? null, 'acm_name' => $acm_name ?? null, ]; $ticketMasterModal = new TicketMasterModel(); //check the Claim $claim_data = $ticketMasterModal->getTheClaimDetails($params); // dd($claim_data); if (count($claim_data) != 0) { array_push($result['error_summary'], 7); $result['error_data'][$row_key][$policy_no_column_index]['col_name'] = $columns_to_check['policy_no']['col_name']; //push column name $result['error_data'][$row_key][$policy_no_column_index]['col_idx'] = $policy_no_column_index; //push column index $result['error_data'][$row_key][$policy_no_column_index]['error'][] = "This claim already exist in the system"; } else { //check the policy $policy_data = $ticketMasterModal->getPolicyData($params); // dd($policy_data); if (count($policy_data) == 0) { array_push($result['error_summary'], 8); $result['error_data'][$row_key][$policy_no_column_index]['col_name'] = $columns_to_check['policy_no']['col_name']; //push column name $result['error_data'][$row_key][$policy_no_column_index]['col_idx'] = $policy_no_column_index; //push column index $result['error_data'][$row_key][$policy_no_column_index]['error'][] = "The combination of Client, Insurer, TPA and Policy No. does not exist in the system"; } else { //check the employee and insured $employee_data = $ticketMasterModal->getEmployeeAndEmployeePolicyDetails($params) ?? []; // dd($employee_data); if (count($employee_data) == 0) { array_push($result['error_summary'], 9); $result['error_data'][$row_key][$emp_name_column_index]['col_name'] = $columns_to_check['employee_name']['col_name']; //push column name $result['error_data'][$row_key][$emp_name_column_index]['col_idx'] = $emp_name_column_index; //push column index $result['error_data'][$row_key][$emp_name_column_index]['error'][] = "This employee not exist in the system"; } } //check the Account Manager exist $acm_data = $ticketMasterModal->getAcmUserDetails($params) ?? []; // dd($acm_data); if (count($acm_data) == 0) { array_push($result['error_summary'], 10); $result['error_data'][$row_key][$acm_column_index]['col_name'] = $columns_to_check['acm']['col_name']; //push column name $result['error_data'][$row_key][$acm_column_index]['col_idx'] = $acm_column_index; //push column index $result['error_data'][$row_key][$acm_column_index]['error'][] = "This Acount Manager not exist in the system"; } } } } catch (\Exception $e) { $errorDetails = [ 'error_message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack_trace' => $e->getTraceAsString(), ]; $message = "Contact system admin"; $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); $this->myLogger->logme("error", 'Claim dump file data validation failed due to : ' . json_encode($errorDetails ?? [])); return $errorDetails; } if (isset($result['error_summary']) && count($result['error_summary'])) { $result['error_summary'] = array_count_values($result['error_summary']); $status = 'failed'; $failure_reason = ((json_encode($result))); $this->claimDumpFileModel->where('id', $file_id)->set(['status' => $status, 'reason' => $failure_reason])->update(); $this->myLogger->logme("error", '{file_id} uploaded failed', ['file_id' => $file_id]); } else { $r = Jobs::addJob(['job_name' => 'claimDumpOnBoardProcess', 'payload' => ['file_id' => $file_id]]); } return $result; } public function claimDumpOnBoardProcess($params) { //get file name $file_id = $params['file_id']; $file = $this->claimDumpFileModel->find($file_id); $this->myLogger->logme('error', "Start the claim dump OnBoard Process with the file id : " . $file_id); // dd($file); if (!isset($file)) { return array('status' => false, 'message' => 'File not found in Database'); } $file_name_with_path = WRITEPATH . "/uploads/claim_dump_excel/" . $file['file_name']; //check physical file if (!file_exists($file_name_with_path)) { $message = "Physical file not found"; $this->myLogger->logme('error', ($message . ' for file id ' . $file_id)); $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); return array('error_summary' => [5], 'error_data' => $message); } //Read the excel file try { $excel_data_and_headers = $this->extractExcelData($file['file_name'], "modified_column"); $excel_data = $excel_data_and_headers['excel_data']; unset($excel_data[0]); //remove header } catch (\Exception $e) { $errorDetails = [ 'error_message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack_trace' => $e->getTraceAsString(), ]; $message = "Contact system admin"; $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); $this->myLogger->logme("error", 'Excel data extraction failed due to : ' . json_encode($errorDetails ?? [])); return $errorDetails; } // dd($excel_data_and_headers); //Claim dump excel colums $columns_to_check = $excel_data_and_headers['claim_dump_excel_columns']; //create the instance of the ticket master modal $ticketMasterModal = new TicketMasterModel(); $inserted_claim_list = []; //loop the excel data to be insert the ticket master modal try{ foreach ($excel_data as $row_key => $row) { //avoid empty rows if (check_row_is_empty_or_null($row)) { break; } $client_column_index = $columns_to_check['corporate']['col_idx']; $policy_no_column_index = $columns_to_check['policy_no']['col_idx']; $insurer_column_index = $columns_to_check['insurer']['col_idx']; $tpa_column_index = $columns_to_check['tpa']['col_idx']; $emp_id_column_index = $columns_to_check['emp_id']['col_idx']; $emp_name_column_index = $columns_to_check['employee_name']['col_idx']; $insured_name_column_index = $columns_to_check['insured_name']['col_idx']; $claim_no_column_index = $columns_to_check['claim_id']['col_idx']; $tpa_no_column_index = $columns_to_check['tpa_id']['col_idx']; $relation_column_index = $columns_to_check['relationship']['col_idx']; $params = [ 'client_name' => $row[$client_column_index] ?? null, 'policy_no' => $row[$policy_no_column_index] ?? null, 'insurer_short_name' => $row[$insurer_column_index] ?? null, 'tpa_short_name' => $row[$tpa_column_index] ?? null, 'emp_code' => $row[$emp_id_column_index] ?? null, 'emp_name' => $row[$emp_name_column_index] ?? null, 'insured_name' => $row[$insured_name_column_index] ?? null, 'claim_no' => $row[$claim_no_column_index] ?? null, 'tpa_no' => $row[$tpa_no_column_index] ?? null, 'relationship' => $row[$relation_column_index] ?? null, ]; // get the policy data $policy_data = $ticketMasterModal->getEmployeeAndEmployeePolicyDetails($params); // dd($policy_data); //construct the claim data to be insert $data = $this->constructClaimData($row, $policy_data, $columns_to_check); // dd($data); if(!empty($data)){ $data['file_id'] = $file_id; //insert the claim data to ticket master table $insert = $ticketMasterModal->insert($data); $inserted_claim_list[] = $insert; $str = implode(', ', array_map(fn($k, $v) => "$k=$v", array_keys($params), $params)) ?? ""; $this->myLogger->logme("error",'Claim insert success --- :' . $str); }else{ $str = implode(', ', array_map(fn($k, $v) => "$k=$v", array_keys($params), $params)) ?? ""; $this->myLogger->logme("error",'This employee claim dose not insert --- :' . $str); } } }catch(\Exception $e){ $errorDetails = [ 'error_message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine(), 'stack_trace' => $e->getTraceAsString(), ]; $message = "Contact system admin"; $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'failed', 'reason' => json_encode(['error_summary' => array_count_values([5]), 'error_data' => $message])])->update(); $this->myLogger->logme("error", 'Claim dump file Onboard Process failed due to : ' . json_encode( $errorDetails ?? [])); return $errorDetails; } $this->claimDumpFileModel->where('id', $file_id)->set(['status' => 'success','reason' => ''])->update(); $this->myLogger->logme("error",'{file_id} claim dump uploaded success',['file_id' => $file_id]); return $inserted_claim_list; } public function extractExcelData($file_name, $returnType = null) { // $file_name = "claims_dump_form_client.xlsx"; // Load the Excel file $file_name_with_path = WRITEPATH . "/uploads/claim_dump_excel/" . $file_name; $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_name_with_path); $worksheet = $spreadsheet->getActiveSheet(); // Get the highest row and column numbers $highestRow = $worksheet->getHighestDataRow(); $highestColumn = $worksheet->getHighestDataColumn(); // dd($highestRow, $highestColumn); // Get header row (assuming headers are in row 1) // $headerRow = $worksheet->rangeToArray('A1:' . $highestColumn . '1', null, true, false)[0]; $excel_data = $worksheet->rangeToArray('A1:' . $highestColumn . $highestRow); // print_rr($excel_data); die; $header_with_column_index = $this->getTheColumnIndex($excel_data[0], $this->actualHeaders, $returnType); //Sanitize the excel data $excel_data = ExcelSanitizeHelper::sanitizeArrayData($excel_data); // dd($excel_data); $data = [ 'claim_dump_excel_columns' => $header_with_column_index, 'excel_data' => $excel_data, ]; // dd($data); return $data; } private function getTheColumnIndex($headerRow, $definedColumns, $returnType = null) { $result = []; foreach ($definedColumns as $key => $value) { foreach ($headerRow as $col_index => $col_name) { if($returnType == null){ if(trim($col_name) == trim($value['col_name'])){ $columnLetter = Coordinate::stringFromColumnIndex(($col_index + 1)); $result[$col_index] = $value; $result[$col_index]["col_idx"] = $col_index; $result[$col_index]["col_cell_name"] = $columnLetter; } }else{ if(trim($col_name) == trim($value['col_name'])){ $columnLetter = Coordinate::stringFromColumnIndex(($col_index + 1)); $definedColumns[$key]["col_idx"] = $col_index; $definedColumns[$key]["col_cell_name"] = $columnLetter; } } } } // dd($result); if($returnType == null){ return $result; } return $definedColumns; } private function constructClaimData($excel_data, $db_data, $columns_to_check) { // dd($db_data); $client_column_index = $columns_to_check['corporate']['col_idx']; $policy_no_column_index = $columns_to_check['policy_no']['col_idx']; $insurer_column_index = $columns_to_check['insurer']['col_idx']; $tpa_column_index = $columns_to_check['tpa']['col_idx']; $emp_id_column_index = $columns_to_check['emp_id']['col_idx']; $emp_name_column_index = $columns_to_check['employee_name']['col_idx']; $insured_name_column_index = $columns_to_check['insured_name']['col_idx']; $claim_no_column_index = $columns_to_check['claim_id']['col_idx']; $tpa_no_column_index = $columns_to_check['tpa_id']['col_idx']; $relation_column_index = $columns_to_check['relationship']['col_idx']; $status_column_index = $columns_to_check['status']['col_idx']; $acm_column_index = $columns_to_check['acm']['col_idx']; $tpa_id_column_index = $columns_to_check['tpa_id']['col_idx']; $claim_id_column_index = $columns_to_check['claim_id']['col_idx']; $emp_mobile_column_index = $columns_to_check['emp_mobile']['col_idx']; $emp_email_column_index = $columns_to_check['emp_email']['col_idx']; $claim_collection_column_index = $columns_to_check['claim_collection']['col_idx']; $source_detail_column_index = $columns_to_check['source_detail']['col_idx']; $claim_type_column_index = $columns_to_check['claim_type']['col_idx']; $hospital_column_index = $columns_to_check['hospital']['col_idx']; $doa_column_index = $columns_to_check['doa']['col_idx']; $dod_column_index = $columns_to_check['dod']['col_idx']; $claim_amount_column_index = $columns_to_check['claim_amount']['col_idx']; $date_claim_receipt_column_index = $columns_to_check['date_claim_receipt']['col_idx']; $date_claim_registration_column_index = $columns_to_check['date_claim_registration']['col_idx']; $date_latest_query_raise_column_index = $columns_to_check['date_latest_query_raise']['col_idx']; $date_latest_query_resolution_index = $columns_to_check['date_latest_query_resolution']['col_idx']; $approved_amt_column_index = $columns_to_check['approved_amt']['col_idx']; $date_approval_column_index = $columns_to_check['date_approval']['col_idx']; $utr_settlement_column_index = $columns_to_check['utr_settlement']['col_idx']; $date_settlement_column_index = $columns_to_check['date_settlement']['col_idx']; $reason_column_index = $columns_to_check['reason']['col_idx']; $remarks_column_index = $columns_to_check['remarks']['col_idx']; $approval_letter_column_index = $columns_to_check['approval_letter']['col_idx']; $settlement_letter_column_index = $columns_to_check['settlement_letter']['col_idx']; $denial_letter_column_index = $columns_to_check['denial_letter']['col_idx']; $excel_status_data = $excel_data[$status_column_index] ?? null; $excel_relationship_data = $excel_data[$relation_column_index] ?? null; $excel_acm_data = $excel_data[$acm_column_index] ?? null; $excel_tpa_id_data = $excel_data[$tpa_id_column_index] ?? null; $excel_claim_id_data = $excel_data[$claim_id_column_index] ?? null; $excel_emp_mobile_data = $excel_data[$emp_mobile_column_index] ?? null; $excel_emp_email_data = $excel_data[$emp_email_column_index] ?? null; $excel_claim_collection_data = $excel_data[$claim_collection_column_index] ?? null; $excel_source_detail_data = $excel_data[$source_detail_column_index] ?? null; $excel_claim_type_data = $excel_data[$claim_type_column_index] ?? null; $excel_hospital_data = $excel_data[$hospital_column_index] ?? null; $excel_doa_data = $excel_data[$doa_column_index] ?? null; $excel_dod_data = $excel_data[$dod_column_index] ?? null; $excel_claim_amount_data = $excel_data[$claim_amount_column_index] ?? null; $excel_date_claim_receipt_data = $excel_data[$date_claim_receipt_column_index] ?? null; $excel_date_claim_registration_data = $excel_data[$date_claim_registration_column_index] ?? null; $excel_date_latest_query_raise_data = $excel_data[$date_latest_query_raise_column_index] ?? null; $excel_date_latest_query_resolution_data = $excel_data[$date_latest_query_resolution_index] ?? null; $excel_approved_amt_data = $excel_data[$approved_amt_column_index] ?? null; $excel_date_approval_data = $excel_data[$date_approval_column_index] ?? null; $excel_utr_settlement_data = $excel_data[$utr_settlement_column_index] ?? null; $excel_date_settlement_data = $excel_data[$date_settlement_column_index] ?? null; $excel_reason_data = $excel_data[$reason_column_index] ?? null; $excel_remarks_data = $excel_data[$remarks_column_index] ?? null; $excel_approval_letter_data = $excel_data[$approval_letter_column_index] ?? null; $excel_settlement_letter_data = $excel_data[$settlement_letter_column_index] ?? null; $excel_denial_letter_data = $excel_data[$denial_letter_column_index] ?? null; //create the instance of the ticket master modal $ticketMasterModal = new TicketMasterModel(); //excel file Account Manager Details like Name and Mobile Number $excel_acm_data = $excel_data[$acm_column_index] ?? null; $acm_name = null; $acm_mobile = null; //seperate the Account Manager Name and Mobile No if (!empty($excel_acm_data)) { $parts = array_map('trim', explode('-', $excel_acm_data, 2)); $acm_name = $parts[0] ?? null; $acm_mobile = $parts[1] ?? null; } $params = [ "acm_name" => $acm_name, "acm_mobile" => $acm_mobile, ]; //get the acountmanager data $acm_data = $ticketMasterModal->getAcmUserDetails($params) ?? []; // dd($acm_data); //get the claim status id from the database $claim_status_data = $this->ticketClaimStatusModel ->select('id, claim_status, ticket_type') ->where('is_active', 1) ->where('ticket_type', $db_data['ticket_type_id']) ->where('LOWER(claim_status)', strtolower($excel_status_data)) ->first(); // dd($claim_status_data); $claim_status_id = $claim_status_data['id'] ?? null; //initialize Ticket controller for the other data $ticketController = new TicketController(); $mode_of_intimation = array_flip($ticketController->modeOFIntimate); //handle the Claim Type data key $cliam_type_id = 1; if(isset($db_data['ticket_type_id'])){ if($db_data['ticket_type_id'] == 2){ $claim_type = array_flip($ticketController->claimType[1]); $cliam_type_id = $claim_type[$excel_claim_type_data] ?? 1; }else{ $claim_type = array_flip($ticketController->claimType[2]); $cliam_type_id = $claim_type[$excel_claim_type_data] ?? 1; } } $db_data['insured_name'] = $excel_data[$insured_name_column_index] ?? null; //get Insured emp name and Insured emp id $insured_data = $ticketMasterModal->getInsuredDetails($db_data); // dd($insured_data); //handle remarks based on the status $return_remarks = null; $cancel_remarks = null; $denial_reason = null; if(strtolower($excel_status_data) == strtolower('RETURNED')){ $return_remarks = $excel_remarks_data ?? null; }else if(strtolower($excel_status_data) == strtolower('CANCELLED')){ $cancel_remarks = $excel_remarks_data ?? null; }else if(strtolower($excel_status_data) == strtolower('REJECTED')){ $denial_reason = $excel_reason_data ?? null; } $ticketMaster = [ 'ticket_type_id' => $db_data['ticket_type_id'] ?? null, 'claim_status_id' => $claim_status_id ?? null, 'acm_id' => $acm_data['id'] ?? null, 'insurer_id' => $db_data['insurer_id'] ?? null, 'tpa_id' => $db_data['tpa_id'] ?? null, 'client_id' => $db_data['client_id'] ?? null, 'emp_id' => $db_data['emp_id'] ?? null, 'client_policy_id' => $db_data['client_policy_id'] ?? null, 'policy_no' => $db_data['policy_no'] ?? null, 'emp_code' => $db_data['emp_code'] ?? null, 'tpa_no' => $excel_tpa_id_data ?? $db_data['tpa_no'] ?? null, 'emp_name' => $db_data['emp_name'] ?? null, 'relationship' => strtolower($excel_relationship_data) ?? null, 'emp_mobile' => $excel_emp_mobile_data ?? $db_data['emp_mobile'] ?? null, 'emp_mail' => $excel_emp_email_data ?? $db_data['emp_mail'] ?? null, 'mode_of_intimation' => $mode_of_intimation[$excel_claim_collection_data] ?? null, 'claim_type' => $cliam_type_id ?? null, 'insured_emp_id' => $insured_data['emp_id'] ?? null, 'insured_name' => $insured_data['name'] ?? $excel_data[$insured_name_column_index] ?? null, 'hospital_name' => $excel_hospital_data ?? null, 'claim_amount' => $excel_claim_amount_data ?? null, 'claim_number' => $excel_claim_id_data ?? null, 'approved_letter' => $excel_approval_letter_data ?? null, 'approved_amount' => $excel_approved_amt_data ?? null, 'utr_details' => $excel_utr_settlement_data ?? null, 'settle_letter' => $excel_settlement_letter_data ?? null, 'return_remark' => $return_remarks, 'cancel_remark' => $cancel_remarks, 'denial_reason' => $denial_reason ?? null, 'doa' => normalizeDate($excel_doa_data), 'dod' => normalizeDate($excel_dod_data), 'raised_date' => normalizeDate($excel_date_latest_query_raise_data), 'registration_date' => normalizeDate($excel_date_claim_registration_data), 'query_received_date' => normalizeDate($excel_date_latest_query_resolution_data), 'approved_date' => normalizeDate($excel_date_approval_data), 'settled_date' => normalizeDate($excel_date_settlement_data), 'priority' => null, 'emp_personal_mail' => null, 'pod_no' => null, 'dob' => null, 'date_of_join' => null, 'date_of_incep' => null, 'date_of_accident' => null, 'date_of_death' => null, 'date_of_intimat' => null, 'si_amt' => null, 'denial_date' => null, 'awb_no_courier_name' => null, 'non_id_reason' => null, 'pay_initiate_date' => null, 'approved_description' => null ]; // dd($ticketMaster); return $ticketMaster; } public function getClaimExcelErrorData($file_id) { try { $file = $this->claimDumpFileModel->where('id', $file_id)->first(); $error_data = json_decode($file['reason']); // dd($error_data); $file_name_with_path = WRITEPATH . "/uploads/claim_dump_excel/" . $file['file_name']; //check the file exist or not if (!file_exists($file_name_with_path)) { $error_message = "File not found"; $this->myLogger->logme('error', ($error_message . ' for file id ' . $file_id)); return 0; } $excel_data_and_headers = $this->extractExcelData($file['file_name']); $excel_data = $excel_data_and_headers['excel_data']; $excelErrorData['excel_header'] = $excel_data[0]; unset($excel_data[0]); // Kint::dump($excel_data); if ($error_data->error_type == 1) { $finalArray = []; foreach ($error_data->error_data as $key => $value) { foreach ($value as $key2 => $value2) { $error_data = $value2->error; $data = ['value' => $excel_data[$key][$value2->col_idx], 'error' => $error_data,]; $excel_data[$key][$value2->col_idx] = $data; } array_push($finalArray, $excel_data[$key]); } foreach ($finalArray as $fkey => $value) { foreach ($value as $vkey => $arrayData) { if (!is_array($arrayData)) { $data = ['value' => $arrayData]; $finalArray[$fkey][$vkey] = $data; } } } $excelErrorData['excel_data'] = $finalArray; return $excelErrorData; } else if ($error_data->error_type == 2) { $allErrors = []; $typeTowArray = []; foreach ($error_data->error_data as $index => $item) { foreach ($item as $field) { if (!isset($allErrors[$index])) { $allErrors[$index] = []; } $allErrors[$index] = array_merge($allErrors[$index], $field->error); } } // dd(array_keys($allErrors)); foreach ($allErrors as $key => $value) { // echo $key; // print_r($value); foreach ($excel_data as $excel_data_index => $excel_data_value) { if ($excel_data_value[0] == $key) { $data = ['value' => $excel_data[$excel_data_index][1], 'error' => $value,]; $excel_data[$excel_data_index][1] = $data; array_push($typeTowArray, $excel_data[$excel_data_index]); break; } } } // dd($data); foreach ($typeTowArray as $fkey => $value) { foreach ($value as $vkey => $arrayData) { if (!is_array($arrayData)) { $data = ['value' => $arrayData]; $typeTowArray[$fkey][$vkey] = $data; } } } $excelErrorData['excel_data'] = $typeTowArray; return $excelErrorData; } } catch (\Exception $e) { // Handle any exceptions $errorMessage = $e->getMessage(); //die(); $this->myLogger->logme('error', $errorMessage); return false; // You can return an error response here } } public function truncateClaimDumpFile($file_id) { } }