system/apps/mcrm/CLAUDE.md

mCRM — Mobile CRM Application

Версия: 4.0.0
Тип: application (приложение)
Статус: development


Что это

Универсальное CRM-приложение. Всё бизнес-специфичное — в конфигурациях (solutions/).


Принцип

┌─────────────────────────────────────────────────────────────────┐
│                        mCRM (этот код)                          │
│                                                                 │
│  • FastAPI веб-приложение                                       │
│  • Универсальные CRUD операции                                  │
│  • Загрузчик YAML конфигураций                                  │
│  • Движок сценариев                                             │
│  • Интеграции (NocoDB, WhatsApp, SMS)                          │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
                              ▲
                              │ загружает конфиг
                              │
┌─────────────────────────────────────────────────────────────────┐
│                    Solution (solutions/piro-crm/)               │
│                                                                 │
│  • entities/*.yaml — схемы сущностей                           │
│  • funnel.yaml — воронка продаж                                │
│  • segments.yaml — правила сегментации                         │
│  • scenarios/*.yaml — сценарии для роботов                     │
│  • templates/ — шаблоны сообщений                              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Структура

system/apps/mcrm/
├── CLAUDE.md               Этот файл
├── run.sh                  Запуск

├── app/
   ├── main.py             FastAPI приложение
   ├── config.py           Конфигурация
   ├── config_loader.py    Загрузчик YAML из solution
   
   ├── routers/            API endpoints
      ├── clients.py      CRUD клиентов (универсальный)
      ├── tasks.py        Задачи
      ├── dashboard.py    Dashboard
      └── scenarios.py    Запуск сценариев
   
   ├── services/           Бизнес-логика
      ├── nocodb.py       Клиент NocoDB
      ├── entity_manager.py   Работа с сущностями по схеме
      ├── segment_engine.py   Вычисление сегментов
      ├── funnel_engine.py    Логика воронки
      └── messaging.py    WhatsApp/SMS/Email
   
   ├── templates/          Jinja2 шаблоны UI (generic)
   └── static/             CSS, JS

└── robots/                 Фреймворк роботов
    ├── base_robot.py       Базовый класс
    └── scenario_runner.py  Исполнитель сценариев

Ключевые компоненты

ConfigLoader

Загружает YAML из папки solution:

loader = ConfigLoader(solution_path="solutions/piro-crm")
entities = loader.load_entities()     # entities/*.yaml
funnel = loader.load_funnel()         # funnel.yaml
segments = loader.load_segments()     # segments.yaml
scenarios = loader.load_scenarios()   # scenarios/*.yaml

EntityManager

Универсальный CRUD по схеме entity:

manager = EntityManager(entity_schema=entities["client"])

# Создать клиента (валидация по схеме)
client = manager.create({"phone": "+79111234567", "name": "Иван"})

# Получить с фильтрами
clients = manager.list(filters={"segment": "vip"})

# Обновить
manager.update(client_id, {"funnel_stage": "interested"})

SegmentEngine

Вычисляет сегмент по правилам:

engine = SegmentEngine(segment_rules)
segment = engine.compute(client)  # → "vip" | "medium" | "small" | "cold"

FunnelEngine

Управляет переходами воронки:

engine = FunnelEngine(funnel_config)

# Проверить можно ли перейти
can_move = engine.can_transition("new", "contacted")  # → True

# Выполнить переход (+ автоматизации)
engine.transition(client_id, "new", "contacted")

ScenarioRunner

Исполняет сценарии:

runner = ScenarioRunner(scenarios["cold_call"])
result = runner.run(client_id)  # Интерактивное выполнение

Переменные окружения

MCRM_SOLUTION=piro-crm          # Какое решение загрузить
MCRM_PORT=8091                  # Порт API
NOCODB_URL=https://data.0kt.ru:8443
NOCODB_TOKEN=...

Запуск

cd system/apps/mcrm
MCRM_SOLUTION=piro-crm ./run.sh

# URL
http://localhost:8091/         # Dashboard
http://localhost:8091/docs     # API Docs

Добавление нового решения

Для нового бизнеса (например, автозапчасти):

mkdir -p solutions/auto-crm/{entities,scenarios,templates}

# Скопировать структуру из piro-crm
cp solutions/piro-crm/config.yaml solutions/auto-crm/
cp solutions/piro-crm/funnel.yaml solutions/auto-crm/

# Изменить конфиги под автозапчасти
# Код mCRM НЕ ТРОГАЕМ!

# Запустить с новым решением
MCRM_SOLUTION=auto-crm ./run.sh

Миграция из старого mCRM

Старый код: projects/org/mcrm/
Новый код: system/apps/mcrm/

  1. Перенести app/*.py в system/apps/mcrm/app/
  2. Добавить config_loader.py
  3. Рефакторинг: убрать хардкод, читать из конфигов

Версия: 4.0.0