Открытый диплом: от ведомости до бланка — выпуск, документы, печать и учёт бланков
За неделю прототип «Открытого диплома» прошёл весь путь выпуска: сопоставление ведомости группы с учебным планом, картотека и регистрационные номера, правки поверх файлов, печать диплома и приложения по шаблонам типографии и учёт бланков строгой отчётности с книгой регистрации. Как это устроено и как сверено с документами, которые напечатал КиберДиплом.
В прошлом разборе учебный план стал самостоятельной сущностью с редакциями, и следующим этапом был назван выпуск. За неделю, со 2 по 6 октября, прототип прошёл весь путь: от файлов группы — ведомости и сведений о студентах — до напечатанного бланка и записи в книге регистрации. Каждый шаг описан отдельной записью решения, ADR с 0009 по 0013, а тестов стало 259 вместо 128.
Все скриншоты ниже сделаны на вымышленной группе из тестовых данных проекта.
Выпуск: сопоставление вместо эвристики
Выпуск начинается с двух файлов группы — ведомости из «Деканата» и сведений о студентах. Форма обучения и год набора читаются из шапки ведомости: год набора — это учебный год первой сессии минус номер курса без единицы. По ним выбирается редакция учебного плана.
Дальше ведомость сопоставляется с планом в промежуточной зоне. Студенты сопоставляются по «Фамилии И. О.», предметы — по цепочке правил: связь, запомненная для этой программы, затем то же печатное имя, затем единственное подходящее вхождение, затем предложение, которое нужно подтвердить, и наконец выбор оператора. Кандидатов отсеивают зачётные единицы, посчитанные из часов, и наличие курсовой. При сравнении имён учтены привычки «Деканата»: приписка «(Элективные дисциплины …)» у выбранного электива, практика в виде «Вид. Тип» вместо «Вид (тип)», двойные пробелы, знаки препинания и буква «ё». Пока хоть одна строка открыта, ничего не подтверждается.

Ведомость часто приходит раньше, чем выставлены все оценки, и группу загружают ещё раз. Поэтому выбор оператора о студенте привязан к ФИО, а не к номеру строки, и переходит в следующую загрузку той же группы. Повторная загрузка той же группы проходит без единого вопроса к оператору.
На реальных файлах (сверка шла локально, данные никуда не передавались) заочная группа 2026 года сопоставилась полностью автоматически: 14 студентов из 14 и 56 предметов из 56. Три группы 2025 года — тоже: 58, 47 и 26 предметов без единого ручного выбора.
После подтверждения выпускники и их результаты попадают в картотеку. Проверка идёт на трёх уровнях — ошибка, «не завершено» и предупреждение, — а XML для КиберДиплома теперь собирается из картотеки, с полями программы из плана.
Документ выпускника
У диплома и приложения один регистрационный номер и одна дата выдачи — так требует приказ № 670, — и номер уникален во всей картотеке. Номера задаются списком, подряд или с пропусками, например «10001–10007, 10010», и раздаются по порядку тем, у кого номера ещё нет. Лишние и недостающие номера показываются, а уже занятый номер отклоняет весь список. У дубликата свой номер.
«С отличием» считается по пункту 27 приказа по всем оценкам, включая факультативы, — так решил владелец процесса. Программа показывает число «отлично», процент и средний балл, а решает оператор. На 31 напечатанном приложении 2023 и 2026 годов расчёт совпал с отметкой «с отличием» у 30. Единственное расхождение — ровно 75 % «отлично», напечатано без отличия: именно такой пограничный случай и оставлен оператору.

Правки поверх файлов
Не всё, что нужно для документа, есть в файлах группы: в сведениях может не быть оценки за госэкзамен, в ведомости — оценки за преддипломную практику. Раньше такие вещи оператор вписывал в КиберДиплом после выгрузки XML. Теперь карточка выпускника — это форма правки: ФИО, дата рождения, предыдущее образование, дата и протокол ГЭК, госэкзамен, тема и оценка выпускной работы, а у каждого результата — оценка, зачётные единицы и вид. Оценка для элемента плана, которого нет в ведомости, добавляет результат с названием, видом и единицами из плана.
Правка хранится отдельно от того, что дали файлы, и накладывается при чтении выпуска, поэтому её видят проверка, XML, расчёт отличия и печать. Повторная загрузка правку не теряет: выпускник находится по имени, в том числе исправленному. Если файл с тех пор изменился, правка остаётся, а в проверке появляется предупреждение. Значение, возвращённое к файлам, снимает правку, и каждая правка пишется в журнал выпуска.

