feat(export): PPTX export — completes EPIC #959 #1111

Merged
bot-backend merged 1 commit from feat/forecast-export-pptx-959 into main 2026-06-07 09:09:42 +00:00
Collaborator

Что

Финальный формат экспорта §22-отчёта — pptx (презентация). Закрывает EPIC #959: PDF ✓ · XLSX ✓ · MD ✓ · JSON ✓ · Telegram ✓ · DOCX ✓ · PPTX ✓.

Closes #959.

Содержимое

  • exporters/report_pptx.pyrender_report_pptx(report) -> bytes (python-pptx). 6-слайдовая колода (титул+advisory, сводка, будущий рынок-таблица, сценарии, продукт ТЗ, уверенность). DRY (хелперы из report_pdf), graceful (валидный минимальный .pptx на пустом), локальный import pptx.
  • GET /{cad}/forecast/export?format=pptx → presentationml attachment. Остальные форматы без изменений; нет рана → 404; невалид → 422.
  • Зависимость: python-pptx>=1.0.0 + uv.lock (только python-pptx + xlsxwriter; lxml/Pillow уже были). uv sync --frozen ✓ (проверено мной и ревьюером).

Качество

  • code-reviewer: APPROVE — lock-scope чистый (uv lock --check ✓), graceful/DRY, placeholder-индексация защищена, endpoint без регрессии. 16 pptx-тестов (1014 passed), ruff clean. Минор (guard для гипотетического кастом-шаблона) — non-blocking.

Тест-план (post-deploy)

GET /api/v1/parcels/66:41:0702048:27/forecast/export?format=pptx → 200 .pptx (PK), открывается в PowerPoint/LibreOffice.

## Что Финальный формат экспорта §22-отчёта — **pptx (презентация)**. Закрывает EPIC **#959**: PDF ✓ · XLSX ✓ · MD ✓ · JSON ✓ · Telegram ✓ · DOCX ✓ · **PPTX ✓**. Closes #959. ## Содержимое - `exporters/report_pptx.py` — `render_report_pptx(report) -> bytes` (python-pptx). 6-слайдовая колода (титул+advisory, сводка, будущий рынок-таблица, сценарии, продукт ТЗ, уверенность). DRY (хелперы из `report_pdf`), graceful (валидный минимальный .pptx на пустом), локальный `import pptx`. - `GET /{cad}/forecast/export?format=pptx` → presentationml attachment. Остальные форматы без изменений; нет рана → 404; невалид → 422. - **Зависимость:** `python-pptx>=1.0.0` + `uv.lock` (только python-pptx + xlsxwriter; lxml/Pillow уже были). `uv sync --frozen` ✓ (проверено мной и ревьюером). ## Качество - `code-reviewer`: ✅ APPROVE — lock-scope чистый (`uv lock --check` ✓), graceful/DRY, placeholder-индексация защищена, endpoint без регрессии. 16 pptx-тестов (1014 passed), ruff clean. Минор (guard для гипотетического кастом-шаблона) — non-blocking. ## Тест-план (post-deploy) `GET /api/v1/parcels/66:41:0702048:27/forecast/export?format=pptx` → 200 .pptx (PK), открывается в PowerPoint/LibreOffice.
bot-backend added the
scope/backend
GG-форсайт
site-finder
labels 2026-06-07 09:09:39 +00:00
bot-backend added 1 commit 2026-06-07 09:09:40 +00:00
feat(export): add PPTX presentation export of §22 forecast report (#959)
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / changes (push) Successful in 8s
CI / backend-tests (push) Has been skipped
Deploy / changes (push) Successful in 7s
Deploy / build-frontend (push) Has been skipped
Deploy / build-backend (push) Successful in 2m58s
Deploy / build-worker (push) Successful in 3m26s
Deploy / deploy (push) Successful in 1m26s
CI / backend-tests (pull_request) Successful in 6m7s
40b1f3ad69
Completes EPIC #959 export formats (md/json/tg/docx/pptx; PDF/XLSX pre-existing).
render_report_pptx (python-pptx, pure + graceful, reuses report_pdf helpers,
local import) → 6-slide deck. Endpoint format=pptx (early-return, presentationml
media-type, .pptx attachment). Add python-pptx + regenerate uv.lock (python-pptx
+ xlsxwriter; uv sync --frozen passes).

Closes #959.
bot-backend merged commit 40b1f3ad69 into main 2026-06-07 09:09:42 +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#1111
No description provided.