build_full_report_docx зеркалит PDF §1-§7 + альтернативы из ТЕХ ЖЕ
исходных словарей (HTML не парсит; переиспользует PURE-хелперы
full_report_html — числа PDF и DOCX совпадают by construction) с картами
через add_picture (плашка при отсутствии/битом PNG). python-docx —
только локальные импорты: web-процесс native не тянет.
build_full_report пишет .docx рядом с PDF (те же карт-PNG, общий
_atomic_write tmp+replace); порядок render→write→метадата: упавший DOCX
не оставляет ран-сироту. Метадата +docx_path/docx_size_bytes.
GET /report/download?format=pdf|docx (Literal, default pdf; путь строго
из метадаты); legacy-раны без docx → 404 «пересоберите отчёт».
api-types регенерён (+12/−4, query-параметр).
Refs #2259