# Схема автоматизации воронки развития ## Обзор потока данных ``` ┌─────────────────────────────────────────────────────────────────┐ │ ИСТОЧНИКИ ДАННЫХ │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Ручное │ │ Импорт │ │ Интеграция │ │ │ │ добавление │ │ из файлов │ │ с API │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ └──────────────────┼──────────────────┘ │ │ │ │ │ ┌───────▼────────┐ │ │ │ ВОРОНКА │ │ │ │ (analysis) │ │ │ └───────┬────────┘ │ └────────────────────────────┼────────────────────────────────────┘ │ │ Автоматические переходы │ ┌────────────────────┼────────────────────┐ │ │ │ ┌───────▼────────┐ ┌────────▼────────┐ ┌────────▼────────┐ │ NEGOTIATION │ │ PREPARATION │ │ VOTING │ │ │ │ │ │ │ │ Триггеры: │ │ Триггеры: │ │ Триггеры: │ │ • probability │ │ • probability │ │ • ОСС создано │ │ >= 30% │ │ >= 60% │ │ (автоматически│ │ • активисты │ │ • аудит готов │ │ через триггер│ │ • встречи │ │ • документы │ │ БД) │ └───────┬────────┘ └────────┬───────┘ └────────┬────────┘ │ │ │ │ │ │ └────────────────────┼────────────────────┘ │ ┌────────▼────────┐ │ TRANSFER │ │ │ │ Триггеры: │ │ • ОСС успешно │ │ (кворум > 50%)│ │ • probability │ │ >= 90% │ └────────┬────────┘ │ ┌────────▼────────┐ │ Создание │ │ Building │ │ (автоматически)│ └─────────────────┘ ``` ## Детальная схема автоматических переходов ### 1. Analysis → Negotiation **Условия:** - `probability >= 30%` ИЛИ - Создана маркетинговая активность с `activists_count >= 1` ИЛИ - Проведена первая встреча (`meetings_held >= 1`) **Действия:** - Автоматический переход статуса - Создание маркетинговой активности (если еще нет) - Уведомление менеджеру **Код:** ```javascript // В pipelineAutomation.js if (pipeline.status === 'analysis' && (probability >= 30 || marketing.activists_count >= 1 || marketing.meetings_held >= 1)) { await transitionStatus(pipeline.id, 'analysis', 'negotiation', 'Автоматический переход: условия выполнены', 'auto'); } ``` ### 2. Negotiation → Preparation **Условия:** - `probability >= 60%` И - `activists_count >= 5` И - `meetings_held >= 3` И - Технический аудит завершен (`development_audits` существует) **Действия:** - Автоматический переход статуса - Создание задачи на подготовку ОСС - Уведомление менеджеру ### 3. Preparation → Voting **Условия:** - Создано ОСС со статусом `active` (триггер БД) - `probability >= 70%` **Действия:** - **Триггер БД** автоматически переводит в `voting` - Логирование в `development_pipeline_history` - Уведомление менеджеру **SQL Триггер:** ```sql -- Автоматически срабатывает при создании ОСС CREATE TRIGGER trigger_auto_transition_to_voting AFTER INSERT OR UPDATE ON development_oss_sessions WHEN (NEW.status = 'active') EXECUTE FUNCTION auto_transition_to_voting(); ``` ### 4. Voting → Transfer **Условия:** - ОСС завершено (`status = 'completed'`) - Кворум > 50% - Результат голосования положительный **Действия:** - **Триггер БД** автоматически переводит в `transfer` - Создание записи в `buildings` (если еще нет) - Связывание `building_id` с pipeline объектом - Уведомление менеджеру и директору **SQL Триггер:** ```sql -- Автоматически срабатывает при завершении ОСС CREATE TRIGGER trigger_auto_handle_oss_completion AFTER UPDATE ON development_oss_sessions WHEN (NEW.status = 'completed' AND OLD.status != 'completed') EXECUTE FUNCTION auto_handle_oss_completion(); ``` ## Автоматический расчет probability ### Формула: ``` probability = 20 (базовая) + (activists_count * 5, макс 50) + (meetings_held * 3, макс 30) + (ads_distributed / 10, макс 20) + (audit_score * 0.2, макс 20) - (days_inactive * 0.5, макс 30) ``` ### Когда пересчитывается: 1. **При обновлении маркетинговых метрик** (PUT /api/development/marketing/:id/metrics) 2. **При создании/обновлении аудита** (POST/PUT /api/development/audits) 3. **Ежедневно** (cron задача в 9:00) 4. **Вручную** (POST /api/development/pipeline/:id/recalculate) ## Источники попадания в воронку ### 1. Ручное добавление ✅ (реализовано) - Форма в UI - Статус: `analysis` - Probability: 20% ### 2. Импорт из файлов (TODO) ```javascript // POST /api/development/pipeline/import // Принимает CSV/Excel с колонками: // - address, type, floors, area, apartments, manager // Автоматически создает записи в analysis ``` ### 3. Интеграция с PR модулем (TODO) ```javascript // При обнаружении негативных отзывов о текущей УК: // - Автоматически создается pipeline объект // - Статус: analysis // - Создается маркетинговая активность ``` ### 4. Мониторинг внешних источников (TODO) - Парсинг сайтов конкурентов - Мониторинг ГИС ЖКХ - Интеграция с CRM ## Откаты стадий ### Negotiation → Analysis **Условия:** - Нет активности > 30 дней - `probability < 20%` ### Preparation → Negotiation **Условия:** - ОСС отменено - `probability < 50%` ### Voting → Preparation **Условия:** - ОСС провалено (кворум < 50%) - Автоматически через триггер БД ## Уведомления ### Типы уведомлений: 1. **Переход на следующую стадию** - менеджеру объекта 2. **Откат стадии** - менеджеру + руководителю отдела 3. **Риск потери объекта** (30 дней без активности) - менеджеру + директору 4. **ОСС завершено успешно** - менеджеру + директору + финансисту 5. **Объект передан в управление** - всем заинтересованным ## API Endpoints для автоматизации ### Ручной запуск проверки ``` POST /api/development/pipeline/auto-check ``` Запускает ежедневную проверку всех объектов вручную. ### Пересчет probability ``` POST /api/development/pipeline/:id/recalculate ``` Пересчитывает probability для конкретного объекта и проверяет условия для перехода. ## Мониторинг и логирование Все автоматические переходы логируются в `development_pipeline_history`: - `from_status` - предыдущий статус - `to_status` - новый статус - `reason` - причина перехода - `triggered_by` - 'auto' | 'manual' | user_id - `created_at` - время перехода ## Примеры workflow ### Успешный сценарий: 1. Объект добавлен → `analysis` (20%) 2. Встреча + 2 активиста → probability: 35% → `negotiation` 3. 3 встречи + 5 активистов + аудит → probability: 68% → `preparation` 4. Создано ОСС → автоматически `voting` (триггер БД) 5. ОСС успешно (кворум 55%) → автоматически `transfer` (триггер БД) 6. Создан Building → объект в управлении ### Неудачный сценарий: 1. Объект в `voting` (ОСС идет) 2. ОСС провалено (кворум 45%) → автоматически `preparation` (триггер БД) 3. Probability снижен на 20% 4. Уведомление менеджеру о необходимости дополнительной работы