Saltar a contenido

PDF-010E - B2B Customer Price Dry-Run

Fecha: 2026-06-23

Estado: DRY-RUN B2B / SIN WRITES / SIN SYNC / PENDING_BUSINESS_CONFIRMATION

portal_visible = yes

Scope: tenant

tenant_id: alpuntodeventa

Destino funcional: SOURCE-001 Clientes + SOURCE-002 Productos -> WooCommerce La Directa

Owner: Gabi / Carlos Canu

A. SAFE POINT inicial

Control Resultado
git status -sb ## main...origin/main
git rev-parse HEAD 6cecf85ef78f1513b689feefc314d07129a84598
git rev-parse origin/main 6cecf85ef78f1513b689feefc314d07129a84598
git log -3 --oneline 6cecf85 docs: add pdf-010d source-001 vclientes read-only snapshot; d66c01b docs: add pdf-010c source-001 price list catalog validation; 72a2961 docs: add pdf-010b b2b price list authority validation
git diff --check inicial PASS

Safe point esperado confirmado:

  • HEAD coincide con 6cecf85ef78f1513b689feefc314d07129a84598.
  • origin/main coincide con 6cecf85ef78f1513b689feefc314d07129a84598.
  • repo limpio al inicio.
  • ultimo commit esperado confirmado.

B. Documentacion leida

Documentacion revisada:

  • docs/PROJECT-STATE.md
  • docs/ROADMAP.md
  • docs/governance/ACTIVE-CONTEXT.md
  • docs/tenants/alpuntodeventa/business-observer/production/PDF-010A-B2B-PRICE-LISTS-CUSTOMER-SYNC-CONTRACT.md
  • docs/tenants/alpuntodeventa/business-observer/production/PDF-010B-B2B-PRICE-LIST-AUTHORITY-READ-ONLY-VALIDATION.md
  • docs/tenants/alpuntodeventa/business-observer/production/PDF-010C-SOURCE-001-PRICE-LIST-CATALOG-READ-ONLY-VALIDATION.md
  • docs/tenants/alpuntodeventa/business-observer/production/PDF-010D-SOURCE-001-VCLIENTES-READ-ONLY-SNAPSHOT.md
  • docs/tenants/alpuntodeventa/business-observer/production/PDF-009M-WOOCOMMERCE-PRODUCT-DRAFT-PILOT-WRITE.md

C. Snapshots usados

Snapshots locales verificados:

Source Path Uso Estado
SOURCE-001 Clientes snapshots/source-001/SOURCE-001-VCLIENTES-READ-ONLY-SANITIZED-20260623.json clientes sanitizados, agregados por lista/estado y calidad OK
SOURCE-002 Productos snapshots/source-002/SOURCE-002-PRODUCTS-RUNTIME-PREFLIGHT-20260620-173614.csv precios por SKU, PrecioListaFinal y PrecioL1..PrecioL9 OK

No se consulto WooCommerce API, PostgreSQL ni SGC runtime durante este dry-run. La simulacion usa solo evidencia local.

D. Muestra de clientes sanitizada

El snapshot SOURCE-001 sanitizado conserva agregados completos y una muestra row-level parcial. La seleccion below prioriza CLIENTE ACTIVO cuando existe en la muestra sanitizada visible. Para listas 1, 3 y 8, el agregado confirma clientes activos, pero la muestra row-level sanitizada disponible no incluye una fila activa; por seguridad se documenta el caso visible como BLOCKED_CUSTOMER_STATUS y no se inventa un cliente.

