# Подробное проектирование системы CRM 2.0


## 1. Обзор системы и концепция дизайна

### 1.1 Позиционирование системы

Данная система представляет собой **платформу управления продажами CRM 2.0**, построенную на базе платформы без кода NocoBase. Основная цель:

```
Пусть отдел продаж сосредоточится на выстраивании отношений с клиентами, а не на вводе данных и повторяющемся анализе.
```

Система автоматизирует рутинные задачи с помощью рабочих процессов и использует ИИ для оценки лидов, анализа сделок и других задач, помогая командам продаж повысить эффективность.

### 1.2 Концепция дизайна

#### Концепция 1: Полная воронка продаж

**Сквозной процесс продаж:**
![design-2026-02-24-00-05-26](https://static-docs.nocobase.com/design-2026-02-24-00-05-26.png)

**Почему выбрана такая структура?**

| Традиционный способ | Интегрированная CRM |
|---------|-----------|
| Использование нескольких систем на разных этапах | Единая система, охватывающая весь жизненный цикл |
| Ручная передача данных между системами | Автоматизированный поток данных и конвертация |
| Противоречивые данные о клиентах | Единый профиль клиента «360 градусов» |
| Разрозненный анализ данных | Сквозной анализ воронки продаж |

#### Концепция 2: Настраиваемая воронка продаж
![design-2026-02-24-00-06-04](https://static-docs.nocobase.com/design-2026-02-24-00-06-04.png)

Компании из разных отраслей могут настраивать этапы воронки продаж без изменения кода.

#### Концепция 3: Модульный дизайн

- Основные модули (Клиенты + Сделки) обязательны, остальные могут быть включены по мере необходимости.
- Отключение модулей не требует изменения кода и выполняется через интерфейс конфигурации NocoBase.
- Каждый модуль спроектирован независимо для снижения связанности системы.

---

## 2. Архитектура модулей и кастомизация

### 2.1 Обзор модулей

Система CRM использует **модульную архитектуру** — каждый модуль может быть независимо включен или выключен в зависимости от потребностей бизнеса.
![design-2026-02-24-00-06-14](https://static-docs.nocobase.com/design-2026-02-24-00-06-14.png)

### 2.2 Зависимости модулей

| Модуль | Обязательный | Зависимости | Условие отключения |
|-----|---------|--------|---------|
| **Управление клиентами** | ✅ Да | - | Нельзя отключить (ядро) |
| **Управление сделками** | ✅ Да | Управление клиентами | Нельзя отключить (ядро) |
| **Управление лидами** | Опционально | - | Когда не требуется сбор лидов |
| **Управление КП** | Опционально | Сделки, Продукты | Простые сделки без официальных предложений |
| **Управление заказами** | Опционально | Сделки (или КП) | Когда не требуется отслеживание заказов/оплат |
| **Управление продуктами** | Опционально | - | Когда не требуется каталог продуктов |
| **Интеграция почты** | Опционально | Клиенты, Контакты | При использовании внешней почтовой системы |

### 2.3 Предварительно настроенные версии

| Версия | Включенные модули | Сценарий использования | Количество коллекций |
|-----|---------|---------|-----------|
| **Lite (Легкая)** | Клиенты + Сделки | Отслеживание простых транзакций | 6 |
| **Standard (Стандарт)** | Lite + Лиды + КП + Заказы + Продукты | Полный цикл продаж | 15 |
| **Enterprise (Корпорация)** | Standard + Интеграция почты | Полный функционал, включая почту | 17 |

### 2.4 Сопоставление модулей и коллекций

#### Коллекции основного модуля (всегда обязательны)

| Коллекция | Модуль | Описание |
|-------|------|------|
| nb_crm_customers | Управление клиентами | Записи клиентов/компаний |
| nb_crm_contacts | Управление клиентами | Контактные лица |
| nb_crm_customer_shares | Управление клиентами | Права доступа к клиентам |
| nb_crm_opportunities | Управление сделками | Сделки по продажам |
| nb_crm_opportunity_stages | Управление сделками | Конфигурация этапов |
| nb_crm_opportunity_users | Управление сделками | Соучастники сделки |
| nb_crm_activities | Управление активностью | Записи активностей |
| nb_crm_comments | Управление активностью | Комментарии/Заметки |
| nb_crm_tags | Ядро | Общие теги |
| nb_cbo_currencies | Базовые данные | Справочник валют |
| nb_cbo_regions | Базовые данные | Справочник стран/регионов |

### 2.5 Как отключить модули

Просто скройте пункт меню для соответствующего модуля в интерфейсе администрирования NocoBase; нет необходимости изменять код или удалять коллекции.

---

## 3. Основные сущности и модель данных

### 3.1 Обзор связей сущностей
![design-2026-02-24-00-06-40](https://static-docs.nocobase.com/design-2026-02-24-00-06-40.png)

### 3.2 Детали основных коллекций

#### 3.2.1 Лиды (nb_crm_leads)

Управление лидами с использованием упрощенного 4-этапного рабочего процесса.

**Процесс этапов:**
```
Новый → В работе → Проверен → Преобразован в Клиента/Сделку
          ↓           ↓
     Не подходит  Не подходит
```

**Ключевые поля:**

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| lead_no | VARCHAR | Номер лида (автогенерация) |
| name | VARCHAR | Имя контакта |
| company | VARCHAR | Название компании |
| title | VARCHAR | Должность |
| email | VARCHAR | Электронная почта |
| phone | VARCHAR | Телефон |
| mobile_phone | VARCHAR | Мобильный телефон |
| website | TEXT | Веб-сайт |
| address | TEXT | Адрес |
| source | VARCHAR | Источник: website/ads/referral/exhibition/telemarketing/email/social |
| industry | VARCHAR | Отрасль |
| annual_revenue | VARCHAR | Годовой доход (масштаб) |
| number_of_employees | VARCHAR | Количество сотрудников (масштаб) |
| status | VARCHAR | Статус: new/working/qualified/unqualified |
| rating | VARCHAR | Рейтинг: hot/warm/cold |
| owner_id | BIGINT | Ответственный (FK → users) |
| ai_score | INTEGER | Оценка качества ИИ (0-100) |
| ai_convert_prob | DECIMAL | Вероятность конверсии ИИ |
| ai_best_contact_time | VARCHAR | Рекомендуемое ИИ время контакта |
| ai_tags | JSONB | Теги, созданные ИИ |
| ai_scored_at | TIMESTAMP | Время оценки ИИ |
| ai_next_best_action | TEXT | Предложение ИИ по следующему шагу |
| ai_nba_generated_at | TIMESTAMP | Время генерации предложения ИИ |
| is_converted | BOOLEAN | Флаг конвертации |
| converted_at | TIMESTAMP | Время конвертации |
| converted_customer_id | BIGINT | ID созданного клиента |
| converted_contact_id | BIGINT | ID созданного контакта |
| converted_opportunity_id | BIGINT | ID созданной сделки |
| lost_reason | TEXT | Причина потери |
| disqualification_reason | TEXT | Причина дисквалификации |
| description | TEXT | Описание |

#### 3.2.2 Клиенты (nb_crm_customers)

Управление клиентами/компаниями с поддержкой международного бизнеса.

**Ключевые поля:**

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| name | VARCHAR | Имя клиента (обязательно) |
| account_number | VARCHAR | Номер счета (автогенерация, уникальный) |
| phone | VARCHAR | Телефон |
| website | TEXT | Веб-сайт |
| address | TEXT | Адрес |
| industry | VARCHAR | Отрасль |
| type | VARCHAR | Тип: prospect/customer/partner/competitor |
| number_of_employees | VARCHAR | Количество сотрудников |
| annual_revenue | VARCHAR | Годовой доход |
| level | VARCHAR | Уровень: normal/important/vip |
| status | VARCHAR | Статус: potential/active/dormant/churned |
| country | VARCHAR | Страна |
| region_id | BIGINT | Регион (FK → nb_cbo_regions) |
| preferred_currency | VARCHAR | Предпочтительная валюта: CNY/USD/EUR |
| owner_id | BIGINT | Ответственный (FK → users) |
| parent_id | BIGINT | Материнская компания (FK → self) |
| source_lead_id | BIGINT | ID исходного лида |
| ai_health_score | INTEGER | Оценка «здоровья» ИИ (0-100) |
| ai_health_grade | VARCHAR | Грейд здоровья ИИ: A/B/C/D |
| ai_churn_risk | DECIMAL | Риск оттока ИИ (0-100%) |
| ai_churn_risk_level | VARCHAR | Уровень риска оттока ИИ: low/medium/high |
| ai_health_dimensions | JSONB | Оценки здоровья по измерениям |
| ai_recommendations | JSONB | Список рекомендаций ИИ |
| ai_health_assessed_at | TIMESTAMP | Время оценки здоровья ИИ |
| ai_tags | JSONB | Теги, созданные ИИ |
| ai_best_contact_time | VARCHAR | Рекомендуемое ИИ время контакта |
| ai_next_best_action | TEXT | Предложение ИИ по следующему шагу |
| ai_nba_generated_at | TIMESTAMP | Время генерации предложения ИИ |
| description | TEXT | Описание |
| is_deleted | BOOLEAN | Флаг мягкого удаления |

#### 3.2.3 Сделки (nb_crm_opportunities)

Управление сделками с настраиваемыми этапами воронки.

**Ключевые поля:**

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| opportunity_no | VARCHAR | Номер сделки (автогенерация, уникальный) |
| name | VARCHAR | Название сделки (обязательно) |
| amount | DECIMAL | Ожидаемая сумма |
| currency | VARCHAR | Валюта |
| exchange_rate | DECIMAL | Обменный курс |
| amount_usd | DECIMAL | Сумма в эквиваленте USD |
| customer_id | BIGINT | Клиент (FK) |
| contact_id | BIGINT | Основной контакт (FK) |
| stage | VARCHAR | Код этапа (FK → stages.code) |
| stage_sort | INTEGER | Порядок сортировки этапа |
| stage_entered_at | TIMESTAMP | Время входа в текущий этап |
| days_in_stage | INTEGER | Дней в текущем этапе |
| win_probability | DECIMAL | Ручная вероятность выигрыша |
| ai_win_probability | DECIMAL | Вероятность выигрыша по прогнозу ИИ |
| ai_analyzed_at | TIMESTAMP | Время анализа ИИ |
| ai_confidence | DECIMAL | Уверенность прогноза ИИ |
| ai_trend | VARCHAR | Тренд прогноза ИИ: up/stable/down |
| ai_risk_factors | JSONB | Факторы риска, выявленные ИИ |
| ai_recommendations | JSONB | Список рекомендаций ИИ |
| ai_predicted_close | DATE | Прогнозируемая ИИ дата закрытия |
| ai_next_best_action | TEXT | Предложение ИИ по следующему шагу |
| ai_nba_generated_at | TIMESTAMP | Время генерации предложения ИИ |
| expected_close_date | DATE | Ожидаемая дата закрытия |
| actual_close_date | DATE | Фактическая дата закрытия |
| owner_id | BIGINT | Ответственный (FK → users) |
| last_activity_at | TIMESTAMP | Время последней активности |
| stagnant_days | INTEGER | Дней без активности |
| loss_reason | TEXT | Причина проигрыша |
| competitor_id | BIGINT | Конкурент (FK) |
| lead_source | VARCHAR | Источник лида |
| campaign_id | BIGINT | ID маркетинговой кампании |
| expected_revenue | DECIMAL | Ожидаемый доход = сумма × вероятность |
| description | TEXT | Описание |

#### 3.2.4 Коммерческие предложения (nb_crm_quotations)

Управление КП с поддержкой мультивалютности и рабочих процессов утверждения.

**Поток статусов:**
```
Черновик → Ожидает утверждения → Утверждено → Отправлено → Принято/Отклонено/Просрочено
                 ↓
             Отклонено → Редактирование → Черновик
```

**Ключевые поля:**

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| quotation_no | VARCHAR | Номер КП (автогенерация, уникальный) |
| name | VARCHAR | Название КП |
| version | INTEGER | Номер версии |
| opportunity_id | BIGINT | Сделка (FK, обязательно) |
| customer_id | BIGINT | Клиент (FK) |
| contact_id | BIGINT | Контакт (FK) |
| owner_id | BIGINT | Ответственный (FK → users) |
| currency_id | BIGINT | Валюта (FK → nb_cbo_currencies) |
| exchange_rate | DECIMAL | Обменный курс |
| subtotal | DECIMAL | Промежуточный итог |
| discount_rate | DECIMAL | Процент скидки |
| discount_amount | DECIMAL | Сумма скидки |
| shipping_handling | DECIMAL | Доставка и обработка |
| tax_rate | DECIMAL | Налоговая ставка |
| tax_amount | DECIMAL | Сумма налога |
| total_amount | DECIMAL | Итоговая сумма |
| total_amount_usd | DECIMAL | Сумма в эквиваленте USD |
| status | VARCHAR | Статус: draft/pending_approval/approved/sent/accepted/rejected/expired |
| submitted_at | TIMESTAMP | Время подачи |
| approved_by | BIGINT | Утверждающий (FK → users) |
| approved_at | TIMESTAMP | Время утверждения |
| rejected_at | TIMESTAMP | Время отклонения |
| sent_at | TIMESTAMP | Время отправки |
| customer_response_at | TIMESTAMP | Время ответа клиента |
| expired_at | TIMESTAMP | Время истечения |
| valid_until | DATE | Действительно до |
| payment_terms | TEXT | Условия оплаты |
| terms_condition | TEXT | Сроки и условия |
| address | TEXT | Адрес доставки |
| description | TEXT | Описание |

#### 3.2.5 Заказы (nb_crm_orders)

Управление заказами, включая отслеживание платежей.

**Ключевые поля:**

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| order_no | VARCHAR | Номер заказа (автогенерация, уникальный) |
| customer_id | BIGINT | Клиент (FK) |
| contact_id | BIGINT | Контакт (FK) |
| opportunity_id | BIGINT | Сделка (FK) |
| quotation_id | BIGINT | КП (FK) |
| owner_id | BIGINT | Ответственный (FK → users) |
| currency | VARCHAR | Валюта |
| exchange_rate | DECIMAL | Обменный курс |
| order_amount | DECIMAL | Сумма заказа |
| paid_amount | DECIMAL | Оплаченная сумма |
| unpaid_amount | DECIMAL | Неоплаченная сумма |
| status | VARCHAR | Статус: pending/confirmed/in_progress/shipped/delivered/completed/cancelled |
| payment_status | VARCHAR | Статус оплаты: unpaid/partial/paid |
| order_date | DATE | Дата заказа |
| delivery_date | DATE | Ожидаемая дата доставки |
| actual_delivery_date | DATE | Фактическая дата доставки |
| shipping_address | TEXT | Адрес доставки |
| logistics_company | VARCHAR | Логистическая компания |
| tracking_no | VARCHAR | Номер отслеживания |
| terms_condition | TEXT | Сроки и условия |
| description | TEXT | Описание |

### 3.3 Сводная таблица коллекций

#### Бизнес-коллекции CRM

| № | Название коллекции | Описание | Тип |
|-----|------|------|------|
| 1 | nb_crm_leads | Управление лидами | Бизнес |
| 2 | nb_crm_customers | Клиенты/Компании | Бизнес |
| 3 | nb_crm_contacts | Контакты | Бизнес |
| 4 | nb_crm_opportunities | Сделки по продажам | Бизнес |
| 5 | nb_crm_opportunity_stages | Конфигурация этапов | Конфигурация |
| 6 | nb_crm_opportunity_users | Соучастники сделки (команда продаж) | Связь |
| 7 | nb_crm_quotations | Коммерческие предложения | Бизнес |
| 8 | nb_crm_quotation_items | Позиции КП | Бизнес |
| 9 | nb_crm_quotation_approvals | Записи об утверждении | Бизнес |
| 10 | nb_crm_orders | Заказы | Бизнес |
| 11 | nb_crm_order_items | Позиции заказа | Бизнес |
| 12 | nb_crm_payments | Записи о платежах | Бизнес |
| 13 | nb_crm_products | Каталог продуктов | Бизнес |
| 14 | nb_crm_product_categories | Категории продуктов | Конфигурация |
| 15 | nb_crm_price_tiers | Уровни цен | Конфигурация |
| 16 | nb_crm_activities | Записи активностей | Бизнес |
| 17 | nb_crm_comments | Комментарии/Заметки | Бизнес |
| 18 | nb_crm_competitors | Конкуренты | Бизнес |
| 19 | nb_crm_tags | Теги | Конфигурация |
| 20 | nb_crm_lead_tags | Связь Лид-Тег | Связь |
| 21 | nb_crm_contact_tags | Связь Контакт-Тег | Связь |
| 22 | nb_crm_customer_shares | Права доступа к клиентам | Связь |
| 23 | nb_crm_exchange_rates | История курсов валют | Конфигурация |

#### Коллекции базовых данных (общие модули)

| № | Название коллекции | Описание | Тип |
|-----|------|------|------|
| 1 | nb_cbo_currencies | Справочник валют | Конфигурация |
| 2 | nb_cbo_regions | Справочник стран/регионов | Конфигурация |

### 3.4 Вспомогательные коллекции

#### 3.4.1 Комментарии (nb_crm_comments)

Универсальная коллекция комментариев/заметок, которая может быть связана с различными бизнес-объектами.

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| content | TEXT | Содержание комментария |
| lead_id | BIGINT | Связанный лид (FK) |
| customer_id | BIGINT | Связанный клиент (FK) |
| opportunity_id | BIGINT | Связанная сделка (FK) |
| order_id | BIGINT | Связанный заказ (FK) |

#### 3.4.2 Совместный доступ к клиентам (nb_crm_customer_shares)

Обеспечивает совместную работу нескольких человек и распределение прав доступа к клиентам.

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| customer_id | BIGINT | Клиент (FK, обязательно) |
| shared_with_user_id | BIGINT | Пользователь, которому предоставлен доступ (FK, обязательно) |
| shared_by_user_id | BIGINT | Пользователь, предоставивший доступ (FK) |
| permission_level | VARCHAR | Уровень прав: read/write/full |
| shared_at | TIMESTAMP | Время предоставления доступа |

#### 3.4.3 Соучастники сделки (nb_crm_opportunity_users)

Поддерживает совместную работу команды продаж над сделками.

| Поле | Тип | Описание |
|-----|------|------|
| opportunity_id | BIGINT | Сделка (FK, составной PK) |
| user_id | BIGINT | Пользователь (FK, составной PK) |
| role | VARCHAR | Роль: owner/collaborator/viewer |

#### 3.4.4 Регионы (nb_cbo_regions)

Базовый справочник стран и регионов.

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| code_alpha2 | VARCHAR | Код ISO 3166-1 Alpha-2 (уникальный) |
| code_alpha3 | VARCHAR | Код ISO 3166-1 Alpha-3 (уникальный) |
| code_numeric | VARCHAR | Цифровой код ISO 3166-1 |
| name | VARCHAR | Название страны/региона |
| is_active | BOOLEAN | Активен |
| sort_order | INTEGER | Порядок сортировки |

---

## 4. Жизненный цикл лида

Управление лидами использует упрощенный 4-этапный рабочий процесс. При создании нового лида рабочий процесс может автоматически запускать оценку ИИ, чтобы помочь отделу продаж быстро выявлять высококачественные лиды.

### 4.1 Определения статусов

| Статус | Название | Описание |
|-----|------|------|
| new | Новый | Только что создан, ожидает контакта |
| working | В работе | Активная работа по лиду |
| qualified | Проверен | Готов к конвертации |
| unqualified | Не подходит | Не соответствует критериям |

### 4.2 Схема статусов

![design-2026-02-24-00-25-32](https://static-docs.nocobase.com/design-2026-02-24-00-25-32.png)

### 4.3 Процесс конвертации лида

Интерфейс конвертации предоставляет три варианта одновременно; пользователи могут выбрать создание или привязку:

- **Клиент**: Создать нового клиента ИЛИ связать с существующим.
- **Контакт**: Создать новый контакт (связанный с клиентом).
- **Сделка**: Сделка должна быть создана обязательно.
![design-2026-02-24-00-25-22](https://static-docs.nocobase.com/design-2026-02-24-00-25-22.png)

**Записи после конвертации:**
- `converted_customer_id`: ID связанного клиента
- `converted_contact_id`: ID связанного контакта
- `converted_opportunity_id`: ID созданной сделки

---

## 5. Жизненный цикл сделки

Управление сделками использует настраиваемые этапы воронки продаж. При изменении этапа сделки может автоматически запускаться прогноз вероятности выигрыша ИИ, помогая отделу продаж выявлять риски и возможности.

### 5.1 Настраиваемые этапы

Этапы хранятся в коллекции `nb_crm_opportunity_stages` и могут быть изменены:

| Код | Название | Порядок | Вероятность выигрыша по умолчанию |
|-----|------|------|---------|
| prospecting | Поиск/Квалификация | 1 | 10% |
| analysis | Анализ потребностей | 2 | 30% |
| proposal | Предложение/КП | 3 | 60% |
| negotiation | Переговоры | 4 | 80% |
| won | Закрыто (Выиграно) | 5 | 100% |
| lost | Закрыто (Проиграно) | 6 | 0% |

### 5.2 Поток воронки
![design-2026-02-24-00-20-31](https://static-docs.nocobase.com/design-2026-02-24-00-20-31.png)

### 5.3 Обнаружение стагнации

Сделки без активности будут помечены:

| Дней без активности | Действие |
|-----------|------|
| 7 дней | Желтое предупреждение |
| 14 дней | Оранжевое напоминание ответственному |
| 30 дней | Красное напоминание менеджеру |

```sql
-- Расчет дней стагнации
UPDATE nb_crm_opportunities
SET stagnant_days = EXTRACT(DAY FROM NOW() - last_activity_at)
WHERE stage NOT IN ('won', 'lost');
```

### 5.4 Обработка выигрыша/проигрыша

**При выигрыше:**
1. Обновить этап на 'won'.
2. Записать фактическую дату закрытия.
3. Обновить статус клиента на 'active'.
4. Запустить создание заказа (если КП было принято).

**При проигрыше:**
1. Обновить этап на 'lost'.
2. Записать причину проигрыша.
3. Записать ID конкурента (если сделка проиграна конкуренту).
4. Уведомить менеджера.

---

## 6. Жизненный цикл коммерческого предложения

### 6.1 Определения статусов

| Статус | Название | Описание |
|-----|------|------|
| draft | Черновик | В подготовке |
| pending_approval | Ожидает утверждения | Ожидает одобрения руководством |
| approved | Утверждено | Готово к отправке |
| sent | Отправлено | Отправлено клиенту |
| accepted | Принято | Принято клиентом |
| rejected | Отклонено | Отклонено клиентом |
| expired | Просрочено | Срок действия истек |

### 6.2 Правила утверждения (в разработке)

Рабочие процессы утверждения запускаются на основе следующих условий:

| Условие | Уровень утверждения |
|------|---------|
| Скидка > 10% | Менеджер по продажам |
| Скидка > 20% | Директор по продажам |
| Сумма > $100K | Финансовый отдел + Гендиректор |

### 6.3 Поддержка мультивалютности

#### Концепция дизайна

Использование **USD в качестве единой базовой валюты** для всех отчетов и анализа. Каждая запись суммы хранит:
- Исходную валюту и сумму (то, что видит клиент)
- Обменный курс на момент транзакции
- Эквивалент в USD (для внутреннего сравнения)

#### Справочник валют (nb_cbo_currencies)

Конфигурация валют использует общую коллекцию базовых данных, поддерживающую динамическое управление. Поле `current_rate` хранит текущий обменный курс, обновляемый запланированной задачей из последней записи в `nb_crm_exchange_rates`.

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| code | VARCHAR | Код валюты (уникальный): USD/CNY/EUR/GBP/JPY |
| name | VARCHAR | Название валюты |
| symbol | VARCHAR | Символ валюты |
| decimal_places | INTEGER | Количество знаков после запятой |
| current_rate | DECIMAL | Текущий курс к USD (синхронизируется из истории) |
| is_active | BOOLEAN | Активна |
| sort_order | INTEGER | Порядок сортировки |

#### История курсов валют (nb_crm_exchange_rates)

Записывает исторические данные об обменных курсах. Запланированная задача синхронизирует последние курсы в `nb_cbo_currencies.current_rate`.

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| currency_code | VARCHAR | Код валюты (CNY/EUR/GBP/JPY) |
| rate_to_usd | DECIMAL(10,6) | Курс к USD |
| effective_date | DATE | Дата вступления в силу |
| source | VARCHAR | Источник: manual/api |
| createdAt | TIMESTAMP | Время создания |

> **Примечание**: КП связаны с коллекцией `nb_cbo_currencies` через внешний ключ `currency_id`, и обменный курс извлекается непосредственно из поля `current_rate`. Сделки и заказы используют поле VARCHAR `currency` для хранения кода валюты.

#### Паттерн полей суммы

Коллекции, содержащие суммы, следуют этому паттерну:

| Поле | Тип | Описание |
|-----|------|------|
| currency | VARCHAR | Валюта транзакции |
| amount | DECIMAL | Исходная сумма |
| exchange_rate | DECIMAL | Курс к USD на момент транзакции |
| amount_usd | DECIMAL | Эквивалент в USD (вычисляемый) |

**Применяется к:**
- `nb_crm_opportunities.amount` → `amount_usd`
- `nb_crm_quotations.total_amount` → `total_amount_usd`

#### Интеграция с рабочим процессом
![design-2026-02-24-00-21-00](https://static-docs.nocobase.com/design-2026-02-24-00-21-00.png)

**Логика получения обменного курса:**
1. Получение курса напрямую из `nb_cbo_currencies.current_rate` во время бизнес-операций.
2. Транзакции в USD: Курс = 1.0, поиск не требуется.
3. `current_rate` синхронизируется запланированной задачей из последней записи `nb_crm_exchange_rates`.

### 6.4 Управление версиями

Когда КП отклонено или просрочено, оно может быть дублировано как новая версия:

```
QT-20260119-001 v1 → Отклонено
QT-20260119-001 v2 → Отправлено
QT-20260119-001 v3 → Принято
```

---

## 7. Жизненный цикл заказа

### 7.1 Обзор заказа

Заказы создаются при принятии коммерческого предложения и представляют собой подтвержденное бизнес-обязательство.
![design-2026-02-24-00-21-21](https://static-docs.nocobase.com/design-2026-02-24-00-21-21.png)

### 7.2 Определения статусов заказа

| Статус | Код | Описание | Разрешенные действия |
|-----|------|------|---------|
| Черновик | `draft` | Заказ создан, но еще не подтвержден | Редактировать, Подтвердить, Отменить |
| Подтвержден | `confirmed` | Заказ подтвержден, ожидает выполнения | Начать выполнение, Отменить |
| В процессе | `in_progress` | Заказ обрабатывается/производится | Обновить прогресс, Отгрузить, Отменить (требуется одобрение) |
| Отгружен | `shipped` | Товары отгружены клиенту | Отметить как доставленный |
| Доставлен | `delivered` | Клиент получил товары | Завершить заказ |
| Выполнен | `completed` | Заказ полностью завершен | Нет |
| Отменен | `cancelled` | Заказ отменен | Нет |

### 7.3 Модель данных заказа

#### nb_crm_orders

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| order_no | VARCHAR | Номер заказа (автогенерация, уникальный) |
| customer_id | BIGINT | Клиент (FK) |
| contact_id | BIGINT | Контакт (FK) |
| opportunity_id | BIGINT | Сделка (FK) |
| quotation_id | BIGINT | КП (FK) |
| owner_id | BIGINT | Ответственный (FK → users) |
| status | VARCHAR | Статус заказа |
| payment_status | VARCHAR | Статус оплаты: unpaid/partial/paid |
| order_date | DATE | Дата заказа |
| delivery_date | DATE | Ожидаемая дата доставки |
| actual_delivery_date | DATE | Фактическая дата доставки |
| currency | VARCHAR | Валюта заказа |
| exchange_rate | DECIMAL | Курс к USD |
| order_amount | DECIMAL | Общая сумма заказа |
| paid_amount | DECIMAL | Оплаченная сумма |
| unpaid_amount | DECIMAL | Неоплаченная сумма |
| shipping_address | TEXT | Адрес доставки |
| logistics_company | VARCHAR | Логистическая компания |
| tracking_no | VARCHAR | Номер отслеживания |
| terms_condition | TEXT | Сроки и условия |
| description | TEXT | Описание |

#### nb_crm_order_items

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| order_id | FK | Родительский заказ |
| product_id | FK | Ссылка на продукт |
| product_name | VARCHAR | Снимок названия продукта |
| quantity | INT | Заказанное количество |
| unit_price | DECIMAL | Цена за единицу |
| discount_percent | DECIMAL | Процент скидки |
| line_total | DECIMAL | Итого по строке |
| notes | TEXT | Примечания к строке |

### 7.4 Отслеживание платежей

#### nb_crm_payments

| Поле | Тип | Описание |
|-----|------|------|
| id | BIGINT | Первичный ключ |
| order_id | BIGINT | Связанный заказ (FK, обязательно) |
| customer_id | BIGINT | Клиент (FK) |
| payment_no | VARCHAR | Номер платежа (автогенерация, уникальный) |
| amount | DECIMAL | Сумма платежа (обязательно) |
| currency | VARCHAR | Валюта платежа |
| payment_method | VARCHAR | Метод: transfer/check/cash/credit_card/lc |
| payment_date | DATE | Дата платежа |
| bank_account | VARCHAR | Номер банковского счета |
| bank_name | VARCHAR | Название банка |
| notes | TEXT | Примечания к платежу |

---

## 8. Жизненный цикл клиента

### 8.1 Обзор клиента

Клиенты создаются во время конвертации лида или при выигрыше сделки. Система отслеживает полный жизненный цикл от привлечения до лояльного сторонника.
![design-2026-02-24-00-21-34](https://static-docs.nocobase.com/design-2026-02-24-00-21-34.png)

### 8.2 Определения статусов клиента

| Статус | Код | Здоровье | Описание |
|-----|------|--------|------|
| Потенциальный | `prospect` | Н/Д | Конвертированный лид, заказов еще нет |
| Активный | `active` | ≥70 | Платящий клиент, хорошее взаимодействие |
| Растущий | `growing` | ≥80 | Клиент с возможностями расширения |
| В зоне риска | `at_risk` | <50 | Клиент, проявляющий признаки оттока |
| Ушедший | `churned` | Н/Д | Больше не активен |
| Возвращаемый | `win_back` | Н/Д | Бывший клиент в процессе реактивации |
| Сторонник | `advocate` | ≥90 | Высокая удовлетворенность, дает рекомендации |

### 8.3 Оценка здоровья клиента

Здоровье клиента рассчитывается на основе нескольких факторов:

| Фактор | Вес | Метрика |
|-----|------|---------|
| Давность покупки | 25% | Дней с последнего заказа |
| Частота покупок | 20% | Количество заказов за период |
| Денежная ценность | 20% | Общая и средняя стоимость заказа |
| Вовлеченность | 15% | Открываемость писем, участие во встречах |
| Качество поддержки | 10% | Объем тикетов и скорость решения |
| Использование продукта | 10% | Метрики активного использования (если применимо) |

**Пороги здоровья:**

```javascript
if (health_score >= 90) status = 'advocate';
else if (health_score >= 70) status = 'active';
else if (health_score >= 50) status = 'growing';
else status = 'at_risk';
```

### 8.4 Сегментация клиентов

#### Автоматизированная сегментация

| Сегмент | Условие | Рекомендуемое действие |
|-----|------|---------|
| VIP | LTV > $100K | Премиальное обслуживание, кураторство руководством |
| Enterprise | Размер компании > 500 | Выделенный аккаунт-менеджер |
| Средний бизнес | Размер компании 50-500 | Регулярные проверки, масштабируемая поддержка |
| Стартап | Размер компании < 50 | Ресурсы самообслуживания, сообщество |
| Спящий | 90+ дней без активности | Маркетинг реактивации |

---

## 9. Интеграция с электронной почтой

### 9.1 Обзор

NocoBase предоставляет встроенный плагин интеграции электронной почты с поддержкой Gmail и Outlook. После синхронизации писем рабочие процессы могут автоматически запускать ИИ-анализ настроений и намерений в письмах, помогая отделу продаж быстро понимать отношение клиентов.

### 9.2 Синхронизация почты

**Поддерживаемые провайдеры:**
- Gmail (через OAuth 2.0)
- Outlook/Microsoft 365 (через OAuth 2.0)

**Поведение синхронизации:**
- Двусторонняя синхронизация отправленных и полученных писем.
- Автоматическая привязка писем к записям CRM (Лиды, Контакты, Сделки).
- Вложения сохраняются в файловой системе NocoBase.

### 9.3 Связь Почта-CRM (в разработке)
![design-2026-02-24-00-21-51](https://static-docs.nocobase.com/design-2026-02-24-00-21-51.png)

### 9.4 Шаблоны писем

Отдел продаж может использовать предустановленные шаблоны:

| Категория шаблона | Примеры |
|---------|------|
| Первое касание | Холодное письмо, Теплое знакомство, После мероприятия |
| Последующие шаги | После встречи, После КП, Напоминание при отсутствии ответа |
| КП | КП во вложении, Редакция КП, Истечение срока КП |
| Заказ | Подтверждение заказа, Уведомление об отгрузке, Подтверждение доставки |
| Успех клиента | Приветствие, Проверка статуса, Запрос отзыва |

---

## 10. Возможности с поддержкой ИИ

### 10.1 Команда ИИ-сотрудников

Система CRM интегрирует плагин NocoBase AI, используя следующих встроенных ИИ-сотрудников, настроенных для задач CRM:

| ID | Имя | Встроенная роль | Возможности расширения для CRM |
|----|------|---------|-------------|
| viz | Viz | Аналитик данных | Анализ данных продаж, прогнозирование воронки |
| dara | Dara | Эксперт по графикам | Визуализация данных, разработка отчетов, дизайн панелей |
| ellis | Ellis | Редактор | Составление черновиков ответов, резюме общения, деловая переписка |
| lexi | Lexi | Переводчик | Многоязычное общение с клиентами, перевод контента |
| orin | Orin | Организатор | Ежедневные приоритеты, предложения по следующим шагам, планирование |

### 10.2 Список задач ИИ

Возможности ИИ разделены на две независимые категории:

#### I. ИИ-сотрудники (запускаются через блоки интерфейса)

Пользователи взаимодействуют напрямую с ИИ через блоки «ИИ-сотрудник» во фронтенде для получения анализа и предложений.

| Сотрудник | Задача | Описание |
|------|------|------|
| Viz | Анализ данных продаж | Анализ трендов воронки и коэффициентов конверсии |
| Viz | Прогнозирование воронки | Прогноз дохода на основе взвешенной воронки |
| Dara | Генерация графиков | Создание графиков для отчетов по продажам |
| Dara | Дизайн панелей | Проектирование макетов информационных панелей |
| Ellis | Черновики ответов | Генерация профессиональных ответов на письма |
| Ellis | Резюме общения | Краткое содержание цепочек писем |
| Ellis | Деловая переписка | Приглашения на встречи, фоллоу-апы, благодарности и т.д. |
| Orin | Ежедневные приоритеты | Генерация списка приоритетных задач на день |
| Orin | Следующий лучший шаг | Рекомендация следующих действий для каждой сделки |
| Lexi | Перевод контента | Перевод маркетинговых материалов, предложений и писем |

#### II. Узлы LLM в рабочих процессах (автоматическое фоновое выполнение)

Узлы LLM, встроенные в рабочие процессы, запускаются автоматически событиями коллекций, событиями действий или запланированными задачами, независимо от ИИ-сотрудников.

| Задача | Метод запуска | Описание | Целевое поле |
|------|---------|------|---------|
| Оценка лидов | Событие коллекции (Создание/Обновление) | Оценка качества лида | ai_score, ai_convert_prob |
| Прогноз выигрыша | Событие коллекции (Смена этапа) | Прогноз вероятности успеха сделки | ai_win_probability, ai_risk_factors |

> **Примечание**: Узлы LLM в рабочих процессах используют промпты и Schema-вывод для структурированного JSON, который парсится и записывается в бизнес-поля данных без вмешательства пользователя.

### 10.3 Поля ИИ в базе данных

| Таблица | Поле ИИ | Описание |
|----|--------|------|
| nb_crm_leads | ai_score | Оценка ИИ (0-100) |
| | ai_convert_prob | Вероятность конверсии |
| | ai_best_contact_time | Лучшее время для контакта |
| | ai_tags | Теги ИИ (JSONB) |
| | ai_scored_at | Время оценки |
| | ai_next_best_action | Предложение по следующему шагу |
| | ai_nba_generated_at | Время генерации предложения |
| nb_crm_opportunities | ai_win_probability | Прогноз вероятности выигрыша |
| | ai_analyzed_at | Время анализа |
| | ai_confidence | Уверенность прогноза |
| | ai_trend | Тренд: up/stable/down |
| | ai_risk_factors | Факторы риска (JSONB) |
| | ai_recommendations | Список рекомендаций (JSONB) |
| | ai_predicted_close | Прогнозируемая дата закрытия |
| | ai_next_best_action | Предложение по следующему шагу |
| | ai_nba_generated_at | Время генерации предложения |
| nb_crm_customers | ai_health_score | Оценка здоровья (0-100) |
| | ai_health_grade | Грейд здоровья: A/B/C/D |
| | ai_churn_risk | Риск оттока (0-100%) |
| | ai_churn_risk_level | Уровень риска оттока: low/medium/high |
| | ai_health_dimensions | Оценки по измерениям (JSONB) |
| | ai_recommendations | Список рекомендаций (JSONB) |
| | ai_health_assessed_at | Время оценки здоровья |
| | ai_tags | Теги ИИ (JSONB) |
| | ai_best_contact_time | Лучшее время для контакта |
| | ai_next_best_action | Предложение по следующему шагу |
| | ai_nba_generated_at | Время генерации предложения |

---

## 11. Движок рабочих процессов

### 11.1 Реализованные рабочие процессы

| Название процесса | Тип триггера | Статус | Описание |
|-----------|---------|------|------|
| Leads Created | Событие коллекции | Включен | Запускается при создании лида |
| CRM Overall Analytics | Событие ИИ-сотрудника | Включен | Общий анализ данных CRM |
| Lead Conversion | Событие после действия | Включен | Процесс конвертации лида |
| Lead Assignment | Событие коллекции | Включен | Автоматическое распределение лидов |
| Lead Scoring | Событие коллекции | Выключен | Оценка лидов (в разработке) |
| Follow-up Reminder | Запланированная задача | Выключен | Напоминания о фоллоу-апах (в разработке) |

### 11.2 Планируемые рабочие процессы

| Процесс | Тип триггера | Описание |
|-------|---------|------|
| Продвижение этапа сделки | Событие коллекции | Обновление вероятности выигрыша и запись времени при смене этапа |
| Обнаружение стагнации сделки | Запланированная задача | Выявление неактивных сделок и отправка напоминаний |
| Утверждение КП | Событие после действия | Многоуровневый процесс утверждения |
| Генерация заказа | Событие после действия | Автоматическое создание заказа после принятия КП |

---

## 12. Меню и дизайн интерфейса

### 12.1 Структура администрирования

| Меню | Тип | Описание |
|------|------|------|
| **Dashboards** | Группа | Панели мониторинга |
| - Dashboard | Страница | Панель по умолчанию |
| - SalesManager | Страница | Вид менеджера по продажам |
| - SalesRep | Страница | Вид торгового представителя |
| - Executive | Страница | Вид руководителя |
| **Leads** | Страница | Управление лидами |
| **Customers** | Страница | Управление клиентами |
| **Opportunities** | Страница | Управление сделками |
| - Table | Вкладка | Список сделок |
| **Products** | Страница | Управление продуктами |
| - Categories | Вкладка | Категории продуктов |
| **Orders** | Страница | Управление заказами |
| **Settings** | Группа | Настройки |
| - Stage Settings | Страница | Конфигурация этапов сделок |
| - Exchange Rate | Страница | Настройки курсов валют |
| - Activity | Страница | Записи активностей |
| - Emails | Страница | Управление почтой |
| - Contacts | Страница | Управление контактами |
| - Data Analysis | Страница | Анализ данных |

### 12.2 Виды панелей мониторинга

#### Вид менеджера по продажам

| Компонент | Тип | Данные |
|-----|------|------|
| Стоимость воронки | Карточка KPI | Общая сумма воронки по этапам |
| Таблица лидеров команды | Таблица | Рейтинг эффективности представителей |
| Оповещения о рисках | Список | Сделки с высоким риском |
| Тренд винрейта | Линейный график | Ежемесячный процент выигрышей |
| Застойные сделки | Список | Сделки, требующие внимания |

#### Вид торгового представителя

| Компонент | Тип | Данные |
|-----|------|------|
| Прогресс моей квоты | Индикатор | Факт vs План за месяц |
| Ожидающие сделки | Карточка KPI | Количество моих сделок в работе |
| Закрытие на этой неделе | Список | Сделки, которые должны закрыться скоро |
| Просроченные активности | Оповещение | Истекшие задачи |
| Быстрые действия | Кнопки | Лог активности, Создать сделку |

#### Вид руководителя

| Компонент | Тип | Данные |
|-----|------|------|
| Годовой доход | Карточка KPI | Доход с начала года |
| Стоимость воронки | Карточка KPI | Общая сумма воронки |
| Винрейт | Карточка KPI | Общий процент выигрышей |
| Здоровье клиентов | Распределение | Распределение оценок здоровья |
| Прогноз | График | Ежемесячный прогноз дохода |


---

*Версия документа: v2.0 | Обновлено: 2026-02-06*