← Вернуться к приложению
Техническое задание
Модуль «Биржа Труда» (Labor Stock v3)
Версия: 3.0 · Дата: 19 февраля 2026 · Статус: Актуально
Продукт: HRlink · Платформа: Web (SPA + PHP API)
1. Общие сведения о проекте
1.1 Назначение
HRlink — Биржа Труда — это B2B-платформа (модуль HR-системы), обеспечивающая внутренний рынок подработок внутри одной или нескольких юридических лиц холдинга. Система позволяет работодателям создавать временные задания (подработки), а сотрудникам — откликаться на них, получать назначения и вести учёт рабочего времени.
1.2 Цели
- Обеспечить прозрачный процесс публикации и распределения подработок
- Автоматизировать цикл от создания подработки до подтверждения выполнения
- Предоставить аналитику по подработкам, сотрудникам и подразделениям
- Обеспечить ролевое разграничение доступа
- Поддержать кастомизацию под корпоративный стиль компании-клиента
1.3 Ключевые характеристики v3
- Обновлённый B2B-дизайн на базе Inter font и новой цветовой палитры
- Полная мобильная адаптация (responsive, mobile-first для основных сценариев)
- Хранение пользователей в Excel-файле (Users.xlsx)
- Логирование подключений с IP-адресами в Log.xlsx
- Панель кастомизации дизайна (цвета, брендинг) в администрировании
- PHP-бэкенд с API для работы с данными
2. Функциональные возможности
2.1 Модуль «Каталог подработок»
| Функция | Описание | Роли |
| Просмотр каталога | Список подработок в виде карточек с фильтрацией и поиском | Все |
| Детальная карточка | Полная информация: описание, условия, оплата, история, отклики | Все |
| Фильтрация | По типу, отделу, юрлицу, статусу; полнотекстовый поиск | Все |
| Создание подработки | Форма с полями: название, тип, отдел, юрлицо, даты, оплата, мест | HR, Руководитель |
| Публикация | Перевод из черновика в опубликованную | HR, Руководитель |
2.2 Типы подработок
| Тип | Код | Описание |
| Смена | SHIFT | Работа по сменам с фиксированным графиком |
| Задача | TASK | Разовое задание с определённым результатом |
| Проект | PROJECT | Долгосрочная проектная работа |
| Почасовая | HOURLY | Оплата по фактически отработанным часам |
2.3 Модуль «Отклики»
| Функция | Описание | Роли |
| Подать отклик | Сотрудник откликается на подработку с комментарием | Сотрудник |
| Отозвать отклик | Отмена поданного отклика до одобрения | Сотрудник |
| Управление откликами | Просмотр, фильтрация, одобрение/отклонение откликов | HR, Руководитель |
| Мои отклики | Персональный список откликов со статусами | Сотрудник |
2.4 Модуль «Назначения»
| Функция | Описание | Роли |
| Автоназначение | При политике AUTO — сотрудник назначается автоматически | Система |
| Ручное назначение | HR/Руководитель одобряет отклик → создаётся назначение | HR, Руководитель |
| Статус документов | Отслеживание подписания документов (На подписании / Подписаны) | Все |
| Подтверждение выполнения | Сотрудник запрашивает → Руководитель подтверждает | Все |
2.5 Модуль «Учёт времени»
- Добавление записей (дата, часы, комментарий) привязанных к назначению
- Просмотр табеля по месяцам с итогами
- Доступен всем ролям (сотрудник — свои, HR/руководитель — все)
2.6 Модуль «Уведомления»
- Список уведомлений с маркером прочитано/непрочитано
- Типы: новый отклик, одобрение, запрос подтверждения, документы, закрытие
- Бейдж-счётчик в навигации и topbar
- Клик по уведомлению — переход к связанному объекту
2.7 Модуль «Отчёты»
- Сводная статистика: подработки, отклики, назначения, часы
- Фильтры: период, разрез (по подразделениям / юрлицам / сотрудникам / типам)
- Табличное представление с итогами
- Экспорт в XLSX и CSV
2.8 Модуль «Администрирование»
| Функция | Описание |
| Глобальные лимиты | Макс. назначений, макс. откликов, макс. часов за период |
| Политики по подразделениям | Переопределение лимитов на уровне отдела |
| Синхронизация с HRlink | Статус синхронизации сотрудников и отделов |
| Управление пользователями | CRUD операции над пользователями (Users.xlsx) |
| Настройки дизайна | Цветовая схема, брендинг компании |
| Журнал аудита | Все действия с фильтрацией по типу, пользователю, дате |
| Журнал подключений | Лог с IP-адресами, датой/временем, user-agent |
3. Роли пользователей
| Роль | Код | Описание | Ключевые права |
| Сотрудник | employee |
Рядовой сотрудник компании, ищущий подработку |
Просмотр каталога (только опубликованные), подача/отзыв откликов, просмотр назначений, учёт времени, уведомления |
| HR-менеджер | hr |
Специалист по управлению персоналом |
Создание/публикация подработок, управление откликами и назначениями, отчёты, учёт времени всех сотрудников |
| Руководитель | manager |
Руководитель подразделения |
Создание подработок отдела, подтверждение выполнения, управление откликами, отчёты по подразделению |
| Администратор | admin |
Системный администратор биржи |
Все функции + настройки лимитов, политик, дизайна, управление пользователями, аудит, журнал подключений |
3.1 Матрица доступа к разделам
| Раздел | Сотрудник | HR | Руководитель | Админ |
| Дашборд | ✅ | ✅ | ✅ | ✅ |
| Каталог | ✅ (только опубл.) | ✅ | ✅ | ✅ |
| Создание подработки | ❌ | ✅ | ✅ | ✅ |
| Мои отклики | ✅ | ❌ | ❌ | ❌ |
| Мои назначения | ✅ | ❌ | ❌ | ❌ |
| Управление откликами | ❌ | ✅ | ✅ | ✅ |
| Управление назначениями | ❌ | ✅ | ✅ | ✅ |
| Учёт времени | ✅ | ✅ | ✅ | ✅ |
| Уведомления | ✅ | ✅ | ✅ | ✅ |
| Отчёты | ❌ | ✅ | ✅ | ✅ |
| Администрирование | ❌ | ❌ | ❌ | ✅ |
| Дизайн | ❌ | ❌ | ❌ | ✅ |
| Пользователи | ❌ | ❌ | ❌ | ✅ |
| Журнал аудита | ❌ | ❌ | ❌ | ✅ |
| Журнал подключений | ❌ | ❌ | ❌ | ✅ |
4. Бизнес-процесс
4.1 Жизненный цикл подработки
┌─────────────┐ ┌──────────────┐ ┌───────────────┐ ┌──────────┐
│ ЧЕРНОВИК │────▶│ ОПУБЛИКОВАНА │────▶│ НАБОР ИДЁТ │────▶│ ЗАКРЫТА │
│ (DRAFT) │ │ (PUBLISHED) │ │ (RECRUITING) │ │ (CLOSED) │
└─────────────┘ └──────────────┘ └───────────────┘ └──────────┘
HR создаёт HR публикует Есть отклики Все места
заполнены
4.2 Жизненный цикл отклика
┌──────────┐ ┌───────────┐ ┌────────────┐
│ ПОДАН │────▶│ ОДОБРЕН │────▶│ НАЗНАЧЕНИЕ │
│(SUBMITTED│ │(APPROVED) │ │ создано │
└──────────┘ └───────────┘ └────────────┘
│
│ ┌───────────┐
└──────────▶│ ОТКЛОНЁН │
│(REJECTED) │
└───────────┘
4.3 Жизненный цикл назначения
┌─────────────┐ ┌────────────┐ ┌───────────────┐ ┌───────────┐
│ АКТИВНО │────▶│ ОЖИДАЕТ │────▶│ ЗАВЕРШЕНО │ │ ОТМЕНЕНО │
│ (ACTIVE) │ │ ПОДТВ. │ │ (COMPLETED) │ │(CANCELLED)│
└─────────────┘ │(COMP_PEND) │ └───────────────┘ └───────────┘
└────────────┘
Сотрудник Сотрудник Руководитель
работает запрашивает подтверждает
4.4 Основной бизнес-процесс (end-to-end)
- Создание: HR/Руководитель создаёт подработку (черновик)
- Публикация: Подработка публикуется и становится видна сотрудникам
- Отклик: Сотрудник просматривает каталог и откликается
- Рассмотрение: HR/Руководитель одобряет или отклоняет отклик
- Назначение: При одобрении создаётся назначение, формируются документы
- Подписание: Документы отправляются на электронную подпись
- Работа: Сотрудник выполняет работу, ведёт учёт времени
- Завершение: Сотрудник запрашивает подтверждение выполнения
- Подтверждение: Руководитель подтверждает завершение
- Закрытие: Подработка закрывается при заполнении всех мест
5. Архитектура системы
5.1 Обзор архитектуры
┌─────────────────────────────────────────────────────────┐
│ КЛИЕНТ (Браузер) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────────┐ │
│ │ HTML/CSS │ │ JavaScript │ │ Fetch API │ │
│ │ (Inter font) │ │ (SPA Logic) │ │ (REST calls) │ │
│ └──────────────┘ └──────────────┘ └───────┬───────┘ │
└──────────────────────────────────────────────┼──────────┘
│ HTTP
▼
┌─────────────────────────────────────────────────────────┐
│ СЕРВЕР (Nginx + PHP-FPM) │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌────────────────┐ │
│ │ settings.php │ │ users.php │ │ log.php │ │
│ │ (дизайн) │ │ (авториз.) │ │ (логирование) │ │
│ └──────┬──────┘ └──────┬──────┘ └───────┬────────┘ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌──────▼──────┐ ┌───────▼────────┐ │
│ │ settings.json│ │ Users.xlsx │ │ Log.xlsx │ │
│ │ (JSON) │ │ (Excel) │ │ (Excel) │ │
│ └─────────────┘ └─────────────┘ └────────────────┘ │
│ │
│ PhpSpreadsheet Library (Excel R/W) │
└─────────────────────────────────────────────────────────┘
5.2 Технологический стек
| Компонент | Технология | Версия |
| Фронтенд | HTML5 + CSS3 + Vanilla JavaScript (SPA) | — |
| Шрифт | Inter (Google Fonts) | Variable |
| Бэкенд | PHP (FastCGI) | 8.3 |
| Excel-движок | PhpSpreadsheet | 5.4 |
| Веб-сервер | Nginx | 1.24 |
| Хранение данных | Excel (.xlsx) + JSON | — |
| ОС | Ubuntu Linux | 24.04 |
5.3 Структура проекта
Labor_Stock_v3/
├── index.html # Основное SPA-приложение
├── api/
│ ├── log.php # API логирования подключений
│ ├── users.php # API управления пользователями
│ └── settings.php # API настроек дизайна
├── data/
│ ├── Users.xlsx # Данные пользователей (Excel)
│ ├── Log.xlsx # Журнал подключений (Excel)
│ └── design_settings.json # Настройки дизайна (JSON)
├── assets/
│ ├── logo.png # Логотип компании
│ ├── icon.png # Иконка приложения
│ └── short-logo.png # Компактный логотип
├── docs/
│ └── technical_spec.html # Техническое задание (этот файл)
├── vendor/ # Composer-зависимости
├── composer.json # Конфигурация Composer
└── composer.lock
6. Структура данных
6.1 Users.xlsx — Пользователи
| Колонка | Тип | Описание |
| A — ID | Integer | Уникальный идентификатор |
| B — Логин | String | Имя для входа в систему |
| C — Пароль | String | Пароль (в прототипе — открытый текст) |
| D — ФИО | String | Полное имя пользователя |
| E — Инициалы | String(2) | Инициалы для аватара |
| F — Роль | Enum | admin | hr | manager | employee |
| G — Отдел | String | Подразделение сотрудника |
| H — Email | String | Электронная почта |
| I — Активен | String | Да | Нет |
6.2 Log.xlsx — Журнал подключений
| Колонка | Тип | Описание |
| A — ID | Integer | Порядковый номер записи |
| B — Дата/Время | DateTime | Формат: ДД.ММ.ГГГГ ЧЧ:ММ:СС |
| C — IP адрес | String | IP-адрес клиента (включая X-Forwarded-For) |
| D — Пользователь | String | ФИО пользователя |
| E — Роль | String | Роль на момент действия |
| F — Действие | String | Тип события (login, role_select, и т.д.) |
| G — User-Agent | String | Строка User-Agent браузера |
| H — Детали | String | Дополнительная информация |
6.3 design_settings.json — Настройки дизайна
| Ключ | По умолчанию | Описание |
| primaryColor | #1A3C6E | Основной цвет бренда |
| primaryLight | #4A7FC1 | Светлый вариант основного |
| secondaryColor | #0D9488 | Акцентный цвет |
| sidebarBg | #0F172A | Фон боковой панели |
| successColor | #16A34A | Цвет успеха |
| warningColor | #F59E0B | Цвет предупреждения |
| dangerColor | #DC2626 | Цвет ошибки |
| companyName | HRlink | Название компании |
| productName | Биржа Труда | Название продукта |
7. API-эндпоинты
7.1 Аутентификация — POST /api/users.php
| Параметр | Значение |
| action | "auth" |
| login | Логин пользователя |
| password | Пароль пользователя |
Ответ: {"success": true, "user": {...}} или {"success": false, "error": "..."}
7.2 Список пользователей — GET /api/users.php?action=list
Возвращает массив пользователей без паролей.
7.3 Добавление пользователя — POST /api/users.php
action: "add", поля: login, password, name, initials, role, department, email
7.4 Логирование — POST /api/log.php
| Параметр | Описание |
| user | Имя пользователя |
| role | Текущая роль |
| action | Тип действия |
| details | Дополнительные данные |
IP-адрес и User-Agent определяются автоматически на сервере.
7.5 Чтение логов — GET /api/log.php
Возвращает: {"entries": [...], "total": N}
7.6 Настройки дизайна — GET/POST /api/settings.php
GET — текущие настройки. POST — обновление (merge с существующими).
8. Дизайн-система
8.1 Цветовая палитра
| Токен | HEX | Применение |
| Primary | #1A3C6E | Кнопки, заголовки, активная навигация |
| Primary Light | #4A7FC1 | Ссылки, hover-состояния |
| Secondary | #0D9488 | Прогресс-бары, акцентные элементы |
| Background | #F5F7FA | Фон страниц |
| Success | #16A34A | Успешные операции |
| Warning | #F59E0B | Предупреждения |
| Danger | #DC2626 | Ошибки, удаление |
8.2 Типографика
Основной шрифт: Inter (Google Fonts). Размеры: H1 — 28px/800, H2 — 22px/700, H3 — 18px/600, Body — 14px/400, Caption — 12px/400.
8.3 Кастомизация
Администратор может через раздел «Дизайн» изменить:
- Все цвета интерфейса (primary, secondary, success, warning, danger, sidebar)
- Название компании и продукта (отображается в sidebar и на логин-экранах)
- Логотип (замена файлов в assets/)
Изменения сохраняются в design_settings.json и применяются через CSS custom properties (переменные), что обеспечивает мгновенное обновление без перезагрузки.
9. Адаптивность и мобильная версия
9.1 Брейкпоинты
| Устройство | Ширина | Поведение |
| Desktop | ≥ 1280px | Полный интерфейс с раскрытым sidebar (260px) |
| Laptop | 1024–1279px | Свёрнутый sidebar (64px, только иконки) |
| Tablet | 768–1023px | Drawer-навигация (hamburger menu) |
| Mobile | < 768px | Одноколоночный layout, карточки вместо таблиц |
9.2 Мобильные адаптации
- Sidebar превращается в выезжающий drawer с overlay
- Hamburger-кнопка в topbar для открытия навигации
- Сетка карточек переходит в одноколоночный режим
- Формы переходят в одноколоночный layout
- Таблицы получают горизонтальный скролл
- Фильтры располагаются вертикально
- Статистика отображается в сетке 2x2
- Touch-friendly размеры элементов (мин. 44px)
10. Безопасность и логирование
10.1 Аутентификация
- Авторизация через Excel-таблицу Users.xlsx
- Поддержка множественных учётных записей с разными ролями
- Fallback-авторизация (admin/admin) при недоступности API
- Примечание: в прототипе пароли хранятся в открытом виде. В продуктивной версии необходимо использовать bcrypt/argon2
10.2 Логирование подключений
- Каждый вход, выбор роли и ключевое действие записываются в Log.xlsx
- Фиксируется: IP-адрес (с поддержкой X-Forwarded-For), User-Agent, дата/время
- Журнал доступен администратору через раздел «Журнал подключений»
- Последние 100 записей отображаются в интерфейсе
10.3 CORS
API-эндпоинты возвращают заголовки Access-Control-Allow-Origin для кросс-доменных запросов.
11. Развёртывание
11.1 Требования
- Nginx 1.18+ с поддержкой PHP-FPM
- PHP 8.1+ с расширениями: xml, zip, mbstring, gd
- Composer (для установки зависимостей)
- Права на запись в директорию
data/ для пользователя www-data
11.2 Установка
- Скопировать проект в директорию веб-сервера
- Выполнить
composer install для установки PhpSpreadsheet
- Настроить nginx location с поддержкой PHP FastCGI
- Установить права:
chown -R www-data:www-data data/
- Перезагрузить nginx:
systemctl reload nginx
11.3 Текущее развёртывание
| Параметр | Значение |
| URL | http://89.124.75.69/Labor_Stock_v3/ |
| Путь на сервере | /var/www/html/Labor_Stock_v3/ |
| Веб-сервер | Nginx 1.24 + PHP-FPM 8.3 |
| Демо-доступ | admin/admin, hr/hr, manager/manager, employee/employee |
HRlink — Биржа Труда v3 · Техническое задание · Версия 3.0 · Февраль 2026