Hub OS — Storage Engine, Cargos y Abandono
Esta versión completa el motor de cobro y abandono de Hub OS. hub_storage_settings permite definir por owner/hub/membresía: días gratis, día de inicio de cobro, grace period, tarifa diaria, reglas de tamaño (jsonb), penalización después de X días, abandono después de Y días, moneda, timezone y política de abandono (manual, destroy, donate, liquidate, reclaim, transfer_to_warehouse). Nada está hardcodeado: cada owner define sus propias reglas. hub_package_charges soporta todos los tipos de cargo (membership, package_fee, storage, size_fee, penalty, consolidation, repack, fulfillment, priority_pickup, shipping_handling, manual_adjustment) con period_start/end, idempotency_key, waiver auditado, meta, y unique(package_id, kind, period_start) que garantiza retry-safe y cero doble cobro aún con sweeps simultáneos. El endpoint público /api/public/hooks/hub-storage-sweep está firmado (apikey), idempotente, llama a hub_storage_sweep_run en el servidor y solo puede marcar paquetes como pending_payment, on_hold o abandoned — nunca delivered ni picked_up. Los links de pago reutilizan createProviderLink (sin duplicar pasarela). Auditoría automática en cada cambio de cargo vía trigger. UI Hub OS Storage & Billing con reglas, lista de cargos filtrable, generar/condonar/cobrar manual, paquetes vencidos y próximos a abandono. Cero impacto en intake, labels, packages, POS, /sales, /portal, /addons ni billing.
Aspectos destacados
- Reglas por owner/hub/membresía — nada hardcodeado
- 11 tipos de cargo con period_start/end e idempotency
- Sweep diario firmado e idempotente (unique pkg+kind+period)
- Política de abandono configurable (6 opciones, auditada)
- Status sweep nunca marca delivered ni picked_up
- Links de pago reutilizando pasarela existente
- Auditoría automática por trigger en cada cambio