Saltar a contenido

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:

  • HEAD coincide con 72a2961e3f41a16097f455d4ae2af25d2f407f01.
  • origin/main coincide con 72a2961e3f41a16097f455d4ae2af25d2f407f01.
  • 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/BUSINESS-OBSERVER-DATA-CONTRACT-001.md
  • docs/tenants/alpuntodeventa/business-observer/blueprints/CUSTOMER-BLUEPRINT.md
  • docs/tenants/alpuntodeventa/business-observer/source-authority/SOURCE-001-CLIENTES-VCLIENTES-AUTHORITY.md
  • docs/tenants/alpuntodeventa/business-observer/mappings/SOURCE-001-CLIENTES-MAPPING.md
  • docs/tenants/alpuntodeventa/business-observer/sources/SOURCE-001-SGC-CLIENTES.md
  • snapshots/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 alternativos SOURCE-001, source-001, CLIENTES, clientes o VCLIENTES.
  • No se ejecuto SQL read-only contra SGC porque este gate no trae autorizacion explicita para consultar runtime.
  • No se leyo .env y 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 autoridad ecommerce.dbo.VCLIENTES;
  • campos minimos: Codigo, Nombre o Nombre_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 .env en 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
email 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=1 corresponde a PrecioL1;
  • Lista_Precio=2 corresponde a PrecioL2;
  • valores textuales de Lista_Precio corresponden a L1..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_price de WooCommerce;
  • el regular_price vigente documentado sigue basado en PrecioListaFinal;
  • PrecioL1 no queda aprobado como default publico;
  • no se debe migrar regular_price a L1 sin evidencia comercial o tecnica adicional.

Evidencia heredada:

  • PDF-009M uso PrecioListaFinal como regular_price;
  • PDF-010B mantuvo L1 como PENDING_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.md
  • docs/PROJECT-STATE.md
  • docs/ROADMAP.md
  • docs/governance/ACTIVE-CONTEXT.md
  • mkdocs.yml

Impacto:

  • queda documentado que el catalogo real Lista_Precio no puede cerrarse sin snapshot SOURCE-001;
  • se preserva PrecioListaFinal como default publico vigente;
  • se mantiene L1 y el mapping Lista_Precio -> L1..L9 en PENDING_VALIDATE;
  • se publica el documento en la navegacion MkDocs sin habilitar runtime.

K. 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
  • 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:

  1. catalogo real de Lista_Precio;
  2. conteos por estado comercial;
  3. listas invalidas, vacias o sin correspondencia;
  4. confirmacion o descarte de Lista_Precio=1 -> PrecioL1;
  5. confirmacion humana de L1 como 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.