/rlebe[dev].dev
Внутренняя система логистической компании

Сдельная оплата, которую больше никто не считает вручную

Курьеры и складские работники получают баллы за фактически выполненную работу: отсканировали груз — начислилось, собрали заказ — начислилось, проехали маршрут — посчитался километраж. К концу смены табель готов сам, и его видно и сотруднику, и руководителю.

ТАБЕЛЬ · КУРЬЕР · 14 ИЮЛЯ ПЕТРОПАВЛОВСК
08:42Погрузка груза A-10421.8 т · 4.2 м³ · тариф города+34.6
11:15Упаковка заказов3 заказа, доля делится на смену+3.0
13:50Разгрузка груза A-10390.9 т · 2.1 м³+17.3
16:30Отгрузка заказов5 заказов+5.0
18:05Пробег за день47.2 км × 120 ₸/км по тарифу города5 664 ₸
ИТОГ59.9 балла + километраж5 664 ₸
3
источника начислений
QR
вместо бумажных нарядов
Telegram
рабочее место курьера
0
ручных расчётов в Excel
Зачем это нужно

В логистике зарплату спорят, а не считают

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

Учёт

Работа фиксируется постфактум и по памяти

Между «разгрузили» и «записали» проходят часы. Часть работы теряется вовсе, часть приписывается не тому.

Мотивация

Сотрудник не видит свой результат

Пока начисление непрозрачно, стараться нет смысла: расчёт всё равно появится в конце месяца и объяснить его никто не сможет.

Управление

Не с чем сравнивать города и смены

Нет данных о том, сколько реально стоит тонна погрузки в конкретном городе — значит, нельзя ни планировать, ни менять тарифы осознанно.

Клиент

О проблеме узнают из жалобы

Курьер видит настроение клиента первым, но этот сигнал никуда не попадает. Компания узнаёт о недовольстве, когда клиент уже ушёл.

Как считаются баллы

Три источника начислений, ни одного ручного ввода

Все три работают от действия, которое сотрудник и так совершает: сканирует, собирает заказ, едет по маршруту. Ничего дополнительно отмечать не нужно — именно поэтому данные получаются полными.

Скан QR на грузе

В коде груза зашиты масса, объём и города отправки и приёма. Система сама понимает, что это за операция: если сотрудник находится в городе отправки — это погрузка, если в городе приёма — разгрузка. Отмечать тип работы вручную не нужно, а значит, и ошибиться в нём нельзя.

баллы = масса × ставка за тонну + объём × ставка за м³ — по тарифу города

Подготовка заказа

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

одна запись на пару «работа + сотрудник» — двойное начисление невозможно

Пробег по геопозиции

Телефон курьера присылает координаты, система считает дневной километраж и начисляет деньги по ставке за километр — своей для каждого города. Один итог на человека в день: пересчёт того же дня перезаписывает запись, а не добавляет вторую.

сумма = километры за день × ставка города за км
Тарифы

Экономика настраивается по городам

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

Прозрачность

Каждый балл привязан к операции

В карточке начисления видно, за какой груз, в каком городе, какого типа работа и когда. Спор «мне недоначислили» решается открытием одной записи.

Что компания видит помимо баллов

Курьер — единственный сотрудник, который встречается с клиентом лично

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

Доказательство

Видеоотчёт о доставке

Курьер снимает передачу заказа прямо в боте, видео уходит в систему и привязывается к заявке. Спор «мне ничего не привозили» закрывается ссылкой, а не разбирательством.

Ранний сигнал

Оценка настроения клиента

После доставки курьер отмечает, как прошла встреча: «отлично» или «не отлично» с комментарием и оценкой по десятибалльной шкале. Недовольство фиксируется в день доставки, а не в отзыве через неделю.

История

Кто и когда менял статус заявки

По каждому заказу хранится цепочка изменений с автором. Восстановить, что произошло с конкретной доставкой, можно через месяц.

Диспетчеризация

Распоряжения на забор груза

Менеджер создаёт распоряжение по городу, оно проходит статусы от отправки до завершения. Забор перестаёт жить в голосовых сообщениях.

Как это устроено

Telegram вместо приложения, очередь вместо прямых вызовов

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

Люди Курьер — бот в Telegram Складской — скан QR Менеджер — админка
Обмен очередь заказов очередь событий сканирования очередь обратной связи
Ядро Django: грузы, работы, баллы, заявки, тарифы
Снаружи внешняя система заказов хранилище видеоотчётов
Без приложения

Ничего не нужно ставить и объяснять

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

Развязка

Три независимых потребителя очереди

Заказы, события сканирования и обратная связь обрабатываются отдельно. Проблема в одном потоке не блокирует остальные, а перезапуск потребителя не теряет накопленные сообщения.

Роли

Курьер, складской, менеджер

Роль пользователя определяет и права в админке, и то, какие начисления ему вообще возможны. Город сотрудника — часть его профиля и участвует в расчёте.

Группы

Уведомления в рабочие чаты

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

Стек

Django · aiogram · RabbitMQ

Компактная система под конкретную операционную задачу: ядро на Django с админкой как рабочим местом менеджера, бот на aiogram как интерфейс поля и очередь как связь с внешним миром.

Ядро
Python 3.11Django 5DRFPostgreSQL
Поле
aiogram 3FSM-диалогиQR-кодыгеопозиция
Обмен
RabbitMQpika / aio-pikaFastAPI-воркер
Эксплуатация
DockerDocker Composemanagement-команды
Дальше

Если у вас сдельная работа, а учёт её — на бумаге

Склад, доставка, монтаж, выездной сервис — везде, где оплата зависит от фактически выполненных операций, эти операции можно фиксировать в момент, когда они происходят. Дальше расчёт делает система, а спор о зарплате превращается в открытую карточку начисления.

Разбор процессаКакие действия персонал уже совершает и какие из них можно фиксировать без лишних движений.
Система начисленийТарифы, роли, распределение между участниками, прозрачная история операций.
Интерфейс поляБот в мессенджере вместо приложения: ничего не ставить, ничему не учить.
Обсудить проект →