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:
HEADcoincide con6cecf85ef78f1513b689feefc314d07129a84598.origin/maincoincide con6cecf85ef78f1513b689feefc314d07129a84598.- repo limpio al inicio.
- ultimo commit esperado confirmado.
B. Documentacion leida¶
Documentacion revisada:
docs/PROJECT-STATE.mddocs/ROADMAP.mddocs/governance/ACTIVE-CONTEXT.mddocs/tenants/alpuntodeventa/business-observer/production/PDF-010A-B2B-PRICE-LISTS-CUSTOMER-SYNC-CONTRACT.mddocs/tenants/alpuntodeventa/business-observer/production/PDF-010B-B2B-PRICE-LIST-AUTHORITY-READ-ONLY-VALIDATION.mddocs/tenants/alpuntodeventa/business-observer/production/PDF-010C-SOURCE-001-PRICE-LIST-CATALOG-READ-ONLY-VALIDATION.mddocs/tenants/alpuntodeventa/business-observer/production/PDF-010D-SOURCE-001-VCLIENTES-READ-ONLY-SNAPSHOT.mddocs/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 ACTIVOpuede simular precio B2B.CLIENTE SUSPENDIDOquedaBLOCKED_CUSTOMER_STATUS.CLIENTE DE BAJAquedaBLOCKED_CUSTOMER_STATUS.- clientes sin
Lista_PrecioquedarianBLOCKED, pero SOURCE-001 observo0casos 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:2SKUs.PrecioL1..PrecioL9 <= 0:2SKUs 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_pricede WooCommerce. regular_pricevigente sigue respaldado porPrecioListaFinal.PrecioL1no queda aprobado como default publico.- no migrar
regular_priceaL1sin 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_Preciopresente y dentro de1..9; - correspondencia comercial
Lista_Precio -> L1..L9confirmada 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_hasho 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.mddocs/PROJECT-STATE.mddocs/ROADMAP.mddocs/governance/ACTIVE-CONTEXT.mdmkdocs.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 -sbgit rev-parse HEADgit rev-parse origin/maingit log -3 --onelinegit 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:
- confirmar
Lista_Precio 1..9 -> L1..L9como regla comercial aplicable; - confirmar o descartar
L1como precio publico/default; - generar muestra sanitizada row-level activa para todas las listas;
- definir matching
sgc_customer_id <-> wc_customer_idsin crear clientes; - 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.