Паспорт проекта

Интерактивная карта проекта · история жизни · идеи

Что это за сервис

ERP-система для компании, занимающейся аутсорсингом/аутстаффингом рабочего персонала.

Суть

Компания берёт у заказчика заказ на работы, набирает под него рабочих, планирует их смены в календаре, отмечает кто вышел/не вышел и формирует реестры для оплаты.

Сферы: клининг, грузчики, разнорабочие, промоутеры, охрана и т.п. (домен handswork — «ручной труд»).

Бизнес-модель

У услуги (Service) две цены:

price_for_customer — платит заказчик
price_for_worker — получает рабочий

Разница между ними — маржа компании-посредника. У рабочего есть ИНН — работа с самозанятыми/договорами.

Главный рабочий процесс

1Заводят проект под заказчика
2Привязывают объекты работ и услуги (цены, расписание)
3Набирают и привязывают рабочих к проекту
4В календаре планирования распределяют рабочих по сменам
5Отмечают статусы по дням (вышел / не вышел / отработал)
6Формируют реестры и выгружают в Excel — оплата рабочим и счёт заказчику

Сущности и связи

Кто к кому привязан: заказчики, юрлица, объекты и как проект объединяет их в один заказ.

Главная идея

Partner — ваша компания (тенант). У неё справочники: заказчики, юрлица, объекты. Project — рабочий заказ: он подключает нужные записи из справочников и добавляет услуги, рабочих и календарь. Организация и объект работ всегда принадлежат заказчику (customer_id), а в проект попадают через связующие таблицы.

Карта связей

Уровень тенанта
Partner
Компания-посредник (Handswork)
Верхний уровень мультитенантности. Все справочники и проекты принадлежат партнёру. Пользователи (User) тоже привязаны к партнёру.
Справочники партнёра (постоянные привязки)
Customer
Заказчик
partner_id → Partner. Бизнес-клиент, для которого ведут работы.
Organization
Юрлицо
partner_id + customer_id → Customer. ООО/ИП заказчика (ИНН, адреса).
JobObject
Объект работ
partner_id + customer_id → Customer. Магазин, склад, офис + адреса и контакты.
↓ подключаются в проект (M2M)
Project — центр заказа
Project
Проект / заказ
partner_id → Partner. Объединяет заказчиков, юрлица, объекты, услуги и рабочих в один контракт.
Операционный уровень
Service
Услуга
Принадлежит проекту напрямую. Две цены: для заказчика и для рабочего.
Worker
Рабочий
Глобальный справочник. В проект добавляется через project_workers.
PlanningCalendar
Календарь смен
Связывает project + job_object + service → кто, где, когда.
Registry
Реестр
Итог по отработанным сменам → выгрузка в Excel для оплаты.

Таблица привязок

СущностьК кому привязана постоянноКак попадает в проект
Customerpartner_idM2M project_customers
Organizationpartner_id + customer_idM2M project_organizations
JobObjectpartner_id + customer_idM2M project_job_objects
Serviceproject_id (напрямую, 1 проект → много услуг)
Workerглобальный справочникM2M project_workers
PlanningCalendarproject_id + job_object_id + service_id

Пример: как проект объединяет всё

1. СправочникЗаказчик «Сеть магазинов X» → юрлица ООО «X-Север», ООО «X-Юг» → объекты: магазины с адресами.
2. ПроектСоздаём «Клининг для X, весна 2026» и подключаем заказчика, нужные юрлица и магазины.
3. Услуги и людиДобавляем услугу «Уборка» (2 цены) и рабочих в project_workers.
4. План и расчётВ календаре: услуга + объект + даты → статусы смен → реестр в Excel.

Один заказчик / объект / юрлицо может участвовать в нескольких проектах — связь many-to-many. Проект не дублирует справочник, а выбирает из него нужное.

Технические моменты

Стек, архитектура и важные наблюдения.

Backend — erp-3-backend

Laravel 12PHP 8.4 MySQL 8Redis NginxDocker

Запуск через хелпер .docker/d. Документация API — Scribe (/docs).

Frontend — erp-3-frontend

Quasar 2Vue 3 TypeScriptVite Piniayarn

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

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

Пользователи

Управление доступом: создание пользователей, роли и пароли.

Создать пользователя

Список пользователей

Вход в систему

Авторизуйтесь, чтобы продолжить

Защищённое соединение · доступ по ролям