Документация ЛК
Система

Обзор системы

Личный кабинет дилера - Обзор системы

Дата: ноябрь 2025
Версия: Laravel 10 + Livewire 3 + Filament 3
Продакшен: https://lk.septiki-tver.ru
Staging: https://lkstage.ncgroup-it.ru


Содержание

  1. Общее описание
  2. Технический стек
  3. Архитектура данных
  4. Функциональность по ролям
  5. Ключевые бизнес-процессы
  6. Интеграции
  7. Карта модулей системы
  8. Статистика системы
  9. Выявленные проблемы
  10. Нереализованный функционал
  11. Рекомендации по развитию
  12. Структура файлов
  13. Окружения
  14. Контакты
  15. История изменений

1. Общее описание

Система представляет собой B2B личный кабинет для управления заказами септиков и очистного оборудования. Основные пользователи:

  • Дилеры - создают заказы от имени своих клиентов
  • Менеджеры - курируют работу дилеров своих компаний
  • Производство - получает заказы и управляет изготовлением
  • Администраторы - полный доступ ко всем функциям

2. Технический стек

КомпонентТехнология
BackendLaravel 10 (PHP 8.4)
FrontendLivewire 3, Alpine.js, TailwindCSS
UI компонентыFilament 3.2
База данныхMariaDB 11
КэшированиеRedis
Real-timeLaravel Reverb
УведомленияTelegram Bot API
ДокументыPhpSpreadsheet (Excel)
Локальная средаLaravel Sail (Docker)
CI/CDGitHub Actions → Docker на сервере

3. Архитектура данных

3.1 Основные сущности (32 модели)

👥 Пользователи и права (8 моделей)

#МодельТаблицаОписание
1UserusersВсе пользователи системы (дилеры, менеджеры, производство, админы). Разделяются по group_id
2GroupgroupsГруппы пользователей: Admin (1), Dealer (2), Manager (3), Production (4)
3CompanycompaniesДилерские компании: юр. данные, договор, ИНН, ОГРН, скидки по категориям
4PolicypoliciesСправочник политик доступа (57 политик). Ключ key используется в check_access()
5UserPolicyuser_policiesПерсональные права пользователя (переопределяют групповые)
6GroupPolicygroup_policiesПрава группы по умолчанию
7CategoryUsercategory_userСвязь пользователя с категориями (для индивидуальных скидок)
8CategoryCompanycategory_companyСкидки компании по категориям товаров

📦 Каталог товаров (6 моделей)

#МодельТаблицаОписание
9CategorycategoriesИерархические категории (дерево). Флаг additional — дополнительные товары
10ProductproductsТовары: цена, дилерская цена, наращивание горловины, время производства
11OptionoptionsОпции товаров. Группы: enter (входы), single (одиночные). Типы входов: end, left, right
12PropertypropertiesСправочник характеристик (Объём, Глубина, Залповый сброс и др.)
13PropertyProductproperty_productСвязь характеристика ↔ товар со значением
14TypetypesТипы товаров: Септик, Погреб, Кессон

🛒 Заказы (9 моделей)

#МодельТаблицаОписание
15OrderordersОсновная сущность заказа. Связи: dealer, status, stock, manufacture
16OrderItemorder_itemsПозиции заказа (основные товары). Количество, наращивание, SN
17OrderItemOptionorder_item_optionsОпции позиции заказа (входы, доп. опции). Копия из options
18OrderOptionorder_optionsУстаревшая таблица опций заказа (legacy)
19OrderProductorder_productДополнительные товары в заказе (насосы, компрессоры)
20OrderHistoryorder_historiesЛог изменений: смена статуса, действия пользователей
21StatusstatusesСтатусы заказа: new, apply, payment, paid, production, delivery, pickup, install, completed, canceled
22StatusTransitionstatus_transitionsМатрица переходов между статусами с правами по ролям
23StatusPolicystatus_policiesСвязь статуса с политиками (кто видит заказы в статусе)

🏭 Склад и производство (5 моделей)

#МодельТаблицаОписание
24StockstocksСклады: Вертек, Склад СПБ, Базис. Адрес, привязка к производству
25ProductStockproduct_stocksТовары на складе с серийными номерами (SN). Флаг in_stock
26ManufacturemanufacturesПроизводственные площадки: Верховье, Елкино
27ReservationreservationsБронирование слотов в календаре производства
28PolicyStatuspolicy_statusСвязь политик со статусами для контроля видимости

