К содержимому
Кирилл Юсуповработает само.Обсудить задачу

Пять сервисов в проде, денежная книга с нулевым расхождением и акты на 144 клиента, которые собираются сами

Фулфилмент-компания, направление самовыкупов на маркетплейсах. Я строил это направление с нуля как руководитель отдела: сам вёл расчёты с клиентами в таблицах и знаю каждое место, где они ломались. Потом собрал вместо таблиц портал: личные кабинеты, деньги, документы, отчётность. Он работает каждый день и обслуживает реальных клиентов.

144

клиента в автогенерации актов

1300+

автотестов

0

расхождений в денежной книге

Задача

Операционка на таблицах живёт ровно до определённого объёма, а потом начинает есть людей.

  • Деньги считались вручную. Пополнения, списания, долги, зеркала оплат лежали в таблицах, и сходимость держалась на внимательности человека. Одна пропущенная строка, и остаток у клиента расходится с остатком в учёте. Спор решается перепиской и памятью.
  • Клиент не видел своего баланса. Чтобы узнать остаток или статус, он писал менеджеру, менеджер лез в таблицу. Каждый такой вопрос съедает минуты чужого времени и даёт повод для недоверия.
  • Документы делались руками. Агентские акты и отчёты собирались по одному, копированием из таблицы в шаблон. При сотне с лишним клиентов конец месяца превращался в отдельную работу на несколько дней, и именно там появлялись опечатки в цифрах.

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

Как делал: сборка в работе

Я не писал ТЗ на тридцать страниц. Требования формулировались словами, из них сборка разворачивал схему данных, код, тесты и миграции, а я держал постановку, проверку и разбор спорных мест: там, где ошибка стоит денег, решение остаётся за человеком.

01

Деньги как книга записей, а не как остаток в ячейке

Каждое движение денег пишется в отдельную книгу, где строку нельзя переписать задним числом. Баланс нигде не хранится числом, которое можно перезаписать: есть только история операций, а остаток из неё вычисляется. Поверх стоит правило, которое обязано выполняться всегда (на языке разработчиков это инвариант): итог по книге обязан сойтись с остатком. Сходится до копейки, и проверяет это не мой глаз, а программа. Долги гасятся по очереди, сначала самый старый (FIFO), без ручного выбора «какой платёж к какому счёту отнести».

02

Личные кабинеты

Клиент заходит и видит своё: баланс, операции, историю, документы. Вопрос «а сколько у меня сейчас» перестал быть вопросом к менеджеру.

03

Документы кодом

Агентские акты и отчёты генерируются в PDF и DOCX из тех же данных, что показаны в кабинете, на 144 клиента разом. Документ собирается прямо из денежной книги, поэтому разойтись с ним он не может: в шаблон никто ничего не вставляет руками.

04

Сверка с внешней системой

Портал импортирует отчёты внешних сервисов и сверяется с Google-таблицами, которые остались в обиходе у людей. Ручной учёт не ломался об внедрение: две картины мира сравниваются программно, расхождения видно сразу.

05

Тесты и миграции как страховка

1300+ автотестов и 40+ миграций базы: структура базы менялась больше сорока раз, и ни один раз это не уронило работу клиентов. Это не про красивую отчётность разработчика: система с деньгами меняется постоянно, и без тестов каждое изменение превращается в лотерею. Здесь правки выкатываются спокойно, потому что сначала падает тест, а не месячный акт клиента.

06

Боевой прод вместо демо

Пять сервисов, systemd, база, регламент обновления. Портал работает ежедневно, на нём висит живая операционка. Это единственная честная проверка бэкенда.

Результат

ЧтоЦифра
Сервисов в работе5
Клиентов в автогенерации агентских актов144
Расхождений в денежной книге0, проверяется автоматически
Автотестов1300+
Миграций базы40+

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

Есть похожая задача?

Напишите в двух-трёх предложениях, что происходит сейчас. Отвечу, реально ли собрать похожее у вас, за сколько и что понадобится с вашей стороны.

Отвечу лично. Без рассылки и обязательного созвона. Можно начать с обезличенных данных.

Стек

Бэкенд: Python, FastAPI, PostgreSQL, Alembic (40+ миграций), автотесты (1300+).

Документы: генерация PDF и DOCX из данных портала.

Интеграции: Google Sheets API для сверки, импорт отчётов внешних сервисов.

Интерфейсы: личные кабинеты клиентов, дашборды по клиентам.

Процесс: постановка словами → сборка агентами (схема → код → тесты → миграции) → проверка отдельным проходом, отдельно от того, кто писал.

Короткие ответы по темеЧастые вопросы и ответы, если нужно быстро разобраться.

Коротко о проекте

Что это за портал и что он делает?

Кирилл Юсупов, Москва, собрал для фулфилмент-компании портал по направлению самовыкупов на маркетплейсах: пять сервисов в работе на FastAPI и PostgreSQL: личные кабинеты клиентов с балансами, денежная книга, автогенерация агентских актов и отчётов в PDF и DOCX на 144 клиента, сверка с Google-таблицами и дашборды по клиентам. Система работает ежедневно и обслуживает реальных клиентов каждый день.

Как в портале обеспечивается сходимость денег?

Баланс не хранится отдельным числом, он вычисляется из истории операций, а поверх стоит инвариант, который автоматически сверяет движения с состоянием счетов; его значение равно ноль расхождений. Долги закрываются по FIFO. Изменения в системе прикрыты 1300+ автотестами и 40+ миграциями базы, поэтому доработки не ломают учёт.

Кому нужен такой портал?

Компаниям, у которых расчёты с клиентами, документы и статусы живут в таблицах и держатся на внимательности сотрудников. Начинать необязательно с большой системы: обычно первым делается один узел: денежная книга с проверяемой сходимостью или автосборка документов. Кирилл Юсупов ведёт такие проекты один, без менеджеров-посредников, отдаёт исходники и доступы и говорит прямо, если задача решается проще и дешевле.

То же самое под ваш учёт

Если у вас операционка держится на таблице, которую боятся трогать, порог входа ниже, чем кажется. Начинать стоит не с большого портала, а с одного узла: денежная книга с проверяемой сходимостью или автогенерация документов из данных. Дальше сервисы добавляются по одному, каждый со своими тестами.

Москва · исходники и доступы отдаю, вендор-лока нет

Отвечаю и делаю я сам, поэтому нет менеджера-посредника, нет согласований неделями и нет наценки за офис и штат. Техзадание писать не нужно: расскажите задачу словами или голосом, бриф соберу сам и покажу, что получится, до денег.