Склад, который сам следит за остатками.
Лёгкая система управления складом прямо в Telegram. Уборщики в пару касаний заказывают расходники на свою локацию, интерфейс не даёт заказать больше, чем есть, а при падении ниже критического остатка система сама шлёт заявку закупщику. Вместо дорогой БД — Google Таблицы. Спроектировано и написано в одиночку.
Закупка расходников в офисах и на объектах — это вечная «пожарная» история: то бумага кончилась, то заказали лишнего, то никто не знает, что вообще на складе. Вот что болит и что с этим делает Склад АХО.
Расходники внезапно кончаются на локации — и это замечают, когда уже поздно. Ручной контроль запасов не масштабируется.
Учёт ведётся вручную в тетрадях или разрозненных таблицах. Актуальных остатков не знает никто, ошибки копятся.
Заявки на несуществующий товар порождают пересорт, недостачи и споры «где мои позиции».
Кто, что и куда заказал — непонятно. А ставить сотрудникам ещё одно приложение никто не хочет.
Один короткий цикл связывает уборщика, администратора и закупщика. Всё внутри Telegram, всё логируется в таблицу.
Уборщик открывает мини-приложение. Роль определяется автоматически по Telegram ID — без логинов и паролей.
Видит товары с актуальными остатками и набирает корзину. Больше, чем есть на складе, добавить невозможно.
Перед оформлением обязательно выбирается локация — куда принести товары. Заказ без адреса не уйдёт.
Остатки уменьшаются, а операция мгновенно попадает в лист «Журнал заказов» в Google Таблице.
Админу — пуш о новом заказе. Если остаток стал ≤ критического — закупщику уходит сводная заявка, без дублей.
Админ жмёт «Поставка» — запасы пополняются на объём поставки, а флаги ожидания закупки сбрасываются.
Приложение само понимает, кто его открыл, и показывает нужный интерфейс. Никаких логинов — авторизация по идентификатору Telegram.
Ниже — не скриншот, а рабочая мини-версия системы. Оформите заказ как уборщик, посмотрите ленту администратора, доведите товар до критического остатка и увидите авто-заявку закупщику. Всё состояние — общее, как в реальном приложении.
| Время | Тип | Товар | Кол-во | Локация | Кто |
|---|
Подсказка: доведите «Моющее средство» до 5 и ниже — увидите, как загорится вкладка «Закупщик».
Мини-приложение живёт в браузере, поэтому серверу нельзя слепо верить входящим данным. Каждый запрос несёт криптографическую подпись Telegram, а бэкенд пересчитывает HMAC-SHA256 и сверяет её. Подделка отсекается. Включите тумблер — эмулируйте атаку.
Бот и API живут в одном процессе: aiogram запускается внутри lifespan FastAPI. Данные лежат в Google Таблицах, а конкурентный доступ к остаткам защищён блокировкой. Наведите на узел — подсветятся связи.
Ноль серверов баз данных и ноль админ-панелей: данные лежат на листах Google Sheets, которые менеджер открывает в привычном интерфейсе и читает как отчёт. Четыре листа держат весь проект.
MVP не значит «на коленке». Четыре решения, которые делают лёгкую систему надёжной.
Полноценная база и админ-панель для склада на десяток позиций — это дорого и долго для MVP, а менеджеру всё равно нужен привычный отчёт.
Решение: данные живут в Google Sheets через gspread и сервис-аккаунт. Ноль инфраструктуры, бесплатно, а отчётность открывается в знакомом интерфейсе.
Два человека заказывают один товар одновременно. Чтение-изменение-запись в таблицу не атомарны — остаток может списаться неверно.
Решение: критическая секция обёрнута в asyncio.Lock. Одновременные заказы сериализуются, и остаток всегда считается корректно.
Мини-приложение — это web-страница. Без защиты любой мог бы слать серверу поддельные запросы и списывать чужие остатки.
Решение: бэкенд проверяет подпись initData через HMAC-SHA256 с токеном бота. Данные без валидной подписи отклоняются.
Если слать заявку при каждом заказе ниже критического, закупщик получит десятки одинаковых сообщений по одному товару.
Решение: флаг «ожидание закупки» ставится один раз на товар и сбрасывается только «Поставкой». Одна позиция — одна заявка.
Реальная операционная задача бизнеса, решённая целиком и минимальными средствами — от бэкенда до интерфейса в Telegram.
Склад АХО заменяет тетради и таблицы удобным заказом в Telegram и сам следит, чтобы расходники не кончались.