Контекст
Клиент — профессиональная компания из ОАЭ, которая сопровождает предпринимателей по регистрации бизнеса, бухгалтерии, отчётности, НДС‑комплаенсу и визовым услугам. Их клиенты — малый и средний бизнес, работающий в нескольких валютах (AED, USD, EUR) и регулируемый Федеральным налоговым органом ОАЭ.
До внедрения платформы бухгалтеры обрабатывали банковские выписки, счета поставщиков и подтверждения платежей вручную. Каждый документ требовал извлечения дат, сумм, НДС и TRN контрагентов, а каждая строка сопоставлялась со статьёй плана счетов. Для каждого клиента требовалось изолированное рабочее пространство со своим планом счетов, аналитическими измерениями и доступом команды. Сопоставление платежей со счетами выполнялось вручную — трудоёмкая, подверженная ошибкам сверка, повторяющаяся для каждого клиента каждый месяц. А отчётность — P&L, баланс, НДС, оборотно‑сальдовая ведомость — должна была формироваться по каждому клиенту, за каждый период, как кассовым методом, так и методом начисления.
Это был процесс, который не мог масштабироваться.
Риски
Ручной ввод данных из PDF и сканов счетов порождал постоянные ошибки транскрипции, некорректно проведённый НДС и неверно отнесённых контрагентов. Без единого источника истины каждый бухгалтер интерпретировал план счетов по‑своему. Сверка съедала большую часть времени закрытия месяца, задерживая отчётность и подрывая доверие клиентов. Масштабирование практики означало линейный найм бухгалтеров — неустойчивая модель. А комплаенс по НДС в ОАЭ строгий: любая ошибка в извлечении НДС или сопоставлении TRN несёт реальные регуляторные последствия.
Компании нужен был системный подход, а не дополнительный ручной труд.
Решение
Мы спроектировали и построили промышленную мультитенантную бухгалтерскую платформу со следующими ключевыми компонентами:
1. Мультитенантная модель рабочих пространств
Каждый клиент — изолированный Account со своим планом счетов, аналитическими измерениями, членством команды и ролевым доступом (владелец, бухгалтер, администратор). Суперпользователи имеют сквозной надзор без нарушения изоляции данных.
2. Пайплайн AI‑извлечения документов
Банковские выписки и счета (PDF или изображение) обрабатываются мультимодальной моделью Qwen. Пайплайн извлекает даты, номера ссылок, суммы, валюты, суммы НДС, имена и TRN контрагентов, а также предлагает статью плана счетов с родительской категорией и типом (доходы, расходы, активы, обязательства).
3. Аналитические измерения
Извлечённые метаданные — клиент, контракт, идентификатор объекта, номер заказа — сохраняются как структурированные теги, позволяя строить размерную отчётность без изменений схемы.
4. Интеллектуальный движок сопоставления
Счета и платежи сопоставляются автоматически с настраиваемым допуском (сумма ±2%, дата в пределах 30 дней). Каждое сопоставление получает уровень уверенности и управляет переходами состояний is_paid иmatched_to.
5. Отчётность на двух базах
P&L, баланс, декларация НДС и оборотно‑сальдовая ведомость генерируются из единого графа транзакций с переключением между кассовым методом и методом начисления.
6. Согласовательные процессы
Транзакции проходят через состояния черновик → проведено → сверено с явными этапами согласования.
7. Шаблоны плана счетов
Переиспользуемые шаблоны плана счетов клонируются между рабочими пространствами клиентов, обеспечивая единообразие классификации.
8. Безопасность и комплаенс
JWT в HttpOnly‑куки, сессионная аутентификация для админки, RBAC, CORS ограничен доменами фронтенда, CSRF включён, файлы документов отдаются через internal‑директиву Nginx (не публично).
Эффекты
- Закрытие месяца как проверка, а не ввод. Месячное закрытие трансформировалось из ручного ввода и сверки в рабочий процесс, ориентированный на проверку. Бухгалтеры теперь валидируют AI‑предложения вместо ручного ввода данных.
- Системный НДС‑комплаенс. Извлечение НДС и сопоставление TRN стали системными, а не интерпретационными, снизив комплаенс‑риски.
- Масштабируемый онбординг клиентов. Одна и та же платформа обслуживает множество клиентских аккаунтов без изменений кода — новые клиенты подключаются клонированием шаблона плана счетов и приглашением команды.
- Отчётность по требованию. Отчётность генерируется по требованию за любой период, на любой базе, из единого источника транзакций. Никаких параллельных таблиц. Никакой ручной консолидации.
- Масштабирование без линейного роста штата. Компания теперь может масштабировать клиентскую базу без линейного масштабирования штата бухгалтеров.
Стек
- Бекенд: Django, Django REST Framework, Celery, Redis
- База данных: PostgreSQL
- Фронтенд: Next.js
- AI/ML: Qwen (мультимодальная + текст), PaddleOCR
- Обработка документов: pdfminer.six, pdf2image
- Инфраструктура: Nginx, Docker Compose
