424987bedb
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
51 lines
1.8 KiB
PHP
51 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Services\Import;
|
|
|
|
/**
|
|
* Маппинг русских названий статусов воронки в slug (ТЗ §6.4).
|
|
*
|
|
* Чистый сервис без зависимостей. Tenant-специфичные переопределения
|
|
* неизвестных статусов накладываются вызывающим кодом (HistoricalImportService).
|
|
*/
|
|
class StatusRuToSlugMapper
|
|
{
|
|
/** @var array<string, string> Канонический маппинг ТЗ §6.4 (14 статусов воронки). */
|
|
private const STATUS_RU_TO_SLUG = [
|
|
'Новые' => 'new',
|
|
'Просмотрено' => 'viewed',
|
|
'Проработан' => 'worked',
|
|
'База' => 'base',
|
|
'Недозвон' => 'missed',
|
|
'Переговоры' => 'negotiations',
|
|
'Ожидаем оплаты' => 'waiting_payment',
|
|
'Партнерка' => 'partnership',
|
|
'Оплачено' => 'paid',
|
|
'Закрыто и не реализовано' => 'closed',
|
|
'Тест драйв' => 'test_drive',
|
|
'Горячий' => 'hot',
|
|
'На замену' => 'replacement',
|
|
'Конечный недозвон' => 'final_missed',
|
|
];
|
|
|
|
/**
|
|
* Возвращает slug или null, если статус не входит в каноническую таблицу.
|
|
*/
|
|
public function toSlug(string $statusRu): ?string
|
|
{
|
|
return self::STATUS_RU_TO_SLUG[trim($statusRu)] ?? null;
|
|
}
|
|
|
|
/**
|
|
* Полная каноническая таблица — для UI wizard'а (показать варианты).
|
|
*
|
|
* @return array<string, string>
|
|
*/
|
|
public function map(): array
|
|
{
|
|
return self::STATUS_RU_TO_SLUG;
|
|
}
|
|
}
|