c7d1e1751a
Task 3.2a — SalesTariffController (index/store/update/assign), только head. - index: активные тарифы (3 вида) + менеджеры с метриками периода (пополнения/оборот/клиенты) и оценкой «начислено» текущим тарифом. - store/update: валидация params по виду тарифа (topup_step.periods[], percent_oborot.rate, fix_per_client.threshold/reward); смена kind в update запрещена (422). - assign: ставит менеджеру current_tariff_id + base_salary_rub («оклад+ процент» = оклад на менеджере + percent_oborot тариф). - В12: ни update, ни assign НЕ трогают снимки уже привязанных клиентов (sales_client_assignments) — покрыто тестами. Роуты в группе admin-db/auth:sales/sales-portal. Тесты 19/19, весь sales-набор 130/130, Larastan 0 (3 Pest-false-positive в baseline). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>