19 KiB
ТЗ — Accounting Analytics Layer Architecture
1. Назначение документа
Документ фиксирует архитектуру следующего слоя системы после успешного PoC runtime-моста к 1С.
Цель этапа:
- спроектировать полный аналитический контур поверх живого read-only runtime bridge;
- развести live-доступ к 1С и тяжёлую аналитику;
- исключить ошибочную архитектуру, при которой LLM в реальном времени пытается анализировать всю бухгалтерию напрямую через 1С;
- определить слои, режимы работы, refresh-модель, canonical schema, anomaly engine и роль ассистента.
2. Контекст
На предыдущем этапе подтверждён рабочий runtime semantic bridge к 1С:
- read-only контур поднят;
- доказаны цепочки
document -> posting -> account; - доказаны цепочки
posting -> subconto[1..3]; - доказана расшифровка saldo через движения;
- bridge принят со статусом
adopt with restrictions.
Это означает:
- живой доступ к бухгалтерскому смыслу есть;
- но полный аналитический контур нельзя строить как чатовый runtime-проход по всей 1С;
- нужен отдельный слой аналитики, кэша, baseline, anomaly detection и исторического анализа.
3. Главный архитектурный принцип
Система должна быть разделена на разные режимы работы, а не пытаться решать всё одной и той же цепочкой LLM -> 1С -> JSON -> LLM.
3.1. Режим A — Live Query
Используется для:
- точечных запросов;
- drill-down;
- проверки одного факта;
- открытия документа;
- расшифровки проводки;
- объяснения сальдо;
- прохода по конкретной цепочке связей.
3.2. Режим B — Batch Analytics
Используется для:
- анализа всего периода;
- анализа всех счетов;
- поиска аномалий;
- сравнения закрытых и открытых периодов;
- поиска поведенческих паттернов;
- выявления разрывов, дыр, хвостов и коллизий;
- исторического анализа по месяцам/кварталам/годам.
3.3. Режим C — Interactive Assistant
Используется для общения с пользователем:
- понимает намерение;
- определяет, нужен live-доступ или уже есть готовый аналитический результат;
- маршрутизирует запрос;
- объясняет результат человеку.
4. Целевая архитектура
Layer 1. 1С Source Layer
Источник истины:
- документы;
- проводки;
- регистры;
- планы счетов;
- субконто;
- остатки;
- обороты;
- закрытые и открытые периоды.
Жёсткое правило
Ничего в клиентскую 1С не пишем.
- не редактируем документы;
- не проводим документы;
- не меняем регистры;
- не меняем конфигурацию ради аналитики;
- не строим операционный write-layer.
Layer 2. Runtime Semantic Bridge
Основной live-мост к 1С.
На текущем этапе:
1c-mcp-toolkit- только read-only
- только локально / в изоляции
- без
execute_code - только approved read methods
Назначение слоя
- читать метаданные;
- выполнять безопасные read-only запросы;
- читать документы, объекты, движения, счета, субконто;
- обеспечивать live drill-down по конкретным фактам.
Не назначение слоя
- не использовать как движок тяжёлой аналитики по всей компании в реальном времени;
- не использовать как единственное хранилище семантики;
- не использовать как вычислительный комбайн для whole-slice анализа.
Layer 3. Extraction / Refresh Layer
Контролируемый слой извлечения данных из 1С в аналитическое хранилище.
Задачи
- запускать штатные extraction jobs;
- читать данные из 1С пакетно и инкрементально;
- формировать canonical payloads;
- обновлять аналитическое хранилище;
- минимизировать нагрузку на live-runtime.
Режимы извлечения
-
Initial Historical Load
- первичная загрузка истории;
- по месяцам / кварталам / годам;
- по закрытым периодам.
-
Incremental Refresh
- догрузка изменений по открытому периоду;
- обновление новых и изменившихся документов и движений.
-
Targeted Refresh
- загрузка конкретного счета;
- загрузка конкретного контрагента;
- загрузка конкретного периода;
- загрузка конкретного документа.
Требование
Extraction layer должен быть:
- воспроизводимым;
- логируемым;
- перезапускаемым;
- устойчивым к частичным сбоям.
Layer 4. Canonical Accounting Store
Нормализованное хранилище бухгалтерского смысла.
Это не “снапшот ради снапшота”, а основной аналитический слой.
Базовые сущности
DocumentPostingRegisterMovementAccountSubcontoEntityCounterpartyContractOrganizationItemWarehousePeriodBalanceSnapshotTurnoverSnapshotEntityStateAnomalySignalRiskPattern
Базовые связи
Document -> creates -> PostingPosting -> debit -> AccountPosting -> credit -> AccountPosting -> hasSubconto1 -> SubcontoEntityPosting -> hasSubconto2 -> SubcontoEntityPosting -> hasSubconto3 -> SubcontoEntityPosting -> belongsTo -> OrganizationPosting -> belongsToPeriod -> PeriodCounterparty -> hasContract -> ContractAccount -> hasBalanceSnapshot -> BalanceSnapshotPeriod -> hasTurnoverSnapshot -> TurnoverSnapshot
Требование
Canonical store должен быть:
- семантически стабильным;
- независимым от сырой структуры 1С;
- пригодным для SQL/graph/pattern-анализа;
- пригодным для feed в feature/anomaly engine.
Layer 5. Feature Store / Analytics Store
Слой производных признаков, baseline и аналитических индикаторов.
Что здесь хранится
- признаки по счетам;
- признаки по контрагентам;
- признаки по документам;
- частотные поведенческие паттерны;
- baseline по периодам;
- отклонения от baseline;
- anomaly flags;
- drift signals;
- risk score;
- derived relation signals.
Примеры признаков
- нетипичная корреспонденция счетов;
- новый тип субконто в периоде;
- резкий рост активности по счету;
- аномальное увеличение оборота;
- повторяющиеся нестандартные проводки;
- контрагент, резко изменивший тип операций;
- хвосты и незакрытые цепочки;
- проводки, не похожие на исторический baseline.
Layer 6. Analytical Engine
Вычислительный слой, который считает и сравнивает, но не является LLM.
Что делает engine
- rule-based проверки;
- статистические проверки;
- anomaly detection;
- baseline modelling;
- drift analysis;
- pattern mining;
- graph analysis;
- scoring;
- объяснение причинности через расчётные модели.
Что engine не делает
- не общается с пользователем напрямую;
- не генерирует красивый текст ответа;
- не выполняет роль conversational assistant.
Режимы работы
- по расписанию;
- по ручному запуску;
- по триггеру;
- по событию;
- по запросу от assistant-layer, если нет свежего результата.
Layer 7. Assistant / Orchestrator Layer
LLM-слой и логика маршрутизации.
Роль слоя
- принимать пользовательский вопрос;
- определять тип вопроса;
- решать, где лежит ответ:
- в analytics store,
- в live bridge,
- или нужен новый batch-run;
- объяснять результат человеку.
Что LLM не должна делать
- не должна перебирать всю 1С в реальном времени;
- не должна сама быть anomaly engine;
- не должна получать целиком весь срез компании в промпт;
- не должна по каждому тяжёлому вопросу инициировать полное живое сканирование 1С.
Что LLM должна делать
- классифицировать вопрос;
- маршрутизировать запрос;
- выбирать инструменты;
- суммировать результаты;
- превращать аналитические факты в понятный ответ.
5. Почему нельзя делать всё через live bridge
Проблема
Если делать всё как:
LLM -> toolkit -> 1С -> JSON -> LLM
то на тяжёлых вопросах система будет:
- медленной;
- дорогой;
- хрупкой;
- плохо воспроизводимой;
- чувствительной к latency;
- зависимой от размера данных и количества round-trip операций.
Особенно плохо это работает для запросов типа:
- “проанализируй весь срез на сегодня”;
- “найди все аномалии по всем счетам”;
- “сравни компанию за 10 лет по месяцам”;
- “найди все техкомпании-прокладки и аномальные паттерны”.
Следствие
Live bridge должен использоваться точечно, а тяжёлый анализ должен идти через отдельный аналитический слой.
6. Как должна работать система на практике
Сценарий 1. Точечный вопрос
Пользователь:
Что по счёту 68.02?
Маршрут:
- assistant проверяет analytics store;
- если есть готовый balance/anomaly context — использует его;
- если нужен drill-down — идёт через runtime bridge;
- возвращает объяснение.
Сценарий 2. Массовый анализ
Пользователь:
Проанализируй весь текущий срез и найди аномалии.
Маршрут:
- assistant не идёт напрямую в 1С по всей базе;
- проверяет, есть ли свежий batch-run;
- если есть — отдаёт summary;
- если нет — запускает analytic job;
- после завершения показывает результаты и даёт drill-down.
Сценарий 3. Историческое сравнение
Пользователь:
Сравни поведение компании по кварталам за 5 лет.
Маршрут:
- используются historical baseline и snapshots;
- analytical engine считает изменения;
- assistant объясняет выводы.
7. Модель обновления данных
7.1. Закрытые периоды
- загружаются один раз;
- считаются эталоном;
- меняются только по отдельному регламенту.
7.2. Открытые периоды
- обновляются инкрементально;
- по расписанию;
- по событию;
- по ручной кнопке;
- по запросу при необходимости.
7.3. Refresh granularity
Поддержать:
- period-level refresh;
- account-level refresh;
- document-level refresh;
- counterparty-level refresh.
8. Что хранить и что не хранить
Хранить
- canonical facts;
- balance snapshots;
- turnover snapshots;
- derived features;
- anomaly signals;
- relation graph edges;
- baseline state;
- analytical summaries.
Не хранить бездумно
- полный сырой JSON от каждого live-вызова навсегда;
- дубли всей 1С на каждый пользовательский запрос;
- полный срез компании в контексте LLM.
9. Технологический стек (рекомендуемый уровень)
Runtime bridge
1c-mcp-toolkit
Extraction / jobs
- Python
- job runner / scheduler
- очередь задач по необходимости
Canonical store
- PostgreSQL как основной store
Heavy analytics
- DuckDB / Polars / Pandas для batch-прогонов
- при росте объёмов — возможен переход на более тяжёлый аналитический backend
Assistant layer
- OpenAI / локальная LLM
- tool calling
- оркестрация между analytics store и runtime bridge
10. Ограничения безопасности
Жёсткие ограничения
- только read-only доступ к 1С;
- никакого
execute_code; - никакой записи в 1С;
- никакой модификации конфигурации продовой 1С;
- endpoint не публикуется наружу;
- доступ только из локального / доверенного контура;
- отдельный технический пользователь 1С.
Важно
Этот проект является аналитической надстройкой, а не операционным контуром.
11. Этапы реализации
Stage 1. Фиксация runtime bridge
- зафиксировать
1c-mcp-toolkitкак основной live semantic bridge; - описать approved methods;
- зафиксировать guardrails.
Stage 2. Canonical schema
- спроектировать canonical accounting schema;
- описать сущности, связи, ключи и snapshots.
Stage 3. Historical loader
- реализовать initial historical load;
- загрузить закрытые периоды;
- собрать baseline history.
Stage 4. Incremental refresh
- реализовать обновление открытого периода;
- определить правила инкрементальной синхронизации.
Stage 5. Feature / anomaly engine
- реализовать rule engine;
- реализовать baseline comparison;
- реализовать anomaly signals и risk patterns.
Stage 6. Assistant orchestration
- реализовать маршрутизацию вопроса;
- выбор между analytics store и live bridge;
- сформировать интерактивный слой ответов.
12. Deliverables
На выходе этапа должны появиться:
accounting_canonical_schema.mdanalytics_store_design.mdrefresh_strategy.mdhistorical_load_plan.mdincremental_refresh_plan.mdanomaly_engine_spec.mdassistant_orchestration_spec.mdsecurity_guardrails_readonly.md
13. Критерии приёмки
Этап считается успешным, если:
- live bridge используется только для точечных запросов и drill-down;
- тяжёлая аналитика вынесена в отдельный analytical layer;
- закрытые периоды загружаются как baseline;
- открытые периоды обновляются инкрементально;
- аномалии и паттерны считаются вне LLM;
- assistant отвечает быстро на типовые вопросы за счёт analytics store;
- assistant может идти в live bridge только по необходимости;
- система не требует write-доступа в 1С.
14. Резюме
1c-mcp-toolkit решает важнейшую задачу:
он даёт живой runtime semantic bridge к 1С.
Но он не должен быть единственным аналитическим слоем.
Полный аналитический контур строится так:
1С -> Runtime Semantic Bridge -> Canonical Accounting Store -> Feature / Anomaly Engine -> Assistant Orchestrator
И рядом: 1С -> OData Discovery Layer
Именно такая архитектура:
- масштабируется;
- не убивает производительность;
- не делает LLM вычислительным ядром;
- позволяет анализировать большие срезы, периоды и паттерны;
- сохраняет живой доступ к актуальной 1С для точечных drill-down сценариев.