Перейти к содержимому
ATLASBIP Business Intelligence Partners
ATLASBIP Business Intelligence Partners

Стройматериалы · Торговая ERP · Портал партнёров

Techizat ERP для торговли стройматериалами с порталом для партнёров

От шести таблиц — к единому учёту в телефоне

Мы создали Techizat для бакинского поставщика стройматериалов, который продаёт их строительным компаниям. Закупки, продажи, платежи, маржа FIFO, коммерческие предложения, счета и накладные живут в одной системе, созданной в первую очередь для телефона, а у каждого партнёра есть портал со своим балансом и документами.

Ключевые факты о проекте

Тип проекта
Клиентский проект
Платформы
Мобильное PWA · Компьютер · Портал партнёров
Языки
Азербайджанский

01 Проблема

Шесть таблиц — и никто не знает маржу

Поставщик закупает стройматериалы и перепродаёт их строительным компаниям. Торговля держалась на шести таблицах сверки с поставщиками, WhatsApp и телефонных звонках. Закупки записывались. Продажи — нет.

  1. Продажи не записывались

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

  2. Шесть файлов — шесть способов считать

    Каждая таблица считала баланс по своей формуле. Ошибка в одном файле незаметно гасила ошибку в другом.

  3. Авансы проваливались между строк

    Деньги, заплаченные поставщикам вперёд, и депозиты не попадали ни в один баланс, поэтому никто не мог сказать, где находится оборотный капитал.

  4. Один товар — много названий

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

  5. Каждый ответ — через звонок

    «Сколько они нам должны?» означало открыть файлы, сложить столбцы и перезвонить.

Наше правило проектирования

Если ввод операции занимает больше времени, чем сообщение в WhatsApp, её никто не введёт. Поэтому каждый экран спроектирован под телефон и секундомер.

02 Продажи с телефона

Запись меньше чем за 20 секунд

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

  • Недавние партнёры — первыми

    Компании, которым вы продавали последними, стоят вверху списка, поэтому большинство продаж начинается с одного касания.

  • Один каталог, никакого свободного текста

    Товары выбираются из каталога с поиском. Название товара у поставщика один раз сопоставляется с каталогом и запоминается для всех следующих закупок.

  • Числа никогда не угадываются

    «1.465,20» и «1,465.20» означают разное. Если разделители неоднозначны, форма просит ввести число заново, а не угадывает.

  • Черновики и дубликаты

    Прерванный ввод ждёт в черновиках. Счёт поставщика, введённый дважды в течение недели, помечается ещё до сохранения.

03 Себестоимость FIFO и маржа

Каждая продажа знает, из какой закупки она пришла

Каждая строка закупки открывает партию себестоимости. Продажи расходуют сначала самые старые партии, и каждое списание сохраняется, поэтому маржа каждой продажи — зафиксированный факт, а не оценка в конце месяца.

  1. Первая продажа опустошает самую старую партию

    180 мешков для ООО «Demo Build» забирают все 120 мешков первой партии и 60 из второй. Себестоимость, выручка и маржа сохраняются вместе с продажей.

  2. Вторая продажа встречает новую цену

    200 мешков для ООО «Sample Homes» закрывают вторую партию и открывают третью. Более новая закупочная цена сразу отражается в марже.

  3. Третья продажа отказывается выдумывать себестоимость

    Продано 150 мешков, но в партиях осталось только 90. Techizat рассчитывает себестоимость этих 90 и помечает продажу как «себестоимость неполная», пока не придёт счёт на закупку. Разрыв никогда не заполняется последней ценой или нулём.

  • Ни копейки не теряется на округлении

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

  • Себестоимость видит только владелец

    Помощник может вводить закупки, но себестоимость и маржа от этой роли скрыты.

  • Корректировки с одобрением

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

  • Лёгкий склад

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

04 Платежи и балансы

