architect/standards/PLATFORM_ARCHITECTURE.md

АРХИТЕКТУРА ПЛАТФОРМЫ — Единый стандарт

Версия: 1.0
Дата: 2026-03-19
Статус: active


Содержание

  1. E-уровни — Экосистема рабочего пространства
  2. T-уровни — Технический стек
  3. D-уровни / R-уровни — Время разработки / Время исполнения
  4. M-уровни — Абстракция конфигурации
  5. Профили и мутабельность
  6. V-уровни — Визуальный дизайн
  7. A-архетипы → связь с платформой
  8. B-уровни — Бизнес и продукты

Зачем один документ

Ранее архитектура была разбросана по трём несвязанным "платформам":
- Воркспейс (как 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 Бизнес-уровни этот документ

1. E-уровни — Экосистема рабочего пространства

Отвечает на вопрос: как устроено наше рабочее пространство?

Это не про продукт и не про технологии. Это про то, как МЫ (команда + Claude) создаём системы.

E0  ФИЛОСОФИЯ       Зачем мы это делаем? Принципы, ценности
E1  МЕТОДОЛОГИЯ     Как думать? Теория (Меркаба, 9 вопросов)
E2  СТАНДАРТЫ       Как делать? Правила, паттерны
E3  ПЛАТФОРМА       Чем делать? Движки, API, CLI
E4  БЛОКИ           Из чего? Коннекторы, функции, модули
E5  КОМПОНЕНТЫ      Как собрать? Готовые наборы
E6  РЕШЕНИЯ         Что получается? Проекты клиентов

Структура воркспейса по E-уровням

$WORKSPACE/
├── architect/         E0E2: Разум (философия, методология, стандарты)
   ├── theory/        E0E1: LOCKED
   ├── concept/       E1: Концепции платформы
   └── standards/     E2: Правила
├── system/            E3E4: Платформа
   ├── core/          E3: Движок
   ├── agents/        E3: AI-агенты
   └── modules/       E4: Модули
├── library/           E4E5: Библиотека компонентов
├── projects/          E6: Проекты клиентов
└── infra/             Инфраструктура воркспейса

Принцип: E-уровни описывают людей и Claude. T-уровни — технологии. Не смешивать.

Полный документ: architect/theory/ECOSYSTEM.md


2. T-уровни — Технический стек

Отвечает на вопрос: из каких компонентов состоит приложение?

T0  ИНФРАСТРУКТУРА   Серверы, Docker, PostgreSQL, S3, Nginx
T1  ДАННЫЕ           ORM, миграции, схема БД, RLS
T2  БИЗНЕС-ЛОГИКА    FastAPI сервисы, state machines, guards
T3  API              REST, GraphQL, WebSocket, PostgREST
T4  КЛИЕНТ           UI фреймворк, компоненты, SDUI

Stack α vs Stack β

Существуют два варианта технического стека. Выбор определяется типом проекта.


Stack α — Серверный (Dec 2025)

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

Примеры: внутренние инструменты, боты с веб-интерфейсом, простые порталы.


Stack β — SaaS-ready (Mar 2026)

Документ: 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-продукты, клиентские порталы, операционные платформы.


Типы проектов по составу T-стека

Тип FastAPI Supabase Refine Celery Multi-tenant Профили
Worker опц.
App опц. опц.
SaaS

Worker — бот, интеграция, парсер. Нет UI. Примеры: синхронизация 1С↔OZON, Telegram-бот.
App — корпоративный инструмент, один тенант.
SaaS — мультитенантный продукт для продажи клиентам.


3. D-уровни / R-уровни — Время разработки / Время исполнения

Отвечает на вопрос: что создаётся при разработке и что работает в рантайме?

Разделение критично: D-уровни создают схемы, R-уровни их исполняют.

D-уровни — Design-time (разработка, конфигурация)

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

R-уровни — Runtime (исполнение)

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 для бизнес-приложений. Описываешь ЧТО, компилятор генерирует КАК.


Файлы vs БД vs PostHog — правило разделения

ЧТО                              ГДЕ             ПОЧЕМУ
────────────────────────────────────────────────────────────────────
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


4. M-уровни — Абстракция конфигурации

Отвечает на вопрос: на каком уровне абстракции находится каждый артефакт?

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" (запись пользователя)

M-уровни и D-уровни

M0–M1 = D1–D2 (Field Library + классы схем)
M2 = часть D2 (FormClass, LabelClass, FeatureClass) + D3 профили
M3 = данные в R3 (runtime)

M-уровни нужны для разговора об уровне абстракции артефакта.
D/R-уровни нужны для разговора о фазе жизненного цикла.


5. Профили и мутабельность

Отвечает на вопрос: как платформа настраивается под отрасль и клиента?

Иерархия профилей

ПЛАТФОРМА (ядро — неизменно)
    └── 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    # тенант НЕ может убрать поле ГОСТ

Правила для ролей

Компиляция профиля

[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


6. V-уровни — Визуальный дизайн

Отвечает на вопрос: как выглядит интерфейс продукта?

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"

Наследование V-уровней

УРОВЕНЬ       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


7. A-архетипы → связь с платформой

Отвечает на вопрос: какие бизнес-задачи автоматизирует платформа и как они ложатся на T-уровни?

9 архетипов задач (A1–A9)

# Архетип Суть Тип ПО Универсальный?
A1 Учёт объектов Реестр + история + сроки Asset Management
A2 Диспетчеризация Кто куда когда Field Service
A3 Выездные работы Мобайл + фото + чеклист Mobile Workforce
A4 Регуляторные журналы Государство требует форму Compliance / EHS ⚠️ нишевый
A5 Расходные материалы Учёт + нормы + потери Inventory ⚠️ нишевый
A6 Финансы Счета + долги + лимиты Billing / CRM
A7 Зарплата от результата ЗП по выработке Payroll
A8 ТО и обслуживание Не пропустить ТО CMMS
A9 Отчётность Автогенерация документов Reporting / BI

A-архетипы → D/R/T слои

Архетип 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

Ядро vs Нишевые конфигурации

УНИВЕРСАЛЬНОЕ ЯДРО (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


8. B-уровни — Бизнес и продукты

Отвечает на вопрос: что мы продаём и каким клиентам?

B1  МОДУЛИ (A1–A9)         Универсальные кирпичи ядра
B2  НИШЕВЫЕ КОНФИГИ        YAML профили под отрасль (A4 + A5)
B3  ВЕРТИКАЛЬНЫЕ ПРОДУКТЫ  Ядро + нишевый конфиг = готовый продукт
B4  МОНЕТИЗАЦИЯ            Ценообразование, тарифы, деплой
B5  КАРТА НИШ              Куда идём, приоритеты

B1 + B2 → B3: как собирается продукт

B1 ядро (A1+A2+A3+A6+A7+A8+A9)
    +
B2 нишевый конфиг (A4-metrologia + A5-reagents)
    =
B3 "МетроСофт" — SaaS для поверочных лабораторий

B4 — Монетизация

Модель Цена Для кого
SaaS месячная подписка 30–90 тыс. руб/мес Малый бизнес 5–50 чел
On-premise лицензия от 500 тыс. Крупные + госструктуры
White-label +30% к SaaS Партнёры-реселлеры

B5 — Карта ниш (приоритеты, март 2026)

Оценка по 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 (блоки воркспейса)
     реализуются как
T0T4 (технический стек)
     конфигурируются через
D1D3 (design-time)  компилируются  R0R4 (runtime)
     уровень абстракции описывается через
M0M3 (мета-абстракция)
     поведение определяется профилями
Профили (base  industry  region  tenant)
     UI настраивается через
V1V4 (визуальный дизайн)
     продукт закрывает
A1A9 (бизнес-архетипы)
     монетизируется как
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 критериев