Saltar a contenido

PDF-008A - SOURCE-002 Products WooCommerce Ready Candidate

Fecha: 2026-06-20

Estado: CANDIDATE CONTROLADO / NO LOAD / NO SQL EJECUTADO / WOOCOMMERCE NO TOCADO

portal_visible = yes

Scope: tenant

tenant_id: alpuntodeventa

Owner: Gabi / Carlos Canu

1. Contexto

SOURCE-003 Ventas quedo cerrado y documentado en produccion como PDF-007D VERDE, con carga inicial controlada conciliada en el PostgreSQL productivo dedicado openclaw-business-observer-postgres-prod / openclaw_business_observer_prod.

El frente activo siguiente es SOURCE-002 Productos, porque habilita la base de catalogo para una futura integracion con WooCommerce La Directa via API.

Este gate prepara documentacion y SQL candidate. No autoriza carga real.

2. Objetivo SOURCE-002

Preparar el diseno productivo candidato para persistir el maestro de productos de APV desde la autoridad vigente SOURCE-002 y dejarlo listo para una futura carga controlada hacia PostgreSQL produccion.

Objetivo de negocio:

  • consolidar producto por tenant_id + sku;
  • preservar stock actual, precios, costos, proveedor, marca y logistica;
  • dejar una capa catalog lista para mapear hacia WooCommerce;
  • separar campos economicos repetibles como listas L1..L9;
  • dejar claros los gaps antes de cualquier carga o llamada API.

3. Prioridad WooCommerce La Directa

La prioridad funcional es que el futuro catalogo pueda alimentar una integracion posterior con WooCommerce La Directa.

Este gate no toca WooCommerce, no llama API y no modifica La Directa.

La capa candidate contempla los campos WooCommerce-ready:

  • sku;
  • name;
  • description;
  • regular_price;
  • sale_price;
  • stock_quantity;
  • manage_stock;
  • brand;
  • weight;
  • dimensions;
  • pack / min_units;
  • category;
  • status.

4. Fuente SGC candidata

Fuente autoridad:

  • docs/tenants/alpuntodeventa/business-observer/source-authority/SOURCE-002-PRODUCTOS-PRODUCTS-AUTHORITY.sql

Fuente base:

  • [ecommerce].[dbo].[PRODUCTS]

Estado:

  • SOURCE-002 existe como autoridad completa vigente.
  • La autoridad devuelve 81 campos.
  • La autoridad filtra Estado = 'ACTIVO'.
  • La autoridad aplica SKU NOT IN ('0124', '3857', '3998', '3793') como primera lista conocida de exclusiones operativas confirmada por Gabi.
  • La lista de exclusiones debe externalizarse como regla configurable en una implementacion futura.

5. Columnas conocidas

Campos conocidos relevantes:

  • identidad: SKU, Articulo, PLU Articulo, [PLU Bulto];
  • clasificacion: Marca, Estado, Category, SubCategoria, Estrategico;
  • stock: Stock, Stock en Bultos;
  • costos: CostoListaProveedor, Dcto Compra 1, Dcto Compra 2, Dcto Compra 3, Costo;
  • precios: PrecioListaNeto, PrecioListaFinal, PrecioOfertaFinal, PrecioCDescPermitidoFinal;
  • listas: MargenL1..L9, PrecioL1..L9, IVAPrecioL1..L9, PrecioNetoL1..L9;
  • impuestos: AlicuotaIVA, IVAPListaFinal;
  • politica comercial: Descuento Permitido, Acepta Devolucion, CantVtaMin, CantVentaAgrupada;
  • proveedor: Cod Proveedor, Proveedor;
  • actividad: Fecha de Ultima Compra, UltVenta, UltCambioCosto, DiasSinComprar, DiasSinVender, DiasSinActCosto;
  • logistica: UnidadMedida, PesoxUnidad, VolumenxUnidad, BasePallet, AlturaPallet, Unidades_x_Bulto, CantUnidxPallet, CantBultosxPallet, PesoxPalletkg, VolumenxPalletm3.

6. Columnas faltantes o UNKNOWN

