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