Навыки собраны под конкретную практику одного предпринимателя: сербский паушал, один иностранный клиент, оплата в евро на девизный счёт, уведомление банку по каждому приливу. Отсюда и периоды, которые прошиты в шагах:
- месяц = период работ, а не дата документа: задачи за июнь лежат в
months/2026_06/, а акт, инвойс и бланк банка по ним приходят в июле — и лежат там же;- окно сбора задач — от момента отправки прошлого списка до конца текущего месяца, а не с 1-го по 30-е;
- список уходит клиенту в конце месяца, акт и инвойс за этот месяц появляются в начале следующего, платёж — ещё позже, бланк банка — в день зачисления;
- бланк банку возвращается не позже следующего рабочего дня после зачисления;
- выгрузка в бухгалтерский сервис — только после оплаты: без даты платежа счёт не получит статус «оплачено»;
- год записи в книге оборота — год счёта: декабрьский акт выставлен в январе и уезжает в следующую книгу.
Если у вас другой режим налогообложения, другой банк, несколько клиентов, авансы или квартальная отчётность — совпадёт ядро, но не расписание. Что менять под себя, написано в
docs/setup.mdиdocs/integrations.md; формы документов у каждого банка свои, поэтому скрипты подписи падают с понятным сообщением вместо порчи документа.
Месячный цикл предпринимателя-паушальца, автоматизированный навыками Claude Code: список выполненных задач → акт и инвойс → уведомление банку о приливе → выгрузка в бухгалтерский сервис и книга оборота (КПО). Вокруг цикла — счета поставщиков, налоговые документы, разбор банковских выписок и сводный финансовый отчёт.
Каждый шаг запускается короткой командой, между шагами результат проверяет человек, наружу (мессенджер, почта) ничего не уходит без ручного нажатия «Отправить».
Ядро от чужого расписания не зависит: разбор выписок, категоризация, реестры, отчёт, книга
оборота, подпись PDF и проверка подписанного. Трекер и мессенджер меняются на свои
(docs/integrations.md), языки акта и сообщения — в конфиге.
Этот — движок: навыки, скрипты, документация, шаблоны. Публичный, ни одного реквизита и ни одного документа внутри.
Второй — данные: profile.json, папки месяцев, финансы, договоры, образцы подписи.
Приватный, только у владельца. Заводится одной командой, живёт своим git — история правок
документов и возможность откатить косяк.
pausal-flow/ ← движок, публичный git
└── …
ip-data/ ← данные, приватный git
├── engine -> ../pausal-flow симлинк, в .gitignore
├── .claude/skills -> engine/… симлинк, в .gitignore
├── profile.json единственное место с реквизитами
├── months/ГГГГ_ММ/ период работ: задачи, акт, инвойс, бланк банка, паушал
├── finance/ выписки, платежи, налоги, КПО, отчёт
├── contracts/<контрагент>/ редакции договора + versions.md
└── signatures/samples.tar.gz.gpg образцы подписи, только зашифрованные
Внутри данных движок всегда зовётся engine/…, поэтому где он лежит физически — дело
владельца. Скрипты находят корень данных сами: переменная TASKS_DATA либо ближайший
вверх от текущего каталога каталог с profile.json.
git clone https://github.com/svesh87/pausal-flow.git && cd pausal-flow
python3 scripts/doctor.py # чего не хватает в системе
scripts/init_private.sh ~/docs/ip-data # скелет приватного репозитория данных
cd ~/docs/ip-data && $EDITOR profile.json # реквизиты по образцу
python3 engine/scripts/doctor.py # проверка готовностиДальше — «Настрой окружение» агенту (навык setup) или docs/setup.md глазами. Посмотреть,
как всё работает, не имея ни одного документа:
python3 engine/scripts/make_examples.py tmp/example-data
TASKS_DATA=tmp/example-data python3 engine/scripts/build_report.py
TASKS_DATA=tmp/example-data python3 engine/scripts/kpo_book.py --offlineГГГГ_ММ — период работ, а не дата документа: акт за июнь подписан в июле, но лежит
в months/2026_06/.
| Команда | Что происходит |
|---|---|
| «Собери задачи» | закрытые задачи из трекера → формулировки для акта → months/ГГГГ_ММ/tasks.md на ревью |
| «Отправь список в чат» | черновик в канал клиента: по секции на каждый язык из конфига, со ссылками на тикеты |
| «Подпиши документы из чата» | акт и инвойс из треда → подпись на акте → проверка |
| «Отправь документы в чат» | черновик с подписанным актом в тот же тред |
| «Подпиши документы банка» | бланк из почты → заполнить, подписать, проверить |
| «Отправь документы в банк» | окно ответа банку: бланк + акт + инвойс + договор |
| «Выгрузи в pausal.rs» | два XLSX для импорта в бухгалтерский сервис (артикул, потом счёт) |
| «Обнови книги КПО» | пересобрать finance/kpo/ из данных репозитория |
| «Прими договор» | договор из tmp/inbox/ → contracts/<контрагент>/ГГГГ_ММ_ДД/ |
| Команда | Что происходит |
|---|---|
| «Обнови финансы» | всё оптом: банк и счета поставщиков из почты, налоги, пересборка, одна сводка |
| «Обнови банк» | новые izvod и выгрузки из eBank → finance/bank/raw/, CSV, сверка остатков |
| «Собери счета» | новые счета поставщиков из почты → finance/payments/ГГГГ/ + реестр |
| «Обнови налоги» | новые документы налоговой → finance/taxes/statements/ + реестр |
| «Обнови отчёт» | пересобрать finance/report.md из CSV |
| «Прими документы» | разобрать tmp/inbox/: определить тип каждого файла и разложить |
| Команда | Что происходит |
|---|---|
| «Настрой окружение» | инструменты, скелет данных, profile.json по блокам, интеграции, проверка |
| «Проверь окружение» | doctor.py и разбор того, что он показал |
| «Собери библиотеку подписей» | сканы → набор PNG → разметка → зашифрованный контейнер |
| «Добавь образцы подписи» | то же для новых сканов, старые образцы сохраняются |
Эти файлы руками не правятся — перезапись затрёт правки:
| Артефакт | Собирается |
|---|---|
finance/bank/transactions_{eur,rsd}.csv |
scripts/parse_izvod.py |
finance/taxes/payments.md |
scripts/tax_registry.py |
finance/payments/registry.md |
scripts/payments_registry.py |
finance/report.md |
scripts/build_report.py |
finance/kpo/kpo_ГГГГ.pdf, finance/kpo/entries.md |
scripts/kpo_book.py |
.cache/nbs_rates.json |
scripts/kpo_book.py (кэш курсов НБС, вне git) |
months/ГГГГ_ММ/pausal/*.xlsx |
scripts/pausal_import.py ГГГГ_ММ |
signatures/METRICS.md, signatures/metrics.json |
scripts/sig_metrics.py |
Всё, кроме двух последних (они по месяцу и по набору образцов), пересобирает одна команда:
engine/scripts/rebuild_all.shОна же — регрессионный тест: после правок в скриптах git diff по сгенерированному обязан
быть пустым.
| Файл | О чём |
|---|---|
docs/setup.md |
настройка с нуля: пакеты, данные, конфиг, проверка |
docs/integrations.md |
роли (трекер, канал, почта, бухгалтерия), как подключить и как заменить |
docs/signatures.md |
библиотека образцов подписи: что сканировать, как обрабатывается, как хранится |
.claude/skills/*/SKILL.md |
сами навыки: порядок шагов и границы |
.claude/skills/sign-docs/internals.md |
устройство подписи PDF и геометрия — читать при поломке |
scripts/tests/CASES.md |
бизнес-кейсы и покрывающие их тесты |
- Наружу ничего не уходит автоматически: в мессенджер — только черновик, в почту — только окно ответа. Отправляет человек.
- Подписанный документ всегда проверяется до отправки:
scripts/verify_signed.sh(целостность байт, рендер, текст, даты) плюс взгляд на область подписи. - Подписанное и отправленное не переподписывается без явного разрешения: повторная подпись
меняет дату изменения и подписи внутри, и документ перестаёт совпадать с тем, что
у контрагента. Скрипты подписи отказываются писать поверх существующего файла без
--force. - Скрипты падают, а не гадают: формы документов меняются, при несовпадении якорей скрипт останавливается с понятным сообщением вместо порчи документа.
- Отчётность закрытых лет не переписывается — книги КПО за сданные годы пересобираются
только с
--allow-pastи по прямому разрешению. - Реквизиты — только в
profile.json. В движке их нет; что это так, проверяетscripts/check_clean.sh— он же стоит в пре-коммите.
- Python 3.10+ (только стандартная библиотека),
pdftotext,pdftoppm,pdfinfoиз poppler-utils, LibreOffice (soffice) для книг КПО,gpgдля образцов подписи; - MCP-серверы под роли из
docs/integrations.md; - для правок движка —
python3 -m venv .venv && .venv/bin/pip install -r requirements-dev.txt.
signatures/ шифруется не потому, что это единственный путь утечки подписи — подпись стоит
в каждом отправленном документе, и вырезать её можно оттуда. Но набор образцов — концентрат:
чистые PNG на прозрачном фоне, размеченные и готовые к вставке. Раз их можно хранить
зашифрованными без потери удобства, они и хранятся так: только внутри samples.tar.gz.gpg
на GPG-ключ владельца, расшифровка в память при каждом запуске, открытые PNG на диск
не пишутся и в git не попадают.
Остальное чувствительное — банковские выписки, подписанные акты, profile.json — живёт
в приватном репозитории данных, который не публикуется.
MIT — см. LICENSE.