Кто делает LegoBPM
ЧП «Зокиров Зокир Умарбоевич», Душанбе. Программу пишем и поддерживаем сами: переносим данные новых компаний, настраиваем бланки под каждого застройщика и отвечаем на звонки по тому же номеру, что стоит в шапке сайта.
- Организация
- ЧП «Зокиров Зокир Умарбоевич»
- Город
- Душанбе
Четыре версии за три года
Программа начиналась в 2023 году не как продукт, а как способ навести порядок в собственной работе. Каждая следующая версия появлялась не от желания переписать, а оттого, что предыдущая упиралась в стену. Стены описаны ниже — скорее всего, вы стоите у одной из них прямо сейчас.
- 2023 · первая
Excel и Word
Шахматка — лист книги, где квартиры раскрашены вручную. Договоры — файл Word, в котором каждый раз меняли фамилию, номер и суммы. Платежи записывали отдельной таблицей, график считали формулой.
Файл живёт у того, кто его открыл. Копия у директора, копия у менеджера, копия «финальная-2» — и ни одна не совпадает с другой. Договор набирается заново каждый раз, потому что подстановки нет. Связи между проданной квартирой и пришедшими деньгами не существует вовсе: это два разных файла.
- Вторая
Google Таблицы и Google Документы
То же самое, но в облаке. Появилось главное, чего не хватало: один файл на всех, правки видны сразу, копий больше нет.
Ссылку на таблицу видит каждый, кому её переслали, — а внутри неё видно всё: и зарплаты, и чужие комплексы. Прав нет: любой может стереть строку или поправить сумму, и никто не узнает кто. Формулы ломаются от вставленной строки, а сломанная формула не кричит — она просто считает неправильно.
- Третья
Скрипты Google Apps Script поверх таблицы
Надстройка над той же таблицей: свои экраны вместо ячеек, кнопки, формы, печать договора, роли пользователей. Первая версия, которую можно было назвать программой.
Во что упёрлась надстройка над таблицей
Третья версия проработала дольше остальных и научила главному: что именно ломается, когда учётную систему строят поверх электронной таблицы. Шесть причин, по которым её пришлось оставить.
Таблица вместо базы данных
Каждое открытие экрана читало лист целиком: базы, которая умеет отдать нужные строки, там нет. Пока строк были сотни — терпимо. На тысячах договоров и платежей открытие превращалось в ожидание.
Чужие правила игры
Apps Script считает время выполнения и число обращений. Отчёт за год упирался в потолок и обрывался на середине — не потому, что расчёт тяжёлый, а потому, что среда так решила.
Разделение компаний держалось на честном слове
Идентификатор таблицы приходил из браузера. Значит, подменив его, можно было запросить чужие данные: изоляция компаний зависела от того, что прислал клиент, а не от того, что проверил сервер.
Ошибка отдавала данные вместо отказа
Не удалось прочитать права — показываем всё. Такое поведение выглядит удобным ровно до первого сбоя, после которого кассир видит зарплаты, а менеджер — чужой комплекс.
Один и тот же список в двух местах
Перечень модулей был выписан дважды и со временем разошёлся: раздел «Отчёты» просто не попадал в матрицу прав. Никакой ошибки при этом не появлялось — раздела не было, и всё.
Ничего нельзя было проверить
Тестов не было, и правка в расчёте рассрочки могла молча сломать печать договора. Узнавали об этом от клиента.
Четвёртая версия — та, что работает сейчас
Написана заново, а не доделана: перенести старые решения значило бы перенести и старые беды. Каждый пункт ниже закрывает конкретную стену из предыдущего раздела, и каждый можно открыть в демонстрации — там работает та же программа, что у застройщиков, только компания в ней вымышленная.
Свой сервер и настоящая база данных
Программа больше не живёт внутри чужой экосистемы и не зависит от её лимитов. Данные лежат в PostgreSQL — базе, которая умеет отдавать нужные строки, считать по ним итоги и не терять их при одновременной работе. Компании разделены на уровне базы, а не на уровне договорённости.
Права проверяет сервер, и на каждое действие
Роль и жилой комплекс проверяются в каждой функции чтения и записи, а не один раз при входе. Компания берётся из серверной сессии и никогда из того, что прислал браузер. Ошибка теперь закрывает доступ, а не открывает: не удалось проверить права — отказ.
Одно число на всю систему
План, факт, просрочка, остаток и график погашения считаются одним кодом. Тот же расчёт печатается в договоре, показывается кассиру при приёме денег, уходит в отчёт по должникам и в кабинет покупателя. Сверять источники не нужно — источник один.
Документы по вашим бланкам
Договоры, приходные и расходные ордера, счета печатаются из шаблонов самой компании: файл .docx с вашими реквизитами превращается в PDF на сервере. Не «похожий бланк», а тот самый, который у вас уже подписывают.
Паспорт с фотографии
Скан или фотография паспорта разбирается автоматически: серия, номер, кем выдан, дата. Менеджеру остаётся сверить, а не набирать вручную — на этом месте чаще всего и появлялись опечатки, из-за которых договор потом переделывали.
Переписка с покупателями внутри программы
Обращения из WhatsApp приходят в раздел «Лиды»: видно, кто написал, что спросил и кто ответил. Голосовые и фотографии остаются в системе, а не в личном телефоне менеджера, и каждое обращение привязывается к жилому комплексу и квартире.
Кабинет покупателя
У клиента есть свой адрес: он входит по номеру телефона без пароля и видит остаток, дату ближайшего платежа, историю оплат и свой договор. Отдел продаж перестаёт отвечать на «сколько я должен» по двадцать раз в день.
Сообщения уходят сами
Напоминание перед платежом, извещение о просрочке, подтверждение принятой оплаты, поздравление с днём рождения — по расписанию и по шаблонам компании. Повторно одному и тому же человеку одно и то же сообщение не уйдёт.
Работает с телефона
Не «мобильная версия», а те же экраны, собранные под узкий экран: меню шторкой, таблицы карточками, шахматка квадратами. Ставить приложение не нужно.
Изменения проверяются до того, как их увидит клиент
Расчёты рассрочки, распределение платежей, права и ключи рассылок закрыты автоматическими проверками. Правка, которая ломает старое поведение, не доезжает до боевого сервера.