Files
mkd/docs/PIPELINE_AUTOMATION_FLOW.md

245 lines
12 KiB
Markdown
Raw Normal View History

2026-02-04 00:17:04 +05:00
# Схема автоматизации воронки развития
## Обзор потока данных
```
┌─────────────────────────────────────────────────────────────────┐
│ ИСТОЧНИКИ ДАННЫХ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Ручное │ │ Импорт │ │ Интеграция │ │
│ │ добавление │ │ из файлов │ │ с 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. Уведомление менеджеру о необходимости дополнительной работы