Wrapstore – Бизнес-дашборд
Финансовая панель для группы торговых компаний: продажи из трёх баз 1С и выписки Т-Банка и Альфа-Банка сводятся в один управленческий отчёт с ежедневной сверкой, категориями расходов, расчётом ЗП менеджеров и дебиторкой.
О проекте
Обратились с запросом свести финансы группы торговых компаний в одно место. Продажи и закупки велись в трёх разных базах 1С (две розничные конфигурации и УНФ), деньги проходили через счета в Т-Банке и Альфа-Банке, а итоговая управленческая таблица собиралась руками в Excel: выгрузка из 1С, выгрузка выписок, разнесение платежей по категориям, расчёт зарплат менеджеров по процентам от маржи и сверка остатков. На это уходили дни в конце месяца, а любая правка ломала пересчёт.
Это внутренняя веб-платформа управленческого учёта: backend на Python (FastAPI) с PostgreSQL и frontend на React, Vite, Redux Toolkit Query и Tailwind CSS, всё в Docker Compose тремя контейнерами (база, API и nginx со статикой). Данные приходят из пяти источников: три базы 1С по OData и два банковских API. Поверх общей модели операций собраны шесть рабочих разделов: ежедневная сверка, журнал банковских операций, журнал операций 1С, месячная аналитика, расчёт ЗП и дебиторка.
Технологии
- Python
- FastAPI
- Uvicorn
- PostgreSQL
- Pydantic
- 1С OData
- API Т-Банка
- API Альфа-Банка (mTLS)
- JWT
- React 19
- TypeScript
- Vite
- Redux Toolkit Query
- Tailwind CSS
- React Aria Components
- Docker
- nginx
Что разработано
- Интеграция с тремя базами 1С по OData: авторизация Basic, постраничная выгрузка, фильтр по проведённым документам и периоду, отдельная конфигурация типов документов и полей для розничных баз и для УНФ
- Интеграция с Т-Банком: список счетов с остатками и выписка по операциям за период с постраничным чтением и приведением дат к границам суток в UTC
- Интеграция с Альфа-Банком по mTLS: отдельный сертификат и ключ на каждое юрлицо, настраиваемый корневой бандл доверия, выгрузка операций по каждому счёту за каждый день периода
- Единая модель товарных операций в PostgreSQL с идемпотентной перезаписью по диапазону дат и уникальным внешним идентификатором документа
- Разбор банковских операций: определение организации по счёту, типа операции, суммы, контрагента, назначения платежа и способа оплаты (СБП, карта, наличные, счёт)
- Раздел «Сверка»: по каждому дню и каждой организации приход и расход денег рядом с приходом и расходом товара и валовой прибылью, с переключением между разбивкой по дням и по месяцам
- Раздел «Банк»: журнал операций с фильтрами по организации, типу, способу оплаты, контрагенту, назначению и диапазону сумм, с сохранением фильтров между сессиями
- Раздел «1С»: журнал товарных операций с фильтрами по организации, менеджеру, контрагенту, сумме и себестоимости
- Раздел «Аналитика»: месячная управленческая таблица из четырёх блоков (менеджеры, расходы, итоги, налоги и чистая прибыль) с разбивкой по организациям и итоговой колонкой
- Категоризация расходов правилами: расход относится к категории по вхождению подстроки в контрагента или назначение платежа, правила редактируются в интерфейсе поверх предзаполненного набора
- Ручные ячейки в аналитике: редактируемые значения расходов и удержаний сохраняются по ключу год, месяц, категория, организация и участвуют в расчётах вместе с автоматическими
- Расчёт зарплат менеджеров по формулам от валовой прибыли и разницы прихода и расхода, с отдельными формулами для руководителя направления и для менеджеров продаж
- Раздел «ЗП»: карточка менеджера с расчётом по организациям, удержаниями (налог, аванс, прошлый месяц, долги) и итогом к выплате
- Раздел «Дебиторка»: проведённые заказы покупателей без полной оплаты, с расчётом оплаты по регистрам расчётов с клиентами и оплаты счетов УНФ, группировкой по ответственному или по менеджеру из комментария, поиском и карточкой заказа
- Снимок капитала на дату: остатки товара по закупочной стоимости из регистров 1С плюс деньги на счетах, рядом с закупкой за месяц
- Расчёт налогов и чистой прибыли по организациям: налог с ЗП, 8 процентов, НДС 22 процента, УСН 7 процентов, подоходный, итоговая сумма налогов и чистая прибыль
- Авторизация по email и паролю: JWT на HS256 со сроком жизни 7 дней, пароли через PBKDF2-HMAC-SHA256, роли администратора и сотрудника, управление пользователями в интерфейсе
- Урезанный режим аналитики для офис-менеджера: только таблица ручного заполнения расходов, без доступа к выручке, прибыли и налогам
- Почасовая фоновая синхронизация всех источников с подробным логированием каждого этапа и продолжением работы при падении одного из источников
- Сборка и деплой в Docker Compose: PostgreSQL с проверкой готовности, backend на FastAPI, frontend на nginx с проксированием запросов к API
Ключевые фичи
- Одна таблица вместо пяти выгрузок: три базы 1С и два банка сводятся к общей модели операций, а месячный управленческий отчёт собирается сам
- Смешанный отчёт: автоматические цифры из 1С и банка и ручные ячейки в одной таблице, без отдельного файла с правками
- Правила категорий расходов настраиваются пользователем, поэтому новый поставщик или новая статья расходов не требуют изменения кода
- Зарплата менеджера считается из тех же данных, по которым строится отчёт, поэтому расчёт всегда сходится с выручкой и себестоимостью
- Дебиторка считается так же, как в журнале заказов 1С: только проведённые документы, оплата определяется по регистрам, а не по комментарию, служебные заказы (возвраты, тесты, дубли) отсеиваются
- Идемпотентная синхронизация: повторный запуск за тот же период перезаписывает данные, а не дублирует их
- Разные роли видят разные разделы, вплоть до отдельного режима аналитики только с ручными расходами для офис-менеджера
- Фильтры журналов сохраняются между сессиями, поэтому привычная выборка не собирается заново каждый раз
Решение задачи
Основная сложность проекта не в отчёте, а в разнородности источников. Три базы 1С имеют разные конфигурации: в розничных документы называются одинаково, а у УНФ другие типы документов, другое имя табличной части и другой набор связанных справочников, поэтому клиент OData построен так, что конфигурация документов и полей передаётся отдельно для каждой базы. Имена менеджеров в базах пишутся по-разному (полное ФИО, только имя, разные написания одного имени), поэтому перед сведением данные проходят нормализацию, иначе один человек превращался бы в отчёте в нескольких. То же с организациями: названия из 1С и из банка приводятся к общему ключу.
Второй пласт задачи: доверие к цифрам. Управленческий отчёт бесполезен, если после повторной синхронизации итоги меняются, поэтому данные 1С перезаписываются целиком по диапазону дат, а банковские операции складываются по уникальному идентификатору операции. Для дебиторки сознательно повторена логика журнала заказов 1С: берутся только проведённые заказы, оплата определяется по регистрам расчётов, а не по тексту комментария, и в отчёт не попадают заказы, закрытые полностью.
Третий пласт: та часть управленческого учёта, которой нет ни в одной системе (аренда, уборка, представительские, долги по зарплате). Вместо того чтобы выносить её обратно в Excel, ручные значения встроены в ту же таблицу отдельными полями ввода и хранятся в базе с привязкой к периоду, категории и организации. За счёт этого отчёт остаётся одним документом: часть цифр приходит из интеграций, часть вводит бухгалтер или офис-менеджер, а прибыль, коэффициенты, налоги и зарплаты считаются по единым формулам поверх обоих типов данных.
Метрики
Результаты
Синтетические данныеДанные на скриншотах вымышленные: реальные цифры, названия контрагентов и персональные данные заменены на синтетические.
Заказать похожий проект
Оставьте заявку, обсудим задачу и предложим решение под ваш бизнес.
Оставить заявку











