Версия: 1.0
Дата: 2026-03-19
Статус: active
Ранее архитектура была разбросана по трём несвязанным "платформам":
- Воркспейс (как Claude работает с командой)
- Технический стек (чем строим приложения)
- Бизнес-продукты (что продаём клиентам)
Это привело к конфликту именования уровней (L0–L6 использовались одновременно в трёх смыслах), противоречию стеков (Stack α vs Stack β без объяснения), разрыву между архетипами A1–A9 и техническими слоями.
Данный документ устанавливает единую систему обозначений через разные буквенные префиксы:
| Префикс | Система | Документ-источник |
|---|---|---|
| E | Экосистема (рабочее пространство) | architect/theory/ECOSYSTEM.md |
| T | Технический стек | architect/standards/PLATFORM2_ARCHITECTURE.md |
| D / R | Design-time / Runtime | этот документ |
| M | Абстракция конфигурации | architect/standards/PLATFORM2_LAYERS.md |
| V | Визуальный дизайн | architect/standards/1-structure/structure-design-layers.md |
| A | Архетипы автоматизации | architect/standards/AUTOMATION_TYPES.md |
| B | Бизнес-уровни | этот документ |
Отвечает на вопрос: как устроено наше рабочее пространство?
Это не про продукт и не про технологии. Это про то, как МЫ (команда + Claude) создаём системы.
E0 ФИЛОСОФИЯ Зачем мы это делаем? Принципы, ценности
E1 МЕТОДОЛОГИЯ Как думать? Теория (Меркаба, 9 вопросов)
E2 СТАНДАРТЫ Как делать? Правила, паттерны
E3 ПЛАТФОРМА Чем делать? Движки, API, CLI
E4 БЛОКИ Из чего? Коннекторы, функции, модули
E5 КОМПОНЕНТЫ Как собрать? Готовые наборы
E6 РЕШЕНИЯ Что получается? Проекты клиентов
$WORKSPACE/
├── architect/ ← E0–E2: Разум (философия, методология, стандарты)
│ ├── theory/ ← E0–E1: LOCKED
│ ├── concept/ ← E1: Концепции платформы
│ └── standards/ ← E2: Правила
├── system/ ← E3–E4: Платформа
│ ├── core/ ← E3: Движок
│ ├── agents/ ← E3: AI-агенты
│ └── modules/ ← E4: Модули
├── library/ ← E4–E5: Библиотека компонентов
├── projects/ ← E6: Проекты клиентов
└── infra/ ← Инфраструктура воркспейса
Принцип: E-уровни описывают людей и Claude. T-уровни — технологии. Не смешивать.
Полный документ: architect/theory/ECOSYSTEM.md
Отвечает на вопрос: из каких компонентов состоит приложение?
T0 ИНФРАСТРУКТУРА Серверы, Docker, PostgreSQL, S3, Nginx
T1 ДАННЫЕ ORM, миграции, схема БД, RLS
T2 БИЗНЕС-ЛОГИКА FastAPI сервисы, state machines, guards
T3 API REST, GraphQL, WebSocket, PostgREST
T4 КЛИЕНТ UI фреймворк, компоненты, SDUI
Существуют два варианта технического стека. Выбор определяется типом проекта.
ADR: decisions/002-platform-architecture.md
T4 Jinja2 + HTMX ← HTML рендер на сервере + partial updates
T3 FastAPI routes ← REST + HTML endpoints
T2 FastAPI services ← бизнес-логика Python
T1 SQLAlchemy + Alembic ← ORM + миграции
T0 PostgreSQL + Nginx ← БД + entry point
Когда использовать Stack α:
- Проект с одним клиентом (не SaaS)
- Команда Python без фронтендеров
- Быстрый MVP за 1–2 недели
- Нет сложной интерактивности
- Нет требований к real-time
Примеры: внутренние инструменты, боты с веб-интерфейсом, простые порталы.
Документ: PLATFORM2_LAYERS.md
T4 Refine (React) ← Data-driven UI, CRUD автоматически
T3 PostgREST + FastAPI ← Auto REST из схемы + кастомная логика
T2 FastAPI + Celery ← бизнес-логика + фоновые задачи
T1 Supabase core ← PostgreSQL + GoTrue + RLS + Realtime + Storage
T0 Docker compose + Nginx ← оркестрация сервисов
Состав Stack β (детально):
| Компонент | Роль |
|---|---|
| PostgreSQL | Основная БД, RLS, multi-tenancy по tenant_id |
| PostgREST | Auto REST API из схемы БД (без кода) |
| GoTrue | Аутентификация: JWT, OAuth, Magic Link |
| Realtime | WebSocket подписки на изменения таблиц |
| Storage | Файлы (S3-совместимо) |
| FastAPI | Кастомная бизнес-логика, state machines |
| Celery + Redis | Фоновые задачи, расписание, очереди |
| Refine | React UI: CRUD, дашборды, формы |
| PostHog | Feature flags per tenant + аналитика |
| LiteLLM | AI прокси (Claude, другие модели) |
| Nginx | Внешний entry point, SSL, роутинг доменов |
Когда использовать Stack β:
- Мультитенантный SaaS
- Разные тарифы/функции для разных клиентов
- Нужен real-time (WebSocket)
- Команда умеет в React
- Конфигурируемый UI без деплоя (SDUI)
Примеры: вертикальные SaaS-продукты, клиентские порталы, операционные платформы.
| Тип | FastAPI | Supabase | Refine | Celery | Multi-tenant | Профили |
|---|---|---|---|---|---|---|
| Worker | ✅ | опц. | ❌ | ✅ | ❌ | ❌ |
| App | ✅ | ✅ | ✅ | опц. | ❌ | опц. |
| SaaS | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Worker — бот, интеграция, парсер. Нет UI. Примеры: синхронизация 1С↔OZON, Telegram-бот.
App — корпоративный инструмент, один тенант.
SaaS — мультитенантный продукт для продажи клиентам.
Отвечает на вопрос: что создаётся при разработке и что работает в рантайме?
Разделение критично: D-уровни создают схемы, R-уровни их исполняют.
D1 БИБЛИОТЕКА ПОЛЕЙ Field Library: типы полей и их параметры
D2 СТРОИТЕЛИ СХЕМ 13 классов конфигурации (EntityClass, FormClass...)
D3 КОНФИГУРАТОР YAML профили: объявление поведения системы
D1 — Библиотека полей (Field Library)
Атомарные типы данных, из которых строятся схемы:
# Примитивные
field_types:
- string, text, integer, decimal, boolean, date, datetime, time
# Ссылочные
- foreign_key # ссылка на другую сущность
- taxonomy_ref # ссылка на справочник
- enum # фиксированный список значений
# Специальные
- money # decimal + валюта
- phone # строка + форматирование
- file_ref # ссылка на файл в Storage
- geo_point # широта + долгота
- json_blob # произвольная структура
D2 — Классы конфигурации
13 классов, каждый конфигурирует конкретный компонент стека:
EntityClass → PostgreSQL: CREATE TABLE, колонки, индексы
TaxonomyClass → PostgreSQL: справочные таблицы (brands, statuses)
EnumClass → PostgreSQL: перечисления (ENUM type)
──────────────────────────────────────────────────────────
PipelineClass → FastAPI + Refine: state machine, kanban, переходы
──────────────────────────────────────────────────────────
RoleClass → GoTrue + PostgreSQL: роли в БД, JWT claims
PermissionClass → FastAPI: guard декораторы (@require_permission)
VisibilityClass → PostgreSQL RLS: POLICY per role per table
──────────────────────────────────────────────────────────
ValidationClass → FastAPI + Refine: guard при переходах стадий
AutomationClass → Celery + FastAPI: tasks, beat schedule, event triggers
NotifyClass → Celery + elements: notification tasks, шаблоны
──────────────────────────────────────────────────────────
FormClass → БД ui_config: конфиг формы (поля, порядок, секции)
LabelClass → БД ui_config: терминология (i18n, нишевые названия)
ReportClass → БД ui_config + FastAPI: виджеты дашборда, /analytics
──────────────────────────────────────────────────────────
FeatureClass → PostHog: feature flags per tenant
Граф зависимостей классов (порядок применения):
1. EntityClass + TaxonomyClass + EnumClass ← ФУНДАМЕНТ: схема данных
2. PipelineClass ← зависит от EntityClass
3. RoleClass ← абстрактный, не зависит
4. PermissionClass + VisibilityClass ← зависит от RoleClass + EntityClass
5. ValidationClass + AutomationClass ← зависит от EntityClass + PipelineClass
6. FormClass + LabelClass + ReportClass ← зависит от EntityClass + RoleClass → пишет в БД
7. NotifyClass ← зависит от AutomationClass + RoleClass
8. FeatureClass ← управляет всеми выше
D3 — Конфигуратор (YAML профили)
Профиль — декларация поведения системы на языке бизнеса. Компилируется в конфиги T-уровней.
# profiles/automotive.yaml
name: automotive
version: 1.0
type: industry
extends: base-crm
data: # → EntityClass, TaxonomyClass
access: # → RoleClass, PermissionClass, VisibilityClass
process: # → PipelineClass, ValidationClass, AutomationClass
ui: # → FormClass, LabelClass, ReportClass → в БД
features: # → FeatureClass → PostHog
R0 ДВИЖОК СХЕМ загружает EntityClass → маршруты, RLS, индексы
R1 ДВИЖОК ФОРМ читает FormClass → рендерит UI без деплоя (SDUI)
R2 ДВИЖОК ЛОГИКИ исполняет ValidationClass + AutomationClass
R3 ДВИЖОК ДАННЫХ PostgREST + RLS → изолированные запросы per tenant
R4 ДВИЖОК ОТЧЁТОВ читает ReportClass → генерирует виджеты, PDF
Ключевой принцип D→R:
D3 (YAML профиль)
↓ profile.compile()
┌──────────────────────────────────────────────┐
│ migrations/001_entities.sql → R0 (схема) │
│ migrations/002_rls.sql → R3 (данные) │
│ fastapi/generated/routes.py → R2 (логика) │
│ celery/generated/tasks.py → R2 (авто) │
│ db_seed/ui_config_forms.json → R1 (формы) │
│ db_seed/ui_config_labels.json → R1 (лейблы) │
│ posthog/flags.json → R4 (флаги) │
└──────────────────────────────────────────────┘
Аналогия: Профиль = Terraform для бизнес-приложений. Описываешь ЧТО, компилятор генерирует КАК.
ЧТО ГДЕ ПОЧЕМУ
────────────────────────────────────────────────────────────────────
docker-compose, .env, nginx файлы / git секреты, деплой
Структура БД (CREATE TABLE) SQL миграции нужна миграция
FastAPI маршруты и логика Python / git требует деплой
Celery задачи Python / git требует деплой
────────────────────────────────────────────────────────────────────
Конфигурация форм БД ui_config меняется без деплоя
Лейблы / терминология БД ui_config per-tenant
Порядок полей, навигация БД ui_config per-tenant
Отчёты / виджеты дашборда БД ui_config per-tenant
────────────────────────────────────────────────────────────────────
Feature flags PostHog runtime вкл/выкл
Правило:
- Меняется при смене структуры → файлы (git → деплой → миграция)
- Меняется при смене настроек → БД ui_config (без деплоя)
- Меняется per-tenant в runtime → PostHog
Отвечает на вопрос: на каком уровне абстракции находится каждый артефакт?
M0 МЕТА-ТИПЫ Что может быть типом поля (Field Library)
M1 СХЕМЫ EntityClass, TaxonomyClass — структура данных
M2 КОНФИГУРАЦИЯ FormClass, LabelClass, FeatureClass — поведение
M3 ДАННЫЕ Записи в таблицах — то, с чем работает пользователь
M0 Тип поля: taxonomy_ref (из Field Library)
↓
M1 EntityClass Deal → field "truck_brand: taxonomy_ref → brands"
↓
M2 FormClass Deal → section "Грузовик" → show truck_brand; LabelClass → "Марка"
↓
M3 deals.truck_brand = "Volvo" (запись пользователя)
M0–M1 = D1–D2 (Field Library + классы схем)
M2 = часть D2 (FormClass, LabelClass, FeatureClass) + D3 профили
M3 = данные в R3 (runtime)
M-уровни нужны для разговора об уровне абстракции артефакта.
D/R-уровни нужны для разговора о фазе жизненного цикла.
Отвечает на вопрос: как платформа настраивается под отрасль и клиента?
ПЛАТФОРМА (ядро — неизменно)
└── base-crm / base-erp / base-fsm ← БАЗОВЫЙ (обязательный)
└── automotive / metrologia ← ОТРАСЛЕВОЙ
└── ru-market ← РЕГИОНАЛЬНЫЙ (опционально)
└── 1c-integration ← ТЕМАТИЧЕСКИЙ (опционально)
└── ТЕНАНТ (клиент)
Тенант объявляет стек в project.yaml:
profiles:
- base-crm # обязательно
- metrologia # отрасль
- ru-market # регион
| Тип | Примеры | Содержит |
|---|---|---|
| Base | base-crm, base-erp, base-fsm |
Базовые сущности, роли, схема |
| Отраслевой | automotive, metrologia, fire-safety |
Терминология, поля, воронки |
| Региональный | ru-market, kz-market |
Валюта, адреса, форматы, налоги |
| Тематический | 1c-integration, ozon-sync |
Интеграции, доп. функции |
Каждое поле профиля имеет атрибут mutability_down — что может сделать нижестоящий слой:
| Значение | Что может сделать нижестоящий |
|---|---|
extend |
Добавить новые значения / поля (НЕ удалить существующие) |
override |
Изменить значение полностью |
lock |
НЕ может изменить ничего |
Правило сужения: профиль может только сужать права вниз:
extend → можно оставить extend, override или lock
override → можно оставить override или lock
lock → всегда lock, нельзя открыть ниже
Пример:
# profiles/metrologia.yaml
data:
taxonomy:
- name: device_types # типы приборов
values: [Манометр, Термометр, Весы]
mutability_down: extend # тенант может добавить свои типы
entities:
- name: calibration_record
fields:
- name: gost_number
type: string
mutability_down: lock # тенант НЕ может убрать поле ГОСТ
tenant_max_grant — потолок прав, которые тенант может выдатьlocked: [admin]) тенант не изменяет[base-crm] + [metrologia] + [ru-market]
↓ profile.compile()
↓
migrations/ ← SQL для PostgreSQL (EntityClass, RLS)
fastapi/ ← Python routes + guards + pipelines
celery/ ← tasks + schedule
db_seed/ ← ui_config (формы, лейблы, навигация) → БД
posthog/ ← feature flags → PostHog
Полный стандарт профилей: PLATFORM2_LAYERS.md
Отвечает на вопрос: как выглядит интерфейс продукта?
V1 LAYOUT Расположение блоков, сетка, структура страниц
V2 STYLES Визуал компонентов (кнопки, карточки, таблицы)
V3 THEME Дизайн-токены: цвета, шрифты, отступы, радиусы
V4 BRANDING Айдентика: логотип, название, favicon, шрифты клиента
V1 — Layout (Инфодизайн)
# layout/shell.yaml
shell:
header:
height: 56px
position: fixed
elements: [logo, search, notifications, user]
sidebar:
width: 240px
collapsed_width: 64px
main:
padding: 24px
# layout/pages/list.yaml, form.yaml, dashboard.yaml...
V2 — Styles (Компоненты)
Внешний вид buttons, cards, forms, tables, badges, modals.
# styles/buttons.yaml
buttons:
base:
border_radius: "{radius.md}"
font_weight: 500
variants:
primary:
background: "{color.primary}"
danger:
background: "{color.error}"
V3 — Theme (Токены)
# theme/colors.yaml
colors:
primary: "#FF6B00"
background: "#FFFFFF"
text: "#212121"
success: "#4CAF50"
error: "#F44336"
Компилируются в CSS-переменные:
:root {
--color-primary: #FF6B00;
--font-family: 'Inter', sans-serif;
--space-md: 16px;
--radius-md: 8px;
}
V4 — Branding (Айдентика)
# branding/branding.yaml
branding:
name: "МетроCRM"
logo:
light: ./assets/logo.svg
theme_overrides:
primary: "#1565C0"
УРОВЕНЬ LAYOUT STYLES THEME BRANDING
────────────────────────────────────────────────────────────────────
ПЛАТФОРМА базовый shell все компон. серые дефолты placeholder
ПРОДУКТ CRM dashboard kanban/badge цвета отрасли лого типа
КЛИЕНТ (редко) (редко) accent-цвет лого + favicon
Загрузка с последовательным переопределением:
design = merge(load("platform/design/")) # V1–V4 базовые
design = merge(design, load("product/design/")) # V1–V4 продукта
design = merge(design, load("tenant/design/")) # V1–V4 клиента
Полный стандарт: 1-structure/structure-design-layers.md
Отвечает на вопрос: какие бизнес-задачи автоматизирует платформа и как они ложатся на T-уровни?
| # | Архетип | Суть | Тип ПО | Универсальный? |
|---|---|---|---|---|
| A1 | Учёт объектов | Реестр + история + сроки | Asset Management | ✅ |
| A2 | Диспетчеризация | Кто куда когда | Field Service | ✅ |
| A3 | Выездные работы | Мобайл + фото + чеклист | Mobile Workforce | ✅ |
| A4 | Регуляторные журналы | Государство требует форму | Compliance / EHS | ⚠️ нишевый |
| A5 | Расходные материалы | Учёт + нормы + потери | Inventory | ⚠️ нишевый |
| A6 | Финансы | Счета + долги + лимиты | Billing / CRM | ✅ |
| A7 | Зарплата от результата | ЗП по выработке | Payroll | ✅ |
| A8 | ТО и обслуживание | Не пропустить ТО | CMMS | ✅ |
| A9 | Отчётность | Автогенерация документов | Reporting / BI | ✅ |
| Архетип | EntityClass | PipelineClass | AutomationClass | FormClass | ReportClass | T-компонент |
|---|---|---|---|---|---|---|
| A1 Учёт | ✅ Object + Events | ❌ | ✅ напоминания по срокам | ✅ карточка | ✅ история | PostgreSQL + R0 |
| A2 Диспетч. | ✅ Task + Resource | ✅ статусы | ✅ назначение | ✅ календарь | ✅ загрузка | R2 + R1 |
| A3 Выезд | ✅ FieldReport | ✅ чеклист | ✅ фото + геометка | ✅ мобайл форма | ✅ акт | R1 + Storage |
| A4 Регуляторный | ✅ Journal + Doc | ❌ | ✅ срок предупреждения | ✅ шаблон документа | ✅ PDF export | R4 + R1 |
| A5 Расходники | ✅ Material + Stock | ❌ | ✅ точка заказа | ✅ списание | ✅ остатки | R3 + R2 |
| A6 Финансы | ✅ Invoice + Payment | ✅ жизненный цикл счёта | ✅ напоминание долга | ✅ выставление | ✅ реестр долгов | R2 + R4 |
| A7 Зарплата | ✅ Payroll + Timesheet | ❌ | ✅ расчёт в конце месяца | ✅ расчётный лист | ✅ ведомость | R2 + R4 |
| A8 ТО | ✅ MaintenanceTask | ✅ назначение | ✅ создание задачи по триггеру | ✅ чеклист ТО | ✅ история обслуживания | R2 + A2 |
| A9 Отчёты | ❌ (читает чужие) | ❌ | ✅ авто-генерация по расписанию | ❌ | ✅ все виджеты | R4 |
УНИВЕРСАЛЬНОЕ ЯДРО (7 архетипов — одинаковы для всех ниш):
A1 Учёт объектов → base-erp / base-fsm профиль
A2 Диспетчеризация → base-fsm профиль
A3 Выездные работы → mobile-module
A6 Финансы → base-billing профиль
A7 Зарплата → base-payroll профиль
A8 ТО / CMMS → base-cmms профиль
A9 Отчётность → base-reports профиль
НИШЕВЫЕ КОНФИГИ (2 архетипа — уникальны для ниши):
A4 Регуляторные журналы ← под конкретного регулятора (A4-metrologia, A4-fire, ...)
A5 Расходные материалы ← под специфику производства (A5-fuel, A5-reagents, ...)
Следствие: при входе в новую нишу разрабатывается только A4 + A5.
Остальные 7 архетипов переиспользуются из ядра через профили.
Полный стандарт: AUTOMATION_TYPES.md
Отвечает на вопрос: что мы продаём и каким клиентам?
B1 МОДУЛИ (A1–A9) Универсальные кирпичи ядра
B2 НИШЕВЫЕ КОНФИГИ YAML профили под отрасль (A4 + A5)
B3 ВЕРТИКАЛЬНЫЕ ПРОДУКТЫ Ядро + нишевый конфиг = готовый продукт
B4 МОНЕТИЗАЦИЯ Ценообразование, тарифы, деплой
B5 КАРТА НИШ Куда идём, приоритеты
B1 ядро (A1+A2+A3+A6+A7+A8+A9)
+
B2 нишевый конфиг (A4-metrologia + A5-reagents)
=
B3 "МетроСофт" — SaaS для поверочных лабораторий
| Модель | Цена | Для кого |
|---|---|---|
| SaaS месячная подписка | 30–90 тыс. руб/мес | Малый бизнес 5–50 чел |
| On-premise лицензия | от 500 тыс. | Крупные + госструктуры |
| White-label | +30% к SaaS | Партнёры-реселлеры |
Оценка по 8 критериям (Авт×0.20 + Плат×0.18 + Риск×0.17 + Рынок×0.13 + ГосПод×0.10 + Рег×0.10 + Сооб×0.06 + Продажа×0.06):
| Ниша | Оценка | Вход | A4 регулятор |
|---|---|---|---|
| Метрология | 4.33 | Средний | Росстандарт |
| Охрана труда | 4.22 | Средний | ГИТ |
| Дезинфекция | 3.99 | Лёгкий | Роспотребнадзор |
| ТО газа | 3.96 | Средний | Ростехнадзор |
| Пожарная безопасность | 3.74 | Лёгкий* | МЧС |
| ЛЭП/электросети | 3.65 | Средний | Ростехнадзор |
*Лёгкий вход при наличии ядра СПЕЦАРЕНДА.
Полный анализ ниш: NICHE_RESEARCH.md
Матрица архетипов × ниши: AUTOMATION_TYPES.md
| Система | Уровни | Описывает |
|---|---|---|
| E0–E6 | Философия → Решения | Рабочее пространство (люди + Claude) |
| T0–T4 | Инфра → Клиент | Технологический стек приложения |
| D1–D3 | Field Lib → YAML | Артефакты фазы разработки |
| R0–R4 | Схема → Отчёты | Движки фазы исполнения |
| M0–M3 | Мета-типы → Данные | Уровень абстракции артефакта |
| V1–V4 | Layout → Branding | Визуальный дизайн UI |
| A1–A9 | Учёт → Отчётность | Архетипы бизнес-задач |
| B1–B5 | Модули → Ниши | Бизнес-продукты |
E4 (блоки воркспейса)
↕ реализуются как
T0–T4 (технический стек)
↕ конфигурируются через
D1–D3 (design-time) → компилируются → R0–R4 (runtime)
↕ уровень абстракции описывается через
M0–M3 (мета-абстракция)
↕ поведение определяется профилями
Профили (base → industry → region → tenant)
↕ UI настраивается через
V1–V4 (визуальный дизайн)
↕ продукт закрывает
A1–A9 (бизнес-архетипы)
↕ монетизируется как
B3 (вертикальные продукты) в нишах B5
| Документ | Что в нём |
|---|---|
| ECOSYSTEM.md | E-уровни, структура воркспейса (LOCKED) |
| PLATFORM2_LAYERS.md | Stack β, 13 классов, профили, компиляция |
| PLATFORM2_ARCHITECTURE.md | Серверная инфраструктура, 3 среды |
| PLATFORM2_DEV_SETUP.md | Локальный запуск Stack β |
| decisions/002-platform-architecture.md | ADR Stack α (HTMX, Dec 2025) |
| 1-structure/structure-design-layers.md | V1–V4 детально с примерами |
| AUTOMATION_TYPES.md | A1–A9 с примерами и матрицей ниш |
| NICHE_RESEARCH.md | Алгоритм анализа ниш, 8 критериев |