Печать по шаблонам типографии
Бланки дипломов приходят из типографии вместе с шаблонами FastReport в формате .fr3, по которым их печатает КиберДиплом. «Открытый диплом» не рисует свою раскладку, а печатает по тем же шаблонам. Оператор загружает шаблон каждого документа и уровня образования, и шаблон хранится в базе как есть, а не в репозитории.
Шаблон читается в миллиметры и раскладывается так, как его раскладывает FastReport: высота строк — в целых пикселях, перенос — по ширине поля в целых пикселях, зачётные единицы и оценка — на последней строке названия, как это делает скрипт шаблона КиберДиплома, колонки — там, где их задаёт страница. Наборы данных КиберДиплома заполняются из картотеки в порядке приложений 2026 года. Документ печатается, только если его проверка для печати чиста. Образец с отметкой «ОБРАЗЕЦ» печатается всегда и заканчивается страницей замечаний.

Главная проверка раскладки — сверка с тем, что уже напечатано. Приложения, которые КиберДиплом напечатал в 2026 году по шаблону 2025 года, — 83 выпускника семи групп, очная и заочная формы, бакалавриат и магистратура, — разложены заново. 76 совпали полностью: каждая строка переносится там же, базовая линия отклоняется не больше чем на 0,16 мм, а вся страница сдвинута по горизонтали на 0,15 мм. В остальных семи тема выпускной работы содержит перевод строки внутри данных, и КиберДиплом рвёт строку посреди текста. Инструмент сверки печатает только числа: напечатанные приложения содержат персональные данные.
Тесты печати снова проверили поломками. Из четырнадцати внесённых ошибок тесты сразу поймали тринадцать. Четырнадцатую — курсовые пропадают из таблицы, если у шаблона нет для них своей полосы, — не заметили, и тест через HTTP дополнен так, чтобы ловил и её.
Бланки строгой отчётности
Бланк диплома — документ строгой отчётности, и его путь нужно учитывать. Бланки приходят партиями: форма, серия из шести цифр, номера из семи цифр, подряд или с пропусками, дата и накладная. Уже учтённый бланк второй раз не принимается.
После печати пачки оператор указывает первый бланк, и свободные бланки записываются документам по порядку, мимо использованных и испорченных. Если бланков не хватает, не записывается ничего — частичной записи нет. Испорченный бланк сохраняет причину и освобождает документ.
Самое важное правило — напечатанное не меняется молча. Пока документ на бланке и не выдан, отклоняются повторная печать, смена номера и даты, правки, меняющие напечатанное, и повторная загрузка файлов группы — сначала бланк нужно отметить испорченным. Выданный документ не меняется вовсе: ошибка в нём исправляется дубликатом.


Книга регистрации выводит колонки пункта 49 приказа за период — страницей и файлом XLSX для печати на A4 альбомной ориентации, с шапкой на каждом листе и нумерацией. Реестр бланков выгружается так же.
Попутно поставка стала легче: из программы убраны нативные библиотеки SQLite для FreeBSD, musl и экзотических архитектур, остались Windows и Linux на x86, x86-64 и aarch64. Файл программы уменьшился с 39,6 до 31,4 МБ.
Дальше
Прототип уже проходит весь путь, но на бумаге раскладка ещё не проверена: нужно напечатать тестовый лист и образец приложения на том принтере, где печатаются бланки, и измерить отклонение. Затем — пробный выпуск параллельно с КиберДипломом. Часть решений по учёту бланков — формы приложений, порядок порчи и уничтожения, вид книги регистрации — записана как предположения и ждёт подтверждения владельца процесса. А серия и номер бланка в картотеке открывают дорогу к выгрузке в ФИС ФРДО.
Выводы
- Сопоставление с подтверждением оператора и запоминанием решений заменяет эвристику: группа, загруженная повторно, не задаёт ни одного вопроса.
- Правки стоит хранить поверх исходных данных, а не вместо них: тогда видно, что пришло из файлов, а что исправлено, и изменившийся файл не затирает исправление молча.
- Чужой формат шаблона лучше прочитать, чем заменить своим: печать по шаблонам типографии сверяется с уже напечатанными документами до сотых долей миллиметра.
- Сверку с реальными документами можно сделать, не раскрывая их: инструмент выводит только числа.
- Учёт бланков — это прежде всего запреты: напечатанное не меняется молча, выданное не меняется вовсе.
Доступность
Проект открыт под лицензией Apache 2.0. Решения — docs/architecture/adr/0009–0013, результаты проверок — docs/prototype.md.
- Исходный код: github.com/nikita-konkin/open-diplom
Теги
Другие обновления по проекту
Открытый диплом: учебные планы по годам набора и редакциям
Учебный план стал в «Открытом дипломе» самостоятельной сущностью: планы хранятся по программе, форме обучения и году набора, каждая правка сохраняется новой редакцией, контрольн...
Открытый диплом: прототип на Java 11 и сверка, в которой XML совпали побайтно
Черновик архитектуры открытой замены «КиберДиплома» получил прототип и собственный репозиторий. Что прототип умеет, какие критерии выбора стека уже измерены, а какие нет, как пе...