- build-presupuesto.ts: construirPresupuestoPdf(leadId) agrupa fotos y notas
por zona (fallback al tipoReforma del lead), convierte las imágenes con
resolverImagenPdf y arma el PDF. Carga el lead por id sin scoping (uso
interno desde el route del panel y desde la finalización pública).
- tenant-queries: getTenantPerfilById(tenantId) sin auth; getTenantPerfil lo
reutiliza con el tenant de la sesión.
- PresupuestoDoc: prop zonas + sección "Imágenes de tu reforma" (antes/después
lado a lado + notas por zona).
- route del panel: refactor para reutilizar construirPresupuestoPdf (DRY),
manteniendo getLead como guardia de auth/404.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>