💬 Коммуникации (3 модели)

#МодельТаблицаОписание
29MessagemessagesВнутренний чат заказа (менеджеры + админы, без дилера)
30DealerMessagedealer_messagesЧат с дилером по заказу
31TelegramNotificationtelegram_notificationsОчередь Telegram-уведомлений о смене статусов

📰 Контент (1 модель)

#МодельТаблицаОписание
32NewsnewsНовости и объявления для дилеров. Публикация, автор, прикрепления

3.2 Схема связей моделей

┌─────────────────────────────────────────────────────────────────────────────┐
│                           СТРУКТУРА ДАННЫХ                                    │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│   ┌─────────┐    ┌─────────┐    ┌───────────┐                               │
│   │  Group  │◄───│  User   │───►│  Company  │                               │
│   │ (4 типа)│    │         │    │           │                               │
│   └────┬────┘    └────┬────┘    └─────┬─────┘                               │
│        │              │               │                                      │
│        ▼              │               ▼                                      │
│   ┌─────────┐         │        ┌─────────────┐                              │
│   │ Group   │         │        │  Category   │                              │
│   │ Policy  │         │        │  Company    │                              │
│   └─────────┘         │        │  (скидки)   │                              │
│                       │        └─────────────┘                              │
│        ┌──────────────┼──────────────┐                                      │
│        ▼              ▼              ▼                                      │
│   ┌─────────┐    ┌─────────┐    ┌─────────┐                                 │
│   │ Policy  │    │  Order  │    │ Category│──► Product ──► Option          │
│   │         │    │         │    │ (дерево)│              │                  │
│   └────┬────┘    └────┬────┘    └─────────┘              ▼                  │
│        │              │                            PropertyProduct          │
│        ▼              ▼                                                      │
│   ┌─────────┐    ┌───────────┐    ┌─────────┐                               │
│   │ User    │    │ OrderItem │───►│OrderItem│                               │
│   │ Policy  │    │           │    │ Option  │                               │
│   └─────────┘    └─────┬─────┘    └─────────┘                               │
│                        │                                                     │
│                        ▼                                                     │
│                  ┌───────────┐    ┌─────────┐    ┌───────────┐              │
│                  │  Status   │───►│ Status  │───►│Manufacture│              │
│                  │           │    │Transition│    │           │              │
│                  └─────┬─────┘    └─────────┘    └─────┬─────┘              │
│                        │                               │                     │
│                        ▼                               ▼                     │
│                  ┌───────────┐                   ┌───────────┐              │
│                  │  Order    │                   │   Stock   │              │
│                  │  History  │                   │           │              │
│                  └───────────┘                   └─────┬─────┘              │
│                                                        │                     │
│                                                        ▼                     │
│                                                  ┌───────────┐              │
│                                                  │ Product   │              │
│                                                  │ Stock     │              │
│                                                  │ (SN)      │              │
│                                                  └───────────┘              │
│                                                                              │
└─────────────────────────────────────────────────────────────────────────────┘

4. Функциональность по ролям

4.1 Дилеры (group_id = 2)

  • ✅ Создание заказов (пошаговый мастер)
  • ✅ Просмотр своих заказов
  • ✅ Изменение статусов (согласно правам)
  • ✅ Загрузка файлов к заказам
  • ✅ Просмотр каталога с дилерскими ценами
  • ✅ Telegram-уведомления о статусах
  • ✅ Календарь своих заказов

4.2 Менеджеры (group_id = 3)

  • ✅ Всё что могут дилеры
  • ✅ Просмотр заказов своих дилеров
  • ✅ Управление дилерами своей компании
  • ✅ Расширенные права на изменение статусов
  • ✅ Общий календарь заказов

4.3 Производство (group_id = 4)

  • ✅ Просмотр заказов в производстве
  • ✅ Изменение статусов производства
  • ✅ Календарь производства

4.4 Администраторы (group_id = 1)

  • ✅ Полный доступ ко всем функциям
  • ✅ Управление пользователями
  • ✅ Управление каталогом
  • ✅ Управление статусами и переходами
  • ✅ Настройка политик доступа
  • ✅ Управление складами и производствами
  • Impersonation - вход под другим пользователем для просмотра системы от его лица
    • Кнопка "Авторизоваться" в списках пользователей
    • При выходе возврат к администратору (не logout)
    • Контролируется правами can_impersonate + *_can_auth

