Saltar a contenido

PDF-013C Form Plugin Intake Contract

Estado: PDF-013C_FORM_PLUGIN_INTAKE_CONTRACT_CANDIDATE

Objetivo

Definir el contrato ejecutable que debera usar el formulario/plugin de La Directa para recibir solicitudes de alta ecommerce.

El gate deja definidos campos, validaciones, payload, endpoint interno futuro, idempotencia, rate-limit, seguridad, outbox bloqueada y handoff WooCommerce. No implementa WooCommerce, no abre endpoint publico y no ejecuta SQL write.

Campos

  • razon_social
  • nombre_fantasia
  • cuit
  • email_contacto
  • telefono_whatsapp
  • domicilio_fiscal
  • domicilio_pedido
  • domicilio_pedido_es_fiscal
  • rubro
  • comentario
  • acepta_contacto_comercial
  • source_channel

Validaciones

  • CUIT normalizado a 11 digitos y validado por digito verificador.
  • Email valido y normalizado.
  • WhatsApp normalizado a + y digitos.
  • Domicilio fiscal obligatorio.
  • Domicilio pedido obligatorio o igual a fiscal.
  • Rubro obligatorio.
  • Contacto comercial aceptado.
  • Rate-limit futuro por CUIT/email/IP.
  • Sin revelar si el cliente existe.
  • Sin compra, sin usuario WooCommerce y sin password.

Contrato payload

Schema:

infra/business-observer/production/b2b-pricing/PDF-013C/request_intake_contract.schema.json

Endpoint futuro candidate:

POST /internal/business-observer/request-intake

Estado inicial:

PENDING_SGC_REVIEW

Idempotencia

Shape productiva:

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

Ejemplo sintetico:

PDF-013C:REQUEST_INTAKE:TEST001

Rate-limit

  • CUIT normalizado.
  • Hash de email.
  • Hash de IP.
  • Maximo 1 request activa por idempotency key.
  • Maximo 3 submissions por CUIT/email por dia.
  • Maximo 10 submissions por IP por hora.
  • Envio automatico bloqueado.

Seguridad

  • Captcha o challenge anti-spam.
  • Honeypot field.
  • Validacion server-side.
  • Logs sanitizados.
  • Sin secrets.
  • Sin datos sensibles en URL.
  • Sin enumeracion de clientes.
  • Sin password en intake.
  • Sin creacion automatica de Woo user.

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

Event log:

NOTIFICATION_CREATED

SGC read-only

La solicitud queda para revision manual. PDF-013C no escribe en SGC; solo define el contrato para intake y candidates sanitizados.

WooCommerce handoff

Repo futuro:

C:\APV\vps-woocommerce-ladirecta

Debe renderizar los campos del contrato, enviar al endpoint interno futuro, mostrar errores genericos sin enumerar clientes y cerrar con mensaje neutro:

Recibimos tu solicitud. Facturacion la revisara y se contactara por los datos informados.

No implementar aun. El siguiente gate debera decidir plugin/formulario, captcha, rate-limit real, endpoint interno y prueba controlada.

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 abrio endpoint publico.
  • No se creo plugin real.
  • No se activo runtime, sync, scheduler, cron ni pipelines.

Proximo paso

Gate de implementacion candidate en C:\APV\vps-woocommerce-ladirecta, sin publicar endpoint, sin WooCommerce API writes, sin SGC write y manteniendo la outbox en READY_BLOCKED.