Lista_Precio Cliente sanitizado Estado Conteo activo agregado Resultado sample
1 ***1 / Log*** CLIENTE DE BAJA 1365 BLOCKED_CUSTOMER_STATUS
2 ***001 / CHE*** CLIENTE ACTIVO 919 READY_FOR_DRY_RUN
3 ***013 / Che*** CLIENTE DE BAJA 109 BLOCKED_CUSTOMER_STATUS
4 ***028 / 4K *** CLIENTE ACTIVO 1068 READY_FOR_DRY_RUN
5 ***002 / SAR*** CLIENTE ACTIVO 2288 READY_FOR_DRY_RUN
6 ***042 / LEA*** CLIENTE ACTIVO 179 READY_FOR_DRY_RUN
7 ***206 / NAD*** CLIENTE ACTIVO 51 READY_FOR_DRY_RUN
8 ***862 / Est*** CLIENTE DE BAJA 4 BLOCKED_CUSTOMER_STATUS
9 ***360 / NIC*** CLIENTE ACTIVO 3 READY_FOR_DRY_RUN

Regla aplicada:

  • CLIENTE ACTIVO puede simular precio B2B.
  • CLIENTE SUSPENDIDO queda BLOCKED_CUSTOMER_STATUS.
  • CLIENTE DE BAJA queda BLOCKED_CUSTOMER_STATUS.
  • clientes sin Lista_Precio quedarian BLOCKED, pero SOURCE-001 observo 0 casos sin lista.

E. Muestra de SKUs

Productos piloto de PDF-009M incluidos como muestra principal:

SKU Producto regular_price vigente PrecioL1 PrecioL6 PrecioL8 PrecioL9 Resultado precio
2442 Pudding de Choco c/chip x300 grs 2020.901 2020.900 1899.650 2526.130 1839.020 PRICE_OK
2443 Pudding Gales C/Nuez x300 grs 2020.901 2020.900 1899.650 2526.130 1839.020 PRICE_OK
2444 Pudding Limon c/ semilla de Amapolla x300 grs 2020.901 2020.900 1899.650 2526.130 1839.020 PRICE_OK
2847 Pudding Naranja c/ cascara x350 grs 2020.901 2020.900 1899.650 2526.130 1839.020 PRICE_OK
2446 Pudding Vainila capa frutos secos x300 grs 2020.901 2020.900 1899.650 2526.130 1839.020 PRICE_OK
2814 Chips Papas x 80gr Alwa 1081.151 1081.150 1081.150 1351.440 1081.150 PRICE_OK
2815 Chips Batata x 80gr Alwa 1081.151 1081.150 1081.150 1351.440 1081.150 PRICE_OK
2816 Pochoclo dulce x 75gr Alwa 946.940 946.940 946.940 1183.680 946.940 PRICE_OK
3514 Nachos con Chia x80gr Alwa 1153.947 1153.950 1153.950 1153.950 1153.950 PRICE_OK
0269 Arrocitas C/Sal x 101gr Ce 1015.718 1015.720 936.000 1269.650 924.300 PRICE_OK

Casos negativos detectados en SOURCE-002:

SKU Producto regular_price vigente PrecioL1..L9 Resultado precio
3995 Saldos Clientes 0.000 todos 0.000 BLOCKED_PRICE_MISSING
4010 Asesoramiento de servicios de marketing 0.000 todos 0.000 BLOCKED_PRICE_MISSING

Conteo de precios faltantes/cero en SOURCE-002:

  • PrecioListaFinal <= 0: 2 SKUs.
  • PrecioL1..PrecioL9 <= 0: 2 SKUs por cada lista.

F. Matriz cliente/lista/SKU/precio

Matriz de simulacion sobre SKU 2442, usando la regla candidate Lista_Precio n -> Ln:

Cliente sanitizado Estado Lista_Precio price_list_code candidate SKU regular_price vigente precio lista candidate Resultado
***1 / Log*** CLIENTE DE BAJA 1 L1 2442 2020.901 2020.900 BLOCKED_CUSTOMER_STATUS
***001 / CHE*** CLIENTE ACTIVO 2 L2 2442 2020.901 2020.900 PENDING_BUSINESS_CONFIRMATION
***013 / Che*** CLIENTE DE BAJA 3 L3 2442 2020.901 2020.900 BLOCKED_CUSTOMER_STATUS
***028 / 4K *** CLIENTE ACTIVO 4 L4 2442 2020.901 2020.900 PENDING_BUSINESS_CONFIRMATION
***002 / SAR*** CLIENTE ACTIVO 5 L5 2442 2020.901 2020.900 PENDING_BUSINESS_CONFIRMATION
***042 / LEA*** CLIENTE ACTIVO 6 L6 2442 2020.901 1899.650 PENDING_BUSINESS_CONFIRMATION
***206 / NAD*** CLIENTE ACTIVO 7 L7 2442 2020.901 2020.900 PENDING_BUSINESS_CONFIRMATION
***862 / Est*** CLIENTE DE BAJA 8 L8 2442 2020.901 2526.130 BLOCKED_CUSTOMER_STATUS
***360 / NIC*** CLIENTE ACTIVO 9 L9 2442 2020.901 1839.020 PENDING_BUSINESS_CONFIRMATION

Matriz negativa de precio:

Cliente sanitizado Estado Lista_Precio price_list_code candidate SKU regular_price vigente precio lista candidate Resultado
***001 / CHE*** CLIENTE ACTIVO 2 L2 3995 0.000 0.000 BLOCKED_PRICE_MISSING
***360 / NIC*** CLIENTE ACTIVO 9 L9 4010 0.000 0.000 BLOCKED_PRICE_MISSING

G. Validacion Lista_Precio -> L1..L9

Veredicto: SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION.

Lista_Precio SGC price_list_code candidate Campo producto candidate Estado
1 L1 PrecioL1 SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION
2 L2 PrecioL2 SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION
3 L3 PrecioL3 SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION
4 L4 PrecioL4 SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION
5 L5 PrecioL5 SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION
6 L6 PrecioL6 SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION
7 L7 PrecioL7 SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION
8 L8 PrecioL8 SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION
9 L9 PrecioL9 SUPPORTED_BY_RUNTIME_CATALOG / PENDING_BUSINESS_CONFIRMATION

La evidencia SOURCE-001 confirma que el catalogo real observado de Lista_Precio es 1..9, sin vacios, nulos ni valores fuera de rango. La activacion comercial de esa equivalencia sigue pendiente.

H. Validacion L1/default publico

Veredicto: PENDING_VALIDATE.

Regla vigente preservada:

  • visitante no logueado usa regular_price de WooCommerce.
  • regular_price vigente sigue respaldado por PrecioListaFinal.
  • PrecioL1 no queda aprobado como default publico.
  • no migrar regular_price a L1 sin confirmacion humana o evidencia comercial adicional.

I. Reglas READY

Un caso queda READY solo cuando se cumplan todas estas condiciones:

  • cliente con Estado = CLIENTE ACTIVO;
  • cliente con Lista_Precio presente y dentro de 1..9;
  • correspondencia comercial Lista_Precio -> L1..L9 confirmada por negocio;
  • SKU con regular_price > 0;
  • SKU con precio de lista candidate > 0;
  • calculo B2B aplicado server-side en catalogo, carrito y checkout;
  • orden guardando evidencia minima por linea: sku, price_list_code, price_total, calculated_at, source_hash o referencia de fuente.

Como la confirmacion comercial sigue pendiente, los clientes activos con precio valido quedan en este gate como PENDING_BUSINESS_CONFIRMATION, no como READY operativo.

J. Bloqueos / PENDING

Caso Resultado Regla
cliente CLIENTE DE BAJA BLOCKED_CUSTOMER_STATUS no vender; preservar historico
cliente CLIENTE SUSPENDIDO BLOCKED_CUSTOMER_STATUS no vender salvo aprobacion futura
cliente sin lista BLOCKED SOURCE-001 observo 0, pero la regla queda definida
lista fuera de 1..9 BLOCKED no inventar mapeo
SKU con PrecioLn <= 0 BLOCKED_PRICE_MISSING no reemplazar por regular_price silenciosamente
Lista_Precio -> L1..L9 PENDING_BUSINESS_CONFIRMATION catalogo tecnico soporta, negocio debe confirmar
L1 como publico/default PENDING_VALIDATE se mantiene PrecioListaFinal
matching wc_customer_id -> sgc_customer_id PENDING no crear ni modificar clientes en este gate

