Correcciones de add-ons y privacidad en tracking
Esta versión cierra tres bugs detectados en la auditoría de V-3.2.0103. #6 Add-ons cancelados se conservan hasta fin de ciclo - Nueva columna owner_addons.expires_at. - Al cancelar, status pasa a canceled y expires_at se fija al final del ciclo (~30 días). - recompute_local_store_addons ahora suma packs activos + cancelados con expires_at > now(). - Cancelar ya no elimina capacidad de inmediato: el cliente sigue operando hasta que termina el periodo que ya pagó. - Nueva función sweep_expired_addons() para recalcular cuando un ciclo cancelado expira. #7 Sin suscripción base activa, capacidad = 0 - get_allowed_local_stores ahora retorna 0 si get_effective_tier es null. - Add-ons no extienden el acceso si el plan base ya expiró. - Esto evita que un owner sin suscripción operativa pueda crear sucursales aunque tenga add-ons históricos. - Super admin sigue exento (acceso ilimitado). #9 /track con whitelist explícito - El endpoint público /api/public/hooks/track-order ya no devuelve owner_id, cash_session_id, delivered_by, external_order_id, notes, tax_*, payment_provider, raw_payload, billing_address, ni shipping_label_data/shipping_quote internos. - Solo se devuelven campos seguros para el cliente final: número de pedido, estado, fechas de creación/entrega, totales, método de envío y pago, tracking_number/carrier, y datos del propio cliente (nombre/email/teléfono/dirección). - Aplica también a sale_items (sólo id, product_id, nombre, cantidad, precios). Compatibilidad - No rompe EcartPay, owner_addons, /addons, /stores, /pos, RLS, webhook, multi-sucursal ni el flujo público de /track para clientes. - Versión: V-3.2.0104.
Aspectos destacados
- Add-ons cancelados se conservan hasta fin de ciclo (expires_at)
- Sin suscripción base activa: capacidad de sucursales = 0
- /track con whitelist explícito: sin IDs internos ni datos fiscales
- Nueva función sweep_expired_addons()
- Protege la operación del cliente al cancelar add-ons