From ec872c984cf483793411adb9cc4acde34f77e728 Mon Sep 17 00:00:00 2001 From: DevSoftTech Server Date: Fri, 17 Apr 2026 03:41:01 +0530 Subject: [PATCH] Strengthen OPD autocomplete normalization for spacing and punctuation variants --- app/Commands/NormalizeOpdAutocompleteText.php | 20 ++++++++++++++++++ app/Controllers/Opd_prescription.php | 21 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/app/Commands/NormalizeOpdAutocompleteText.php b/app/Commands/NormalizeOpdAutocompleteText.php index cc091dd..bd7c6ce 100644 --- a/app/Commands/NormalizeOpdAutocompleteText.php +++ b/app/Commands/NormalizeOpdAutocompleteText.php @@ -199,6 +199,26 @@ class NormalizeOpdAutocompleteText extends BaseCommand if ($part === '') { continue; } + + $part = preg_replace('/\s+/', ' ', $part) ?? $part; + $part = preg_replace_callback('/\b([A-Za-z])\s*\/\s*([A-Za-z])\b/u', static function (array $m): string { + return mb_strtoupper($m[1]) . '/' . mb_strtoupper($m[2]); + }, $part) ?? $part; + + if (preg_match('/^[+-]{1,3}$/', $part) && $clean !== []) { + $lastIndex = count($clean) - 1; + $clean[$lastIndex] = rtrim($clean[$lastIndex]) . ' ' . $part; + continue; + } + + if (preg_match('/^(.+?)([+-]{1,3})$/u', $part, $m) === 1) { + $base = trim((string) $m[1]); + $sign = trim((string) $m[2]); + if ($base !== '') { + $part = $base . ' ' . $sign; + } + } + $clean[] = $part; } diff --git a/app/Controllers/Opd_prescription.php b/app/Controllers/Opd_prescription.php index 85d4491..226f8f0 100644 --- a/app/Controllers/Opd_prescription.php +++ b/app/Controllers/Opd_prescription.php @@ -4163,6 +4163,27 @@ class Opd_prescription extends BaseController if ($part === '') { continue; } + + $part = preg_replace('/\s+/', ' ', $part) ?? $part; + $part = preg_replace_callback('/\b([A-Za-z])\s*\/\s*([A-Za-z])\b/u', static function (array $m): string { + return mb_strtoupper($m[1]) . '/' . mb_strtoupper($m[2]); + }, $part) ?? $part; + + // If commas split out punctuation-only fragments like "+", attach to previous token. + if (preg_match('/^[+-]{1,3}$/', $part) && $cleanParts !== []) { + $lastIndex = count($cleanParts) - 1; + $cleanParts[$lastIndex] = rtrim($cleanParts[$lastIndex]) . ' ' . $part; + continue; + } + + if (preg_match('/^(.+?)([+-]{1,3})$/u', $part, $m) === 1) { + $base = trim((string) $m[1]); + $sign = trim((string) $m[2]); + if ($base !== '') { + $part = $base . ' ' . $sign; + } + } + $cleanParts[] = $part; }