db = \Config\Database::connect(); $this->employeePolicyModel = new EmployeePolicyModel(); $this->claimFilesModel = new ClaimFilesModel(); $this->medi_assist_primary_key = getenv('MEDI_ASSIST_PRIMARY_KEY_CONSTANT'); $this->vidal_primary_key = getenv('VIDAL_PRIMARY_KEY_CONSTANT'); $this->icici_primary_key = getenv('ICICI_PRIMARY_KEY_CONSTANT'); $this->fhpl_primary_key = getenv('FHPL_PRIMARY_KEY_CONSTANT'); $this->health_india_primary_key = getenv('HEALTH_INDIA_PRIMARY_KEY_CONSTANT'); $this->volo_primary_key = getenv('VOLO_PRIMARY_KEY_CONSTANT'); } // Push Claims public function pushClaims($claimId) { helper('tpa_claim_push_log'); init_tpa_claim_push_logs($claimId); $data = $this->db->table('ticket_master tm') ->select('tm.id,tm.tpa_id ')->where('tm.id', $claimId)->get()->getRowArray(); // single record if($data){ $tpaID = $data['tpa_id']; if ($tpaID == $this->medi_assist_primary_key) { // MediAssist $mediAssistController = new MediAssistApiController(); return $mediAssistController->SubmitClaim($claimId); }else if ($tpaID == $this->vidal_primary_key) { // Vidal $vidalApiController = new VidalApiController; return $vidalApiController->SubmitClaim($claimId); }else if ($tpaID == $this->fhpl_primary_key) { // fhpl $fhplApiController = new FhplApiController; return $fhplApiController->SubmitClaim($claimId); }else if ($tpaID == $this->health_india_primary_key) { // health india $healthIndiaApiController = new HealthIndiaApiController; return $healthIndiaApiController->SubmitClaim($claimId); }else if ($tpaID == $this->volo_primary_key) { // Volo / TrueCover (EWA) $voloApiController = new VoloApiController(); return $voloApiController->SubmitClaim($claimId); }else{ tpa_claim_push_log($claimId, "This ticket id ( {$claimId} ) TPA has no API service enabled. TPA ID : {$tpaID}"); } } } // E-Card Request public function ecardRequest($params = [], $return_type = 'api') { try{ if(empty($params) && $this->response){ $payload = $this->request->getJSON(true); $id = $payload['id'] ?? null; $emp_code = $payload['emp_code'] ?? null; $client_policy_id = $payload['client_policy_id'] ?? null; $policy_no = $payload['policy_no'] ?? null; $type = $payload['type'] ?? 'download'; log_message('error', 'Received Payload API : '. json_encode($payload ?? "")); }else{ $id = $params['id'] ?? null; $emp_code = $params['emp_code'] ?? null; $client_policy_id = $params['client_policy_id'] ?? null; $policy_no = $params['policy_no'] ?? null; $type = $params['type'] ?? 'download'; $all_member = $params['all_member'] ?? null; log_message('error', 'Received Payload INTERNAL : '. json_encode($params ?? "")); } log_message('error', 'Ecard Request started | client_policy_id: '.$client_policy_id.' | policyNo: '.$policy_no.' | emp_code: '.$emp_code.' | type: '.$type); // $employee_policy = $this->employeePolicyModel // ->select('employees.*, employee_polices.tpa_id , employee_polices.rand_string , employee_polices.uhid as uhid , client_policy.tpa_id as tpa_primary_id ') // ->join('employees', 'employee_polices.employee_id = employees.id', 'left') // ->join('client_policy', 'employee_polices.client_policy_id = client_policy.id', 'left') // ->where('employee_polices.employee_id',$id) // ->where('employee_polices.client_policy_id',$client_policy_id) // ->where('employee_polices.is_active', 1 )->findAll(); $employee_policy = $this->employeePolicyModel ->select('employees.*, employee_polices.tpa_id , employee_polices.rand_string , employee_polices.uhid as uhid , client_policy.tpa_id as tpa_primary_id ') ->join('employees', 'employee_polices.employee_id = employees.id', 'left') ->join('client_policy', 'employee_polices.client_policy_id = client_policy.id', 'left') ->where('employees.emp_code', $emp_code) ->where('employee_polices.client_policy_id', $client_policy_id) ->where('employees.id', $id) ->where('employee_polices.is_active', 1) ->where('employees.is_active', 1) ->whereIn('employee_polices.status', ['active', 'expired']) ->whereIn('employees.emp_status', ['active', 'expired']) ->findAll(); log_message('error', 'Ecard Request - Employee data fetched | count: '.count($employee_policy).' | type: '.$type); if(count($employee_policy) > 0) { if($employee_policy[0]['tpa_id'] != null) { log_message('error', 'Ecard Request - tpa_id found | tpa_id: '.$employee_policy[0]['tpa_id'].' | type: '.$type); if($employee_policy[0]['tpa_primary_id'] == $this->medi_assist_primary_key)//Medi assist { $mediAssistController = new MediAssistApiController(); $data['eCardDownload'] = $mediAssistController->EcardRequest( $emp_code, $policy_no ); }else if($employee_policy[0]['tpa_primary_id'] == $this->vidal_primary_key)// Vidal { $vidalApiController = new VidalApiController; $data['eCardDownload'] = $vidalApiController->EcardRequest( $emp_code, $policy_no , $employee_policy[0]['tpa_id'] ); }else if($employee_policy[0]['tpa_primary_id'] == $this->fhpl_primary_key)// Fhpl { $fhplApiController = new FhplApiController; $data['eCardDownload'] = $fhplApiController->EcardRequest( $emp_code, $policy_no , $employee_policy[0]['tpa_id'] ); }else if($employee_policy[0]['tpa_primary_id'] == $this->health_india_primary_key)// health india { $healthIndiaApiController = new HealthIndiaApiController; $data['eCardDownload'] = $healthIndiaApiController->EcardRequest( $emp_code, $policy_no , $employee_policy[0]['tpa_id'] ); }else if($employee_policy[0]['tpa_primary_id'] == $this->volo_primary_key)// Volo / TrueCover { $voloApiController = new VoloApiController(); $data['eCardDownload'] = $voloApiController->EcardRequest( $emp_code, $policy_no , $employee_policy[0]['tpa_id'] ); } if (empty($data['eCardDownload'])) { $data['eCardDownload'] = $this->buildDefaultEcardDownloadUrl( $employee_policy[0]['rand_string'], $type, $all_member ?? null ); } $data['message'] = "E-card generated"; if(empty($data['eCardDownload'])){ $data['message'] = "E-card not generated"; } } else { $data['eCardDownload'] = null; $data['message'] = "E-card not generated"; log_message('error', 'TPA number is null'); } }else{ $data['eCardDownload'] = null; $data['message'] = "E-card not generated"; log_message('error', 'Employee not found'); } if($return_type == 'api'){ return $this->respond(['status' => true, 'code' => 200, 'message' => '', 'data' => $data]); }else{ return $data; } } catch(\Exception $e){ } } private function buildDefaultEcardDownloadUrl(string $randString, string $type = 'download', $allMember = null): string { if ($type === 'download') { return base_url('download-e-card/') . $randString . '/1'; } if (!empty($allMember)) { return base_url('download-e-card/') . $randString . '/1/1'; } return base_url('download-e-card/') . $randString . '/0/1'; } // Get TPAID public function getTPAID() { // helper('TPADataCompareHelper'); // print_rr(json_decode(file_get_contents(WRITEPATH.'/tmp/medi.json'),true));die(); // $report = TPADataCompareHelper::compareDbVsMediassist( // $report = TPADataCompareHelper2::compareDbVsMediassistGrouped( // json_decode(file_get_contents(WRITEPATH.'/tmp/db.json'),true), // json_decode(file_get_contents(WRITEPATH.'/tmp/medi.json'),true) // ); // print_rr('tata'); // die(); // $mediAssistController = new MediAssistApiController(); // $mediAssistController->MediAssistGetBenefDetails( [ 'policy_no' => '97000063250400000012', 'file_id' =>'5704','client_policy_id' => '1839' ] ); // $mediAssistController->MediAssistGetBenefDetails( [ 'policy_no' => '97000063250400000016', 'file_id' =>'5704','client_policy_id' => '2002' ] ); // die(); // $vidalApiController = new VidalApiController; // $vidalApiController->VidalGetBenefDetails( [ 'policy_no' => '570000/48/2026/363', 'file_id' =>'5264','client_policy_id' => '9433'] ); // $fhplApiController = new FhplApiController; // $fhplApiController->FhplGetBenefDetails( [ 'policy_no' => '570000/48/2026/453', 'file_id' =>'9999','client_policy_id' => '3557'] ); // $healthIndiaApiController = new HealthIndiaApiController; // $healthIndiaApiController->HealthIndiaGetBenefDetails( [ 'policy_no' => '97000063250400000116', 'file_id' =>'9998','client_policy_id' => '6523'] ); // die(); //START OF THE PROGRAM log_message('error', "getTPAID payloads :" . json_encode($this->request->getPost() ?? [])); $tpa_id = $this->request->getPost('tpa_id') ?? null; $policy_no = $this->request->getPost('policy_no') ?? null; $client_id = $this->request->getPost('client_id') ?? null; $branch_id = $this->request->getPost('client_branch_id') ?? null; $policy_id = $this->request->getPost('client_policy_id') ?? null; $fileModel = new BatchFileModel(); $filesData = $fileModel ->join('client_policy', 'client_policy.id = batch_files.client_policy_id') ->where('client_policy.tpa_id', $tpa_id) ->where('batch_files.is_active', 1) ->where('batch_files.event_type', 'api') ->where('batch_files.status', 'inprogress') ->countAllResults(); if($filesData > 0){ log_message('error', "TPA GetBenefDetails job is already in process."); return $this->respond(['status' => false, 'code' => 200,'message' => 'TPA initiation is in progress.','data' => [] ]); } $employeePolicyModel = new EmployeePolicyModel(); $employeePolicyData = $employeePolicyModel ->select(' employees.*, employee_polices.id as emp_policy_id, employee_polices.client_policy_id, ') ->join('employees', 'employees.id = employee_polices.employee_id') ->where('employee_polices.is_active', 1) ->where('employee_polices.status', 'active') ->where('employees.is_active', 1) ->where('employees.emp_status', 'active') ->where('employee_polices.tpa_id IS NULL') ->where('employee_polices.client_policy_id', $policy_id) ->countAllResults(); if($employeePolicyData == 0){ log_message('error', "No Employee Policy found with null TPA ID. TPA ID is already updated."); return $this->respond(['status' => false, 'code' => 200,'message' => 'TPA ID Already updated','data' => [] ]); } if (empty($policy_no)) { log_message('error', 'GetBenefDetails: policy_no missing in request'); return $this->respond(['status' => false, 'message' => 'policy_no required']); } $data = [ 'file_name' => "API", 'event_type' => "api", 'actions' => "fetch", 'insurer_or_tpa' => "tpa", 'batch_code' => generate_random_string(4), 'status' => "inprogress", 'client_id' => $client_id, 'client_policy_id'=> $policy_id, 'client_branch_id'=> $branch_id, 'created_by'=> get_session_userid(), ]; if ($tpa_id == $this->medi_assist_primary_key) // MediAssist { $file_id = $fileModel->insert($data); log_message('error', "Files table inserted successfully, File id : {$file_id}"); // $mediAssistController = new MediAssistApiController(); // $mediAssistController->MediAssistGetBenefDetails( [ 'polict_no' => $policy_no, 'file_id' =>$file_id ] ); $r = Jobs::addJob(['job_name' => 'MediAssistGetBenefDetails', 'payload' => ['policy_no' => $policy_no, 'file_id' => $file_id, 'client_policy_id' => $policy_id, 'return_type' => 'job']]); log_message('error', "MediAssistGetBenefDetails job pushed successfully."); return $this->respond(['status' => true, 'code' => 200, 'message' => 'Action Triggered','data' => [] ]); }else if ($tpa_id == $this->vidal_primary_key) // Vidal { $file_id = $fileModel->insert($data); log_message('error', "Files table inserted successfully, File id : {$file_id}"); // $vidalApiController = new VidalApiController; // $vidalApiController->VidalGetBenefDetails( [ 'polict_no' => $policy_no, 'file_id' =>$file_id ] ); $r = Jobs::addJob(['job_name' => 'VidalGetBenefDetails', 'payload' => ['policy_no' => $policy_no, 'file_id' => $file_id, 'client_policy_id' => $policy_id, 'return_type' => 'job']]); log_message('error', "VidalGetBenefDetails job pushed successfully."); return $this->respond(['status' => true, 'code' => 200, 'message' => 'Action Triggered','data' => [] ]); }else if ($tpa_id == $this->fhpl_primary_key) // Fhpl { $file_id = $fileModel->insert($data); log_message('error', "Files table inserted successfully, File id : {$file_id}"); // $fhplApiController = new FhplApiController; // $fhplApiController->FhplGetBenefDetails( [ 'polict_no' => $policy_no, 'file_id' =>$file_id ] ); $r = Jobs::addJob(['job_name' => 'FhplGetBenefDetails', 'payload' => ['policy_no' => $policy_no, 'file_id' => $file_id, 'client_policy_id' => $policy_id, 'return_type' => 'job']]); log_message('error', "FhplGetBenefDetails job pushed successfully."); return $this->respond(['status' => true, 'code' => 200, 'message' => 'Action Triggered','data' => [] ]); }else if ($tpa_id == $this->health_india_primary_key) // health india { $file_id = $fileModel->insert($data); log_message('error', "Files table inserted successfully, File id : {$file_id}"); // $healthIndiaApiController = new HealthIndiaApiController; // $healthIndiaApiController->HealthIndiaGetBenefDetails( [ 'polict_no' => $policy_no, 'file_id' =>$file_id ] ); $r = Jobs::addJob(['job_name' => 'HealthIndiaGetBenefDetails', 'payload' => ['policy_no' => $policy_no, 'file_id' => $file_id, 'client_policy_id' => $policy_id, 'return_type' => 'job']]); log_message('error', "HealthIndiaGetBenefDetails job pushed successfully."); return $this->respond(['status' => true, 'code' => 200, 'message' => 'Action Triggered','data' => [] ]); }else if ($tpa_id == $this->volo_primary_key) // Volo / TrueCover { $file_id = $fileModel->insert($data); log_message('error', "Files table inserted successfully, File id : {$file_id}"); $r = Jobs::addJob(['job_name' => 'VoloGetBenefDetails', 'payload' => ['policy_no' => $policy_no, 'file_id' => $file_id, 'client_policy_id' => $policy_id, 'return_type' => 'job']]); log_message('error', "VoloGetBenefDetails job pushed successfully."); return $this->respond(['status' => true, 'code' => 200, 'message' => 'Action Triggered','data' => [] ]); }else if ($tpa_id == $this->icici_primary_key) // ICICI Lombard (EWA) { $file_id = $fileModel->insert($data); log_message('error', "ICICI - Files table inserted successfully, File id : {$file_id}"); $r = Jobs::addJob(['job_name' => 'getEnrollmentBatchStatus', 'payload' => ['client_policy_id' => $policy_id, 'file_id' => $file_id, 'client_policy_id' => $policy_id, 'return_type' => 'job']]); log_message('error', "ICICI - getEnrollmentBatchStatus job pushed successfully."); return $this->respond(['status' => true, 'code' => 200, 'message' => 'Action Triggered','data' => [] ]); }else{ return $this->respond(['status' => false, 'code' => 200,'message' => 'TPA not found ','data' => [] ]); } } // get Claim details public function getClaimStatus() { $claimId = $this->request->getGet('claim_id'); $data = $this->db->table('ticket_master tm') ->select('tm.id,tm.tpa_id ')->where('tm.id', $claimId)->get()->getRowArray(); // single record if($data){ $tpaID = $data['tpa_id']; if ($tpaID == $this->medi_assist_primary_key) { // MediAssist $mediAssistController = new MediAssistApiController(); $res = $mediAssistController->ClaimDetail($claimId); return $this->response->setJSON(['status' => $res['status'],'message' => $res['message'] ]); }else if ($tpaID == $this->vidal_primary_key) { // vidal $vidalApiController = new VidalApiController; $res = $vidalApiController->ClaimDetail($claimId); return $this->response->setJSON(['status' => $res['status'],'message' => $res['message'] ]); }else if ($tpaID == $this->fhpl_primary_key) { // Fhpl $fhplApiController = new FhplApiController; $res = $fhplApiController->ClaimDetail($claimId); return $this->response->setJSON(['status' => $res['status'],'message' => $res['message'] ]); }else if ($tpaID == $this->health_india_primary_key) { // health india $healthIndiaApiController = new HealthIndiaApiController; $res = $healthIndiaApiController->ClaimDetail($claimId); return $this->response->setJSON(['status' => $res['status'],'message' => $res['message'] ]); }else if ($tpaID == $this->volo_primary_key) { // Volo / TrueCover $voloApiController = new VoloApiController(); $res = $voloApiController->ClaimDetail($claimId); return $this->response->setJSON(['status' => $res['status'],'message' => $res['message'] ]); }else{ log_message('error', "This ticket id ( {$claimId} ) TPA has no API service enabled. TPA ID : {$tpaID}"); $message = "This TPA has no API service enabled"; return $this->response->setJSON(['status' => false,'message' => $message ]); } } } // push Claim Files (IR submission) public function pushClaimFiles($claimId) { // $claimId = $this->request->getGet('claim_id'); $data = $this->db->table('ticket_master tm') ->select('tm.id,tm.tpa_id ')->where('tm.id', $claimId)->get()->getRowArray(); // single record if($data){ $tpaID = $data['tpa_id']; if ($tpaID == $this->medi_assist_primary_key) { // MediAssist $mediAssistController = new MediAssistApiController(); return $mediAssistController->IRSubmission($claimId); }else if ($tpaID == $this->vidal_primary_key) { // Vidal $vidalApiController = new VidalApiController(); return $vidalApiController->IRSubmission($claimId); }else{ log_message('error', "This ticket id ( {$claimId} ) TPA has no API service enabled. TPA ID : {$tpaID}"); } } } //wellness sso url generator landing public function getWellnessUrl($emp_id) { // $emp_id = $this->request->getGet('emp_id'); $db = \Config\Database::connect(); $data = $db->table('employees e') ->select('pt.policy_type, e.name, e.email_corporate as email, e.mobile as phone, e.emp_code as memberId, e.gender, e.dob, e.relationship as relation, cp.policy_no as policyNumber, ep.employee_id as employeeId,ep.id, cp.policy_start_date as policyStartDate, cp.policy_end_date as policyEndDate , cp.wellness_plan_id as planId , cp.wellness_vendor_id') ->join('employee_polices ep', 'e.id = ep.employee_id') ->join('client_policy cp', 'ep.client_policy_id = cp.id') ->join('policy_type pt', 'cp.policy_type_id = pt.id') ->where('e.id', $emp_id) ->where('e.emp_status', 'active') ->where('ep.status', 'active') ->where('e.is_active', 1) ->where('ep.is_active', 1) ->where('ep.wellness_onboard != 0') ->get() ->getResultArray(); $userParams = []; foreach ($data as $row) { if($row['wellness_vendor_id'] == $this->vidal_primary_key) { $vidalApiController = new VidalApiController(); return $vidalApiController->getWellnessSSORedirectUrl($row['email']); }else if ($row['wellness_vendor_id'] == $this->medi_assist_primary_key) { $mediAssistController = new MediAssistApiController(); return $mediAssistController->getWellnessSSORedirectUrl($row['planId'], $row['memberId']); } else if ($row['planId'] != null && empty($row['wellness_vendor_id'])) // VISIT { //OLD PARAMS // $userParams['name'] = $row['name']; // $userParams['email'] = $row['email']; // $userParams['phone'] = $row['phone']; // $userParams['memberId'] = $row['employeeId']; // memberId is unique primary key. // $userParams['gender'] = $row['gender']; // $userParams['dob'] = $row['dob']; // $userParams['relation'] = $row['relation']; // $userParams['policyNumber'] = $row['policyNumber']; // $userParams['employeeId'] = $row['memberId']; // $userParams['policyStartDate']= $row['policyStartDate']; // $userParams['policyEndDate'] = $row['policyEndDate']; // $userParams['policyName'] = $row['policy_type']; // $userParams['planId'] = $row['planId']; // $userParams['moduleName'] = 'home'; //NEW PARAMS $userParams['memberId'] = $row['id']; // employee policy primary key (which used while onboard)from DB $userParams['phone'] = $row['phone']; $userParams['email'] = $row['email']; $userParams['relationship'] = $row['relation']; $userParams['gender'] = $row['gender'] == 'M' ? 'Male' : 'Female'; $userParams['dob'] = $row['dob']; $userParams['policyNumber'] = $row['policyNumber']; $userParams['policyStartDate'] = $row['policyStartDate']; $userParams['policyEndDate'] = $row['policyEndDate']; $userParams['plan'] = $row['planId']; $userParams['source'] = 'NAHANCE'; $userParams['employeeId'] = $row['memberId']; $userParams['firstName'] = $row['name']; $userParams['middleName'] = ''; $userParams['lastName'] = ''; break; // stop after first GMC match } } if (empty($userParams)) { return ['status' => 'failed','message' => 'Coming soon........!']; } // echo 'coming';die(); // Derive 32-byte key from SHA256 $derivedKey = hash('sha256', env('VISIT_SECRET_KEY'), true); // Build query string like Node.js $plainText = ''; foreach ($userParams as $k => $v) { $plainText .= "&{$k}={$v}"; } $plainText = ltrim($plainText, '&'); // Encrypt $algorithm = "aes-256-cbc"; $encrypted = openssl_encrypt($plainText, $algorithm, $derivedKey, OPENSSL_RAW_DATA, env('VISIT_IV')); // Base64URL encode (same as Node.js output) $output = rtrim(strtr(base64_encode($encrypted), '+/', '-_'), '='); $baseURL = env('VISIT_BASE_URL'); $clientId = env('VISIT_CLIENT_ID'); $finalUrl = $baseURL . '/sso?userParams=' . $output . '&clientId=' . $clientId; if (!empty($finalUrl)) { log_message('error', 'VISIT SSO | emp_id: '.$emp_id.' | URL: '.$finalUrl); return ['status' => 'success','data' => $finalUrl]; } else { return ['status' => 'failed','message' => 'Coming soon........!']; } } /** * Decrypt Visit SSO userParams (reverse of Visit encryption in getWellnessUrl). * Accepts encrypted string or full SSO URL via POST/GET as userParams or encrypted_sso. */ public function decryptVisitSso() { $encrypted = $this->request->getGet('encrypted_sso'); if (empty($encrypted)) { return $this->response->setJSON([ 'status' => false, 'message' => 'userParams or encrypted_sso is required', ]); } $result = $this->decryptVisitSsoParams($encrypted); if ($result === false) { return $this->response->setJSON([ 'status' => false, 'message' => 'Decryption failed. Check encrypted value and VISIT_SECRET_KEY / VISIT_IV.', ]); } return $this->response->setJSON([ 'status' => true, 'data' => $result['params'], 'plainText' => $result['plainText'], ]); } /** * Decrypt Visit SSO payload using the same key/IV as getWellnessUrl Visit branch. * * @param string $encrypted Base64URL userParams value or full SSO URL containing userParams= * @return array{plainText: string, params: array}|false */ private function decryptVisitSsoParams(string $encrypted) { if (strpos($encrypted, 'userParams=') !== false) { $query = []; parse_str(parse_url($encrypted, PHP_URL_QUERY) ?? '', $query); $encrypted = $query['userParams'] ?? ''; } $encrypted = trim($encrypted); if ($encrypted === '') { return false; } $base64 = strtr($encrypted, '-_', '+/'); $base64 .= str_repeat('=', (4 - strlen($base64) % 4) % 4); $cipherRaw = base64_decode($base64, true); if ($cipherRaw === false) { return false; } $derivedKey = hash('sha256', env('VISIT_SECRET_KEY'), true); $plainText = openssl_decrypt( $cipherRaw, 'aes-256-cbc', $derivedKey, OPENSSL_RAW_DATA, env('VISIT_IV') ); if ($plainText === false) { return false; } $params = []; parse_str($plainText, $params); return [ 'plainText' => $plainText, 'params' => $params, ]; } /** * Manual TPA Claim Push - accepts claim_id via POST and delegates to pushClaims(). * Returns the response from pushClaims() as the API response. */ public function manualTpaClaimPush() { $claimId = $this->request->getPost('claim_id'); if (empty($claimId)) { return $this->response->setJSON([ 'status' => false, 'message' => 'claim_id is required' ]); } if (! $this->claimFilesModel->hasPdfFileForTicket($claimId)) { return $this->response->setJSON([ 'status' => false, 'message' => 'No PDF file found for this claim' ]); } $result = $this->pushClaims($claimId); if ($result !== null && is_array($result)) { return $this->response->setJSON([ 'status' => $result['status'] ?? false, 'message' => $result['message'] ?? ($result['status'] ? 'Claim pushed successfully' : 'Claim push failed') ]); } return $this->response->setJSON([ 'status' => false, 'message' => 'Claim push failed or TPA has no API service enabled for this ticket.' ]); } // public function getWellnessUrl() // { // $emp_id = $this->request->getGet('emp_id'); // $client_policy_id = $this->request->getGet('client_policy_id'); // $db = \Config\Database::connect(); // // $data = $db->table('employees e') // // ->select('pt.policy_type, // // e.name, e.email_corporate as email, e.mobile as phone, e.emp_code as memberId, e.gender, e.dob, e.relationship as relation, // // cp.policy_no as policyNumber, cp.policy_no as employeeId, cp.policy_start_date as policyStartDate, cp.policy_end_date as policyEndDate') // // ->join('employee_polices ep', 'e.id = ep.employee_id') // // ->join('client_policy cp', 'ep.client_policy_id = cp.id') // // ->join('policy_type pt', 'cp.policy_type_id = pt.id') // // ->where('e.id', $emp_id) // // ->where('e.emp_status', 'active') // // ->where('ep.status', 'active') // // ->where('e.is_active', 1) // // ->where('ep.is_active', 1) // // ->get() // // ->getResultArray(); // $data = $db->table('employee_polices ep') // ->select('pt.policy_type, // e.name, e.email_corporate as email, e.mobile as phone, e.emp_code as memberId, e.gender, e.dob, e.relationship as relation, e.id as employeeId // cp.policy_no as policyNumber, cp.policy_start_date as policyStartDate, cp.policy_end_date as policyEndDate, cp.wellness_plan_id as planId') // ->join('employees e', 'e.id = ep.employee_id') // ->join('client_policy cp', 'ep.client_policy_id = cp.id') // ->join('policy_type pt', 'cp.policy_type_id = pt.id') // ->where('ep.employee_id', $emp_id) // ->where('ep.client_policy_id', $client_policy_id) // ->where('ep.status', 'active') // ->where('ep.is_active', 1) // ->get() // ->getRow(); // $userParams = []; // if(!empty($data)) // { // $userParams['name'] = $data->name; // $userParams['email'] = $data->email; // $userParams['phone'] = $data->phone; // $userParams['memberId'] = $data->employeeId; // memberId is unique primary key. // $userParams['gender'] = $data->gender; // $userParams['dob'] = $data->dob; // $userParams['relation'] = $data->relation; // $userParams['policyNumber'] = $data->policyNumber; // $userParams['employeeId'] = $data->memberId; // $userParams['policyStartDate']= $data->policyStartDate; // $userParams['policyEndDate'] = $data->policyEndDate; // $userParams['policyName'] = 'Nhance ' . $data->policy_type; // $userParams['planId'] = $data->planId; // $userParams['moduleName'] = 'home'; // } // // dd($userParams); // if (empty($userParams)) { // return $this->respond(['status' => 'failed','message' => 'Coming soon........!'], 200); // } // // Derive 32-byte key from SHA256 // $derivedKey = hash('sha256', env('VISIT_SECRET_KEY'), true); // // Build query string like Node.js // $plainText = ''; // foreach ($userParams as $k => $v) { // $plainText .= "&{$k}={$v}"; // } // $plainText = ltrim($plainText, '&'); // // Encrypt // $algorithm = "aes-256-cbc"; // $encrypted = openssl_encrypt($plainText, $algorithm, $derivedKey, OPENSSL_RAW_DATA, env('VISIT_IV')); // // Base64URL encode (same as Node.js output) // $output = rtrim(strtr(base64_encode($encrypted), '+/', '-_'), '='); // $baseURL = env('VISIT_BASE_URL'); // $clientId = env('VISIT_CLIENT_ID'); // $finalUrl = $baseURL . '/sso?userParams=' . $output . '&clientId=' . $clientId; // if (!empty($finalUrl)) { // log_message('error', 'VISIT SSO | emp_id: '.$emp_id.' | URL: '.$finalUrl); // return $this->respond(['status' => 'success','data' => $finalUrl], 200); // } else { // return $this->respond(['status' => 'failed','message' => 'Coming soon........!'], 200); // } // } // function getSSORedirectUrl($email = 'user@example.com') // { // // ---------- CONFIG ---------- // $authUrl = env('VIDAL_WELLNESS_BASE_URL'); // Authentication API URL // $subscriptionKey = env('VIDAL_WELLNESS_SUBSCRIPTION_KEY'); // $apiVersion = "1"; // // Provided Base64 AES key // $base64Key = env('VIDAL_WELLNESS_BASE64_KEY'); // $key = base64_decode($base64Key); // // ---------- STEP 1: Build plaintext payload ---------- // $plainPayload = json_encode([ // "email" => $email, // "corporateId" => env('VIDAL_WELLNESS_CORPORATE_ID'), // "urlIdentifier" => env('VIDAL_WELLNESS_URL_IDENTIFIER') // ]); // // ---------- STEP 2: Encrypt payload ---------- // $iv = random_bytes(16); // $encryptedRaw = openssl_encrypt($plainPayload, "AES-256-CBC", $key, OPENSSL_RAW_DATA, $iv); // $encryptedPayload = base64_encode($iv) . ":" . base64_encode($encryptedRaw); // // ---------- STEP 3: Call Authentication API ---------- // $requestBody = json_encode([ // "payload" => $encryptedPayload, // "source" => "portal", // "subPartnerId" => env('VIDAL_WELLNESS_SUB_PARTNER_ID') // ]); // $headers = [ // "Ocp-Apim-Subscription-Key: $subscriptionKey", // "apiver: $apiVersion", // "mode: encrypt", // "Content-Type: application/json" // ]; // $ch = curl_init($authUrl); // curl_setopt($ch, CURLOPT_POST, true); // curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody); // curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // $apiResponse = curl_exec($ch); // curl_close($ch); // $jsonResponse = json_decode($apiResponse, true); // dd($jsonResponse); // if (!isset($jsonResponse["data"])) { // return ["error" => "Invalid API response", "response" => $apiResponse]; // } // // ---------- STEP 4: Decrypt response ---------- // list($ivBase64, $cipherBase64) = explode(":", $jsonResponse["data"]); // $respIv = base64_decode($ivBase64); // $respCipher = base64_decode($cipherBase64); // $decryptedJson = openssl_decrypt($respCipher, "AES-256-CBC", $key, OPENSSL_RAW_DATA, $respIv); // $decryptedData = json_decode($decryptedJson, true); // if (!isset($decryptedData["redirectUrl"])) { // return ["error" => "redirectUrl missing", "decrypted" => $decryptedData]; // } // // ---------- FINAL ---------- // return $decryptedData["redirectUrl"]; // } public function sendDataToTPA() { $requested_data = $this->request->getPost() ?? []; log_message('error', "getTPAID payloads :" . json_encode($requested_data)); $tpa_id = $requested_data['tpa_id'] ?? null; $policy_no = $requested_data['policy_no'] ?? null; $client_id = $requested_data['client_id'] ?? null; $branch_id = $requested_data['client_branch_id'] ?? null; $policy_id = $requested_data['client_policy_id'] ?? null; $event = $requested_data['event'] ?? null; $event_mapping = [ 'inception' => 'A', 'missed_inception' => 'A', 'addition' => 'A', 'dependent_addition' => 'A', 'deletion' => 'D', 'correction' => 'M', 'si_enhancement' => 'M' ]; $fileModel = new BatchFileModel(); $filesData = $fileModel ->join('client_policy', 'client_policy.id = batch_files.client_policy_id') ->where('client_policy.tpa_id', $tpa_id) ->where('batch_files.is_active', 1) ->where('batch_files.event_type', 'api') ->where('batch_files.client_policy_id', $policy_id) ->where('batch_files.icici_status_flag !=', 'COMPLETED') ->countAllResults(); if($filesData > 0){ log_message('error', "TPA initiation is in progress."); return $this->respond(['status' => false, 'code' => 200,'message' => 'TPA initiation is in progress.','data' => [] ]); } $employeePolicyModel = new EmployeePolicyModel(); $employeePolicyData = $employeePolicyModel ->select(' employees.*, employee_polices.id as emp_policy_id, employee_polices.client_policy_id, ') ->join('employees', 'employees.id = employee_polices.employee_id') ->where('employee_polices.is_active', 1) ->where('employee_polices.status', 'active') ->where('employees.is_active', 1) ->where('employees.emp_status', 'active') ->where('employee_polices.tpa_id IS NULL') ->where('employee_polices.client_policy_id', $policy_id) ->countAllResults(); if($employeePolicyData == 0){ log_message('error', "No Employee Policy found with null TPA ID. TPA ID is already updated."); return $this->respond(['status' => false, 'code' => 200,'message' => 'No employee to upload','data' => [] ]); } $data = [ 'file_name' => "API - Employee data push", 'event_type' => $event, 'actions' => "push", 'insurer_or_tpa' => "tpa", 'batch_code' => generate_random_string(4), 'status' => "inprogress", 'client_id' => $client_id, 'client_policy_id'=> $policy_id, 'client_branch_id'=> $branch_id, 'created_by'=> get_session_userid(), ]; if ($tpa_id == $this->icici_primary_key) // MediAssist { $file_id = $fileModel->insert($data); log_message('error', "Files table inserted successfully, File id : {$file_id}"); $requested_data['file_id'] = $file_id; $requested_data['return_type'] = 'job'; $requested_data['insurer_or_tpa'] = 'tpa'; $requested_data['flag_status'] = $event_mapping[$event] ?? "A"; // $ICICILombardController = new ICICILombardController(); // $apiResponse = $ICICILombardController->ICICIPushEmployeeDetails($requested_data); $r = Jobs::addJob(['job_name' => 'ICICIPushEmployeeDetails', 'payload' => $requested_data]); log_message('error', "ICICIPushEmployeeDetails job pushed successfully."); return $this->respond(['status' => true, 'code' => 200, 'message' => 'Action Triggered','data' => [] ]); } } }