Баланс, который никто не вводит

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

  • Рассчитывается, а не вводится

    Откройте экран баланса — и каждая цифра пересобирается из движений. Нет сохранённого итога, который мог бы устареть.

  • Авансы и депозиты учитываются

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

  • Одна компания — один баланс

    Если вы и покупаете у компании, и продаёте ей, у неё одна карточка и одна чистая позиция.

  • Платежи находят свои документы

    Платёж закрывает открытые счета, начиная с самого старого, или ровно те, что вы выбрали. Взаимозачёты, трёхсторонние расчёты и переводы долга записываются как есть.

  • Ничего не удаляется

    Ошибочная строка сторнируется новой строкой, поэтому история сохраняется, а баланс остаётся верным. Для списания долга нужна причина.

  • Кассы и банковские счета

    Каждое движение денег попадает в конкретную кассу или на конкретный банковский счёт, поэтому наличные в кассе — это цифра, а не ощущение.

05 КП, счета, накладные

От КП до накладной — одна цепочка

Запрос, пришедший в WhatsApp, становится коммерческим предложением. Принятое КП становится продажей, а к продаже формируются счёт и накладная. Каждый документ знает, откуда он появился и в каком он статусе.

  • У КП есть жизненный цикл

    Запрос, отправлено, принято, выполнено частично, закрыто. Для проигранного КП фиксируется причина: цена, срок поставки, наличие или условия.

  • Отправлено — значит зафиксировано

    Как только КП отправлено, его строки больше не меняются. Новое предложение — это копия, поэтому то, что видел клиент, никогда не переписывается.

  • Статус — из платежей

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

  • Доставка с именем

    Для накладной нужно имя получателя. Доставленная накладная уже не возвращается назад; ошибка исправляется новым документом.

  • Нумерация по сериям

    У КП, счетов и накладных свои автоматические серии, например КП-2026-0007.

  • Печать и WhatsApp

    У каждого документа есть печатная форма, а сообщение партнёру в WhatsApp открывается с телефона одним касанием.

06 Дебиторская задолженность и кредитные лимиты

Продажа, которая останавливается на лимите

Перед сохранением продажи Techizat задаёт один вопрос: сколько этот партнёр будет должен после этой строки? Вблизи лимита система предупреждает. За лимитом продажа останавливается и требует указать причину.

  • Вопрос задаётся до строки

    Проверка использует баланс после этой продажи, а не до неё, поэтому предупреждение приходит, пока оно ещё может изменить решение.

  • Причина, а не тупик

    За лимитом владелец подтверждает продажу, указав причину. Продажа помощника проходит с причиной и попадает в очередь проверки владельца.

  • «Не задан» — не значит «без лимита»

    Партнёр без лимита отображается как партнёр с незаданным лимитом, поэтому забытый лимит никогда не сойдёт за щедрый.

  • Возраст, а не интервалы

    Возраст долга — это возраст самой старой неоплаченной строки. Уведомления на 30, 60, 90 и 120 днях срабатывают по одному разу на долг, а экран баланса открывается тремя самыми старыми долгами.

07 Портал партнёров

Каждый партнёр видит только своё

Вместо звонка партнёр находит ответ в портале. Там компания видит свой баланс, свои операции в обе стороны, свои акты сверки и адресованные ей КП. Никакие данные других партнёров не покидают сервер.

  • Одна компания — и ничего больше

    Партнёр видит свой баланс, операции, акты сверки и КП. Что отправлять, решает сервер; экран ничего не прячет.

  • Сверка без звонков

    Ежемесячный акт сверки подтверждается в портале, а не по телефону.

  • КП принимаются онлайн

    Принятие КП — осознанное действие с подтверждением, которое фиксируется вместе со временем.

  • Доступ по одобрению

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

  • Тесты на утечки при каждом изменении

    Автоматические тесты входят как один партнёр и пытаются прочитать данные другого. Любая утечка проваливает проверку.

08 PWA, устойчивое к обрывам связи

Нет связи на объекте — нет потерянных операций

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

  • Очередь на телефоне

    Без сигнала операции хранятся в очереди на устройстве — со временем, когда они были сделаны на самом деле.

  • Честные цифры

    Операция в очереди отображается как ещё не отправленная и не меняет ни одного баланса, пока сервер её не примет.

  • Никогда не проводится дважды

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

  • Проверки продолжают работать

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

09 Как это устроено

Спроектирована как бухгалтерское ПО

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

