Files
portal/app/app/Services/Import/StatusRuToSlugMapper.php
T

59 lines
2.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
declare(strict_types=1);
namespace App\Services\Import;
/**
* Маппинг русских названий статусов (старые 14 названий поставщика + новые 5)
* в slug 5-статусной воронки (редизайн 2026-05-17).
*
* Чистый сервис без зависимостей. Tenant-специфичные переопределения
* неизвестных статусов накладываются вызывающим кодом (HistoricalImportService).
*/
class StatusRuToSlugMapper
{
/** @var array<string, string> Русские названия → 5 slug'ов воронки (редизайн 2026-05-17). */
private const STATUS_RU_TO_SLUG = [
// Новые названия 5-статусной воронки.
'Новая сделка' => 'new',
'Просмотрено' => 'viewed',
'В работе' => 'in_progress',
'Сделка' => 'won',
'Не реализовано' => 'lost',
// Старые 14 названий поставщика → новые slug'и (исторический CSV-импорт).
'Новые' => 'new',
'Проработан' => 'in_progress',
'База' => 'in_progress',
'Недозвон' => 'in_progress',
'Переговоры' => 'in_progress',
'Ожидаем оплаты' => 'in_progress',
'Партнерка' => 'in_progress',
'Оплачено' => 'won',
'Закрыто и не реализовано' => 'lost',
'Тест драйв' => 'in_progress',
'Горячий' => 'in_progress',
'На замену' => 'in_progress',
'Конечный недозвон' => 'in_progress',
];
/**
* Возвращает slug или null, если статус не входит в каноническую таблицу.
*/
public function toSlug(string $statusRu): ?string
{
return self::STATUS_RU_TO_SLUG[trim($statusRu)] ?? null;
}
/**
* Полная таблица соответствия: русское название → slug 5-статусной воронки
* (18 ключей — старые и новые названия схлопываются в 5 slug'ов).
*
* @return array<string, string>
*/
public function map(): array
{
return self::STATUS_RU_TO_SLUG;
}
}