Кейс

Open ERP — открытая система учёта для малого бизнеса

Открытая ERP-система на Python/FastAPI: торговля, склад, взаиморасчёты, деньги, отчёты. Идемпотентное проведение документов, регистры накопления, мультиорганизационность и расширяемая архитектура через модули.

Архитектура, full-stack разработка, проектирование предметной области 2026
FastAPI Opensource Python
Open ERP — открытая система учёта для малого бизнеса

Какую задачу решал проект.

Малому бизнесу нужна система, которая связывает склад, продажи, закупки и деньги в единый контур. Не таблицы Excel и не тяжёлые корпоративные системы, а рабочий инструмент, где проведение документа автоматически обновляет остатки, взаиморасчёты и денежные позиции.

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

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

Результат

Open ERP — это открытая веб-система учёта, которую я спроектировал и разработал с нуля: торговая и складская подсистема, взаиморасчёты, денежные средства, цены и валюты, печатные формы, импорт/экспорт CSV/XLSX. Проект построен вокруг четырёх ключевых понятий: метаданные, документы, регистры и идемпотентное проведение. Все прикладные объекты описываются в Python-коде, а платформа по этим описаниям создаёт таблицы, отрисовывает формы, проверяет права и предоставляет API отчётов.
Система написана на Python (FastAPI + SQLAlchemy + Jinja2), работает на SQLite для быстрого старта, но поддерживает PostgreSQL для масштабирования. Интерфейс — серверный рендеринг с Alpine.js для динамических табличных частей. Проект с открытым исходным кодом — развивается и дополняется. Исходники доступны на GitHub.

Решение

Как устроена архитектура.

Четырёхслойная модель: метаданные → документы → регистры → проведение. Каждый слой изолирован и тестируем. Внешний веб-слой — FastAPI с серверным рендерингом и Alpine.js для динамических форм.

Метаданные как код

Все справочники, документы, регистры и отчёты описываются Python-dataclass. Платформа собирает SQL-схему, формы и API из этих описаний — никаких ручных миграций для прикладных объектов.

Идемпотентное проведение

Повторное проведение документа удаляет старые движения и создаёт новые. Отмена — удаляет. Закрытые периоды блокируют изменения. Это гарантирует консистентность регистров при любых сценариях.

Регистры накопления

Помесячные итоги + движения текущего месяца = остаток на дату за O(1) к началу месяца. Пересчёт инкрементальный. Проверка целостности через verify_totals — сравнение движений и итогов.

Полноценная подсистема денег

Денежные счета, статьи ДДС, кассовые и банковские платежи, контроль доступного остатка по счету и валюте. Регистр cash агрегирует по money_account_id и currency_id.

Мультиорганизационность и безопасность

Каждая прикладная запись имеет organization_id. Роли, разрешения, bcrypt-аутентификация, подписанные сессии. Аудит и журнал операций для каждой значимой операции.

Расширяемость через модули

Модуль trade регистрирует обработчики проведения, отчёты и печатные формы. Новый модуль — это Python-пакет с функцией register(), который автоматически подключается при запуске.

Экраны

Интерфейс системы.

Главный дашборд Open ERP со сводкой и графиками

Главный дашборд Open ERP со сводкой и графиками

Справочник номенклатуры с остатками на складах

Справочник номенклатуры с остатками на складах

Справочник контрагентов

Справочник контрагентов

Документы поступления товаров

Документы поступления товаров

Документы реализации товаров

Документы реализации товаров

Отчёт по взаиморасчётам с контрагентами

Отчёт по взаиморасчётам с контрагентами

Учёт денежных средств по статьям ДДС

Учёт денежных средств по статьям ДДС

Заказы покупателей

Заказы покупателей

Справочник организаций

Справочник организаций

Итог

Что получает бизнес.

Система покрывает полный цикл: от закупки до продажи, от склада до денег, от документа до отчёта.

Python + FastAPI

технологический стек

Современный async-фреймворк, SQLAlchemy ORM, Jinja2-шаблоны. SQLite для старта, PostgreSQL для продакшена.

8 типов

документов с проведением

Поступление, реализация, перемещение, корректировка, заказ покупателя, кассовые и банковские платежи — все с идемпотентным проведением.

3 регистра

накопления + 2 сведений

Товары на складах, взаиморасчёты, денежные средства. Цены и курсы валют как регистры сведений.

100% покрытие

ключевых сценариев тестами

pytest проверяет проведение, отмену, пересчёт итогов, контроль отрицательных остатков и консистентность регистров.