PDF-009F - WooCommerce Final Payload Dry-Run¶
Fecha: 2026-06-22
Estado: PAYLOAD FINAL CANDIDATE / DRY-RUN / READ-ONLY GET / SIN WRITES / PUBLICADO EN origin/main / DESPLEGADO EN KNOWLEDGE PORTAL / HTTP PUBLICO 200
portal_visible = yes
Scope: tenant
tenant_id: alpuntodeventa
Destino funcional: La Directa WooCommerce
Owner: Gabi / Carlos Canu
A. SAFE POINT inicial del gate documental¶
| Control | Resultado |
|---|---|
git status -sb |
## main...origin/main |
git rev-parse HEAD |
a2ad77ad85049f091ea7cb41d4ea59cf6117b98f |
git rev-parse origin/main |
a2ad77ad85049f091ea7cb41d4ea59cf6117b98f |
git log -3 --oneline |
a2ad77a docs: align pdf-009e post-deploy state; 00dcc8b docs: add pdf-009e woocommerce pre-write rules; f400ca2 docs: align pdf-009c pdf-009d post-deploy state |
git diff --check inicial |
PASS |
Safe point esperado confirmado: HEAD local y origin/main iniciaron alineados.
El working tree contenia solo los cambios documentales esperados para este
cierre local: 5 archivos modificados y 1 archivo nuevo.
B. Estado documental leido¶
Documentos leidos obligatorios:
docs/governance/PROJECT-CONSTITUTION.mdCODEX.mddocs/governance/ACTIVE-CONTEXT.mddocs/PROJECT-STATE.mddocs/ROADMAP.mddocs/tenants/alpuntodeventa/business-observer/blueprints/PRODUCT-BLUEPRINT.mddocs/tenants/alpuntodeventa/business-observer/BUSINESS-OBSERVER-DATA-CONTRACT-001.mddocs/tenants/alpuntodeventa/business-observer/source-authority/SOURCE-002-PRODUCTOS-PRODUCTS-AUTHORITY.sqldocs/tenants/alpuntodeventa/business-observer/SOURCE-002-FUTURE-LAYER-MAPPING.mddocs/tenants/alpuntodeventa/business-observer/production/PDF-009B-1-WOOCOMMERCE-PRODUCT-API-EXTENSION-DESIGN.mddocs/tenants/alpuntodeventa/business-observer/production/PDF-009B-WOOCOMMERCE-READ-ONLY-PREFLIGHT.mddocs/tenants/alpuntodeventa/business-observer/production/PDF-009C-SOURCE-002-WOOCOMMERCE-COMPARISON-DRY-RUN.mddocs/tenants/alpuntodeventa/business-observer/production/PDF-009D-WOOCOMMERCE-PRODUCT-LIFECYCLE-STOCK-SYNC-POLICY.mddocs/tenants/alpuntodeventa/business-observer/production/PDF-009E-WOOCOMMERCE-PRODUCT-RULES-PRE-WRITE-CANDIDATE.md
Confirmacion al inicio del gate: PDF-009E estaba publicado/deployado segun
estado documental vigente. PDF-009F no autoriza writes; solo construye
payloads candidate y matriz de bloqueo.
C. WooCommerce GET read-only ejecutado¶
Se ejecutaron solo lecturas GET contra WooCommerce usando credenciales locales
sin imprimir valores ni .env.
| GET read-only | Resultado no sensible |
|---|---|
products/categories?per_page=100&hide_empty=false |
HTTP OK, count=1 |
products/attributes?per_page=100 |
HTTP OK, count=0 |
products?sku=... para muestra de 10 SKUs |
HTTP OK, matched_count=0 para todos |
No se ejecuto create, update, delete, batch ni sync.
D. Categorias y atributos reales encontrados¶
Categorias WooCommerce reales observadas:
| id | name | slug | parent | count | Uso candidate |
|---|---|---|---|---|---|
15 |
Uncategorized |
uncategorized |
0 |
0 |
No aprobado para mapping SOURCE-002 |
Atributos WooCommerce reales observados: 0.
Decision:
- No existe mapping real aprobado
Category/SubCategoria -> product_cat. - No se deben crear categorias ni atributos en este gate.
Uncategorizedno se usa como fallback automatico.Marcaviaja como atributo visible en payload candidate, pero no como atributo global preexistente validado.- Todo
publish/writede catalogo queda bloqueado hasta mapping real aprobado.
E. Muestra representativa¶
Fuente local segura:
snapshots/source-002/SOURCE-002-PRODUCTS-RUNTIME-PREFLIGHT-20260620-173614.csv- SHA256 observado y esperado:
c961ffc2b352b6bb3dd0d59bf3d8b7c0f7facff58a9201f7cf45e290141b704f
No se ejecuto SQL ni se consulto PostgreSQL para construir la muestra.
| SKU | Producto | Marca | Estado | Stock | PrecioListaFinal | Category | SubCategoria | Caso |
|---|---|---|---|---|---|---|---|---|
0135 |
Mani Pelado Kra x110gr |
KRACHITOS |
ACTIVO |
554 |
1825.840 |
1-SNACKS |
SNACKS TRADICIONALES |
stock positivo |
0128 |
Papas Fritas Kra C.A x 105 grs |
KRACHITOS |
ACTIVO |
264 |
2098.549 |
1-SNACKS |
SNACKS TRADICIONALES |
stock positivo |
2442 |
Pudding de Choco c/chip x300 grs |
100 DUCADOS |
ACTIVO |
0 |
2020.901 |
4-GALLETAS DULCES Y BUDINES |
BUDINES |
stock cero |
2443 |
Pudding Gales C/Nuez x300 grs |
100 DUCADOS |
ACTIVO |
0 |
2020.901 |
4-GALLETAS DULCES Y BUDINES |
BUDINES |
stock cero |
2444 |
Pudding Limon c/ semilla de Amapolla x300 grs |
100 DUCADOS |
ACTIVO |
0 |
2020.901 |
4-GALLETAS DULCES Y BUDINES |
BUDINES |
stock cero |
2847 |
Pudding Naranja c/ cascara x350 grs |
100 DUCADOS |
ACTIVO |
0 |
2020.901 |
4-GALLETAS DULCES Y BUDINES |
BUDINES |
stock cero |
2446 |
Pudding Vainila capa frutos secos x300 grs |
100 DUCADOS |
ACTIVO |
0 |
2020.901 |
4-GALLETAS DULCES Y BUDINES |
BUDINES |
stock cero |
2814 |
Chips Papas x 80gr Alwa |
ALWA |
ACTIVO |
970 |
1081.151 |
1-SNACKS |
SNACKS TRADICIONALES |
stock positivo |
2815 |
Chips Batata x 80gr Alwa |
ALWA |
ACTIVO |
1860 |
1081.151 |
1-SNACKS |
SNACKS TRADICIONALES |
stock positivo |
2816 |
Pochoclo dulce x 75gr Alwa |
ALWA |
ACTIVO |
292 |
946.940 |
CEREALES |
CEREALES |
categoria sin mapping |
3995 |
Saldos Clientes |
NO APLICA |
ACTIVO |
0 |
0.000 |
VARIOS |
DEVOLUCION |
sin precio |
4010 |
Asesoramiento de servicios de marketing |
NO APLICA |
ACTIVO |
1 |
0.000 |
VARIOS |
DEVOLUCION |
sin precio |
Casos no observados en snapshot:
- Sin imagen:
PENDING_SOURCE, porque el snapshot no trae columna/fuente de imagen aprobada. DE BAJA:PENDING_SOURCE, porque la autoridad vigente filtraEstado = 'ACTIVO'. La regla queda conceptual para capa futura que exponga bajas.- Producto Woo solo: conceptual, porque la muestra GET devolvio
matched_count=0.
F. Payload CREATE candidate¶
CREATE no queda write-eligible en este gate porque falta mapping real de
categorias y fuente de imagen aprobada. Payload candidate para 0135, si el
mapping e imagen existieran:
json
{
"sku": "0135",
"name": "Mani Pelado Kra x110gr",
"status": "draft",
"regular_price": "1825.840",
"manage_stock": true,
"stock_quantity": 554,
"stock_status": "instock",
"categories": [
{ "id": "PENDING_CATEGORY_ID" },
{ "id": "PENDING_SUBCATEGORY_ID" }
],
"attributes": [
{
"name": "Marca",
"visible": true,
"variation": false,
"options": ["KRACHITOS"]
}
],
"weight": "0.110",
"meta_data": [
{ "key": "units_per_pack", "value": "24" },
{ "key": "min_sale_quantity", "value": "6" },
{ "key": "sale_pack_quantity", "value": "24" }
]
}
Decision de publish: BLOCKED_FOR_PUBLISH. Si categoria e imagen se aprueban
en gate futuro, status podria pasar a publish para SKUs activos con precio
valido y stock positivo.
G. Payload UPDATE_STOCK candidate¶
Payload minimo frecuente, ejemplo 0135:
json
{
"manage_stock": true,
"stock_quantity": 554,
"stock_status": "instock"
}
Payload minimo para stock cero, ejemplo 2442:
json
{
"manage_stock": true,
"stock_quantity": 0,
"stock_status": "outofstock"
}
Regla: no enviar nombre, descripcion, precio, categoria, marca, imagenes ni
meta_data en stock sync frecuente.
H. Payload UPDATE_CATALOG candidate¶
UPDATE_CATALOG sigue bloqueado para write real hasta resolver mapping de
categoria e imagen. Ejemplo conceptual 2814:
json
{
"name": "Chips Papas x 80gr Alwa",
"status": "draft",
"regular_price": "1081.151",
"categories": [
{ "id": "PENDING_CATEGORY_ID" },
{ "id": "PENDING_SUBCATEGORY_ID" }
],
"attributes": [
{
"name": "Marca",
"visible": true,
"variation": false,
"options": ["ALWA"]
}
],
"weight": "0.080"
}
sale_price se omite porque PrecioOfertaFinal = 0.000. Costos, proveedor,
margenes, descuentos y listas multiples quedan fuera del payload.
I. Payload DEACTIVATE candidate¶
Caso conceptual futuro para Estado = DE BAJA:
json
{
"status": "draft"
}
No usar delete. catalog_visibility=hidden puede evaluarse como refuerzo,
pero no reemplaza status=draft.
J. Casos BLOCKED¶
| Caso | SKUs / evidencia | Decision |
|---|---|---|
| Categoria sin mapping real aprobado | Todos los SKUs con Category/SubCategoria; Woo solo tiene Uncategorized |
BLOCKED_FOR_PUBLISH / BLOCKED_FOR_WRITE |
| Atributo global Marca inexistente | Woo attributes count=0 |
Usar atributo visible candidate; no crear atributo global |
| Sin precio | 3995, 4010 con PrecioListaFinal = 0.000 |
BLOCKED |
| Sin imagen aprobada | Todos como PENDING_SOURCE |
DRAFT / BLOCKED_FOR_PUBLISH |
| Stock cero | 2442, 2443, 2444, 2847, 2446, 3995 |
CREATE_DRAFT solo si no hay otros bloqueos; no publish |
| Oferta invalida o ausente | muestra con PrecioOfertaFinal = 0.000 |
Omitir sale_price |
| DE BAJA | no observable por filtro Estado = 'ACTIVO' |
conceptual DEACTIVATE_DRAFT |
| Producto Woo solo | no observado en muestra; todos matched_count=0 |
conceptual MANUAL_REVIEW |
K. Matriz final por SKU¶
| SKU | Woo match | Accion candidate | Status candidate | Motivo |
|---|---|---|---|---|
0135 |
0 |
CREATE_DRAFT_BLOCKED_FOR_WRITE |
draft |
stock/precio OK; falta categoria real e imagen |
0128 |
0 |
CREATE_DRAFT_BLOCKED_FOR_WRITE |
draft |
stock/precio OK; falta categoria real e imagen |
2442 |
0 |
CREATE_DRAFT_BLOCKED_FOR_WRITE |
draft |
stock cero; falta categoria real e imagen |
2443 |
0 |
CREATE_DRAFT_BLOCKED_FOR_WRITE |
draft |
stock cero; falta categoria real e imagen |
2444 |
0 |
CREATE_DRAFT_BLOCKED_FOR_WRITE |
draft |
stock cero; falta categoria real e imagen |
2847 |
0 |
CREATE_DRAFT_BLOCKED_FOR_WRITE |
draft |
stock cero; falta categoria real e imagen |
2446 |
0 |
CREATE_DRAFT_BLOCKED_FOR_WRITE |
draft |
stock cero; falta categoria real e imagen |
2814 |
0 |
CREATE_DRAFT_BLOCKED_FOR_WRITE |
draft |
stock/precio OK; falta categoria real e imagen |
2815 |
0 |
CREATE_DRAFT_BLOCKED_FOR_WRITE |
draft |
stock/precio OK; falta categoria real e imagen |
2816 |
0 |
CREATE_DRAFT_BLOCKED_FOR_WRITE |
draft |
stock/precio OK; categoria CEREALES sin mapping e imagen pendiente |
3995 |
UNKNOWN |
BLOCKED |
n/a | sin precio y stock cero |
4010 |
UNKNOWN |
BLOCKED |
n/a | sin precio aunque tenga stock 1 |
L. Guardrails performance y datos confirmados¶
- Stock frecuente usa payload minimo.
- No mandar payload completo si solo cambia stock.
- No usar
meta_datapesada en flujos frecuentes. - No usar
meta_datapara filtros, busqueda u ordenamiento masivo. - Categorias y atributos visibles deben usar mecanismos nativos WooCommerce.
- Costos, proveedor, descuentos de compra, margenes, listas multiples,
historiales economicos, calidad interna y auditoria sensible quedan
PostgreSQL only. - WooCommerce no se convierte en ERP.
wc_product_idfuturo debe vivir en PostgreSQL/OpenClaw o tabla de control de sync.
M. Archivos creados/modificados¶
Creado:
docs/tenants/alpuntodeventa/business-observer/production/PDF-009F-WOOCOMMERCE-FINAL-PAYLOAD-DRY-RUN.md
Actualizados:
docs/tenants/alpuntodeventa/business-observer/production/README.mddocs/PROJECT-STATE.mddocs/ROADMAP.mddocs/governance/ACTIVE-CONTEXT.mdmkdocs.yml
N. Validaciones ejecutadas¶
git diff --check->PASSsin errores; solo warnings CRLF esperados en Windows..\.venv-portal\Scripts\mkdocs.exe build --strict->PASS.
O. Estado Git pre-commit documental¶
Estado esperado antes del commit documental local:
- rama
main...origin/main - archivos modificados:
docs/PROJECT-STATE.mddocs/ROADMAP.mddocs/governance/ACTIVE-CONTEXT.mddocs/tenants/alpuntodeventa/business-observer/production/README.mdmkdocs.yml- archivo nuevo:
docs/tenants/alpuntodeventa/business-observer/production/PDF-009F-WOOCOMMERCE-FINAL-PAYLOAD-DRY-RUN.md
P. Commit documental local¶
Commit a crear si las validaciones pasan:
docs: add pdf-009f woocommerce final payload dry-run
Q. Proximo paso recomendado¶
Abrir gate posterior separado para preparar mapping real de categorias WooCommerce:
- aprobar arbol
Category/SubCategoria -> product_cat; - crear o mapear categorias con IDs/slugs reales bajo autorizacion separada;
- definir fuente/politica de imagenes;
- aprobar si productos sin stock pueden publicarse o quedan draft;
- definir modelo persistente de
wc_product_id.
Solo despues corresponde un write gate explicito.
R. Cierre post-deploy documental¶
El cierre documental posterior quedo publicado en origin/main y desplegado en
Knowledge Portal sobre HEAD
c756b3c542b5f5ca57070e6244ed01425593563c, con local/origin/VPS alineados,
HTTP local VPS 200 y HTTP publico 200.
S. Cierre de restricciones¶
Durante este gate no se hicieron writes, no se modifico WooCommerce, no se
modifico La Directa, no se toco PostgreSQL con writes, no se imprimieron
secretos, no se mostro .env, no se ejecuto sync, no se ejecuto scheduler, no
se ejecuto cron y no se ejecutaron pipelines.