NalogAgent · спека реализации

Бот, который снимает с бухгалтеров рутину

Не сценарный бот с жёсткими ветками, который встаёт в ступор на любой нестандартной ситуации, а агент на LLM с детерминированными «руками» для цифр и записи. Ниже — как это правильно устроить технически.

Цель: снять основную рутину, а не напоминать Ядро: Claude Sonnet 5 + инструменты Данные: 1С через OData, read-only Старт: приём и распознавание первички
01 — принцип

Почему агент, а не «тупой» бот

Бухгалтерия — это свободные вопросы клиентов и нестандартная первичка. Жёсткий сценарий тут ломается на каждом шаге вправо-влево. Ядро должно понимать, а не сопоставлять по шаблону.

Сценарный бот — тупик

Кнопки и жёсткие ветки. Любое отклонение — «не понял», диалог встаёт.

  • Не разбирает свободный вопрос клиента
  • Нестандартный документ — ступор
  • Каждый новый случай — правка кода

LLM-агент — понимает

Claude как ядро: читает запрос, сам выбирает инструмент, на непонятном — переспрашивает или зовёт человека.

  • Свободный ввод, живой диалог
  • Не уверен → эскалация человеку, а не выдумка
  • Новые случаи — без переписывания логики

Железное правило для бухгалтерии

LLM отвечает за понимание, диалог и ветвление. Но цифры, даты, расчёты, запись в 1С и отправку в ФНС делает строгий детерминированный код — не «мнение модели». Всё денежное и необратимое — через подтверждение человеком. Плюс антигаллюцинация, как в Электро-Актив: модель не смеет назвать дату или статус, не полученные из инструмента.

02 — архитектура

Как это собрано

Claude через Tool Runner: цикл «модель просит инструмент → наш код выполняет → результат обратно». Инструменты крутятся в нашем процессе на нашем сервере — не в чужом контейнере.

БухгалтерTelegram, свободный текст + фото
Бот-агентVPS · Claude Sonnet 5 + инструменты + БД состояния
1С-коннекторв офисе у сервера .58, read-only
1С : БухгалтерияOData / HTTP-сервис

Ядро на VPS

Telegram-интерфейс + агент-цикл + PostgreSQL состояния. Рядом с уже работающим ботом NalogAgent, проверенный egress в Telegram.

Коннектор в офисе

Лёгкий сервис у сервера 1С: раз в 15–30 мин читает локально нужные поля, отдаёт наружу только минимизированную выжимку. Пароли 1С офис не покидают.

Напоминания вне LLM

Плановые напоминания о сроках шлёт детерминированный код. Даже если модель или интернет упали — напоминание уйдёт. LLM только для живого диалога.

03 — интеграция с 1С

Как правильно читать из 1С

Главное решение, отделяющее надёжную систему от костыля: через штатный контракт 1С, а не в обход через базу.

СпособОценкаПочему
OData / HTTP-сервисы 1С рекомендуется Стабильный контракт, переживает обновления конфигурации 1С, соблюдает права и бизнес-логику. Включается публикацией базы на веб-сервере.
Прямой SQL к боевой базе нельзя Таблицы кодированы (_Reference123), структура меняется при обновлении 1С, нет прав и логики, риск нагрузки и блокировок на рабочей базе.
SQL к read-only реплике запасной Только если OData реально не хватает по объёму. Отдельная реплика PostgreSQL, боевая база не под нагрузкой. Всё равно хрупко к обновлениям.

Безопасность доступа

04 — приватность

Облако, локально или гибрид

Единственное решение, которое за тобой: насколько бухданные могут покидать периметр. От него зависит выбор модели.

ВариантУм ядраПриватностьКогда
Облако (Claude) высокий В модель уходят только выжимки, не сырьё. Риск снижен конструкцией. Рекомендуется на старт
Локально (obuch) ниже Данные не покидают периметр. Но open-weight модели слабее там, где ошибка дорога. Если облако неприемлемо
Гибрид высокий Сырьё (сканы) мелется локально на obuch, в облако — обезличенное. Фаза 2+ (OCR первички)

Рекомендация

Старт — облако: архитектура и так минимизирует, что видит модель. Когда дойдём до сканов счетов и выписок — сырой документ держим локально на obuch, в облако отдаём уже структурированную выжимку для финального рассуждения. Это твой выбор по доверию к облаку, не техническое ограничение.

05 — что снимаем

Рутина по приоритету разгрузки

Раз цель — снять рутину, а не информировать, порядок другой, чем в презентации. Сначала то, что реально съедает часы каждый день, при управляемом риске.

ОперацияОбъём рутиныРискЧто делает бот
Приём и распознавание первички высокий средний Фото/скан/PDF → извлекает реквизиты → черновик в 1С. Бухгалтер только проверяет и проводит.
Разноска банковских выписок высокий средний Загрузка выписки → сопоставление платежей с контрагентами и договорами → черновик разноски.
Типовые ответы клиентам высокий низкий «Что сдать / сколько платить / где документ» — агент отвечает из 1С сам, снимает поток вопросов.
Календарь сроков + напоминания средний низкий Фоновый детерминированный слой: сам считает сроки, напоминает заранее. Убирает риск просрочек.
Мониторинг ФНС (ЕНС, требования) средний низкий Тянет статус через 1С-Отчётность, алертит о требованиях и риске блокировки счёта.

