PDF-010C - SOURCE-001 Price List Catalog Read-Only Validation¶
Fecha: 2026-06-23
Estado: VALIDACION READ-ONLY / SOURCE_001_RUNTIME_SAMPLE_MISSING / SIN WRITES / SIN SYNC / PENDING_VALIDATE
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 |
72a2961e3f41a16097f455d4ae2af25d2f407f01 |
git rev-parse origin/main |
72a2961e3f41a16097f455d4ae2af25d2f407f01 |
git log -3 --oneline |
72a2961 docs: add pdf-010b b2b price list authority validation; 24ad2aa docs: add pdf-010a b2b price lists customer sync contract; 06979f2 docs: add pdf-009m product draft pilot write |
git diff --check inicial |
PASS |
Safe point esperado confirmado:
HEADcoincide con72a2961e3f41a16097f455d4ae2af25d2f407f01.origin/maincoincide con72a2961e3f41a16097f455d4ae2af25d2f407f01.- 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/BUSINESS-OBSERVER-DATA-CONTRACT-001.mddocs/tenants/alpuntodeventa/business-observer/blueprints/CUSTOMER-BLUEPRINT.mddocs/tenants/alpuntodeventa/business-observer/source-authority/SOURCE-001-CLIENTES-VCLIENTES-AUTHORITY.mddocs/tenants/alpuntodeventa/business-observer/mappings/SOURCE-001-CLIENTES-MAPPING.mddocs/tenants/alpuntodeventa/business-observer/sources/SOURCE-001-SGC-CLIENTES.mdsnapshots/source-002/
Tambien se verifico:
- ausencia de
snapshots/source-001/; - ausencia de exports alternativos SOURCE-001 en
exports/; - presencia de snapshot local
snapshots/source-002/SOURCE-002-PRODUCTS-RUNTIME-PREFLIGHT-20260620-173614.csv.
C. Snapshot/source SOURCE-001¶
Resultado: SOURCE_001_RUNTIME_SAMPLE_MISSING.
No existe en el repo un snapshot local seguro para SOURCE-001:
snapshots/source-001/no existe.exports/no contiene archivos alternativosSOURCE-001,source-001,CLIENTES,clientesoVCLIENTES.- No se ejecuto SQL read-only contra SGC porque este gate no trae autorizacion explicita para consultar runtime.
- No se leyo
.envy no se imprimieron secretos.
Requerimiento exacto para cerrar el catalogo real en un gate posterior:
- archivo CSV o parquet local en
snapshots/source-001/, generado desde la autoridadecommerce.dbo.VCLIENTES; - campos minimos:
Codigo,NombreoNombre_en_Factura,Lista_Precio,Telefono,Cuit,mail,Estado,Localidad,Provincia,Zona; - incluir filas activas, suspendidas y de baja; no filtrar solo
CLIENTE ACTIVO; - incluir metadata no sensible: fecha/hora de extraccion, source object, query authority version y sha256 del archivo;
- no incluir passwords, connection strings ni valores de
.enven documentacion.
D. Campos cliente confirmados¶
Campos confirmados documentalmente desde SOURCE-001:
| Necesidad | Campo / alias confirmado | Estado |
|---|---|---|
| identificador cliente | Codigo -> codigo_cliente |
confirmado |
| nombre visible | Nombre / Nombre_en_Factura -> cliente_nombre |
confirmado |
| razon social | Nombre_en_Factura -> razon_social |
confirmado |
| lista asignada | Lista_Precio -> lista_precio / price_list_code_raw |
campo confirmado; catalogo real faltante |
| telefono / WhatsApp | Telefono -> whatsapp |
confirmado |
| CUIT | Cuit -> cuit / tax_id_raw |
confirmado |
mail -> email / email_raw |
confirmado | |
| estado | Estado -> estado_raw |
confirmado |
| direccion | Direccion_de_pedidos -> direccion_pedidos |
confirmado |
| localidad | Localidad -> localidad / city_raw |
confirmado |
| provincia | Provincia -> provincia / state_province_raw |
confirmado |
| zona | Zona -> zona / logistic_zone_raw |
confirmado |
Estados documentados:
CLIENTE ACTIVO -> active / can_sell=true;CLIENTE SUSPENDIDO -> suspended / can_sell=false;CLIENTE DE BAJA -> inactive / can_sell=false.
E. Catalogo Lista_Precio¶
No se puede catalogar el valor real de Lista_Precio sin snapshot o query read-only autorizada.
| Control requerido | Resultado |
|---|---|
valores unicos de Lista_Precio |
UNKNOWN / SOURCE_001_RUNTIME_SAMPLE_MISSING |
| cantidad de clientes por lista | UNKNOWN / SOURCE_001_RUNTIME_SAMPLE_MISSING |
| listas vacias o nulas | UNKNOWN / SOURCE_001_RUNTIME_SAMPLE_MISSING |
| listas dudosas | UNKNOWN / SOURCE_001_RUNTIME_SAMPLE_MISSING |
listas sin correspondencia con L1..L9 |
UNKNOWN / SOURCE_001_RUNTIME_SAMPLE_MISSING |
| clientes activos por lista | UNKNOWN / SOURCE_001_RUNTIME_SAMPLE_MISSING |
| clientes suspendidos por lista | UNKNOWN / SOURCE_001_RUNTIME_SAMPLE_MISSING |
| clientes de baja por lista | UNKNOWN / SOURCE_001_RUNTIME_SAMPLE_MISSING |
F. Relacion Lista_Precio -> PrecioL1..L9¶
Veredicto: PENDING_VALIDATE.
No hay evidencia local suficiente para afirmar que:
Lista_Precio=1corresponde aPrecioL1;Lista_Precio=2corresponde aPrecioL2;- valores textuales de
Lista_Preciocorresponden aL1..L9; - todas las listas asignadas a clientes tienen campo equivalente en SOURCE-002.
Regla candidate, no aprobada:
Lista_Precio SGC |
price_list_code candidate |
Campo producto candidate | Estado |
|---|---|---|---|
1 |
L1 |
PrecioL1 |
PENDING_VALIDATE |
2 |
L2 |
PrecioL2 |
PENDING_VALIDATE |
3 |
L3 |
PrecioL3 |
PENDING_VALIDATE |
4 |
L4 |
PrecioL4 |
PENDING_VALIDATE |
5 |
L5 |
PrecioL5 |
PENDING_VALIDATE |
6 |
L6 |
PrecioL6 |
PENDING_VALIDATE |
7 |
L7 |
PrecioL7 |
PENDING_VALIDATE |
8 |
L8 |
PrecioL8 |
PENDING_VALIDATE |
9 |
L9 |
PrecioL9 |
PENDING_VALIDATE |
| vacio / nulo | ninguno | ninguno | BLOCKED |
| otro valor | UNKNOWN |
UNKNOWN |
UNKNOWN |
G. Validacion L1/default publico¶
Veredicto: PENDING_VALIDATE.
Regla vigente:
- visitante no logueado usa
regular_pricede WooCommerce; - el
regular_pricevigente documentado sigue basado enPrecioListaFinal; PrecioL1no queda aprobado como default publico;- no se debe migrar
regular_priceaL1sin evidencia comercial o tecnica adicional.
Evidencia heredada:
PDF-009MusoPrecioListaFinalcomoregular_price;PDF-010BmantuvoL1comoPENDING_VALIDATE;- SOURCE-002 expone
PrecioL1..PrecioL9, pero eso no prueba la semantica comercial de SOURCE-001.
H. Matriz de listas por clientes¶
Matriz disponible solo como plantilla candidate hasta obtener snapshot real:
| Lista cliente SGC | price_list_code candidate |
Campo producto asociado candidate | Clientes activos | Clientes suspendidos | Clientes baja | Estado |
|---|---|---|---|---|---|---|
1 |
L1 |
PrecioL1 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
PENDING_VALIDATE |
2 |
L2 |
PrecioL2 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
PENDING_VALIDATE |
3 |
L3 |
PrecioL3 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
PENDING_VALIDATE |
4 |
L4 |
PrecioL4 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
PENDING_VALIDATE |
5 |
L5 |
PrecioL5 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
PENDING_VALIDATE |
6 |
L6 |
PrecioL6 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
PENDING_VALIDATE |
7 |
L7 |
PrecioL7 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
PENDING_VALIDATE |
8 |
L8 |
PrecioL8 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
PENDING_VALIDATE |
9 |
L9 |
PrecioL9 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
PENDING_VALIDATE |
| vacio / nulo | ninguno | ninguno | UNKNOWN |
UNKNOWN |
UNKNOWN |
BLOCKED |
| otro valor | UNKNOWN |
UNKNOWN |
UNKNOWN |
UNKNOWN |
UNKNOWN |
UNKNOWN |
I. Bloqueos B2B detectados¶
Bloqueos vigentes por falta de evidencia:
| Bloqueo | Estado | Regla |
|---|---|---|
| cliente sin lista | PENDING_VALIDATE |
medir en snapshot; bloquear o fallback solo con aprobacion |
| cliente con lista invalida | PENDING_VALIDATE |
no mapear a L1..L9 por intuicion |
| cliente suspendido | BLOCKED |
can_sell=false salvo aprobacion comercial futura |
| cliente de baja | BLOCKED |
preservar historico; no vender |
| email faltante | PENDING_VALIDATE |
no crear cliente WooCommerce sin gate y matching seguro |
| WhatsApp duplicado | KNOWN_RISK |
no usar WhatsApp como clave unica |
| CUIT duplicado | PENDING_VALIDATE |
tratar como dato sensible, no primary key |
| SKU sin precio para lista | BLOCKED_PRICE_MISSING |
no reemplazar silenciosamente por regular_price |
Lista_Precio sin correspondencia |
UNKNOWN |
requiere catalogo real |
Bloqueos operativos preservados:
- no crear clientes WooCommerce;
- no activar precios por cliente;
- no sincronizar clientes;
- no escribir PostgreSQL;
- no tocar productos WooCommerce.
J. Archivos creados/modificados¶
Creado:
docs/tenants/alpuntodeventa/business-observer/production/PDF-010C-SOURCE-001-PRICE-LIST-CATALOG-READ-ONLY-VALIDATION.md
Actualizados:
docs/tenants/alpuntodeventa/business-observer/production/README.mddocs/PROJECT-STATE.mddocs/ROADMAP.mddocs/governance/ACTIVE-CONTEXT.mdmkdocs.yml
Impacto:
- queda documentado que el catalogo real
Lista_Preciono puede cerrarse sin snapshot SOURCE-001; - se preserva
PrecioListaFinalcomo default publico vigente; - se mantiene
L1y el mappingLista_Precio -> L1..L9enPENDING_VALIDATE; - se publica el documento en la navegacion MkDocs sin habilitar runtime.
K. Validaciones ejecutadas¶
Validaciones de este gate:
git status -sbgit rev-parse HEADgit rev-parse origin/maingit log -3 --onelinegit diff --check- lectura documental de fuentes y contratos autorizados
- verificacion local de
snapshots/source-001/ - verificacion local de
snapshots/source-002/ - busqueda local de exports alternativos SOURCE-001
Validacion final requerida al cierre:
git diff --check.\.venv-portal\Scripts\mkdocs.exe build --strict
L. Estado final Git¶
Estado esperado al cierre:
- cambios documentales locales sin commit;
- sin push;
- sin deploy.
M. Recomendacion de commit¶
Si la revision humana aprueba este gate documental, commit sugerido:
docs: add pdf-010c source-001 price list catalog validation
No hacer commit sin autorizacion posterior.
N. Proximo paso recomendado¶
Abrir un gate separado para obtener snapshot read-only seguro de SOURCE-001 o autorizar consulta read-only agregada contra ecommerce.dbo.VCLIENTES.
El gate debe cerrar:
- catalogo real de
Lista_Precio; - conteos por estado comercial;
- listas invalidas, vacias o sin correspondencia;
- confirmacion o descarte de
Lista_Precio=1 -> PrecioL1; - confirmacion humana de
L1como precio publico/default si corresponde.
O. 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 push;
- no se hizo deploy;
- no se modifico runtime.