Перейти к содержимому
Олимжон Ахмаджонов
Все работы

Кейс

POS-платформа для розницы — переписана во вторую версию

Кассовая система на штрихкодах: начиналась как монолит на Django в реальном магазине и была переписана во вторую версию на новой архитектуре — FastAPI + React, более лёгкий и быстрый интерфейс, смены, инвентаризации, возвраты, лояльность и Telegram-бот для владельца.

Клиент
Розничные магазины
Роль
Единственный разработчик — требования, архитектура, обе версии
Сроки
v1 — 2024 · v2 (переписывание) — 2026
Стек
PythonFastAPIPostgreSQLRedisCeleryReactTypeScriptWebSocketTelegram Bot APIDjango (v1)

Задача

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

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

Подход и архитектура

  • Сначала задокументировал существующую систему — бизнес- и функциональные требования, модели данных, API и руководство по миграции, — а затем спроектировал v2 по этой спецификации, а не переносил код.
  • Новая архитектура: слоистый бэкенд на FastAPI (эндпоинты → сервисы → CRUD → модели) с правами доступа для ролей администратора, менеджера и продавца, PostgreSQL, кэш в Redis и Celery для импорта, отчётов и напоминаний.
  • Более лёгкий и быстрый интерфейс: одностраничное приложение на React без перезагрузок между сканированиями, мгновенное обновление корзины, распознавание сканера штрихкодов по таймингу с защитой от двойного считывания и обновления в реальном времени через WebSocket.
  • Деньги — как бухгалтерский журнал: долги в неизменяемом журнале только с добавлением записей; смены с X/Z-отчётами и «слепой» сверкой кассы; инвентаризация со слепым пересчётом и отчётом о расхождениях; возвраты с возвратом на склад по каждой позиции.
  • Архитектура готова к двухуровневой схеме — сервер в магазине для работы без зависимости от интернета и облачный сервер, куда синхронизируются данные, — плюс Telegram-бот с оповещениями для владельца и напоминаниями о долгах.

Результат

  • v1 используется в магазине с 2024 года; v2 покрывает примерно 85–90% спецификации, ядро POS готово к работе в одном магазине.
  • Четыре типа корзин, пять способов оплаты, лояльность и кэшбэк, аналитика по 15+ метрикам, мастер настройки из шести шагов, интерфейс на русском и узбекском.

Что обеспечило надёжность

  • 280+ тестов бэкенда; CI запускает линтеры, проверку форматирования, тесты с покрытием, миграции и проверку забытых миграций, собирает Docker-образ.
  • Независимый разбор v2 нашёл 60+ проблем — включая гонку при списании остатков и проверку скидок, — и они вошли в план исправлений, а не остались пользователям.
  • Идемпотентные операции, усиленная авторизация с обязательной сменой пароля при первом входе, таймауты, скрипты бэкапа и восстановления.

Похожая задача?

Расскажите о ней — честно оценю объём, подход и то, каким может быть первый этап.

Обсудить проект

Расскажите о задаче — достаточно нескольких предложений.

Отвечаю в течение 1–2 рабочих дней. Или напишите напрямую: oakhmadjonov.uz@gmail.com