5. Ключевые бизнес-процессы

5.1 Создание заказа (пошаговый мастер)

Шаг 1: Выбор товара
├── Выбор основного товара (септика)
├── Выбор количества
├── Настройка опций (входы: 110мм, 160мм)
├── Наращивание горловины (мм)
└── Добавление доп. основных товаров

Шаг 2: Дополнительные товары
├── Компрессоры
├── Насосы
├── Кессоны
└── Раскладки

Шаг 3: Данные получателя
├── ФИО получателя
├── Контакты
├── Адрес доставки
├── Способ доставки/оплаты
└── Выбор склада/производства

Шаг 4: Подтверждение
└── Создание заказа

5.2 Система статусов

Статусы настраиваются динамически с матрицей переходов:

  • Каждый переход имеет права для каждой роли
  • Переходы могут требовать заполнения определенных полей
  • При смене статуса отправляются Telegram-уведомления

5.3 Ценообразование

Для основных товаров:
  Дилерская цена = Базовая цена × (1 - Скидка дилера%)
  + Стоимость опций
  + Стоимость наращивания
  + Индивидуальная скидка (если есть)

Для дополнительных товаров:
  Дилерская цена = dealer_price (фиксированная)

Скидки дилера настраиваются:

  1. На уровне компании (общая скидка)
  2. На уровне категории товара (CategoryCompany)

6. Интеграции

6.1 Telegram Bot

  • Привязка пользователя по номеру телефона
  • Уведомления о смене статуса заказа
  • Уведомления о загрузке файлов дилером

6.2 Генерация документов

  • Спецификация заказа (Excel)
  • Бланк заказа
  • Автонумерация спецификаций по компании

7. Карта модулей системы

Детальная документация каждого модуля находится в папке /docs

7.1 Управление пользователями

МодульДокументацияОписание
АдминистраторыАдминистраторыУправление администраторами системы (group_id=1)
МенеджерыМенеджерыУправление менеджерами компаний (group_id=3)
Дилеры (менеджеры)ДилерыУправление дилерами компаний (group_id=2)
ПроизводствоПроизводствоСотрудники производства (group_id=4)
Дилеры (компании)КомпанииУправление дилерскими компаниями
Группы пользователейГруппы4 группы: Admin, Dealer, Manager, Production
Политики доступаПолитикиRBAC-система (57 политик)

7.2 Каталог и товары

МодульДокументацияОписание
КаталогКаталогИерархический каталог категорий и товаров
Товары спискомТовары спискомУправление товарами в табличном виде
ХарактеристикиХарактеристикиСправочник характеристик товаров
ТипыТипыКлассификация товаров (Септик, Погреб, Кессон)

7.3 Заказы и статусы

МодульДокументацияОписание
Карточка заказаКарточка заказаПолное руководство по работе с заказами
СтатусыСтатусыУправление статусами и переходами

7.4 Склады и производство

МодульДокументацияОписание
СкладыСкладыУправление складами и остатками
Места производстваПроизводстваУправление производственными площадками

7.5 Прочие модули

МодульДокументацияОписание
ГлавнаяГлавнаяДашборд с виджетами и статистикой
НовостиНовостиНовости и объявления для дилеров
КалендарьКалендарьКалендарь заказов по датам

7.6 Схема связей модулей

                              ┌─────────────────┐
                              │   ПОЛИТИКИ      │
                              │   ДОСТУПА       │
                              │  (57 политик)   │
                              └────────┬────────┘

            ┌──────────────────────────┼──────────────────────────┐
            │                          │                          │
            ▼                          ▼                          ▼
   ┌─────────────────┐       ┌─────────────────┐       ┌─────────────────┐
   │     ГРУППЫ      │       │  ПОЛЬЗОВАТЕЛИ   │       │    СТАТУСЫ      │
   │  (4 группы)     │◄──────│  (User)         │───────►│ (переходы)      │
   └────────┬────────┘       └────────┬────────┘       └────────┬────────┘
            │                         │                         │
            │            ┌────────────┼────────────┐            │
            │            │            │            │            │
            ▼            ▼            ▼            ▼            ▼
   ┌────────────┐  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
   │ КОМПАНИИ   │  │ ЗАКАЗЫ   │ │ КАТАЛОГ  │ │ СКЛАДЫ   │ │ПРОИЗВОД- │
   │            │  │          │ │          │ │          │ │   СТВА   │
   └──────┬─────┘  └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
          │             │            │            │            │
          │             │            ▼            │            │
          │             │      ┌──────────┐       │            │
          │             └─────►│ ТОВАРЫ   │◄──────┘            │
          │                    │ (Product)│                    │
          │                    └────┬─────┘                    │
          │                         │                          │
          │                    ┌────┴────┐                     │
          │                    ▼         ▼                     │
          │             ┌──────────┐ ┌──────────┐              │
          │             │ХАРАКТЕР- │ │  ТИПЫ    │              │
          │             │ ИСТИКИ   │ │          │              │
          │             └──────────┘ └──────────┘              │
          │                                                    │
          └────────────────────┬───────────────────────────────┘


                       ┌──────────────┐
                       │   ДИЛЕРЫ     │
                       │ (менеджеры)  │
                       └──────────────┘

