Полное техническое задание (ТЗ) на LMS 1. Цель системы Создание LMS для организаций и индивидуальных пользователей. Управление курсами, тестами, назначениями, прогрессом. Поддержка SCORM 1.2/2004 через pipwerks SCORM API Wrapper с серверной частью и H5P (через H5P Core или сторонний сервис). Масштабируемость и расширяемость (календари, уведомления, заявки, API). Работа через веб-интерфейс на Laravel 10+, PHP 8.2+, Bootstrap 5. 2. Пользователи и роли Роль Возможности Администратор Полный доступ: CRUD всех сущностей, настройки системы, роли, интеграции, логирование, отчёты Менеджер Почти как админ, кроме системных настроек Ответственный (куратор) Управление организацией, пользователями, группами, курсами, тестами, назначениями; просмотр прогресса учеников; обработка заявок; откат результатов Учащийся (организация) Прохождение курсов и тестов, просмотр результатов Индивидуальный учащийся Регистрация через форму (или создание админом); прохождение курсов и тестов; просмотр результатов Все роли управляются через Spatie Laravel Permission или кастомную систему прав. API доступ контролируется через Policies/Abilities. 3. Курсы Категории курсов (course_categories) с возможностью вложенности. Структура курса: модули/уроки (course_modules). SCORM/H5P: SCORM: pipwerks SCORM API Wrapper (клиент) + серверные эндпоинты /scorm/{package_id}/{sco_id} для обработки LMSSetValue, LMSCommit, LMSFinish. Таблица scorm_data: id (PK), user_id (FK), course_id (FK), package_id, sco_id, data (JSON), last_access, created_at, updated_at Контроллер для выдачи SCO с проверкой прав доступа. H5P: интеграция через H5P Core или сторонний сервис, хранение прогресса в JSON или отдельной таблице. Пройденный курс включает пробный и итоговый тесты. Возможность повторного открытия курса/теста. Поддержка пересекающихся периодов для разных пользователей/организаций. 4. Тестирование Типы вопросов: Single choice (выбор одного), Multiple choice (множественный выбор), Input (ввод текста), Matching (соответствие). Для matching: таблица question_matching_pairs с полями question_id, left_text, right_text, match_score. Поддержка ограничений времени, истории попыток, отката. Таблицы: tests, questions, answers, test_attempts, test_responses. 5. Workflow заявок организаций Таблицы: course_requests: id, organization_id, requested_by_user_id, status (pending, approved, rejected), approved_by, approved_at, created_at, updated_at. course_request_items: связывает заявки, курсы и пользователей. Состояния заявки: создана → на подтверждении → одобрена/отклонена → назначена. Автоматическое распределение после подтверждения → записи в course_assignments. 6. Назначения курсов Таблица course_assignments: id, course_id, organization_id (nullable), group_id (nullable), user_id (nullable), type ('individual','group','organization'), start_date, end_date, note, created_by Логика: Назначение на организацию → все пользователи получают доступ; новые пользователи получают доступ автоматически. Пересекающиеся периоды → отображается ближайший или актуальный период. 7. Откат результатов Возможность отката: тесты, прогресс SCORM/H5P, или все вместе. История откатов фиксируется в logs. 8. Отчёты и аналитика Прогресс учеников: фильтры по организации, группе, курсу, пользователю. История изменений результатов и откатов. Экспорт: CSV/Excel (laravel-excel), PDF (dompdf/wkhtmltopdf). Учёт заявок организаций и распределение курсов по пользователям. 9. Архитектура и расширяемость MVC, Eloquent ORM, REST API-готовность. Интерфейсы для типов курсов, тестов, интеграций. События и слушатели для логирования и уведомлений. Сервис-провайдеры для подключения новых модулей. API через Laravel Sanctum/Passport. 10. Безопасность и производительность Middleware, Hash, CSRF, XSS, контроль доступа через Policies. SCORM/H5P: проверка MIME-типа, sandbox, валидация