63 lines
1.4 KiB
PHP
63 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Support\MedicalReport;
|
|
|
|
use Illuminate\Support\Str;
|
|
|
|
class DepartmentSlugger
|
|
{
|
|
/**
|
|
* @var list<string>
|
|
*/
|
|
private array $ignoredFragments = [
|
|
'всего',
|
|
'итого',
|
|
'строка',
|
|
'январ',
|
|
'феврал',
|
|
'март',
|
|
'апрел',
|
|
'май',
|
|
'июн',
|
|
'июл',
|
|
'август',
|
|
'сентябр',
|
|
'октябр',
|
|
'ноябр',
|
|
'декабр',
|
|
'квартал',
|
|
'полугод',
|
|
'год',
|
|
'оплата',
|
|
'расход',
|
|
'выписано',
|
|
'койко',
|
|
'медикамент',
|
|
'перевяз',
|
|
'без бюджета',
|
|
'сумма',
|
|
'наименование',
|
|
];
|
|
|
|
public function slug(?string $departmentName): ?string
|
|
{
|
|
$departmentName = trim((string) $departmentName);
|
|
|
|
if ($departmentName === '' || preg_match('/^\d+\.?$/', $departmentName) === 1) {
|
|
return null;
|
|
}
|
|
|
|
$normalized = mb_strtolower($departmentName);
|
|
|
|
foreach ($this->ignoredFragments as $fragment) {
|
|
if (str_contains($normalized, $fragment)) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
$slug = Str::slug(Str::ascii($departmentName));
|
|
|
|
return $slug !== '' ? $slug : null;
|
|
}
|
|
}
|