Кейс · розница
Управленческий учёт вместо ручных сверок
Выписки двух банков, кассовые отчёты и наличные сводились в одну таблицу руками, поэтому месяц закрывался тогда, когда до него доходили руки. Собрал конвейер: данные приходят сами, а человек разбирает расхождения, а не набирает суммы.
Главное
Было → сделал → стало
01 · было
Отчёт собирали руками в конце месяца
Выписки скачивали из двух банков, продажи выгружали из товароучёта, наличные жили в тетради. Сводили в конце месяца — и решения по деньгам принимались по позавчерашним цифрам.
- Сверка за месяц
- два рабочих дня
- Отчёт готов
- к 15 числу
- Расхождения находили
- руками, когда не сходился остаток
02 · сделал
Собрал конвейер из выписок, чата и таблицы
- Разобрал, откуда что берётся. Сел с человеком, который сводил это руками, и записал каждый источник. Половина правил учёта нигде не была записана — только в голове.
- Собрал приём выписок. Файлы падают в одну папку, разбор приводит их к общему виду: дата, сумма, контрагент, назначение. Формат у каждого банка свой, поэтому и правил разбора столько же, сколько банков.
- Положил операции в базу, а не в таблицу. У каждой операции свой ключ, поэтому повторная загрузка того же файла ничего не задваивает — а её делают регулярно.
- Добавил разметку статей. Сначала правила по назначению платежа, а на то, что не попало ни в одно правило, — модель. Спорное не угадывается, а уходит в список «проверить».
- Свёл кассу и наличные. Продажи сверяются с приходом по банку, остаток наличных считается, а не вводится с чужих слов.
- Отдал результат туда, где его читают. Таблица для разбора и короткая сводка в Telegram по утрам: обороты, остатки и то, что не сошлось.
03 · стало
Отчёт собирается сам, человек смотрит расхождения
Данные приходят каждый день, а не в конце месяца. Ручной работы осталось ровно столько, сколько нужно, чтобы разобрать спорные операции — и они видны сразу, а не всплывают при закрытии месяца.
- Сверка за месяц
- 20 минут
- Отчёт готов
- на 2-й день
- Расхождения находили
- система показывает сама
Как это устроено
выписки банков (CSV) + выгрузка товароучёта → разбор и приведение к одному виду → база
операция без правила → модель предлагает статью → список «проверить» человеку
база → сверка с кассой и наличными → таблица учёта + утренняя сводка в Telegram
Три цепочки вместо одной большой: если банк поменяет формат выгрузки, встанет только первая, а отчёт по вчерашним данным всё равно соберётся.
Что с чем соединялось
- n8nРасписание и связки: забрать файл, разобрать, положить, отправить.
- SupabaseОперации и статьи расхода. Ключ операции не даёт задвоиться при повторной загрузке.
- PythonРазбор выписок: у каждого банка свой формат, общего нет.
- ClaudeСтатья расхода там, где не сработало ни одно правило.
- Google ТаблицыОтчёт, который открывают и читают люди, а не сервер.
- TelegramУтренняя сводка и список спорных операций.
Что было сложного
Форматы выписок меняются без предупреждения. Банк переставил колонки местами — и разбор, который вчера работал, сегодня молча кладёт суммы не в то поле. Пришлось проверять не только «файл разобрался», но и «в нём то, что мы ждали»: набор колонок, число строк, сходится ли итог с шапкой выписки. Туда же ушла отдельная проверка дат: дата операции и дата проводки — разные даты, по одной сходится банк, по другой учёт. Тихая поломка хуже громкой: с ней отчёт выглядит целым.
Наличные. Их нет ни в одной выгрузке — они есть только в голове и в тетради. Автоматизация тут не помогает, помогает договорённость: короткая форма в чате, где остаток фиксируется в конце дня. Это единственное место, где человек всё ещё вводит цифру руками, и я сознательно не стал его закрывать: любая попытка «досчитать» наличные превращает отчёт в красивое враньё.
Первый месяц отчёт считался дважды — сценарием и человеком. Так и должно быть: пока цифры не сошлись, доверия к сборке нет и быть не может. Разошлось два раза, и оба — в правилах разметки статей, а не в разборе файлов. После этого ручной счёт выключили, но правила разметки так и остались местом, куда стоит заглядывать раз в квартал.