Pendientes antes de carga real o integracion WooCommerce:

  • WooCommerce product_id: UNKNOWN.
  • URL del producto WooCommerce: UNKNOWN.
  • categorias WooCommerce definitivas: UNKNOWN.
  • taxonomia final de categorias/subcategorias: PENDING_NORMALIZATION.
  • imagen principal desde SOURCE-002B: PENDING_CONFIRMATION.
  • dimensiones WooCommerce exactas length, width, height: UNKNOWN; la autoridad solo expone volumen por unidad y volumen por pallet.
  • estado WooCommerce final publish/draft/private: PENDING_RULE.
  • regla de regular_price: PENDING_BUSINESS_DECISION; candidato inicial usa PrecioListaFinal.
  • regla de sale_price: PENDING_BUSINESS_DECISION; candidato inicial usa PrecioOfertaFinal si existe.
  • deposito o stock por ubicacion: UNKNOWN.
  • moneda: PENDING_RULE; no viene expuesta en la autoridad.
  • control de productos ausentes en WooCommerce: PENDING_GATE.

7. Mapping propuesto

Origen SOURCE-002 Destino candidate Capa
SKU sku raw/core/catalog
Articulo product_name / name core/catalog
Marca brand core/catalog
Estado status_raw, status_normalized core/catalog
Stock stock_quantity core/catalog
Stock en Bultos stock_pack_quantity core
PrecioListaFinal regular_price catalog
PrecioOfertaFinal sale_price catalog
PrecioL1..L9 filas list_code=L1..L9 price list
PrecioNetoL1..L9 net_price price list
IVAPrecioL1..L9 vat_amount price list
MargenL1..L9 margin_pct price list
CostoListaProveedor supplier_list_cost cost
Costo net_unit_cost cost
Dcto Compra 1..3 purchase_discount_1..3_pct cost
AlicuotaIVA vat_rate_pct economic/core
Descuento Permitido allowed_discount_pct commercial
CantVtaMin min_sale_quantity commercial/catalog
CantVentaAgrupada sale_pack_quantity commercial/catalog
UnidadMedida unit_of_measure logistics
Unidades_x_Bulto units_per_pack logistics/catalog
PesoxUnidad weight_kg logistics/catalog
VolumenxUnidad volume_m3 logistics/catalog
BasePallet, AlturaPallet pallet_base, pallet_height logistics
PLU Articulo, [PLU Bulto] plu_unit, plu_pack core
Cod Proveedor, Proveedor supplier_code, supplier_name core/catalog
Category, SubCategoria category_raw, subcategory_raw core/catalog

8. Reglas de calidad

Reglas minimas candidatas:

  • tenant_id = 'alpuntodeventa'.
  • sku obligatorio y no vacio.
  • unicidad funcional tenant_id + sku.
  • source_row_hash obligatorio para detectar cambios.
  • stock_quantity no debe ser NULL; stock negativo queda WARNING.
  • regular_price no debe ser NULL para catalogo WooCommerce-ready.
  • net_unit_cost puede ser sensible; debe quedar disponible solo a roles autorizados.
  • status_raw debe preservarse aunque hoy la autoridad filtre ACTIVO.
  • listas L1..L9 deben normalizarse como filas, no como columnas principales.
  • purchase_discount_*_pct y allowed_discount_pct deben quedar como numericos, aunque la autoridad los publique con %.
  • category_raw y subcategory_raw no deben asumirse como taxonomia WooCommerce final.
  • source_extracted_at, sync_batch_id y last_seen_at son obligatorios en cargas futuras.

9. Estrategia raw -> core -> mart/catalog

Estrategia candidate:

  • raw_source_002_products: conserva salida autoridad casi 1:1, con nombres normalizados y metadata de extraccion.
  • core_source_002_products: consolida producto vigente por tenant_id + sku, limpia tipos y preserva campos de negocio.
  • core_source_002_product_price_lists: normaliza listas L1..L9 como filas por sku + list_code.
  • catalog_source_002_products_woocommerce_ready: expone el catalogo candidato para WooCommerce sin llamar la API.

Quedan fuera de este gate:

  • carga real;
  • COPY;
  • DML;
  • sync;
  • scheduler;
  • cron;
  • pipelines;
  • llamadas WooCommerce;
  • modificacion de La Directa.

10. Diseno pensado para WooCommerce

