Saltar a contenido

PDF-011C - B2B Local Dev Seed Data Plan

Estado: PLAN READY / SEED CANDIDATE ONLY / SIN SQL WRITE

Fecha: 2026-06-23

Resumen

PDF-011C prepara el gate posterior para cargar pocos datos B2B controlados en PostgreSQL local/dev, sobre los objetos creados en PDF-011B.

Esta fase solo versiona documentacion, script candidate y validador. No ejecuta SQL write, no carga datos, no toca WooCommerce y no toca VPS/prod.

Safe point

  • HEAD esperado despues de publicar PDF-011B: 3bdd855ae390ec648d375cc207a7c874e99b0451.
  • origin/main esperado despues de publicar PDF-011B: 3bdd855ae390ec648d375cc207a7c874e99b0451.
  • Repo esperado: limpio.

Objetos B2B objetivo

  • business_observer.b2b_customer_mapping.
  • business_observer.b2b_product_price.
  • business_observer.b2b_pricing_decision_log.
  • business_observer.v_b2b_customer_effective_price.

Reglas comerciales vigentes

  • Visitante no logueado usa PrecioListaFinal.
  • Cliente B2B usa Lista_Precio 1..9 -> PrecioL1..PrecioL9.
  • PrecioL1 no es precio publico default.
  • WooCommerce no es fuente maestra de precios B2B.

Diseno del seed candidate

El seed sera minimo, sintetico y no masivo.

b2b_customer_mapping

Rows candidate:

  • Cliente sintetico wc_customer_id=900001, sgc_customer_id=SYNTH-B2B-L1, price_list_code=L1, estado activo.
  • Cliente sintetico wc_customer_id=900005, sgc_customer_id=SYNTH-B2B-L5, price_list_code=L5, estado activo.

Caso bloqueado solo de prueba:

  • wc_customer_id=900099, sgc_customer_id=SYNTH-B2B-BLOCKED, price_list_code=L1, mapping_status=BLOCKED.
  • Este caso queda fuera del insert productivo por defecto. Solo podria usarse en un gate de test local/dev separado.

b2b_product_price

Rows candidate:

  • SKUs piloto derivados de PDF-009M, maximo 3 SKUs.
  • SKU obligatorio: 2442.
  • SKUs adicionales candidate: 2443, 2444.
  • Listas incluidas: L1 y L5.
  • Campos permitidos: SKU, lista, precio aplicado sintetico, regular_price_reference sintetico, moneda, source_hash no sensible, quality_status, valid_from.
  • Campos prohibidos: costos, margenes, proveedor, CUIT, email, telefono, direccion o datos personales.

b2b_pricing_decision_log

No se cargaran logs manuales en este gate. La decision aprobada es que b2b_pricing_decision_log se alimente cuando exista motor runtime autorizado.

Payload candidate

El script prepare_pdf_011c_seed_payload.py:

  • No se conecta a PostgreSQL.
  • No lee .env.
  • No imprime secrets.
  • Usa IDs sinteticos.
  • Genera payload JSON y SQL candidate bajo tmp/pdf-011c/, carpeta ignorada por Git.
  • Incluye INSERT controlados solo para b2b_customer_mapping y b2b_product_price.
  • No incluye inserts a b2b_pricing_decision_log.

SQL write

En PDF-011C no se ejecuto SQL write. El SQL generado por el script es candidate y queda bloqueado hasta un gate posterior con autorizacion explicita de escritura local/dev.

Rollback / cleanup candidate

El proximo gate que autorice inserts debera incluir cleanup local/dev acotado:

```sql DELETE FROM business_observer.b2b_product_price WHERE tenant_code = 'alpuntodeventa' AND source_hash LIKE 'pdf011c_seed_%';

DELETE FROM business_observer.b2b_customer_mapping WHERE tenant_code = 'alpuntodeventa' AND source_hash LIKE 'pdf011c_seed_%'; ```

El cleanup debe ejecutarse solo en local/dev, con transaccion unica, ON_ERROR_STOP=1 y post-checks read-only.

Validaciones del proximo gate

Antes de ejecutar inserts controlados:

  • Confirmar DB local/dev y schema business_observer.
  • Confirmar objetos B2B presentes.
  • Confirmar repo limpio.
  • Confirmar que no se usa WooCommerce API.
  • Confirmar que no se usa VPS/prod.
  • Confirmar que el seed no contiene datos sensibles visibles; mantener evidencia sin datos sensibles visibles.
  • Confirmar conteo maximo esperado: 2 mappings activos y 6 precios B2B candidate.
  • Confirmar cleanup candidate antes de cualquier ejecucion.

Que NO se hizo

  • No se uso VPS/prod.
  • No se toco WooCommerce API.
  • No se modifico .env.
  • No se imprimieron secrets.
  • No se imprimieron datos personales.
  • No se ejecuto SQL write.
  • No se cargaron datos.
  • Sin carga masiva; no se ejecuto carga masiva.
  • No se modifico runtime.
  • No se ejecuto sync, scheduler, cron ni pipelines.

GO/NO-GO final

PLAN READY / SEED CANDIDATE ONLY / SIN SQL WRITE.

Proximo paso

Crear un gate separado PDF-011D para ejecutar inserts controlados en PostgreSQL local/dev, solo si se autoriza SQL write explicito y se confirma el cleanup candidate.