Поэтому задача формулируется не как «красивая карта», а как рабочий инструмент планирования. На вход — заказы дня, список курьеров и машин с их грузоподъёмностью и объёмом кузова. На выходе — распределение с порядком объезда и временем прибытия на каждую точку, посчитанное с учётом согласованных окон доставки, времени в пути, обязательного перерыва и предела рабочего времени. Отдельно прошу продумать поведение системы в неудобных случаях: заказ, который не влезает ни в одно окно, точка за городской чертой, курьер, вышедший на полсмены.
За логистом остаётся последнее слово, и это условие принципиальное. Любой предложенный вариант должен правиться руками — перенос точки между маршрутами, закрепление заказа за курьером, перестановка порядка, мгновенный пересчёт времени и загрузки. Расчёт опирается на данные о дорогах и пробках и не заменяет здравый смысл логиста, ручная правка остаётся всегда. Адреса клиентов не выгружаются в сторонние сервисы сверх необходимого для расчёта маршрута. Слежение за курьером вне рабочего времени не ведётся, отметки геопозиции хранятся ограниченный срок.
Ожидаемый состав работ:
— модуль распределения заказов по курьерам с ограничениями по весу и объёму;
— учёт окон доставки и понятный сигнал о невыполнимом окне;
— расчёт времени в пути, перерыва и остатка рабочего времени;
— экран ручной правки маршрутов логистом с пересчётом на лету;
— карта дня по всем маршрутам и карточка отдельного маршрута;
— печатная форма маршрутного листа;
— передача маршрута курьеру в мобильное приложение;
— отчёт по фактическому исполнению против плана с разбором отклонений.