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_socialnombre_fantasiacuitemail_contactotelefono_whatsappdomicilio_fiscaldomicilio_pedidodomicilio_pedido_es_fiscalrubrocomentarioacepta_contacto_comercialsource_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
1request activa por idempotency key. - Maximo
3submissions por CUIT/email por dia. - Maximo
10submissions 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_REQUESTrecipient_email = facturacion@ladirecta.com.arstatus = READY_BLOCKEDsend_blocked_by_default = truetemplate_version = billing_customer_request_v1idempotency_keydeterministicapayload_hashdeterministico
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.