С чего начинать

Самый большой пожиратель времени — ручной ввод первички. Поэтому MVP целится в неё: клиент/бухгалтер шлёт фото документа в бота, агент вытаскивает реквизиты и кладёт черновик в 1С — человек только сверяет и проводит. Черновик, а не проводка, — риск управляем: ошибку видно до попадания в учёт.

06 — источники данных

Откуда берём факты

Точность тут = деньги: неверный срок или статус — штраф клиента. Поэтому честно про то, что реально доступно.

Календарь сроков

Правила сроков по режимам (НДС, УСН, прибыль, взносы, 6-НДФЛ, РСВ, ЕФС-1, уведомления ЕНП) в коде + производственный календарь РФ для переносов на рабочие дни. Сверка с регламентом 1С-Отчётности.

Мониторинг ФНС

Открытого API ФНС для сальдо ЕНС и блокировок нет. Реальный путь — через 1С-Отчётность (она сама ходит в ЛК ФНС) или API оператора ЭДО. Закладываем это, а не скрейпинг форм.

Проверка контрагентов

Бесплатный стек: открытые данные ФНС (долги, спецрежимы, дисквалификация, массовые адреса), API ФССП (исполнительные производства), DaData (10k запросов/мес). Платное — по мере надобности.

07 — инструменты агента

Чёткие функции, которые модель только вызывает

LLM не сочиняет данные — она вызывает детерминированные инструменты. Мутирующие действия возвращают черновик на подтверждение, а не пишут сразу.

# чтение — безопасно, read-only
search_org(query)            # нечёткий поиск организации по названию/ИНН
get_deadlines(org_id, days)   # сроки из локального кэша, не из 1С напрямую
calc_deadline(type, date)     # расчёт даты с переносами — чистый код, не LLM
fns_status(org_id)            # статус ЕНС/требований из кэша коннектора
escalate_to_human(reason)     # не уверен → зовёт человека, а не гадает

# изменения — двухшаговые, через подтверждение в Telegram
propose_draft_from_doc(photo) # распознал первичку → черновик в 1С на проверку
propose_update(...)           # возвращает draft + кнопки Подтвердить / Отмена
08 — дорожная карта

Поэтапно, от максимума разгрузки

Каждая фаза — новый модуль поверх одного ядра (доступы, планировщик, БД). Ранние фазы не переписываются.

MVP

Приём первички + справочный агент + календарь фоном

Фото документа → черновик в 1С на проверку (главная разгрузка). Плюс свободные вопросы по срокам и статусам. Плюс детерминированные напоминания. Всё read-mostly, запись — только черновики с подтверждением.

Фаза 2

Разноска банка + кабинет клиента

Автосопоставление выписок. Клиентам — свой доступ: что сдать, сколько платить, платёжка, загрузить документ. Здесь же подключается локальный OCR на obuch для приватности сырья.

Фаза 3

Мониторинг ФНС · зарплата · контрагенты · дашборд

Алерты ЕНС и требований, зарплата и кадры по графику, проверка контрагентов по ИНН, сводка для руководителя по клиентам и нагрузке.

09 — надёжность и доступ

Чтобы не навредить

Роли и аудит

Доступ только сотрудникам по списку. Бухгалтер видит своих клиентов, руководитель — всех. Каждое действие в журнал. Клиенты — отдельная роль на Фазе 2, без переделки.

Устойчивость

Сервис под systemd с автоперезапуском, состояние в БД (переживает рестарт), ночные бэкапы внутри проекта. Недоступность 1С или ФНС — не падение, а честная пометка «данные устарели».

Секреты

Токены и пароли — вне кода, у каждого компонента свои. Пароль 1С живёт только на коннекторе в офисе и никогда не уезжает на VPS.

Human-in-the-loop

Любая запись в 1С и отправка в ФНС — только после подтверждения человеком кнопкой. Модель предлагает, человек решает. По духу твоих ATLAS-правил.

10 — решения за тобой

Что нужно от тебя, чтобы стартовать

1
Приватность: облако или локально?Рекомендую облако на старт (в модель — только выжимки). Локально/гибрид — когда дойдём до сканов. Определяет выбор модели.
2
Отдельный бот или модуль существующего?У бота NalogAgent уже есть /wifi, /av. Рекомендую отдельный сервис (разный риск-профиль), при желании — тот же @username.
3
Подтвердить MVP = приём первички?Если согласен, что первичка — главная рутина, следующий шаг: доступ read-only к 1С и прототип распознавания на реальных документах.
4
Доступ к базе 1С для проработки.Read-only заглянуть в структуру (организации, режимы, регламентные отчёты) — чтобы проектировать на реальных данных, а не по описанию.