Saltar a contenido

PDF-013B Prod Request Intake Synthetic Write

Estado: PDF-013B_PROD_REQUEST_INTAKE_SYNTHETIC_WRITE_GO

Marcador operativo: PROD REQUEST INTAKE SYNTHETIC WRITE

Objetivo

Validar en VPS/prod el camino productivo de intake de alta ecommerce con una solicitud sintetica: request, audit, notification outbox READY_BLOCKED, event log, idempotencia y cleanup candidate.

Autorizacion explicita

Se autorizo SQL write controlado solo en VPS/prod openclaw_business_observer_prod.business_observer, con el rol owner configurado en /opt/openclawai/.venv-portal/secrets/postgres-vps-prod-owner.env.

Alcance permitido: solo registros sinteticos con prefijo PDF-013B: en los 4 objetos target.

Backup pre-write

Antes del write se crea un pg_dump -Fc de:

  • business_observer.ecommerce_customer_requests
  • business_observer.ecommerce_customer_request_audit
  • business_observer.ecommerce_notification_outbox
  • business_observer.ecommerce_notification_event_log

Ruta: /opt/openclawai/backups/PDF-013B/.

La evidencia registra path, timestamp, tamano y SHA256 sin imprimir secrets.

Backup ejecutado:

  • Path: /opt/openclawai/backups/PDF-013B/business_observer_four_tables_pre_pdf_013b_20260625T170157Z.dump
  • Timestamp: 20260625T170157Z
  • Tamano: 27559
  • SHA256: e1118ff05be89eeba514240d1bce221af1f5f7950734187ddb10b826eb315343

Datos sinteticos

  • Request idempotency: PDF-013B:REQUEST_INTAKE:TEST001
  • Notification idempotency: PDF-013B:BILLING_CUSTOMER_REQUEST:TEST001
  • Razon social: CLIENTE TEST PDF013B SRL
  • Nombre fantasia: TEST PDF013B
  • Email: test-pdf013b@example.invalid
  • WhatsApp solicitado: +549110000013B
  • WhatsApp almacenado por constraint productivo: +5491100000132
  • Domicilio fiscal: DOMICILIO FISCAL TEST PDF013B
  • Domicilio pedido: DOMICILIO PEDIDO TEST PDF013B
  • Request status: PENDING_SGC_REVIEW
  • Notification status: READY_BLOCKED
  • send_blocked_by_default=true
  • Notification type: BILLING_CUSTOMER_REQUEST
  • Recipient interno: facturacion@ladirecta.com.ar

Request intake

Se inserta o reutiliza 1 request sintetica en business_observer.ecommerce_customer_requests. La solicitud queda en PENDING_SGC_REVIEW, sin habilitar compra ni crear cliente en sistemas externos.

Auditoria

Se inserta o reutiliza 1 auditoria relacionada en business_observer.ecommerce_customer_request_audit, con metadata sanitizada e idempotency key PDF-013B:REQUEST_INTAKE:TEST001.

Outbox

Se inserta o reutiliza 1 notification outbox en business_observer.ecommerce_notification_outbox, con PDF-013B:BILLING_CUSTOMER_REQUEST:TEST001, status READY_BLOCKED y send_blocked_by_default=true.

Event log

Se inserta o reutiliza 1 event log en business_observer.ecommerce_notification_event_log, marcando REQUEST_INTAKE_NOTIFICATION_CREATED, sin email ni SMTP.

Idempotencia

El script ejecuta el write dos veces. La segunda corrida reutiliza los registros existentes y confirma duplicados 0.

Conteos

Conteos esperados post-write:

  • request PDF-013B = 1
  • audit PDF-013B = 1
  • notification PDF-013B = 1
  • event log PDF-013B = 1
  • duplicados = 0

Conteos observados post-write: 1 / 1 / 1 / 1, duplicados 0.

Cleanup candidate

infra/business-observer/production/b2b-pricing/PDF-013B/PDF-013B-PROD-REQUEST-INTAKE-CLEANUP-CANDIDATE.sql borra solo filas con prefijo PDF-013B:. Queda con ROLLBACK y no se ejecuta sin autorizacion explicita.

Que NO se hizo

  • no se enviaron emails reales
  • no se conecto SMTP para envio
  • no se imprimieron secrets/passwords
  • no se usaron datos reales de clientes
  • no se escribio en SGC
  • no se toco WooCommerce API
  • no se activo worker/runtime/sync/scheduler/cron/pipelines

Riesgos

Snapshot proveedor: PENDING_SNAPSHOT_NOT_PROVIDER_VERIFIABLE. No bloquea este gate porque existe backup pre-write de las 4 tablas target y el write es sintetico/acotado.

Proximo paso hacia produccion

Preparar intake real controlado desde formulario/plugin con outbox bloqueada por defecto, revision manual de Facturacion y autorizacion separada antes de tocar SGC o WooCommerce.