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
cataloglista 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-002existe como autoridad completa vigente.- La autoridad devuelve
81campos. - La autoridad filtra
Estado = 'ACTIVO'. - La autoridad aplica
SKU NOT IN ('0124', '3857', '3998', '3793')como primera lista conocida de exclusiones operativas confirmada porGabi. - 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 usaPrecioListaFinal. - regla de
sale_price:PENDING_BUSINESS_DECISION; candidato inicial usaPrecioOfertaFinalsi 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'.skuobligatorio y no vacio.- unicidad funcional
tenant_id + sku. source_row_hashobligatorio para detectar cambios.stock_quantityno debe serNULL; stock negativo quedaWARNING.regular_priceno debe serNULLpara catalogo WooCommerce-ready.net_unit_costpuede ser sensible; debe quedar disponible solo a roles autorizados.status_rawdebe preservarse aunque hoy la autoridad filtreACTIVO.- listas
L1..L9deben normalizarse como filas, no como columnas principales. purchase_discount_*_pctyallowed_discount_pctdeben quedar como numericos, aunque la autoridad los publique con%.category_rawysubcategory_rawno deben asumirse como taxonomia WooCommerce final.source_extracted_at,sync_batch_idylast_seen_atson 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 portenant_id + sku, limpia tipos y preserva campos de negocio.core_source_002_product_price_lists: normaliza listasL1..L9como filas porsku + 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: desdeSKU;name: desdeArticulo;description: inicialmente igual aArticulo, pendiente descripcion larga;regular_price: candidato desdePrecioListaFinal;sale_price: candidato desdePrecioOfertaFinal;stock_quantity: desdeStock;manage_stock:truecandidate;brand: desdeMarca;weight: desdePesoxUnidad;dimensions:NULL/UNKNOWNpara largo/ancho/alto;volume_m3preservado;pack/min_units: desdeUnidades_x_Bulto,CantVtaMin,CantVentaAgrupada;category: desdeCategory/SubCategoriacomo raw, pendiente mapping;status: candidate derivadopublishsolo si reglas futuras lo aprueban; mientras tantodraft_candidate.
11. Candidate SQL creado¶
Paquete candidate:
infra/business-observer/production/postgres/products/PDF-008A/001-source-002-products-preflight.candidate.sqlinfra/business-observer/production/postgres/products/PDF-008A/002-source-002-products-ddl.candidate.sqlinfra/business-observer/production/postgres/products/PDF-008A/003-source-002-products-post-checks.candidate.sqlinfra/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-002confirmada como existente; - mapping conceptual
SOURCE-002existente; - candidate productivo
PDF-008Acreado; - 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_priceysale_pricerequieren decision de negocio antes de API.CategoryySubCategoriapueden no coincidir con taxonomia WooCommerce.PrecioOfertaFinalpuede requerir vigencia o regla adicional.Stockpuede necesitar criterio de deposito o disponibilidad vendible.Costoy descuentos de compra son sensibles.SOURCE-002Bde imagenes existe como fuente complementaria, pero el cruce final porSKUy el uso paraLa Directasiguen pendientes.- las dimensiones WooCommerce reales no estan completas en la autoridad.
- las exclusiones
SKU NOT IN (...)deben externalizarse antes de sync.
14. Proximos gates¶
PDF-008Bpreflight read-only deSOURCE-002y target productivo, con conteos esperados y validacion de autoridad sin imprimir secretos.PDF-008Csnapshot/candidate de productos fuera de Git, con hash, columnas, conteos, duplicadosskuy conciliacion de campos criticos.PDF-008Dejecucion DDL productivo solo si se aprueba explicitamente.PDF-008Ecarga inicial controlada solo si existe snapshot autorizado, rollback y evidencia.- 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.