Files
mkd/docs/PIPELINE_AUTOMATION_FLOW.md
2026-02-04 00:17:04 +05:00

245 lines
12 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Схема автоматизации воронки развития
## Обзор потока данных
```
┌─────────────────────────────────────────────────────────────────┐
│ ИСТОЧНИКИ ДАННЫХ │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Ручное │ │ Импорт │ │ Интеграция │ │
│ │ добавление │ │ из файлов │ │ с 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. Уведомление менеджеру о необходимости дополнительной работы