31929c9dd2
Plan 2/5 Task 4 — sharing-model routing (spec §6): для входящего лида возвращает Collection<Project> учитывая platform FK + active + workdays + region (PhonePrefixService::phoneMatchesRegions) + delivered_today < COALESCE(effective_daily_limit_today, daily_limit_target) + tenant.balance_leads > 0. Сортировка created_at ASC, id ASC (детерминированно). Параллельно расширил Project model fillable/casts на delivered_today (колонка добавлена в schema v8.18 Plan 2 Task 1, но Project::class не обновлён — без этого тесты Mass-Assignment'а ломались). Покрытие: 9 it-blocks (sharing across tenants, paused, workdays, daily quota, fallback to daily_limit_target, region filter, balance_leads zero, FK routing по platform, deterministic sort). DatabaseTransactions context + set_config (session-scoped) для очистки app.current_tenant_id — sharing-flow работает поверх N tenant'ов, RLS bypass через postgres BYPASSRLS на dev. PHPStan: 0 errors. Pint: clean. Pest: 9/9 PASS. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>