PDF-011G - Customer Activation DDL Candidate¶
Estado: PDF-011G CUSTOMER ACTIVATION DDL CANDIDATE / CANDIDATE ONLY / SIN SQL WRITE
Fecha: 2026-06-24
Objetivo¶
Disenar el DDL candidate para guardar el onboarding ecommerce B2B de La Directa sin ejecutar SQL y sin activar runtime:
- Clientes ecommerce derivados desde SGC.
- Solicitudes de alta de contactos nuevos sin codigo SGC.
- Auditoria de solicitudes.
- Auditoria de activaciones.
- Domicilio fiscal y domicilio de pedido/envio.
Este documento baja a candidato DDL el contrato definido en PDF-011F.
Restricciones¶
- No se ejecuto SQL write.
- No se crearon tablas.
- No se toco PostgreSQL.
- No se toco WooCommerce API.
- No se enviaron emails reales.
- No se modifico
.env. - No se imprimieron secrets.
- No se tocaron datos.
- No se toco VPS/prod con datos.
- No se activaron runtime, sync, scheduler, cron ni pipelines.
Secrets Hostinger¶
Ruta esperada:
C:\APV\openclawai.venv-portal\secrets\ladirecta-hostinger-email.env
Estado: PENDING_SECRET / PENDING_SMTP_CONFIG.
No se invento host SMTP, no se imprimio password y no se envio email real. Si
el archivo privado aparece en un gate posterior, se validara solo existencia,
que este ignorado por Git y que no aparezca en git status; nunca se debe
imprimir contenido.
Archivos del paquete¶
infra/business-observer/production/b2b-pricing/PDF-011G/PDF-011G-CUSTOMER-ACTIVATION-DDL-CANDIDATE.sqlinfra/business-observer/production/b2b-pricing/PDF-011G/PDF-011G-CUSTOMER-ACTIVATION-ROLLBACK-CANDIDATE.sqlinfra/business-observer/production/b2b-pricing/PDF-011G/validate_pdf_011g_customer_activation_ddl_candidate.py
Tablas Candidate¶
business_observer.clientes_ecommerce¶
Guarda el cliente ecommerce derivado desde SGC y su estado de activacion.
Campos incluidos:
ecommerce_customer_idtenant_codesgc_customer_idcodigo_clientecuit_normalizadorazon_socialnombre_fantasiaestado_sgclista_preciovendedortelefono_whatsappemail_sgcemail_realemail_temporalwc_customer_idactivation_statusactivation_methodonboarding_sourceonboarding_statussgc_registration_statusbilling_review_statusbilling_review_requested_atbilling_review_email_sent_atbilling_review_email_todomicilio_fiscaldomicilio_fiscal_normalizadodomicilio_pedidodomicilio_pedido_normalizadodomicilio_pedido_es_fiscalsource_hashquality_statuscreated_atupdated_atlast_sync_at
Constraints candidate:
- unique por tenant + codigo_cliente cuando exista:
ux_clientes_ecommerce_codigo_cliente. - unique por tenant + cuit_normalizado para clientes activos:
ux_clientes_ecommerce_active_cuit. - unique email_real cuando este activado:
ux_clientes_ecommerce_active_email_real. - unique por tenant + wc_customer_id activo:
ux_clientes_ecommerce_active_wc_customer. - checks para
activation_status,onboarding_status,sgc_registration_status,billing_review_status,quality_status, CUIT normalizado, email lower-case, WhatsApp normalizado y domicilios.
business_observer.ecommerce_customer_requests¶
Guarda solicitudes de alta de contactos nuevos sin codigo SGC.
Campos incluidos:
request_idtenant_coderequest_statusrazon_socialnombre_fantasiacuit_normalizadocondicion_ivaemailtelefono_whatsappcontacto_nombrecontacto_rolrubrocomentariodomicilio_fiscaldomicilio_fiscal_normalizadodomicilio_pedidodomicilio_pedido_normalizadodomicilio_pedido_es_fiscalbilling_email_tobilling_email_statusbilling_email_sent_atsgc_customer_idcodigo_cliente_asignadocreated_atupdated_atquality_status
Constraints candidate:
- checks para
request_status,billing_email_statusyquality_status. - CUIT normalizado con 11 digitos numericos.
- email en lower-case.
- WhatsApp normalizado en formato
+y digitos. - domicilio fiscal/pedido con campo normalizado obligatorio si se guarda JSON.
- bloqueo conceptual de secrets/passwords/tokens dentro de metadata JSON.
business_observer.ecommerce_customer_request_audit¶
Audita cambios sobre solicitudes de alta.
Campos incluidos:
audit_idrequest_idevent_typeevent_statusevent_reasonevent_atactor_typeactor_refmetadata_sanitized
Incluye FK candidate hacia ecommerce_customer_requests, checks de evento y
metadata sanitizada sin password, secret ni token.
business_observer.customer_activation_audit¶
Audita activaciones de clientes ecommerce.
Campos incluidos:
activation_audit_idecommerce_customer_idsgc_customer_idwc_customer_idevent_typeevent_statusevent_reasonevent_atip_hashuser_agent_hashmetadata_sanitized
Incluye FK candidate hacia clientes_ecommerce, hashes de IP/user-agent y
metadata sanitizada.
Reglas De Normalizacion¶
- No guardar passwords.
- No guardar secrets.
- No guardar CUIT/email/telefono sin normalizar cuando exista campo normalizado.
cuit_normalizadoqueda solo numerico de 11 digitos.- emails quedan lower-case.
telefono_whatsappqueda en formato candidate E.164 simplificado.domicilio_fiscal_normalizadoydomicilio_pedido_normalizadoquedan como texto normalizado obligatorio si se guarda estructura JSON asociada.
Rollback Candidate¶
El rollback candidate elimina en orden dependiente:
business_observer.customer_activation_auditbusiness_observer.ecommerce_customer_request_auditbusiness_observer.ecommerce_customer_requestsbusiness_observer.clientes_ecommerce
No fue ejecutado.
Validacion¶
Validador:
python infra/business-observer/production/b2b-pricing/PDF-011G/validate_pdf_011g_customer_activation_ddl_candidate.py
El validador revisa:
- tablas y campos requeridos.
- constraints/checks/indices candidate.
- rollback candidate.
- documento publico, README,
mkdocs.yml,PROJECT-STATE,ROADMAPyACTIVE-CONTEXT. - estado
PENDING_SECRET / PENDING_SMTP_CONFIG. - ausencia de patrones de secrets.
- ausencia de DML en el DDL candidate.
Estado Final¶
PDF-011G queda como candidato documental listo para revision. Falta un gate
separado para preflight PostgreSQL real/local-dev, backup/snapshot aprobado y
autorizacion explicita antes de cualquier SQL write.
No se ejecuto SQL write, no se enviaron emails reales, no se toco WooCommerce API, no se tocaron datos, no se toco VPS/prod con datos, no se imprimieron secrets y no se activaron runtime, sync, scheduler, cron ni pipelines.