Сначала учёт
Балансы, возраст долга и статус счёта выводятся из движений. Ни одно из этих значений не является полем, которое можно отредактировать.
Точные деньги
Все денежные расчёты идут в десятичных числах, а автоматическая проверка отклоняет арифметику с плавающей точкой над суммами.
Ядро предметной области
Учёт, FIFO, кредит, возраст долга, КП и документы живут в одном протестированном ядре, общем для веб-приложения и портала.
Безопасность
Ролевые права доступа, отдельный вход для партнёров, одобрение доступа к порталу владельцем и изоляция данных арендаторов на уровне базы данных.
Журнал аудита
Сторно вместо удаления, причины для списаний и превышения лимитов, а также проверка операций помощника в конце дня.
Здоровье данных
Экран здоровья данных отделяет повреждённые данные (красные) от незавершённой работы (жёлтой) — например, от продажи, которая ещё ждёт закупочную себестоимость.

Три роли — три представления

  • Владелец

    Видит себестоимость, маржу и все балансы. Только владелец сторнирует строки, списывает долги и одобряет доступ к порталу.

  • Помощник

    Вводит закупки и платежи. Себестоимость и маржа скрыты, а владелец проверяет операции за день.

  • Партнёр

    Входит в портал и видит одну компанию: свой баланс, операции, акты сверки и КП.

Вокруг ядра

  • Устанавливаемое PWA
  • Android · iPhone · компьютер
  • Горячие клавиши
  • Палитра команд
  • Ссылки для WhatsApp
  • Печатные формы
  • Экспорт в CSV
  • Уведомления о возрасте долга
  • Мультикомпанийная архитектура

Наша роль

Что сделала Atlas BIP

  1. Анализ на основе таблиц

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

  2. Продуктовый дизайн для телефона

    Мы спроектировали каждый экран вокруг одного правила — быстрее сообщения в WhatsApp — и сохранили спокойный интерфейс: один стиль карточек и цвет только там, где он что-то значит.

  3. Разработка предметной области

    Мы написали учёт, FIFO-себестоимость, кредитные лимиты, возраст долга, КП и документы как протестированное ядро с точными десятичными денежными расчётами.

  4. Портал партнёров

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

  5. Офлайн-PWA и качество

    Мы добавили офлайн-очередь, сквозные тесты в десктопных и мобильных браузерах и тест с засечкой времени ввода с телефона, который выполняется на каждом релизе.

Технологии

Современный стек

Приложение
  • TypeScript
  • React
  • Next.js
  • Tailwind CSS
Офлайн
  • PWA
  • Service worker
  • IndexedDB
Данные
  • PostgreSQL
  • Prisma
  • Zod
Качество
  • Vitest
  • Playwright

Вопросы и ответы

Что спрашивают торговые компании

Насколько быстро вводить данные с телефона?

Типичная операция занимает меньше 20 секунд с телефона. Недавние партнёры стоят первыми, товары выбираются из каталога с поиском, а итог всегда на экране. Автоматический сквозной тест на каждом релизе засекает время ввода на эмулированном телефоне.

Как FIFO-себестоимость учитывает товар, проданный до ввода счёта на закупку?

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

Что именно партнёр видит в портале?

Только свою компанию: баланс, операции в обе стороны, акты сверки и адресованные ей КП. Доступ открывается после одобрения заявки владельцем, а разделение обеспечивается на сервере и в базе данных, а не скрытием элементов на экране.

Работает ли система без стабильного интернета?

Да. Techizat — PWA, устойчивое к обрывам связи: операции, введённые без сигнала, ждут в очереди на телефоне и синхронизируются, когда связь возвращается. Каждая операция несёт одноразовый ключ, поэтому повторная отправка никогда не проводится дважды.

Можете создать такую систему для нашей дистрибьюторской компании?

Да. Мы начинаем с ваших реальных таблиц, актов сверки и чатов, письменно согласуем с вами денежные правила и строим вокруг них ERP для телефона: учёт, себестоимость и маржу, кредитный контроль, документы и портал партнёров.

Ваш проект

Следующая система — ваша

Расскажите, как сегодня в компании движутся заказы, деньги и документы. Мы ответим в течение 24 часов — с вопросами и конкретным планом.

Названия и цифры на экранах — демонстрационные данные.

Вернуться к началу