Николай Шикин guru_sun Паспорт верифицирован
Всегда иду до конца! +7 (978) 124-84-90
Рейтинг
14 070
№ 58 в каталоге
Отзывы
Профессионализм
10/10
Коммуникация
10 /10
Город
Москва
На сайте с
2013 года
Freelance.Boutique
Премиум-сервис для лучших исполнителей
Безопасная сделка
Деньги списываются после приёмки

Система контроля 30 торговых точек (Telegram-бот + POS + склад)

Описание

Разработал систему полного контроля сети из 30 торговых точек (кофейни, пекарни, мини-маркеты) через Telegram-бот.
Основные модули:
• Открытие / закрытие смены
• Касса: размен, наличные/карта/QR/перевод, инкассация, выплаты ЗП, расчёт расхождений
• Учёт упаковки (5 позиций ежедневно)
• Накладные (вода, фантики, ванны кг) + перемещения между точками
• Списания (с порогами, обязательным фото и подтверждением)
• Инвентаризация (2 раза в неделю, с авто-расчётом разниц)
• Генерация Excel-отчётов (несколько листов)
• Автоудаление финансовых сообщений в чате
• Разграничение ролей (кассир / старший смены / владелец / админ)
Технический стек строго по ТЗ заказчика:
• Python + aiogram 3.x (Telegram-бот)
• PostgreSQL (все данные и логика)
• Планировщик задач на базе БД
• Идемпотентность операций
• Транзакции Serializable + FOR UPDATE
• Защита от дублей и повторных кликов

Решение

Telegram — только интерфейс (Web App + обычные сообщения). Вся бизнес-логика, расчёты и хранение — на бэкенде.
Ключевые технические решения:

Защита от дублей
Каждой операции присваивается уникальный idempotency-key (UUID), генерируемый на клиенте. Ключ сохраняется в Redis (TTL 24 ч) и в таблице idempotency_log. Перед выполнением проверяем:
• Есть ли уже запись с этим ключом? → возвращаем сохранённый результат
• Нет → выполняем в транзакции и сохраняем
Планировщик задач
Таблица jobs в PostgreSQL:
• id, name, schedule (cron), next_run (timestamp), status (scheduled/processing/completed/failed), lock_until, last_result
• Каждые 30 секунд cron-таск (APScheduler) берёт задачи, где next_run ≤ now() и status = scheduled
• Ставит status = processing и lock_until = now + 5 мин
• После выполнения обновляет next_run и status
• Если задача упала — retry до 3 раз, потом failed + алерт в Telegram админу
Корректность кассовых операций
Все операции с деньгами/остатками — внутри SERIALIZABLE-транзакций PostgreSQL:
BEGIN;
SELECT ... FOR UPDATE; ← блокировка строки
UPDATE balance ...;
INSERT INTO transactions ...;
COMMIT;
При конфликте сериализации — retry (2 раза). Это исключает отрицательные остатки и двойные списания даже при одновременных действиях двух кассиров.

Результат

Система запущена в продакшене на 30 точках.
• Кассиры проводят операции за 5–10 секунд
• Нет случаев двойных списаний или отрицательных остатков
• Владелец получает ежедневные Excel-отчёты автоматически
• Списания без фото блокируются (защита от воровства)
• Автоудаление финансовых сообщений снижает риск утечек
• Разграничение ролей: кассир видит только свою точку, админ — всю сеть
Проект полностью соответствует требованиям заказчика и уже окупается за счёт снижения потерь и ручного труда.

Оценили проект:

Другие проекты

Все проекты →
Веб-разработка и IT Для службы такси
Для службы такси
143
Веб-разработка и IT Свадебный
Свадебный
200
Веб-разработка и IT Доска объявлений на андроид
Доска объявлений на андроид
219
Веб-разработка и IT Мобильное приложение для обучения детей финансовой грамотности (UX/UI, геймификация, финансы)
Мобильное приложение для обучения детей финансовой грамотности (UX/UI, геймификация, финансы)
147