Files
md_to_gost/AIV2/context/checker.md
T
Igor20264 5fb5010571
Example document / build (push) Has been cancelled
Python application / build (push) Has been cancelled
v0.5.4
NewPromt
- small fix
2026-09-19 10:53:19 +03:00

16 KiB
Raw Blame History

Проверка ТЗ — полный каталог замечаний

Что именно проверяет md2gost … --check, с какими текстами сообщений и как чинить каждое замечание.


1. Как запускать

python -m md2gost report.md --check-only --type coursework    # только проверка
python -m md2gost report.md -o out.docx --type coursework --check --strict
Ключ Поведение
--check проверить и напечатать отчёт, документ всё равно собрать
--check-only только проверка, DOCX не собирается, код выхода 0
--strict при наличии хотя бы одной ошибки вывести Проверка ТЗ: есть ошибки (--strict), код выхода 1, документ не собирать
--check-pages отдельная эвристическая проверка вёрстки готового DOCX через Microsoft Word

Формат отчёта:

Проверка ТЗ: найдено замечаний — 3
  [error] structure.missing: Отсутствует обязательный раздел «ЗАКЛЮЧЕНИЕ»
  [warning] ref.unused (стр. md:42): Метка «tab_cmp» объявлена, но в тексте нет ссылки @…:tab_cmp
  [error] ref.ris (стр. md:57): Используйте «Рисунок», не «рис.»

Без замечаний: Проверка ТЗ: замечаний нет.

Уровни: error — блокирует сборку при --strict; warning — не блокирует; heuristic — только у проверки вёрстки, никогда не влияет на код выхода.


2. Структура документа

