feat(export): Markdown + JSON download of §22 report — slice of #959 #1089
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1089
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/forecast-export-md-959"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что
Слайс EPIC #959 (экспорт): Markdown + JSON-download §22-отчёта. PDF/XLSX уже были — это самые дешёвые no-dep форматы. (DOCX/pptx/Telegram — отдельно, требуют новых зависимостей + devops.)
Относится к #959 (НЕ закрывает — остаются DOCX/pptx/Telegram/презентация).
Содержимое
exporters/report_md.py—render_report_markdown(report): чистый, без новых зависимостей, переиспользует str-хелперы изreport_pdf.py(DRY:_normalize/_fmt/_level_ru/...). Рендерит 8 секций §13-отчёта в читаемый MD (exec_summary, market_now, future_market по горизонтам, сценарии, product_tz, scoring, confidence-drivers, meta + advisory-дисклеймер). Graceful на тонком/пустом отчёте, GFM-safe экранирование таблиц.GET /{cad}/forecast/export?format=md|json— читает последний §22-ран (latest_run_forschema 1.0); md →text/markdownattachment, json → download-вариант. Нет рана → 404 (не 500/202). Невалидный format → 422 до БД.Качество
code-reviewer: ✅ APPROVE — graceful (empty/None/garbage), GFM-экранирование, DRY-импорт верный (report_pdf._fmt→str), route не коллизит, no new deps, psycopg v3 чисто. 18 новых тестов (961 passed), ruff clean.:— как в 2 существующих export-эндпоинтах (precedent), за auth. Кросс-эндпоинт хардненинг — опц. follow-up.Тест-план (post-deploy)
GET /api/v1/parcels/66:41:0702048:27/forecast/export?format=md→ 200 text/markdown, читаемый отчёт;?format=json→ download; участок без прогноза → 404.render_report_markdown (pure, no new runtime deps) reuses report_pdf's str helpers (DRY), + GET /{cad_num}/forecast/export?format=md|json. No forecast run → 404; graceful on thin/empty reports; GFM-safe table escaping. PDF/XLSX already existed; this adds the cheapest no-dep formats. Part of EPIC #959.