From 6a670d4c480c00c325e7be88ecae477d53731a4f Mon Sep 17 00:00:00 2001 From: DevSoftTech Server Date: Thu, 13 Aug 2026 11:21:38 +0530 Subject: [PATCH] Refine ABHA patient matching criteria --- app/Controllers/Abha.php | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/app/Controllers/Abha.php b/app/Controllers/Abha.php index 6eaabe4..144df6f 100644 --- a/app/Controllers/Abha.php +++ b/app/Controllers/Abha.php @@ -1015,11 +1015,12 @@ class Abha extends BaseController ): array { $genderDb = $this->toPatientGenderValue($genderRaw); $ageYears = $this->computeAgeYears($dob); + $birthYear = preg_match('/^(\d{4})/', trim($dob), $birthYearMatch) === 1 ? $birthYearMatch[1] : ''; $nameUp = strtoupper(trim($name)); $nameTokens = array_values(array_filter(preg_split('/\s+/', $nameUp) ?: [], fn ($t) => strlen($t) >= 3)); $aadhaar = preg_replace('/\D/', '', $aadhaar); - if ($nameTokens === [] && $mobile === '' && $aadhaar === '' && $ageYears === null) { + if ($nameTokens === [] && $mobile === '' && $aadhaar === '' && $abhaNumClean === '' && $birthYear === '') { return []; } @@ -1078,19 +1079,27 @@ class Abha extends BaseController $rowAgeYears = (int) $row['age']; } - $ageMatch = $ageYears !== null && $rowAgeYears !== null && abs($rowAgeYears - $ageYears) <= 1; - $genderMatch = $genderDb > 0 && (int) ($row['gender'] ?? 0) === $genderDb; - $mobileMatch = $mobile !== '' && preg_replace('/\D/', '', (string) ($row['mphone1'] ?? '')) === $mobile; - $aadhaarMatch = $aadhaar !== '' && preg_replace('/\D/', '', (string) ($row['udai'] ?? '')) === $aadhaar; + $rowBirthYear = preg_match('/^(\d{4})/', $rowDob, $rowBirthYearMatch) === 1 ? $rowBirthYearMatch[1] : ''; + $birthYearMatch = $birthYear !== '' && $rowBirthYear !== '' && $rowBirthYear === $birthYear; + $ageMatch = $birthYearMatch; + $genderMatch = $genderDb > 0 && (int) ($row['gender'] ?? 0) === $genderDb; + $mobileMatch = $mobile !== '' && preg_replace('/\D/', '', (string) ($row['mphone1'] ?? '')) === $mobile; + $aadhaarMatch = $aadhaar !== '' && preg_replace('/\D/', '', (string) ($row['udai'] ?? '')) === $aadhaar; $rowAbha = $abhaField !== null ? trim((string) ($row[$abhaField] ?? '')) : ''; $abhaConflict = $rowAbha !== '' && preg_replace('/\D/', '', $rowAbha) !== $abhaNumClean; - $score = ($nameOverlap ? 2 : 0) + ($ageMatch ? 1 : 0) + ($genderMatch ? 1 : 0) + ($mobileMatch ? 2 : 0) + ($aadhaarMatch ? 3 : 0); - if ($score <= 0) { + $abhaMatch = $abhaNumClean !== '' && $rowAbha !== '' + && preg_replace('/\D/', '', $rowAbha) === $abhaNumClean; + $minimumDemographicMatch = $nameOverlap && $birthYearMatch && $genderMatch; + if (! $abhaMatch && ! $aadhaarMatch && ! $minimumDemographicMatch) { continue; } + $score = ($abhaMatch ? 12 : 0) + ($aadhaarMatch ? 10 : 0) + + ($minimumDemographicMatch ? 5 : 0) + ($nameOverlap ? 2 : 0) + + ($birthYearMatch ? 2 : 0) + ($genderMatch ? 1 : 0) + ($mobileMatch ? 4 : 0); + $candidates[] = [ 'id' => (int) ($row['id'] ?? 0), 'p_code' => (string) ($row['p_code'] ?? ''), @@ -1115,6 +1124,7 @@ class Abha extends BaseController 'gender' => $genderMatch, 'mobile' => $mobileMatch, 'aadhaar' => $aadhaarMatch, + 'abha' => $abhaMatch, ], 'score' => $score, ];