K. Riesgos B2B

Riesgo Impacto Control recomendado
cache de precios por cliente mostrar precio viejo o de lista incorrecta invalidar por customer_id, lista, SKU y hash
performance frontend catalogo lento por resolver precio por linea cache precomputada por sku + price_list_code e indices
precio visual vs carrito reclamo por precio cobrado distinto recalculo server-side obligatorio en carrito/checkout
clientes sin email matching WooCommerce incompleto conciliacion por Codigo SGC; no crear clientes sin gate
WhatsApp duplicado contacto equivocado no usar WhatsApp como clave unica
CUIT duplicado cliente fiscal mal vinculado tratar CUIT como senal sensible, no primary key
suspendidos/de baja venta no permitida bloquear por estado antes de precio
L1 default no confirmado precio publico incorrecto mantener PrecioListaFinal hasta confirmacion
SKU sin precio de lista margen o venta incorrecta bloquear linea/pedido hasta regla aprobada

L. Archivos creados/modificados

Creado:

  • docs/tenants/alpuntodeventa/business-observer/production/PDF-010E-B2B-CUSTOMER-PRICE-DRY-RUN.md

Actualizados:

  • docs/tenants/alpuntodeventa/business-observer/production/README.md
  • docs/PROJECT-STATE.md
  • docs/ROADMAP.md
  • docs/governance/ACTIVE-CONTEXT.md
  • mkdocs.yml

Impacto:

  • se documenta dry-run B2B cliente/lista/SKU/precio con evidencia local;
  • se publica la referencia en MkDocs;
  • no se habilita runtime, sync, API WooCommerce ni writes PostgreSQL.

M. Validaciones ejecutadas

Validaciones de este gate:

  • git status -sb
  • git rev-parse HEAD
  • git rev-parse origin/main
  • git log -3 --oneline
  • git diff --check
  • verificacion local de snapshots SOURCE-001 y SOURCE-002
  • lectura documental solicitada
  • simulacion offline desde JSON/CSV locales

Validacion final requerida al cierre:

  • git diff --check
  • .\.venv-portal\Scripts\mkdocs.exe build --strict

N. Estado final Git

Estado esperado al cierre:

  • cambios documentales publicados por commit controlado;
  • push documental a origin/main;
  • deploy del Knowledge Portal, sin tocar runtime transaccional.

O. Commit documental

Commit de cierre autorizado:

docs: add pdf-010e b2b customer price dry-run

El commit publica solo documentacion y navegacion MkDocs.

P. Proximo paso recomendado

Abrir gate separado para confirmacion comercial B2B:

  1. confirmar Lista_Precio 1..9 -> L1..L9 como regla comercial aplicable;
  2. confirmar o descartar L1 como precio publico/default;
  3. generar muestra sanitizada row-level activa para todas las listas;
  4. definir matching sgc_customer_id <-> wc_customer_id sin crear clientes;
  5. disenar hook/plugin o capa headless para recalculo server-side en catalogo, carrito, checkout y orden.

Q. Restricciones preservadas

Durante este gate:

  • no se toco WooCommerce API;
  • no se toco .env;
  • no se imprimieron secretos;
  • no se toco PostgreSQL con writes;
  • no se ejecuto SQL write;
  • no se crearon clientes WooCommerce;
  • no se crearon productos;
  • no se modificaron productos;
  • no se ejecuto sync;
  • no se activo scheduler, cron ni pipelines;
  • no se hizo deploy runtime transaccional;
  • no se modifico runtime.