8. Статистика системы

На основе анализа модулей (ноябрь 2025)

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

ГруппаКоличествоОписание
Администраторы2group_id = 1
Дилеры35group_id = 2
Менеджеры9group_id = 3
Производство7group_id = 4
Всего53

8.2 Каталог

МетрикаЗначение
Категорий9
Товаров145
Характеристик4
Типов товаров4

8.3 Бизнес-данные

МетрикаЗначение
Компаний14
Складов9
Мест производства5
Статусов12
Политик доступа57

9. Выявленные проблемы и технический долг

Сводка проблем собрана из анализа всех модулей системы

🔴 Критические (требуют немедленного исправления)

#ПроблемаМодульФайлВлияние
1Захардкоженные секретыОбщееTelegram.php:19-20Безопасность
2URL захардкоженЗаказыOrder.php:113,321Некорректные ссылки на staging
3$guarded = falseВСЕ моделиВсе моделиMass assignment уязвимость
4Типы товаров — строковая связьТипыProduct.typeПри переименовании типа связи разрываются

🟡 Средние (желательно исправить)

Баги в коде

#ПроблемаМодульФайл
5Неправильные права manager_can_* вместо production_can_*ПроизводствоProductions/Listing.php
6Неправильный view livewire.news.listingГруппы, Политики, СтатусыListing.php
7$disableEdit не используетсяТипы, Характеристики, СкладыListing.php
8Некорректный redirect после удаленияХарактеристикиProperty/Control.php

Отсутствие проверок прав

#МодульПроблема
9КомпанииНет проверки прав в контроллере
10ХарактеристикиНет проверки прав в контроллере
11ДилерыНет проверки dealer_can_view в контроллере
12ГруппыНет проверки прав в контроллере

Архитектурные проблемы

#ПроблемаОписание
13Большие Livewire компонентыOrder/Add.php — 2498 строк
14Смешение старой/новой структуры заказовOrder.product_id vs OrderItem
15Дублирование логики расчёта ценВ нескольких местах
16Дилеры без индивидуальных правТолько групповые политики

🟢 Низкий приоритет

#ПроблемаОписание
17Нет CRUD для политикНельзя создать политику через UI
18Нет аудита изменений правНе логируется кто менял права
19Нет unit-тестовКритические процессы не покрыты
20Нет API документацииОтсутствует Swagger/OpenAPI
21Неиспользуемое поле indexВ Types, Properties

10. Нереализованный функционал

Источник: Документы из папки /docs, особенно Список_проблем_и_задач_по_системе_ЛК_дилеров.docx

10.1 Нереализованные роли

РольОписание из ТЗСтатус
РуководительРасширенные права, одобрение заявок на дилерство❌ Нет (есть только Админ)
ЛогистПланирование монтажей, контроль отгрузок❌ Нет
ИнженерГрафик выездов, сдача документации❌ Нет

10.2 Нереализованные функции

ФункцияОписаниеСтатус
Заказы для частных клиентовЗаказ без дилера с отдельным прайсом❌ Нет
История измененийФиксация всех изменений в заказе⚠️ Не работает
Входы 160ммОтдельная цена за вход 160мм❓ Проверить
Патрубки кессонов4 бесплатно, 5-12 по 1500₽❓ Проверить

10.3 Критичные требования из ТЗ

  1. Статичность цен - завершенные заказы должны хранить снапшот цен
  2. Серийные номера - каждая станция в заказе должна иметь свой номер
  3. Ограничения производства - не может менять конфигурацию, только добавлять номер

