Задача: учить и партнёров, и сотрудников в одной системе

АТОЛ — один из крупнейших российских производителей кассовой техники, ПО и оборудования для ритейла. Компании нужно было обучать две совершенно разные аудитории: собственных сотрудников и партнёров — интеграторов, сервисные центры, дистрибьюторов.

До внедрения обучение велось «по старинке»: вебинары без учёта посещаемости, разрозненные материалы, сертификаты заполнялись вручную и рассылались по почте. Отследить, кто действительно прошёл обучение и имеет право работать с продуктом, было невозможно. Для производителя с широкой партнёрской сетью это критично: неподготовленный интегратор — это репутационные и финансовые риски.

Нам предстояло построить единую платформу, которая закрыла бы обучение обеих аудиторий и при этом прошла строгий контроль службы безопасности заказчика.

Что мы построили

За основу взяли Moodle — он даёт гибкость для кастомной разработки и полный контроль над данными. Поверх ядра спроектировали семь собственных плагинов, каждый из которых закрывает конкретную бизнес-задачу.

Плагин заявок на обучение
Сотрудник или партнёр подаёт заявку на курс — администратор видит её, подтверждает или отклоняет, и пользователь автоматически зачисляется. Внутри заложена логика сброса прогресса и блокировки при повторной подаче заявки.

Сертификаты
Сертификат генерируется автоматически при завершении курса, печатная форма заполняется данными пользователя. Организация подтягивается в профиль автоматически, чтобы печатная форма была корректной. Администратор может отправить сертификат вручную, дубли по кодам удаляются автоматически. Подробнее о том, как устроена выдача — в статье про создание сертификатов в Moodle.

Дашборд руководителя
Отдельная страница с фильтрами, таблицами и выгрузкой в Excel. Руководитель видит прогресс обучения по подразделениям и курсам — без запросов к администратору. Данные собираются автоматически, отчёт скачивается в один клик.

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

Объявления и приветствия
Блок объявлений на главной и персонализированные приветственные сообщения для новых пользователей — система не выглядит «пустой» в первый день.

Кастомная страница курса и тема
Главная страница курса свёрстана так, что все секции видны на одной странице — не нужно листать вкладки. Плюс кастомная тема в фирменном стиле заказчика.

Интеграция с 1С: данные приходят сами

Организационная структура и данные о сотрудниках живут в 1С. Мы написали сервис, который получает данные из внешней системы 1С и синхронизирует их с Moodle: пользователи, отделы, должности. Вручную ничего не вводится — кадровые изменения отражаются в LMS автоматически.

Это снимает главную боль администратора: не нужно заводить каждого сотрудника руками и следить, кто ушёл, кто переведён. Про то, как мы автоматизируем такие обмены — в статье Moodle REST API: автоматизация управления обучением.

Деплой и сборка под требования ИБ

Отдельная глава проекта — процесс поставки. У заказчика жёсткие требования информационной безопасности, и стандартный «залили файлы по FTP» здесь не проходит. Мы выстроили конвейер, который сам себя проверяет.

Сборка в Docker
Каждая версия собирается в образ с фиксированным тегом (prod-1.1.8 и т.д.). Предыдущая версия всегда хранится рядом — откат занимает минуты, а не дни.

Многоступенчатый CI/CD
Перед деплоем код проходит целый набор сканеров: TruffleHog (поиск утёкших секретов и ключей), Trivy (уязвимости зависимостей), Semgrep (статический анализ кода), BSCA (контроль состава ПО и лицензий), DAST (динамический анализ запущенного приложения). Любая находка останавливает релиз.

Деплой через Ansible
Релиз раскатывается плейбуками Ansible на группу серверов. Обновление компонентов и сброс кэша — отдельный управляемый шаг. Всё повторяемо и документировано, а не «запустили скрипт и молимся».

Инфраструктура на CephFS и PostgreSQL
Файловое хранилище на CephFS, данные в PostgreSQL, резервное копирование БД и moodledata. План восстановления и отката описан и проверен.

Минимум изменений ядра
Все доработки вынесены в отдельные плагины и кастомные скрипты. Прямые правки ядра мы наоборот вычищали — например, изменения в стандартном модуле тестов были вынесены в кастомный код. Это упрощает обновление Moodle и прохождение ИБ-проверок.

Когда заказчик говорит «у нас строгая служба безопасности», это не про «покажите, что у вас всё хорошо». Это про то, что каждый релиз должен быть воспроизводимым, проверяемым и откатываемым. Мы строили процесс именно так — и он работает.

Результаты

Обучение партнёров и сотрудников в едином контуре
Интеграторы, сервисные центры и собственные сотрудники учатся в одной системе с разными ролями и правами.

Сертификация без ручного труда
Сертификаты выдаются автоматически при завершении курса. Печатная форма корректна, дубли исключены, администратор вмешивается только когда нужно отправить документ вручную.

Прозрачность для руководителей
Дашборд с выгрузкой в Excel заменил запросы «соберите мне отчёт» — руководитель открывает и видит всё сам.

Актуальные данные
Оргструктура и кадровые изменения подтягиваются из 1С автоматически — в LMS нет «мёртвых душ» и устаревших должностей.

Проходимый ИБ-контроль
Каждый релиз проходит полный цикл сканеров, деплой воспроизводим, откат проверен. Служба безопасности получает то, что просила, — а не «документы задним числом».

Полный портфель наших внедрений — в разделе наших проектов.

Почему мы это знаем

Мы строим LMS на Moodle с 2014 года. Похожие задачи с жёсткими требованиями мы решали для ВТБ, Аэрофлота, Teboil и других компаний, где к безопасности и процессам предъявляют высокие стандарты.

Ключевой опыт этого проекта — не отдельные плагины, а связка: продуктовая логика (заявки, сертификаты, дашборды) + интеграции (1С) + производственный процесс (сборка, сканеры, деплой). Когда все три части работают как единый конвейер, LMS можно развивать годами без «технического долга на вырост». Именно поэтому такие системы мы закладываем ещё на этапе проектирования — подробнее об этом на странице индивидуальных LMS на Moodle.