Saltar a contenido

PDF-012D Request To Outbox Dry-Run Local Dev

Objetivo

Conectar una solicitud ecommerce sintetica con la notification outbox local/dev sin enviar emails reales:

solicitud sintetica -> notification outbox -> event log -> idempotencia -> envio bloqueado

Precondiciones

  • DB local/dev: gestion_de_negocios_core.
  • Schema: business_observer.
  • User: openclaw_bo_admin.
  • Tablas existentes:
  • business_observer.ecommerce_customer_requests
  • business_observer.ecommerce_customer_request_audit
  • business_observer.ecommerce_notification_outbox
  • business_observer.ecommerce_notification_event_log

Solicitud sintetica

  • Request seed: PDF-012D:REQUEST:TEST001.
  • Razon social: CLIENTE TEST PDF012D SRL.
  • Email: test-pdf012d@example.invalid.
  • Estado: PENDING_SGC_REVIEW.
  • Datos: sinteticos, sin clientes reales.

Notification outbox

  • Idempotency key: PDF-012D:BILLING_CUSTOMER_REQUEST:TEST001.
  • Recipient: facturacion@ladirecta.com.ar.
  • Status: READY_BLOCKED.
  • send_blocked_by_default: true.
  • Asociada a la solicitud sintetica por request_id.

Auditoria

Se inserta o reutiliza auditoria de request en business_observer.ecommerce_customer_request_audit.

El event log de notification queda en business_observer.ecommerce_notification_event_log con event_type=NOTIFICATION_CREATED y event_payload_sanitized.semantic_event=NOTIFICATION_CREATED_FROM_REQUEST, para respetar el constraint vigente sin ejecutar DDL adicional.

Idempotencia

El flujo se reejecuta con las mismas claves y valida:

  • 1 solicitud.
  • 1 notification.
  • 1 auditoria de request.
  • 1 event log de notification.
  • 0 duplicados inesperados.

Rate-limit local/conceptual

  • Maximo 1 notification activa por idempotency_key.
  • Maximo 1 notification activa por request sintetica.
  • No se envia si send_blocked_by_default=true.

SQL write local/dev ejecutado

En gestion_de_negocios_core.business_observer:

  • Insertar o reutilizar business_observer.ecommerce_customer_requests.
  • Insertar una sola auditoria en business_observer.ecommerce_customer_request_audit.
  • Insertar o reutilizar business_observer.ecommerce_notification_outbox.
  • Insertar un event log en business_observer.ecommerce_notification_event_log.

Todos los registros usan prefijo/seed PDF-012D: o email test-pdf012d@example.invalid.

Que NO se hizo

  • No se enviaron emails reales.
  • No se ejecuto --confirm-send.
  • No se conecto SMTP para envio.
  • 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 worker real.
  • No se activo runtime, sync, scheduler, cron ni pipelines.

Proximo paso hacia produccion

Gate posterior de worker dry-run bloqueado: leer outbox READY_BLOCKED, registrar elegibilidad/rate-limit, mantener envio bloqueado y no conectar SMTP hasta una autorizacion separada.