Untitled
unknown
plain_text
a year ago
13 kB
7
Indexable
public function verifyTimelineData($data)
{
$jobs = 0;
$timeline_jobs = 0;
$verified_jobs = 0;
// take threshold from database setting, default to one defined in this class
$dateDiffAutoVerify = (int) SystemSetting::value($this::DATEDIFF_AUTO_VERIFY_DB_KEY, $this::DATEDIFF_AUTO_VERIFY_DEFAULT);
$nameScoreAutoVerify = (int) SystemSetting::value($this::NAMESCORE_TIMELINE_AUTO_VERIFY_DB_KEY, $this::NAMESCORE_TIMELINE_AUTO_VERIFY_DEFAULT);
$declaredNameScoreAutoVerify = (int) SystemSetting::value($this::DECLARED_NAMESCORE_TIMELINE_AUTO_VERIFY_DB_KEY, $this::DECLARED_NAMESCORE_TIMELINE_AUTO_VERIFY_DEFAULT);
try {
foreach ($this->candidate->jobs as $job) {
$jobs++;
foreach ($data['activities'] as $activity) {
$timeline_jobs++;
$candidateCompanyNameToCompare = preg_replace('/\d+/', '', strtolower(substr(trim(str_ireplace($this::UNWANTED_WORDS_COMPANY_NAME, '', $job->company_name)), 0, 18)));
if (isset($activity['employer'])) {
$companyNameToCompare = preg_replace('/\d+/', '', strtolower(substr(trim(str_ireplace($this::UNWANTED_WORDS_COMPANY_NAME, '', $activity['employer']['name'])), 0, 18)));
$nameScore = (1 - (levenshtein($candidateCompanyNameToCompare, $companyNameToCompare) / max(strlen($candidateCompanyNameToCompare), strlen($companyNameToCompare)))) * 100;
} else {
$nameScore = 0;
}
if (isset($activity['declared'])) {
$declared = $activity['declared'];
} else {
$declared = false;
}
if ($nameScore >= $nameScoreAutoVerify
|| ($declared && $nameScore >= $declaredNameScoreAutoVerify)
|| (!is_null($job->employer_id) && !is_null($activity['employer']['id']) && $job->employer_id == $activity['employer']['id'])) {
if ($activity['verificationStatus'] == $this::STATUS_JOB_VERIFIED && $activity['type'] == $this::ACTIVITY_TYPE_EMPLOYMENT) {
// Define variables used inside the conditions below
$start_date = !empty($activity['startDate']) ? Carbon::parse($activity['startDate']) : Carbon::now();
$end_date = !empty($activity['endDate']) ? Carbon::parse($activity['endDate']) : Carbon::now();
$within_three_years = false;
$within_threshold = false;
// Check if the job duration intersects with the last three years
// The job must start before today and end after three years ago
if ($start_date->lessThanOrEqualTo(Carbon::now()) && $end_date->greaterThanOrEqualTo(Carbon::now()->subYears(3))) {
$within_three_years = true;
}
// Check if job dates are within the defined allowed threshold
// The job must be within the set threshold to pass this check to later pass the verification steps below
if ((Carbon::parse($job->start_date)->addDays($dateDiffAutoVerify) >= $start_date && ($job->ongoing && Carbon::now()->subDays($dateDiffAutoVerify) <= $end_date))
|| (Carbon::parse($job->start_date)->addDays($dateDiffAutoVerify) >= $start_date
&& (Carbon::parse($job->end_date)->subDays($dateDiffAutoVerify) <= $end_date))) {
$within_threshold = true;
}
// Use the above data to determine whether this job is 'verified'
if ($within_threshold || $within_three_years === false) {
$verified_via = null;
$verified_datasource = null;
foreach ($activity['sources'] as $source) {
// add hmrc data as a new datasource
if (str_contains($source['providerId'], "hmrc")) {
$dataSourceDB = new OpenbankingDatasources();
$dataSourceDB->candidate_job_id = $job->id;
$dataSourceDB->openbanking_check_id = $this->openbankingCheck->id;
$dataSourceDB->provider_type = "hmrc";
$dataSourceDB->provider_id = $source['providerId'] ?? null;
$dataSourceDB->provider_name = $source['providerName'] ?? null;
$dataSourceDB->status = "connected";
$dataSourceDB->status_data = "available";
$dataSourceDB->updated_at = Carbon::now()->setTimezone(config('app.timezone'))->format('Y-m-d');
$dataSourceDB->start_date = $activity['startDate'] ?? null;
$dataSourceDB->end_date = $activity['endDate'] ?? null;
$dataSourceDB->full_name = $activity['employer']['name'] ?? null;
$dataSourceDB->ni_number = $activity['nationalInsuranceNumber'] ?? null;
$dataSourceDB->save();
$verified_via = "HMRC";
$verified_datasource = $dataSourceDB->id;
}
}
if ($verified_via == null) {
foreach ($activity['sources'] as $source) {
// add payroll data as a new datasource
if (str_contains($source['providerId'], "payroll")) {
$dataSourceDB = new OpenbankingDatasources();
$dataSourceDB->candidate_job_id = $job->id;
$dataSourceDB->openbanking_check_id = $this->openbankingCheck->id;
$dataSourceDB->provider_type = "payroll";
$dataSourceDB->provider_id = $source['providerId'] ?? null;
$dataSourceDB->provider_name = $source['providerName'] ?? null;
$dataSourceDB->status = "connected";
$dataSourceDB->status_data = "available";
$dataSourceDB->updated_at = Carbon::now()->setTimezone(config('app.timezone'))->format('Y-m-d');
$dataSourceDB->start_date = $activity['startDate'] ?? null;
$dataSourceDB->end_date = $activity['endDate'] ?? null;
$dataSourceDB->full_name = $activity['employer']['name'] ?? null;
$dataSourceDB->ni_number = $activity['nationalInsuranceNumber'] ?? null;
$dataSourceDB->save();
$verified_via = "Payroll";
$verified_datasource = $dataSourceDB->id;
}
}
}
if ($verified_via == null && $declared) {
foreach ($activity['sources'] as $source) {
// add ob data as a new datasource
if (str_contains($source['providerId'], "ob")) {
$dataSourceDB = new OpenbankingDatasources();
$dataSourceDB->candidate_job_id = $job->id;
$dataSourceDB->openbanking_check_id = $this->openbankingCheck->id;
$dataSourceDB->provider_type = "ob";
$dataSourceDB->provider_id = $source['providerId'] ?? null;
$dataSourceDB->provider_name = $source['providerName'] ?? null;
$dataSourceDB->status = "connected";
$dataSourceDB->status_data = "available";
$dataSourceDB->updated_at = Carbon::now()->setTimezone(config('app.timezone'))->format('Y-m-d');
$dataSourceDB->start_date = $activity['startDate'] ?? null;
$dataSourceDB->end_date = $activity['endDate'] ?? null;
$dataSourceDB->full_name = $activity['employer']['name'] ?? null;
$dataSourceDB->ni_number = $activity['nationalInsuranceNumber'] ?? null;
$dataSourceDB->save();
$verified_via = "OB";
$verified_datasource = $dataSourceDB->id;
}
}
}
if ($verified_via) {
$formatted_start_date = !empty($activity['startDate']) ? Carbon::parse($activity['startDate'])->format('d/m/Y') : Carbon::now()->format('d/m/Y');
$formatted_end_date = !empty($activity['endDate']) ? Carbon::parse($activity['endDate'])->format('d/m/Y') : 'Ongoing';
$job->openbanking_verification_status = $this::STATUS_JOB_VERIFIED;
$job->verified_by = null;
$job->verified_at = Carbon::now();
$job->verification_notes = 'Auto verified via ' . $verified_via . ' (' . $formatted_start_date . ' - ' . $formatted_end_date . ')';
$job->openbanking_verified_dates = [
'start_date' => !empty($activity['startDate']) ? $activity['startDate'] : null,
'end_date' => !empty($activity['endDate']) ? $activity['endDate'] : null
];
$job->verified_via = strtolower($verified_via);
$job->verified_datasource = $verified_datasource;
$job->within_three_years = $within_three_years;
$job->within_threshold = $within_threshold;
$job->openbanking_id = $activity['id'];
$verified_jobs++;
$job->save();
// add verification notes to comments section
$candidate = Candidate::findOrFail($job->candidate_id);
$screening = $candidate->screening;
$comment = new Comment([
'note' => $job->verification_notes,
'flagged' => false
]);
$comment->commentable()->associate($screening);
$comment->user_id = 1;
$comment->save();
}
}
}
}
}
}
if ($jobs == $verified_jobs) {
$this->openbankingCheck->status = $this::STATUS_CHECK_VERIFIED;
$this->openbankingCheck->save();
}
} catch (\Throwable $e) {
Log::error('verify timeline data error status code: ' . $e->getCode() . ' error message: ' . $e->getMessage() . ' Line: ' . $e->getLine());
}
}Editor is loading...
Leave a Comment