gendesign/tradein-mvp/backend/app
Light1YT 6545568778 feat(tradein): render expected-sold price alongside asking in estimate PDF (#648 S5b)
Mirror the S5a web dual-display in the WeasyPrint PDF cover: equal-prominence
«Ожидаемая цена продажи» figure (value + range + ₽/м²) next to «Ориентир
запроса», with a −N% discount chip and the ДКП-Росреестра explainer. Graceful
single-asking fallback when expected_sold is None/0; each sold sub-field guarded.

Pure rendering change — no DB/schema/API impact. WeasyPrint import made lazy so
the HTML builders are testable without the native GTK stack.

- trade_in_pdf.py: _dual_price_block / _price_figure_cell / _discount_pct + cover wiring
- tests/services/test_trade_in_pdf_dual_price.py: 10 unit tests
2026-05-29 19:09:17 +05:00
..
api feat(tradein): estimator additive expected_sold price (#648 S3) (#661) 2026-05-29 13:37:33 +00:00
core feat(tradein): DaData on-demand enrichment в estimate flow (PR Q1) 2026-05-27 18:50:12 +05:00
observability feat(tradein): enrich GlitchTip SDK init — integrations + PII scrub (#396) (#643) 2026-05-29 09:23:17 +00:00
schemas feat(tradein): estimator additive expected_sold price (#648 S3) (#661) 2026-05-29 13:37:33 +00:00
services feat(tradein): render expected-sold price alongside asking in estimate PDF (#648 S5b) 2026-05-29 19:09:17 +05:00
tasks feat(tradein): per-source listing price history — schema + daily snapshot (#570) (#646) 2026-05-29 12:18:04 +00:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
main.py feat(tradein): enrich GlitchTip SDK init — integrations + PII scrub (#396) (#643) 2026-05-29 09:23:17 +00:00