ID Уровень Сообщение Причина и решение
structure.missing error Отсутствует обязательный раздел «{название}» Нет одного из: СОДЕРЖАНИЕ, ВВЕДЕНИЕ, ЗАКЛЮЧЕНИЕ, СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ. Добавить раздел # *НАЗВАНИЕ с содержательным текстом. Допускается написание «СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ»
structure.missing error Отсутствует раздел «СОДЕРЖАНИЕ» Профиль PIS_custom: нет # *СОДЕРЖАНИЕ
structure.toc warning Нет маркера [TOC] для автособираемого содержания Добавить [TOC] прописными отдельной строкой под # *СОДЕРЖАНИЕ
structure.toc error Нет маркера [TOC] для оглавления (обязательно для итогового отчёта) То же, но для PIS_custom это ошибка
structure.body error Нет нумерованного раздела основной части (# заголовок без *) Все H1 оказались со звёздочкой. Добавить # 1 Название
structure.graphic error Для ВКР обязательно приложение «Графический материал» В тексте нет подстроки «Графический материал». Добавить ## Приложение Б Графический материал
structure.practical error Нет заголовков вида «Практическая работа №N. …» (H1 без *, каждая работа — отдельный раздел) Профиль PIS_custom: каждую работу оформить как # Практическая работа №N. Название
structure.apid error Для КР АПИД отсутствует обязательный раздел: «{название}» См. таблицу ниже

Обязательные разделы КР АПИД

Проверка ищет подстроки в тексте заголовков (регистр не важен):

Требуемый раздел Что должно найтись в заголовках
1. Теоретические аспекты разработки архитектуры приложений и данных: … «теоретическ… аспект»
2. Прикладные аспекты разработки архитектуры приложений и данных … «прикладн… аспект»
2.1 Описание проекта команды и разрабатываемого программного приложения «2.1» и «описание проекта» рядом
2.2 Описание роли … в приложении … «2.2» и «описание роли» рядом
2.3 Описание архитектуры программного приложения и данных для роли «2.3» и «архитектур»
2.4 Варианты развития архитектуры программного приложения «2.4» и «вариант»

3. Заголовки

ID Уровень Сообщение Причина и решение
heading.numbered_special error Спецраздел «{title}» должен быть без номера: # *{title} H1 со спецназванием без звёздочки. Добавить * сразу после #
heading.case warning Спецраздел лучше писать ПРОПИСНЫМИ: «{TITLE}» «Введение» вместо «ВВЕДЕНИЕ»
heading.case warning Подраздел с прописной буквы: «{Title}» Профиль PIS_custom: заголовок уровня ## и глубже начинается со строчной буквы
heading.trailing_dot warning Заголовок без точки в конце: «{title}» Профиль PIS_custom: убрать точку в конце заголовка

Спецразделы, требующие звёздочки на уровне H1: СОДЕРЖАНИЕ, ВВЕДЕНИЕ, ЗАКЛЮЧЕНИЕ, СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ, СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ, ПРИЛОЖЕНИЕ, ПРИЛОЖЕНИЯ, а также любой H1, начинающийся на «ПРИЛОЖЕН».


4. Ссылки и терминология

ID Уровень Сообщение Причина и решение
ref.ris error Используйте «Рисунок», не «рис.» В тексте найдено «рис.» (шаблон \bрис\.). Заменить на @Рисунок:id или слово «Рисунок»
ref.tabl error Используйте «Таблица», не «табл.» Найдено «табл.». Заменить на @Таблица:id или слово «Таблица»
footnote error Сноски в конце страницы не допускаются Найдена конструкция [^…]. Перенести содержание в основной текст или оформить ссылкой на источник
table.nopp error Графу «№ п/п» в таблицы не включают Найдено «№ п/п». Удалить столбец
ref.unused warning Метка «{id}» объявлена, но в тексте нет ссылки @…:{id} Добавить в текст перед объектом предложение со ссылкой @Тип:{id}, заканчивающееся точкой
ref.dangling error Ссылка на несуществующую метку «{id}» Опечатка в id либо отсутствие объекта с такой меткой

Множество меток собирается из строк ^%(\w+) и из title картинок; множество ссылок — из @Тип:id. Оба множества должны совпадать.


5. Источники

ID Уровень Сообщение Причина и решение
cite.intro error Во разделе «ВВЕДЕНИЕ» ссылки на источники не указываются Убрать [n] из введения; то же для заключения
biblio.count error Источников должно быть от {min} до {max} (сейчас {n}) Довести число записей до нормы профиля
biblio.count warning ВКР: в разделе списка «{title}» желательно ≥10 источников (сейчас {n}) Дополнить подраздел списка
biblio.count warning ВКР: список должен делиться на разделы; в каждом ≥10 источников (сейчас всего {n}, разделов нет) Разбить список подразделами ##
biblio.age error Источник [{n}] старше {N} лет (год {год}) Заменить на актуальное издание или редакцию стандарта
biblio.order warning Порядок источников в списке должен совпадать с порядком первого упоминания Перенумеровать согласованно и в тексте, и в списке
biblio.missing error Ссылка [{n}] есть в тексте, но нет в списке источников Добавить запись [n]: …

Нормы по профилям:

Профиль Источников Возраст
practice, coursework 5–7 не старше 5 лет
APID_coursework 7–20 не старше 5 лет
vkr не менее 10 в каждом подразделе списка не старше 5 лет
PIS_custom не требуются не старше 10 лет, если список всё же есть

Год издания извлекается из текста записи автоматически. Если года в записи нет, проверка возраста пропускается.


6. Таблицы

ID Уровень Сообщение Причина и решение
table.merge_header error Маркер склеивания ^/> нельзя использовать в первой (заголовочной) строке таблицы Вписать нормальный заголовок столбца
table.merge_col error Маркер «>» нельзя ставить в первом столбце (нет ячейки слева) Убрать маркер
table.continuation warning Word сам не вставит «Продолжение Таблицы N» при переносе… Разметка ни при чём: запускать с --table-continuation word (нужен Word и pywin32) либо caption
listing.continuation warning Длинный листинг: Word сам не вставит «Продолжение Листинга N»… То же для --listing-continuation. Длинным считается блок кода от 40 строк — можно вынести полный код в приложение

Замечания о продолжении выдаются только при режимах off и soft.


7. Приложения

ID Уровень Сообщение Причина и решение
appendix.letter error Буква «{X}» не используется для обозначения приложений Запрещены Ё, З, Й, О, Ч, Ь, Ы, Ъ. Допустимы А, Б, В, Г, Д, Е, Ж, И, К, Л, М, Н, П, Р, С, Т, У, Ф, Х, Ц, Ш, Щ, Э, Ю, Я
appendix.toc warning При нескольких приложениях после «ПРИЛОЖЕНИЯ» нужен перечень (основной текст) с номерами и названиями Добавить строки вида Приложение А — Название сразу после # *ПРИЛОЖЕНИЯ

8. Проверка вёрстки --check-pages

Отдельная эвристика на готовом DOCX: ищет страницы, у которых снизу пусто больше 40 % полосы, а раздел продолжается на следующей странице.

Ситуация Сообщение
Нет pywin32 или Word Проверка вёрстки пропущена: нужен пакет pywin32 (pip install pywin32) и Microsoft Word.
Word не открылся Проверка вёрстки пропущена: не удалось открыть Word ({ошибка}).
Замечаний нет Проверка вёрстки (Word): замечаний по полупустым страницам нет (эвристика; возможны пропуски).
Замечания есть Проверка вёрстки (Word): найдено замечаний — {N} (все эвристические, могут быть ложными).
Конкретная страница [heuristic] page.fill: на стр. {N} пустой низ ~{X}% полосы, а раздел «{название}» продолжается на следующей странице…

Ложные срабатывания нормальны: крупный рисунок, конец пункта, намеренный разрыв. Чем помочь на уровне разметки: флаг +landscape у широкой схемы, перенос крупного объекта в приложение, сокращение листинга.


9. Рекомендуемый цикл доводки

python -m md2gost report.md --check-only --type coursework          # 1. посмотреть замечания
# 2. отдать текст замечаний и .md модели с промптом ai/prompts/review-fix.md
python -m md2gost report.md --check-only --type coursework          # 3. проверить повторно
python -m md2gost report.md -o report.docx --type coursework --check --strict
python -m md2gost report.docx --check-pages                         # 4. проверить вёрстку

Что проверка не ловит: смысловые ошибки, фактические неточности, выдуманные источники, слабую логику разделов и «машинный» стиль изложения. Стиль лечится промптом ai/prompts/voice-human.md, факты — вычиткой.