Saltar a contenido

PDF-013A MVP Request Intake Production Path

Objetivo

Preparar el camino productivo minimo para recibir una solicitud futura de alta ecommerce y convertirla en request, audit, notification outbox bloqueada y event log, sin activar envio automatico ni tocar sistemas externos.

Camino objetivo:

formulario/plugin futuro -> request prod -> audit prod -> notification outbox prod READY_BLOCKED -> event log prod -> worker manual posterior

Contrato de solicitud

Campos minimos:

  • razon_social
  • nombre_fantasia
  • cuit_normalizado
  • email_contacto
  • telefono_whatsapp
  • domicilio_fiscal
  • domicilio_pedido
  • domicilio_pedido_es_fiscal
  • rubro
  • comentario
  • source_channel
  • request_status = PENDING_SGC_REVIEW

Reglas operativas:

  • SGC sigue read-only.
  • Facturacion revisa manualmente.
  • La persona autorizada carga/corrige en SGC.
  • OpenClaw detecta despues por lectura.
  • Ningun cliente puede comprar solo por completar la solicitud.

Contrato de outbox

  • notification_type = BILLING_CUSTOMER_REQUEST
  • recipient_email = facturacion@ladirecta.com.ar
  • status = READY_BLOCKED
  • send_blocked_by_default = true
  • template_version = billing_customer_request_v1
  • idempotency_key deterministica
  • payload_hash deterministico

Idempotencia

Key productiva candidate:

REQUEST_INTAKE:<normalized_cuit>:<email_hash>:<date_bucket>

Key sintetica de este gate:

PDF-013A:REQUEST_INTAKE:TEST001

El payload_hash se calcula con JSON canonico ordenado para que el mismo payload genere siempre el mismo hash.

Rate-limit

  • Maximo 1 request activa por idempotency_key.
  • Maximo 1 outbox activa por request.
  • No envio automatico.
  • Bloqueo si recipient no esta en allowlist.
  • Bloqueo si request ya existe pendiente.

Seguridad

  • Payloads sinteticos y sanitizados.
  • Sin datos reales de clientes.
  • Sin secrets, passwords ni connection strings en output.
  • Recipient limitado a allowlist interna.
  • Notification queda READY_BLOCKED.
  • Worker manual queda para un gate posterior.

SGC read-only

Este gate no escribe en SGC. La solicitud solo deja preparado el contrato para revision manual de Facturacion y carga/correccion posterior por persona autorizada.

WooCommerce no tocado

Este gate no llama WooCommerce API, no crea customers, no habilita login, no cambia roles y no modifica precios ni permisos comerciales.

Output sanitizado

El script candidate genera evidencia local ignorada por Git en:

  • tmp/pdf-013a/request_intake_candidate.json
  • tmp/pdf-013a/request_payload_sanitized.json
  • tmp/pdf-013a/outbox_payload_sanitized.json
  • tmp/pdf-013a/audit_payload_sanitized.json
  • tmp/pdf-013a/event_log_payload_sanitized.json
  • tmp/pdf-013a/validation_summary.json

Que NO se hizo

  • No se enviaron emails reales.
  • No se conecto SMTP para envio.
  • No se ejecuto SQL write en prod.
  • No se escribio en SGC.
  • No se toco WooCommerce API.
  • No se usaron datos reales de clientes.
  • No se activo worker.
  • No se activo runtime, sync, scheduler, cron ni pipelines.

Proximo paso hacia produccion

PDF-013B: preflight read-only del endpoint/form/plugin candidate y de los constraints productivos requeridos. Despues, un gate separado podria autorizar un SQL write sintetico bloqueado o un piloto controlado con datos explicitamente aprobados.