9b99d81deb
Plan 1/5 Task 2 — SaaS-level агрегатная сущность для проектов у поставщиков. Несколько Лидерра-tenant'ов могут шарить один supplier_project (sharing-model spec §2.3): для site/call — по domain/phone; для sms — по (sender, keyword) на B2 или (sender) на B3. RLS НЕ применяется (таблица не tenant-scoped), defense-in-depth через REVOKE ALL FROM crm_app_user. Колонки: platform, signal_type, unique_key (TEXT), supplier_external_id, current_limit, current_workdays/regions (jsonb), sync_status (pending/ok/failed), last_synced_at, inactive_since (TTL 180 дней), timestamps. CHECK constraints (chk_supplier_projects_*): - platform IN (B1, B2, B3) - signal_type IN (site, call, sms) - sync_status IN (pending, ok, failed) - NOT (platform=B1 AND signal_type=sms) — B1 не поддерживает СМС Indexes: UNIQUE(platform, unique_key); btree на sync_status, inactive_since. Тесты: 6/6 (table+columns / unique / platform CHECK / sync_status CHECK / no RLS / no privileges). Schema: v8.12 → v8.13. Метрики: 56→57 таблиц / 98→101 индексов; RLS/функции/триггеры без изменений.