Всегда иду до конца! +7 (978) 124-84-90

Николай Шикин guru_sun

Рейтинг: 3 190
Паспорт верифицирован
Всего отзывов: 110 0
Профессионализм: 10 Коммуникация: 10
Выполнил заданий: 107
  • Активность:
  • Работ в портфолио: 141
  • Типовых услуг: 1
  • Работ на продажу: 0
  • Образование: Магистратура
  • Тип занятости: Подработка
Был на сайте:

Система контроля 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-отчёты автоматически
• Списания без фото блокируются (защита от воровства)
• Автоудаление финансовых сообщений снижает риск утечек
• Разграничение ролей: кассир видит только свою точку, админ — всю сеть
Проект полностью соответствует требованиям заказчика и уже окупается за счёт снижения потерь и ручного труда.

Ссылки на примеры реализации

 prototype.shikinn.com/mob_VantUI_eureka/bot-kassa-...

Презентация проекта

Пос контроль телеграм веб апп.png
Screenshot_1.jpg

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

0