fix(export): недостающая §13.7 «Уверенность» в PDF-экспортёре отчёта (#2445-C2) #2456

Merged
bot-backend merged 1 commit from fix/report-pdf-confidence-section into main 2026-07-05 19:40:39 +00:00
Collaborator

Summary

Аудит-находка C2 (epic #2445). report_pdf.py — единственный экспортёр (vs report_docx.py §22.7, report_md.py §13.7) без выделенной секции «Уверенность» с разбивкой факторов. Его старый тонкий 2-row dump в «Сводке» не обрабатывал dict-образные factor-payload'ы защищённо → мог криво рендерить/падать на dict-факторе (которые реально бывают в проде — mixed dict/flat).

Fix

Портирован _build_confidence (4-колоночная таблица Фактор/Значение/Уровень/Комментарий, isinstance(dict) ветка 1:1 из docx/md), зарегистрирован последним в _SECTION_BUILDERS. Footer перенесён в него (рендерится ровно раз в конце — проверено на пустом confidence: 1 footer, секция есть). Убрано дублирование из «Сводки» (остался только badge «Общая уверенность», как в docx/md). HTML-эскейпинг факторов через _esc (XSS-safe — проверено с <script>).

Test plan

  • 223 теста exporters зелёные (+ TestConfidenceSectionParity: dict-factor рендер без краша, 4 колонки, no-duplication, WeasyPrint end-to-end)
  • ruff чисто
  • code-reviewer: APPROVE (footer-move — главный риск — проверен empirically, без регрессии)

Refs #2445

## Summary Аудит-находка C2 (epic #2445). `report_pdf.py` — единственный экспортёр (vs `report_docx.py` §22.7, `report_md.py` §13.7) без выделенной секции «Уверенность» с разбивкой факторов. Его старый тонкий 2-row dump в «Сводке» не обрабатывал dict-образные factor-payload'ы защищённо → мог криво рендерить/падать на dict-факторе (которые реально бывают в проде — mixed dict/flat). ## Fix Портирован `_build_confidence` (4-колоночная таблица Фактор/Значение/Уровень/Комментарий, `isinstance(dict)` ветка 1:1 из docx/md), зарегистрирован последним в `_SECTION_BUILDERS`. Footer перенесён в него (рендерится ровно раз в конце — проверено на пустом confidence: 1 footer, секция есть). Убрано дублирование из «Сводки» (остался только badge «Общая уверенность», как в docx/md). HTML-эскейпинг факторов через `_esc` (XSS-safe — проверено с `<script>`). ## Test plan - [x] 223 теста exporters зелёные (+ `TestConfidenceSectionParity`: dict-factor рендер без краша, 4 колонки, no-duplication, WeasyPrint end-to-end) - [x] ruff чисто - [x] code-reviewer: ✅ APPROVE (footer-move — главный риск — проверен empirically, без регрессии) Refs #2445
bot-backend added 1 commit 2026-07-05 19:23:25 +00:00
fix(export): добавить недостающую §13.7 «Уверенность» в PDF-экспортёр (#2445-C2)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m7s
CI / backend-tests (pull_request) Successful in 14m51s
338e7281f8
report_pdf.py был единственным экспортёром (vs report_docx/report_md) без
выделенной секции уверенности с разбивкой факторов, а его старый тонкий
dump в «Сводке» не обрабатывал dict-образные factor-payload'ы защищённо,
как это делают sibling-экспортёры → мог криво рендерить/падать на dict-факторе.

Портирован _build_confidence (4-колоночная таблица Фактор/Значение/Уровень/
Комментарий, isinstance(dict) ветка 1:1 из docx/md), зарегистрирован последним
в _SECTION_BUILDERS, footer перенесён в него (рендерится ровно раз в конце —
проверено на пустом confidence). Убрано дублирование из «Сводки».

Refs #2445
bot-backend merged commit be4b2ee1fa into main 2026-07-05 19:40:39 +00:00
bot-backend deleted branch fix/report-pdf-confidence-section 2026-07-05 19:40:39 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2456
No description provided.