Задача
Данные о машинах, водителях, тарифах и рейсах были разбросаны по разным таблицам. Сотрудникам приходилось сверять их между отделами. Диспетчеру, бухгалтерии и владельцу нужен разный доступ. Заказчик хотел собрать работу с автопарком и рейсами в одной системе, автоматизировать расчёты по заданным правилам и дать оператору поиск обычными словами.
Что разработали
Мы разработали CRM, в которой собраны машины, водители, тарифы и рейсы. Права диспетчера, бухгалтерии и владельца разделены с помощью RBAC. Система сама рассчитывает показатели по рейсам по заданным правилам.
Серверная часть написана на Python и FastAPI, интерфейс — на SvelteKit и TypeScript. JWT используется для аутентификации, TailwindCSS и bits-ui — для компонентов. Данные хранятся в PostgreSQL, изменения структуры базы проводятся через Alembic. openapi-typescript формирует типы для взаимодействия интерфейса с API, а бизнес-правила отделены от пользовательского представления. В CRM также есть LLM-ассистент для запросов обычными словами и OCR-распознавание транспортных накладных.
Как работает
После входа сотрудник видит только то, что разрешено его ролью. Диспетчер работает с машинами, водителями и рейсами. Бухгалтеру доступны тарифы и расчёты в пределах его прав, владельцу — информация для его роли. Изменения сохраняются в общей базе, но каждая роль получает их только в пределах своих прав. Если исходные данные меняются, система пересчитывает связанные показатели по настроенным правилам.
Оператор может задать вопрос обычными словами и получить ответ LLM-ассистента. OCR извлекает данные из транспортных накладных, после чего важные сведения проверяет сотрудник.
Результат
Вместо разрозненных таблиц компания получила общую CRM для работы с машинами, водителями, тарифами и рейсами. Роли ограничивают доступ к разделам и операциям, а расчёты выполняются по настроенным правилам. Оператор ищет сведения обычными словами. Данные из накладных можно распознать через OCR, проверить и использовать в CRM.
Ограничения и зависимости
Расчёты будут верны только при полных исходных данных и правильно настроенных правилах. Права доступа нужно сверять с обязанностями сотрудников. LLM-ассистент и OCR могут ошибаться, поэтому важные данные и решения проверяет человек. Справочники машин, водителей, тарифов и рейсов по-прежнему нужно поддерживать в актуальном состоянии.