11. Рекомендации по развитию

11.1 Критический приоритет (немедленно)

ЗадачаФайлСложность
Вынести Telegram API ключ в .envTelegram.phpЛёгкая
Заменить захардкоженный URLOrder.phpЛёгкая
Исправить права manager_can_*production_can_*Productions/Listing.phpЛёгкая
Исправить view livewire.news.listingGroups/Listing.php, Policies/Listing.phpЛёгкая

11.2 Высокий приоритет (1-2 недели)

ЗадачаОписание
Добавить проверки прав в контроллерыКомпании, Характеристики, Дилеры, Группы
Рефакторинг связи Types → ProductsЗаменить строку на FK
Добавить защиту от удаления используемыхТипы, Характеристики, Статусы

11.3 Средний приоритет (1-2 месяца)

ЗадачаОписание
Рефакторинг Order/Add.phpРазбить на подкомпоненты
Создать PriceCalculatorServiceВынести логику расчёта цен
Миграция структуры заказовУдалить старую структуру
Добавить индивидуальные права для дилеровРасширить check_access()

11.4 Низкий приоритет (долгосрочно)

  • Unit-тесты для критических функций
  • REST API для мобильного приложения
  • Интеграция с 1С
  • Swagger/OpenAPI документация
  • Система отчётности и аналитики

12. Структура файлов

app/
├── Events/           # События (MakeTelegramNotify)
├── Http/
│   ├── Controllers/  # Контроллеры (18 шт)
│   └── Middleware/   # Middleware
├── Livewire/         # Livewire компоненты (59 шт)
│   ├── Order/        # Заказы (Add, Edit, Listing, etc.)
│   ├── Dealers/      # Дилеры
│   ├── Managers/     # Менеджеры
│   ├── Category/     # Каталог
│   ├── Calendar/     # Календарь
│   └── ...
├── Models/           # Модели (32 шт)
├── Services/         # Сервисы
│   ├── Telegram.php
│   ├── OrderSpecification.php
│   ├── OrderBlank.php
│   └── OptimizeImage/
└── Providers/

13. Окружения

ОкружениеURLВеткаДеплой
Localhttp://localhostлюбаяsail up
Staginghttps://lkstage.ncgroup-it.rustageАвтоматический (CI/CD)
Productionhttps://lk.septiki-tver.rumainРучной

14. Контакты


15. История изменений документа

ДатаИзменения
Ноябрь-Декабрь 2025Первоначальная версия
Ноябрь-Декабрь 2025Актуализация: добавлена карта модулей, статистика, сводка проблем из анализа 20 модулей

On this page

Личный кабинет дилера - Обзор системыСодержание1. Общее описание2. Технический стек3. Архитектура данных3.1 Основные сущности (32 модели)👥 Пользователи и права (8 моделей)📦 Каталог товаров (6 моделей)🛒 Заказы (9 моделей)🏭 Склад и производство (5 моделей)💬 Коммуникации (3 модели)📰 Контент (1 модель)3.2 Схема связей моделей4. Функциональность по ролям4.1 Дилеры (group_id = 2)4.2 Менеджеры (group_id = 3)4.3 Производство (group_id = 4)4.4 Администраторы (group_id = 1)5. Ключевые бизнес-процессы5.1 Создание заказа (пошаговый мастер)5.2 Система статусов5.3 Ценообразование6. Интеграции6.1 Telegram Bot6.2 Генерация документов7. Карта модулей системы7.1 Управление пользователями7.2 Каталог и товары7.3 Заказы и статусы7.4 Склады и производство7.5 Прочие модули7.6 Схема связей модулей8. Статистика системы8.1 Пользователи8.2 Каталог8.3 Бизнес-данные9. Выявленные проблемы и технический долг🔴 Критические (требуют немедленного исправления)🟡 Средние (желательно исправить)Баги в кодеОтсутствие проверок правАрхитектурные проблемы🟢 Низкий приоритет10. Нереализованный функционал10.1 Нереализованные роли10.2 Нереализованные функции10.3 Критичные требования из ТЗ11. Рекомендации по развитию11.1 Критический приоритет (немедленно)11.2 Высокий приоритет (1-2 недели)11.3 Средний приоритет (1-2 месяца)11.4 Низкий приоритет (долгосрочно)12. Структура файлов13. Окружения14. Контакты15. История изменений документа