Версия: 1.0.0
Статус: approved
Дата: 2025-12-12
Единая терминология для всех документов платформы. Заменяет устаревшие термины.
┌─────────────────────────────────────────────────────────────┐
│ ВНЕШНИЙ МИР │
│ OZON, WB, Почта РФ, 1C, Telegram, S3... │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ КОННЕКТОРЫ │
│ library/connectors/ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ ФУНКЦИИ │
│ library/functions/ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ МОДУЛИ │
│ system/modules/ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ КОМПОНЕНТЫ │
│ components/ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ РЕШЕНИЯ │
│ projects/ │
└─────────────────────────────────────────────────────────────┘
Что: Адаптер для связи с внешним сервисом.
Направление: Платформа → Внешний мир
Характеристики:
- Работает с ВНЕШНИМ API/сервисом
- Содержит credentials (ключи, токены)
- Имеет QUIRKS (особенности внешнего API)
- Может сломаться при изменении внешнего сервиса
- Требует тестирования на реальных данных
Расположение: library/connectors/
Примеры:
| Коннектор | Тип | Внешний сервис |
|-----------|-----|----------------|
| ozon | api | OZON Seller API |
| telegram | api | Telegram Bot API |
| pochta | api | Почта России API |
| 1c | api | 1C через OData |
| postgres | data | PostgreSQL |
| nocodb | data | NocoDB |
| printer | device | Термопринтер |
Структура коннектора:
library/connectors/api/ozon/
├── client.py ← Код клиента
├── SPEC.md ← Спецификация API
├── QUIRKS.md ← Особенности (КРИТИЧНО!)
├── STATUS.md ← Статус тестирования
└── tests/ ← Тесты
QUIRKS.md — обязательный файл:
## ⚠️ Телефон только в get
**Проблема:** /v3/posting/fbs/list возвращает пустой phone
**Решение:** Вызывать /v3/posting/fbs/get для каждого заказа
**Дата обнаружения:** 2025-12-12
Что: Атомарная внутренняя операция без внешних зависимостей.
Направление: Только внутри платформы
Характеристики:
- Чистая функция (вход → выход)
- НЕ знает про внешний мир
- НЕ имеет побочных эффектов
- Легко тестируется (unit tests)
- Переиспользуется везде
Расположение: library/functions/
Категории:
| Категория | Назначение | Примеры |
|-----------|------------|---------|
| validators/ | Валидация данных | phone, email, inn, address |
| formatters/ | Форматирование | price, date, phone |
| parsers/ | Парсинг данных | csv, excel, xml, json |
| calculators/ | Расчёты | price, weight, delivery |
| generators/ | Генерация | barcode, sku, tracking |
Пример:
# library/functions/validators/phone.py
def validate_phone(phone: str) -> bool:
"""Валидация российского телефона"""
import re
pattern = r'^(\+7|8)?[\s\-]?\(?\d{3}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}$'
return bool(re.match(pattern, phone))
def normalize_phone(phone: str) -> str:
"""Нормализация телефона в формат 79XXXXXXXXX"""
digits = re.sub(r'\D', '', phone)
if digits.startswith('8'):
digits = '7' + digits[1:]
return digits
Что: Комбинация функций и коннекторов для реализации бизнес-логики.
Направление: Внутри платформы, использует коннекторы
Характеристики:
- Использует функции + коннекторы
- Реализует бизнес-логику
- Может быть сложным
- Переиспользуется между компонентами
Расположение: system/modules/
Категории:
| Категория | Назначение |
|-----------|------------|
| orders/ | Работа с заказами |
| products/ | Работа с товарами |
| delivery/ | Доставка |
| notifications/ | Уведомления |
| sync/ | Синхронизация данных |
Пример:
# system/modules/orders/exporter.py
from system.connectors.marketplaces.ozon import OzonConnector
from system.functions.formatters.address import format_address
from system.functions.validators.phone import validate_phone
class OrderExporter:
"""Экспорт заказов из маркетплейса"""
def __init__(self, connector: OzonConnector):
self.connector = connector
def export_for_delivery(self, orders: list) -> list:
"""Подготовить заказы для службы доставки"""
result = []
for order in orders:
if not validate_phone(order.phone):
continue
result.append({
'address': format_address(order.address),
'phone': normalize_phone(order.phone),
# ...
})
return result
Что: Готовый набор модулей для типовой задачи. Шаблон решения.
Направление: Внутри платформы
Характеристики:
- Включает набор модулей
- Имеет конфигурацию по умолчанию
- Готов к использованию "из коробки"
- Создаёт решение за минуты
Расположение: components/
Примеры:
| Компонент | Назначение |
|-----------|------------|
| marketplace-seller | Продавец на маркетплейсе |
| delivery-manager | Управление доставкой |
| price-monitor | Мониторинг цен |
| inventory-sync | Синхронизация остатков |
Структура компонента:
components/marketplace-seller/
├── README.md ← Описание
├── config.yaml ← Конфигурация по умолчанию
├── includes.yaml ← Список включённых модулей
└── templates/ ← Шаблоны для кастомизации
Что: Конкретный проект для клиента/бизнеса.
Направление: Конечный продукт
Характеристики:
- Основано на компонентах
- Имеет конкретные credentials
- Кастомизировано под бизнес
- Развёрнуто и работает
Расположение: projects/
Примеры:
| Решение | Описание |
|---------|----------|
| pirotehnika | Продажа фейерверков (OZON + Почта РФ) |
| lideravto | Автозапчасти |
| mcrm | Клиентская CRM |
| Термин | Папка | Направление | Зависимости | Статус |
|---|---|---|---|---|
| Коннектор | library/connectors/ | → наружу | внешние API | QUIRKS |
| Функция | library/functions/ | внутри | нет | tested |
| Модуль | system/modules/ | внутри | функции + коннекторы | tested |
| Компонент | components/ | внутри | модули | template |
| Решение | projects/ | конечный | компоненты | deployed |
| Было | Стало | Причина замены |
|---|---|---|
| Элемент (element) | Функция или Коннектор | Путаница: внешнее/внутреннее |
| Атом | Функция | Слишком абстрактно |
| Молекула | Модуль | Слишком абстрактно |
| Конструктор | Компонент | Путается с constructor в ООП |
library/connectors/{тип}/{имя}/
Типы: api (внешние API), data (БД), device (устройства)
library/functions/{тип}/{имя}.py
Типы: validators, formatters, parsers, calculators, generators
system/modules/{домен}/{имя}.py
Домены: orders, products, delivery, notifications, sync
components/{kebab-case-имя}/
projects/{имя}/
| Статус | Маркер | Описание |
|---|---|---|
| draft | ⚠️ | Написано, не тестировалось |
| tested | ✅ | Протестировано на реальных данных |
| broken | ❌ | Известные ошибки, не использовать |
| deprecated | 🚫 | Устарело, есть замена |
Статус указывается в STATUS.md каждого коннектора/модуля.
КОННЕКТОР ←───────────────────────┐
│ │ использует
▼ │
ФУНКЦИЯ ──────────────────────────┤
│ │
▼ │
МОДУЛЬ ───────────────────────────┤
│ │
▼ │
КОМПОНЕНТ ────────────────────────┘
│
▼
РЕШЕНИЕ
# Было → Стало
system/connectors/ → library/connectors/api/ + library/connectors/data/
system/functions/ → library/functions/
system/adapters/ → library/functions/parsers/
system/stores/ → library/connectors/data/
system/drivers/ → library/connectors/device/
library/
├── connectors/
│ ├── api/ ← внешние API (ozon, telegram, 1c)
│ ├── data/ ← хранилища (postgres, nocodb, redis)
│ └── device/ ← устройства (printer, scanner)
└── functions/
├── parsers/ ← xlsx, csv, pdf, json, xml
├── formatters/ ← money, date, text
└── validators/ ← phone, email, inn
Версия: 2.0.0