Saltar a contenido

PDF-012C MVP Notification Outbox Local Dev

Objetivo

Crear la base productiva minima local/dev para notificaciones internas de alta ecommerce sin disparar emails sueltos: outbox persistente, idempotencia, auditoria, template versionado, destinatario interno permitido y bloqueo por defecto.

DDL ejecutado local/dev

Se ejecuto en PostgreSQL local/dev:

  • DB: gestion_de_negocios_core
  • Schema: business_observer
  • User: openclaw_bo_admin
  • DDL: PDF-012C-NOTIFICATION-OUTBOX-DDL-CANDIDATE.sql

Tablas creadas:

  • business_observer.ecommerce_notification_outbox
  • business_observer.ecommerce_notification_event_log

Antes del DDL el ejecutor valida DB, user, schema, modo preflight read-only, ausencia/estado de objetos PDF-012C, no email real, no WooCommerce y no SGC write. Tambien genera backup schema-only local/dev fuera de Git en C:\APV\backups\openclawai\PDF-012C\.

Notification candidate

Se inserto una notification candidate sintetica:

  • notification_type: BILLING_CUSTOMER_REQUEST
  • recipient_email: facturacion@ladirecta.com.ar
  • status: READY_BLOCKED
  • send_blocked_by_default: true
  • idempotency_key: PDF-012C:BILLING_CUSTOMER_REQUEST:TEST001
  • template_version: billing_customer_request_v1
  • payload_hash: SHA-256 del payload sintetico/sanitizado

Idempotencia

idempotency_key es unico. El ejecutor reintenta la misma clave y confirma que no duplica: queda 1 notification candidate y 0 duplicados.

Auditoria

Se inserto 1 evento:

  • event_type: NOTIFICATION_CREATED
  • event_status: READY_BLOCKED
  • event_payload_sanitized: payload sintetico sin secrets, password, token ni connection string.

Template versionado

Template publico:

infra/business-observer/production/b2b-pricing/PDF-012C/templates/billing_customer_request_v1.txt

Incluye razon social, CUIT sanitizado, email sanitizado, WhatsApp sanitizado, domicilio fiscal, domicilio pedido, rubro, comentario, estado PENDING_SGC_REVIEW y nota de operacion humana: SGC read-only, carga o correccion manual.

Destinatarios permitidos

Inicialmente solo:

  • facturacion@ladirecta.com.ar

La constraint bloquea destinatarios de clientes, proveedores o listas.

Rate-limit conceptual

PDF-012C no activa workers. El rate-limit queda como contrato para el proximo gate: limitar por tipo de notificacion, destinatario, ventana temporal, estado no terminal y clave idempotente deterministica.

Bloqueo por defecto

send_blocked_by_default=true es default y constraint obligatoria. El gate no incluye envio SMTP real ni --confirm-send.

Que NO se hizo

  • No se enviaron emails reales.
  • No se ejecuto --confirm-send.
  • No se toco WooCommerce API.
  • No se escribio en SGC.
  • No se usaron datos reales de clientes.
  • No se imprimieron secrets/passwords/connection strings.
  • No se toco VPS/prod con datos.
  • No se activo runtime, sync, scheduler, cron ni pipelines.

Proximo paso hacia MVP productivo

Gate separado: integrar una solicitud ecommerce sintetica con el outbox, mantener envio bloqueado, definir rate-limit operativo y generar un worker dry-run sin SMTP real antes de cualquier autorizacion productiva.