Что это за сервис
ERP-система для компании, занимающейся аутсорсингом/аутстаффингом рабочего персонала.
Суть
Компания берёт у заказчика заказ на работы, набирает под него рабочих, планирует их смены в календаре, отмечает кто вышел/не вышел и формирует реестры для оплаты.
Сферы: клининг, грузчики, разнорабочие, промоутеры, охрана и т.п. (домен handswork — «ручной труд»).
Бизнес-модель
У услуги (Service) две цены:
price_for_customer — платит заказчик
price_for_worker — получает рабочий
Разница между ними — маржа компании-посредника. У рабочего есть ИНН — работа с самозанятыми/договорами.
Главный рабочий процесс
| 1 | Заводят проект под заказчика |
| 2 | Привязывают объекты работ и услуги (цены, расписание) |
| 3 | Набирают и привязывают рабочих к проекту |
| 4 | В календаре планирования распределяют рабочих по сменам |
| 5 | Отмечают статусы по дням (вышел / не вышел / отработал) |
| 6 | Формируют реестры и выгружают в Excel — оплата рабочим и счёт заказчику |
Сущности и связи
Кто к кому привязан: заказчики, юрлица, объекты и как проект объединяет их в один заказ.
Главная идея
Partner — ваша компания (тенант). У неё справочники: заказчики, юрлица, объекты.
Project — рабочий заказ: он подключает нужные записи из справочников и добавляет услуги, рабочих и календарь.
Организация и объект работ всегда принадлежат заказчику (customer_id), а в проект попадают через связующие таблицы.
Карта связей
User) тоже привязаны к партнёру.partner_id → Partner. Бизнес-клиент, для которого ведут работы.partner_id + customer_id → Customer. ООО/ИП заказчика (ИНН, адреса).partner_id + customer_id → Customer. Магазин, склад, офис + адреса и контакты.partner_id → Partner. Объединяет заказчиков, юрлица, объекты, услуги и рабочих в один контракт.project_workers.project + job_object + service → кто, где, когда.Таблица привязок
| Сущность | К кому привязана постоянно | Как попадает в проект |
|---|---|---|
| Customer | partner_id | M2M project_customers |
| Organization | partner_id + customer_id | M2M project_organizations |
| JobObject | partner_id + customer_id | M2M project_job_objects |
| Service | — | project_id (напрямую, 1 проект → много услуг) |
| Worker | глобальный справочник | M2M project_workers |
| PlanningCalendar | — | project_id + job_object_id + service_id |
Пример: как проект объединяет всё
project_workers.Один заказчик / объект / юрлицо может участвовать в нескольких проектах — связь many-to-many. Проект не дублирует справочник, а выбирает из него нужное.
Технические моменты
Стек, архитектура и важные наблюдения.
Backend — erp-3-backend
Запуск через хелпер .docker/d. Документация API — Scribe (/docs).
Frontend — erp-3-frontend
Dev-сервер на :8080. API через VITE_API_URL.
Важные наблюдения
| Авторизация | По телефону + одноразовый код (OTP). Публичны только auth/send-code и auth/check-code, остальное за auth:api. На локалке SMS не шлётся; для +79999999999 код не проверяется. |
| CRUD-шаблон | У каждой сущности: index/create/store/update/edit/destroy + search, table-config, multiple-actions, save-column-order. UI — настраиваемые таблицы с массовыми действиями. |
| Права | spatie/laravel-permission (пока все сид-юзеры — ADMIN). |
| Данные локально | БД в Docker-томе erp-mysql; сохраняются при ./d up/down, стираются при ./d init. |
Дневник изменений
История жизни проекта. Общая для всей команды.
Идеи и фичи
Общая доска команды: Идея → В проработке → Принято → Сделано / Отклонено.
Заметки
Общие заметки команды со встреч и на лету.
Архив квиза ПП №760
Все завершённые прохождения квиза командой: кто отвечал, когда и какие решения выбрал.
Пользователи
Управление доступом: создание пользователей, роли и пароли.