Saltar a contenido

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.md
  • CODEX.md
  • docs/governance/ACTIVE-CONTEXT.md
  • docs/PROJECT-STATE.md
  • docs/ROADMAP.md
  • docs/tenants/alpuntodeventa/business-observer/blueprints/PRODUCT-BLUEPRINT.md
  • docs/tenants/alpuntodeventa/business-observer/BUSINESS-OBSERVER-DATA-CONTRACT-001.md
  • docs/tenants/alpuntodeventa/business-observer/source-authority/SOURCE-002-PRODUCTOS-PRODUCTS-AUTHORITY.sql
  • docs/tenants/alpuntodeventa/business-observer/SOURCE-002-FUTURE-LAYER-MAPPING.md
  • docs/tenants/alpuntodeventa/business-observer/production/PDF-009B-1-WOOCOMMERCE-PRODUCT-API-EXTENSION-DESIGN.md
  • docs/tenants/alpuntodeventa/business-observer/production/PDF-009B-WOOCOMMERCE-READ-ONLY-PREFLIGHT.md
  • docs/tenants/alpuntodeventa/business-observer/production/PDF-009C-SOURCE-002-WOOCOMMERCE-COMPARISON-DRY-RUN.md
  • docs/tenants/alpuntodeventa/business-observer/production/PDF-009D-WOOCOMMERCE-PRODUCT-LIFECYCLE-STOCK-SYNC-POLICY.md
  • docs/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.
  • Uncategorized no se usa como fallback automatico.
  • Marca viaja como atributo visible en payload candidate, pero no como atributo global preexistente validado.
  • Todo publish/write de 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 filtra Estado = '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_data pesada en flujos frecuentes.
  • No usar meta_data para 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_id futuro 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.md
  • docs/PROJECT-STATE.md
  • docs/ROADMAP.md
  • docs/governance/ACTIVE-CONTEXT.md
  • mkdocs.yml

N. Validaciones ejecutadas

  • git diff --check -> PASS sin 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.md
  • docs/ROADMAP.md
  • docs/governance/ACTIVE-CONTEXT.md
  • docs/tenants/alpuntodeventa/business-observer/production/README.md
  • mkdocs.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.