La tabla catalog candidate prepara:

  • sku: desde SKU;
  • name: desde Articulo;
  • description: inicialmente igual a Articulo, pendiente descripcion larga;
  • regular_price: candidato desde PrecioListaFinal;
  • sale_price: candidato desde PrecioOfertaFinal;
  • stock_quantity: desde Stock;
  • manage_stock: true candidate;
  • brand: desde Marca;
  • weight: desde PesoxUnidad;
  • dimensions: NULL/UNKNOWN para largo/ancho/alto; volume_m3 preservado;
  • pack/min_units: desde Unidades_x_Bulto, CantVtaMin, CantVentaAgrupada;
  • category: desde Category / SubCategoria como raw, pendiente mapping;
  • status: candidate derivado publish solo si reglas futuras lo aprueban; mientras tanto draft_candidate.

11. Candidate SQL creado

Paquete candidate:

  • infra/business-observer/production/postgres/products/PDF-008A/001-source-002-products-preflight.candidate.sql
  • infra/business-observer/production/postgres/products/PDF-008A/002-source-002-products-ddl.candidate.sql
  • infra/business-observer/production/postgres/products/PDF-008A/003-source-002-products-post-checks.candidate.sql
  • infra/business-observer/production/postgres/products/PDF-008A/rollback-source-002-products-ddl.candidate.sql

El paquete:

  • mantiene extension .candidate.sql;
  • no incluye credenciales;
  • no incluye connection strings;
  • no incluye COPY;
  • no incluye datos;
  • no crea jobs;
  • no programa sync;
  • no llama WooCommerce;
  • queda preparado para revision y futura autorizacion separada.

12. GO / NO-GO

GO de este gate:

  • autoridad SOURCE-002 confirmada como existente;
  • mapping conceptual SOURCE-002 existente;
  • candidate productivo PDF-008A creado;
  • estructura raw/core/catalog propuesta;
  • gaps WooCommerce documentados;
  • SQL candidate preparado sin ejecutar.

NO-GO:

  • carga real de productos;
  • ejecucion de DDL;
  • ejecucion de SQL operativo;
  • COPY;
  • INSERT/UPDATE/DELETE/TRUNCATE;
  • tocar PostgreSQL produccion o staging;
  • tocar openclaw-postgres-sandbox;
  • sync, scheduler, cron o pipelines;
  • llamada API WooCommerce;
  • modificacion de La Directa.

13. Riesgos

  • regular_price y sale_price requieren decision de negocio antes de API.
  • Category y SubCategoria pueden no coincidir con taxonomia WooCommerce.
  • PrecioOfertaFinal puede requerir vigencia o regla adicional.
  • Stock puede necesitar criterio de deposito o disponibilidad vendible.
  • Costo y descuentos de compra son sensibles.
  • SOURCE-002B de imagenes existe como fuente complementaria, pero el cruce final por SKU y el uso para La Directa siguen pendientes.
  • las dimensiones WooCommerce reales no estan completas en la autoridad.
  • las exclusiones SKU NOT IN (...) deben externalizarse antes de sync.

14. Proximos gates

  1. PDF-008B preflight read-only de SOURCE-002 y target productivo, con conteos esperados y validacion de autoridad sin imprimir secretos.
  2. PDF-008C snapshot/candidate de productos fuera de Git, con hash, columnas, conteos, duplicados sku y conciliacion de campos criticos.
  3. PDF-008D ejecucion DDL productivo solo si se aprueba explicitamente.
  4. PDF-008E carga inicial controlada solo si existe snapshot autorizado, rollback y evidencia.
  5. Gate separado WooCommerce La Directa: mapping API, dry-run, muestra controlada y confirmacion humana antes de cualquier write.

15. Confirmaciones de alcance

Durante este gate:

  • no se ejecuto SQL;
  • no se ejecuto carga;
  • no se ejecuto COPY;
  • no se ejecuto DML;
  • no se toco PostgreSQL produccion;
  • no se toco PostgreSQL staging;
  • no se toco openclaw-postgres-sandbox;
  • no se ejecuto sync, scheduler, cron ni pipelines;
  • no se llamo API WooCommerce;
  • no se modifico La Directa;
  • no se leyeron secretos;
  • no se imprimieron passwords ni connection strings reales;
  • no se agregaron dumps, backups, snapshots ni CSV al repo.

16. Estado final del candidate

PDF-008A queda VERDE para revision documental y tecnica del candidate.

La carga real de SOURCE-002 Productos queda NO-GO hasta un gate posterior con autorizacion explicita.