Версия: 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 ← Исполнитель сценариев
Загружает 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
Универсальный 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"})
Вычисляет сегмент по правилам:
engine = SegmentEngine(segment_rules)
segment = engine.compute(client) # → "vip" | "medium" | "small" | "cold"
Управляет переходами воронки:
engine = FunnelEngine(funnel_config)
# Проверить можно ли перейти
can_move = engine.can_transition("new", "contacted") # → True
# Выполнить переход (+ автоматизации)
engine.transition(client_id, "new", "contacted")
Исполняет сценарии:
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
Старый код: projects/org/mcrm/
Новый код: system/apps/mcrm/
Версия: 4.0.0