Saltar a contenido

SOURCE-003 Sales Items Pilot Load

Fecha: 2026-06-11

Estado: CARGA PILOTO 001 EJECUTADA / WINDOW PILOT 001 EJECUTADO / PRODUCCION FINAL BLOQUEADA

Scope: tenant

tenant_id: alpuntodeventa

Owner: Gabi / Carlos Canu

Fuente de verdad: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-PILOT-LOAD.md

Documentos relacionados:

  • docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-PILOT-MIGRATION.md
  • docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-LINE-IDENTITY-DECISION.md
  • docs/tenants/alpuntodeventa/business-observer/SOURCE-INVENTORY-RESULTS-003.md
  • docs/tenants/alpuntodeventa/business-observer/source-authority/SOURCE-003-VENTAS-VNEXT-TABLA2-AUTHORITY.sql
  • docs/tenants/alpuntodeventa/business-observer/data-dictionary/SOURCE-003-TABLA2-COLUMN-DICTIONARY.md
  • docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-COLUMN-MAPPING.md
  • docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-PILOT-LOAD-001.md
  • docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-WINDOW-PILOT-001.md

1. Objetivo

Ejecutar una carga piloto controlada de SOURCE-003 / Tabla 2 vNext hacia business_observer.source_003_sales_items, usando solo la fecha piloto 2026-06-08.

La carga debia validar line_sequence_v1, line_key_v4, source_row_hash_v1, conteos, conciliacion y permanencia del dataset piloto si todas las validaciones pasaban.

2. Safe point

Safe point previo a la ejecucion:

  • git status -sb: ## main...origin/main
  • git rev-parse HEAD: cabe1c9e942cc23ea62202e33ba193e46194f059

3. Ambiente y gate previo

Ambiente destino:

  • motor: PostgreSQL 15.15
  • host/puerto: localhost:5432
  • base: gestion_de_negocios_core
  • schema: business_observer
  • tabla: business_observer.source_003_sales_items
  • alias: postgres:postgres-alpuntodeventa-dev-env

Fuente:

  • alias: mssql:mssql-sgc-ecommerce
  • salida: SOURCE-003 / Tabla 2 vNext
  • SQL autoridad: docs/tenants/alpuntodeventa/business-observer/source-authority/SOURCE-003-VENTAS-VNEXT-TABLA2-AUTHORITY.sql
  • fecha piloto: 2026-06-08

Gate previo:

Control Resultado
repo limpio antes de operar PASS
tabla destino existe PASS
tabla destino vacia antes de cargar PASS, 0 filas
conexion SGC SELECT 1 PASS
conexion PostgreSQL SELECT 1 PASS
backup logico previo generado PASS

4. Backup

Antes de intentar la carga se genero backup logico nuevo del destino.

Backup:

  • archivo: C:\APV\backups_postgres\openclawai\source_003_sales_items_pilot_load\20260610-165324-gestion_de_negocios_core-pre-source-003-sales-items-pilot-load.dump
  • archivo hash: C:\APV\backups_postgres\openclawai\source_003_sales_items_pilot_load\20260610-165324-gestion_de_negocios_core-pre-source-003-sales-items-pilot-load.dump.sha256
  • archivo TOC: C:\APV\backups_postgres\openclawai\source_003_sales_items_pilot_load\20260610-165324-gestion_de_negocios_core-pre-source-003-sales-items-pilot-load.dump.toc.txt
  • tamano: 12872973 bytes
  • sha256: 3b0bfd79eab50694e81a7abe50b42236c0195374b97c9a3ed80bd35beb50a471
  • verificacion: pg_restore --list
  • TOC Entries: 870

El backup no se guardo en Git.

5. Extraccion piloto

Se ejecuto la autoridad SOURCE-003 / Tabla 2 vNext sin modificar la logica de calculo documentada.

Parametros efectivos preservados por el SQL autoridad:

Parametro Valor
@FechaDesde 2026-06-08
@FechaHasta 2026-06-08
@ShowTabla1 0
@ShowTabla2 1
@ShowTabla3 0
@ShowTabla4 0
@ShowTabla5 0
@ShowTabla6 0

Resultado observado:

Metrica Resultado
resultsets 1
columnas 68
filas extraidas 1262
clientes unicos 124
comprobantes unicos 299
SKU unicos 178
vendedores unicos 23
fecha minima 2026-06-08
fecha maxima 2026-06-08
CMVBruto_Item cero 6
importes negativos 171
unidades negativas 171
suma Importe_Total_Todos_los_Items 24866892.52
suma CMVBruto_Item 19078909.1264

Tipos de comprobante observados:

Tipo de comprobante Filas
FACTURA A 124
FACTURA B 16
GUIA DE DESPACHO 951
N/C GUIA DE DESPACHO 151
NOTA CREDITO A 1
NOTA CREDITO B 19

6. Conciliacion contra evidencia previa

La extraccion actual no coincidio con la evidencia previa documentada para la misma fecha piloto.

Control Evidencia previa Observado actual Diferencia Diferencia absoluta Diferencia porcentual absoluta
filas Tabla 2 1269 1262 -7 7 0.55161545%
suma Importe_Total_Todos_los_Items 24852533.32 24866892.52 14359.20 14359.20 0.05777761%
suma CMVBruto_Item 19122718.36 19078909.1264 -43809.2336 43809.2336 0.22909522%

Lectura:

  • el conteo esperado 1269 no paso
  • la conciliacion de importe total no paso
  • la conciliacion de CMV no paso
  • la fuente parece haber cambiado para la misma fecha o hay deriva de evidencia que debe revalidarse antes de cargar
  • la deriva posterior quedo confirmada en docs/tenants/alpuntodeventa/business-observer/SOURCE-003-DRIFT-ANALYSIS-001.md
  • SOURCE-003 / SGC Ventas debe tratarse como fuente viva, no como historico congelado por fecha de comprobante

7. Decision de stop

La carga se detuvo antes de transformar e insertar filas porque fallo el gate de conteo y conciliacion contra la evidencia previa.

No se calcularon ni persistieron:

  • line_sequence_v1
  • line_key_v4
  • source_row_hash_v1
  • sync_batch_id de carga

No se ejecuto INSERT, UPSERT ni DELETE sobre business_observer.source_003_sales_items.

8. Estado final del destino

Estado final:

Control Resultado
filas cargadas 0
filas finales en tabla 0
datos piloto quedaron cargados NO
rollback ejecutado NO
motivo no hubo transaccion de carga ni filas insertadas

La tabla quedo vacia al cierre del intento.

9. Confirmaciones de alcance

  • modo BUILD + VALIDATE aplicado
  • PostgreSQL local tocado conscientemente solo para gate, backup y conteo
  • SGC leido en solo lectura
  • sin VPS
  • sin Docker
  • sin OpenClaw
  • sin NPM
  • sin sync diaria
  • sin automatizacion
  • sin carga masiva
  • sin produccion final
  • sin datos personales documentados
  • documentacion con agregados solamente

10. Implicancia operativa para sync futura

La carga piloto no debe reintentarse como incremental simple basado en ultima fecha cargada.

Regla:

  • una fecha ya cargada puede cambiar al volver a leer SGC
  • el SGC puede modificar, anular, refacturar o ajustar comprobantes aproximadamente hasta 7 dias hacia atras por liquidacion de entregas, rechazos, anulaciones, refacturacion, descuentos posteriores, notas de credito, ajustes de cuenta corriente y cambios operativos de cobro/entrega
  • una linea puede aparecer, cambiar valores, desaparecer de la extraccion activa, quedar anulada o recibir nota de credito o ajuste posterior
  • la estrategia futura debe combinar carga historica inicial, snapshot diario y ventana movil de reproceso inicialmente sugerida de 10 dias
  • la persistencia futura debe hacer upsert por tenant_id + line_key, comparar source_row_hash, refrescar last_seen_at si no cambia, actualizar si cambia y marcar missing_from_source en extracciones full o ventanas controladas cuando una linea deje de aparecer
  • no corresponde hard delete
  • el freeze date de la proxima fecha piloto debe salir de un snapshot, no de SGC vivo

Ejemplo:

  • el 2026-06-08 se carga una guia por $10.000
  • el 2026-06-10 el cliente rechaza parte del pedido o se refactura un descuento
  • el SGC puede mostrar para 2026-06-08 un importe distinto o una nota de credito
  • el sync debe releer 2026-06-08 dentro de la ventana movil y actualizar la fila destino por tenant_id + line_key y source_row_hash

11. Proximo paso unico recomendado

Usar SOURCE-003-SNAPSHOT-001 como baseline congelada para preparar un nuevo intento de carga piloto sobre la ventana 2026-06-09, solo con aprobacion explicita y gate previo de hash/agregados.

Antes de cualquier nuevo intento de carga, la estrategia de sync debe quedar alineada con ventana movil, upsert, source_row_hash, last_seen_at, missing_from_source y no hard delete.

En ese momento, hasta aprobar ese gate, no correspondia cargar source_003_sales_items. Ese bloqueo quedo levantado solo para la carga piloto 001 documentada mas abajo, no para sync diaria, carga masiva ni produccion final.

12. Snapshot controlado posterior - 2026-06-10

Referencia: docs/tenants/alpuntodeventa/business-observer/SOURCE-003-SNAPSHOT-001.md

Se capturo un snapshot controlado de SOURCE-003 / Tabla 2 V2 para 2026-06-09, usando flags explicitos para emitir solo Tabla 2.

Resumen:

Metrica Resultado
filas 1886
columnas 68
importe total 48087486.83
CMV total 37881269.3025
clientes unicos 173
vendedores unicos 25
SKU unicos 180
comprobantes unicos 428
Hora vacia o nula 0
duplicados line_key_v4 + line_sequence_v1 0
sha256 snapshot 07092c284b5b636b8a31cd616ef5b4fa5d0ce499b81c767437842b1f7edfcbc3

Decision:

  • el snapshot queda valido como baseline congelada para un futuro piloto
  • conviene usar la misma ventana 2026-06-09 para la proxima carga piloto controlada
  • no se ejecuto carga, sync, migracion ni escritura en PostgreSQL

13. Bloqueo por diccionario y mapping

Revision documental posterior sobre el snapshot SOURCE-003-SNAPSHOT-001 confirma:

Control Resultado
columnas reales Tabla 2 V2 68
columnas ya contempladas semanticamente en DDL piloto previo 37
columnas faltantes o solo consolidadas 31
columnas reales propuestas para persistencia 68

Decision:

  • no ejecutar carga piloto hasta aprobar humanamente el diccionario completo de columnas
  • no ejecutar carga piloto hasta aprobar humanamente el mapping CSV/PostgreSQL
  • no ejecutar carga piloto si el pipeline no produce todas las columnas persistibles de Tabla 2 V2
  • no ejecutar carga piloto si source_row_hash_v1 no canonicaliza las 68 columnas reales del CSV

Estado de carga piloto historico: BLOQUEADA hasta aprobacion de diccionario y mapping.

14. Carga piloto 001 desde snapshot congelado

Referencia: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-PILOT-LOAD-001.md

El 2026-06-10 se ejecuto una carga piloto controlada desde SOURCE-003-SNAPSHOT-001 usando exclusivamente el CSV congelado SOURCE-003-TABLA2-V2-2026-06-09_20260610-210406-0300.csv.

Gate y backup:

Control Resultado
repo limpio antes de operar PASS
sha256 CSV 07092c284b5b636b8a31cd616ef5b4fa5d0ce499b81c767437842b1f7edfcbc3
conexion PostgreSQL SELECT 1 PASS
tabla destino existe PASS
filas antes de cargar 0
backup logico previo PASS

Backup:

  • archivo: C:\APV\backups_postgres\openclawai\source_003_sales_items_pilot_load_001\20260610-230617-gestion_de_negocios_core-pre-source-003-sales-items-pilot-load-001.dump
  • sha256: 8bc5f6429f2efaa0d67c53e9aac2a146b42b2320792559d9b32cd684a9d738e0
  • verificacion: pg_restore --list PASS
  • TOC Entries: 870

La tabla fisica existia vacia con 52 columnas. Dentro de la misma transaccion de carga se ajusto la estructura local piloto hasta 83 columnas fisicas para cubrir las 68 columnas reales aprobadas por el diccionario y el mapping. El ajuste incluyo 3 renombres de columnas logisticas previas y 31 columnas agregadas.

Resultado de carga:

Control Resultado
filas cargadas 1886
fecha unica 2026-06-09
distinct line_key 1886
duplicados line_key 0
importe total 48087486.8300
CMV total 37881269.3025
clientes unicos 173
vendedores unicos 25
SKU unicos 180
comprobantes unicos 428
Hora vacia 0
record_status = active 1886
sync_batch_id distintos 1
timestamps no nulos 1886
source_row_hash no nulo 1886
line_sequence_v1 no nulo 1886
columnas de negocio persistidas o mapeadas 68/68

Metadata:

Campo Valor
source_system snapshot:SOURCE-003-SNAPSHOT-001
source_object SOURCE-003 / Tabla 2 V2
source_query_version SOURCE-003-VENTAS-VNEXT-TABLA2-AUTHORITY-V2
sync_batch_id 2d2f3c4d-72b9-45e5-b113-608166daeeda

Estado final:

  • datos piloto quedaron cargados: SI
  • rollback ejecutado: NO
  • SGC vivo consultado para cargar: NO
  • sync diaria ejecutada: NO
  • carga masiva ejecutada: NO
  • produccion final habilitada: NO

Proximo paso recomendado:

Revisar humanamente la evidencia de la carga piloto 001 y aprobar o bloquear el diseno del siguiente piloto de ventana movil/backfill antes de cualquier sync diaria, carga masiva o produccion final.

15. Intento de ventana movil/backfill corto 001

Referencia: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-WINDOW-PILOT-001.md

El 2026-06-10 se intento iniciar un piloto controlado de ventana movil/backfill corto para SOURCE-003 / Tabla 2 V2, con ventana solicitada 2026-06-03 a 2026-06-09.

Resultado: BLOQUEADO EN GATE PREVIO.

Controles:

Control Resultado
repo limpio PASS
conexion PostgreSQL SELECT 1 FAIL
conexion SGC SELECT 1 solo lectura FAIL
backup logico previo NO GENERADO
extraccion NO EJECUTADA
transformacion NO EJECUTADA
upsert NO EJECUTADO
rollback NO, no hubo transaccion de carga
datos nuevos cargados NO
decision ROJO

Motivo:

  • la sesion local no tenia credencial PostgreSQL utilizable para gestion_de_negocios_core
  • la sesion local no tenia conexion SGC reutilizable para ejecutar SELECT 1 en solo lectura
  • segun el gate solicitado, la corrida se detuvo antes de backup, extraccion o carga

Proximo paso recomendado:

Configurar credenciales locales no versionadas para PostgreSQL y SGC, y reintentar solo el gate previo antes de cualquier nuevo piloto de ventana.

16. Reintento de ventana movil/backfill corto - 2026-06-11

Referencia: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-WINDOW-PILOT-001.md

Gabi aprobo explicitamente reintentar el piloto controlado de ventana movil para SOURCE-003 / Tabla 2 V2, ventana 2026-06-03 a 2026-06-09, en modo BUILD + VALIDATE.

Resultado: BLOQUEADO EN GATE PREVIO / BACKUP LOGICO DB NO CONFIRMADO.

Controles:

Control Resultado
safe point ## main...origin/main, HEAD be976919322c02c01379d913ef39ba219427f27a
.env local existe / ignorado / no versionado PASS
conexion PostgreSQL SELECT 1 PASS
conexion SGC SELECT 1 solo lectura PASS
tabla destino existe PASS
filas pre-carga 1886
fechas presentes destino 2026-06-09: 1886
filas de 2026-06-09 1886
backup logico previo de gestion_de_negocios_core FAIL
extraccion de ventana NO EJECUTADA
transformacion NO EJECUTADA
upsert NO EJECUTADO
inserts / updates / unchanged 0 / 0 / 0
filas finales 1886
rollback ejecutado NO, no hubo transaccion de carga
datos nuevos cargados NO
decision ROJO

Motivo:

  • el rol local disponible openclaw_writer permite conectividad y operacion minima sobre business_observer.source_003_sales_items
  • pg_dump completo de gestion_de_negocios_core fallo con permission denied for schema cobranzas
  • no se confirmo backup logico completo ni pg_restore --list
  • por instruccion de gate, se detuvo antes de ejecutar la autoridad SQL de SOURCE-003, snapshot, transformacion o carga

Estado de destino al cierre:

  • business_observer.source_003_sales_items conserva las 1886 filas del piloto SOURCE-003-SNAPSHOT-001
  • no se tocaron VPS, Docker, OpenClaw, NPM
  • no se creo sync diaria, automatizacion, carga masiva ni produccion final

Proximo paso recomendado:

Provisionar una credencial local de backup/maintenance para gestion_de_negocios_core, o conceder a un rol de backup permisos suficientes para ejecutar pg_dump completo verificable con pg_restore --list; despues reejecutar solo el gate de backup antes de cualquier extraccion de ventana.

17. Piloto de ventana movil/backfill ejecutado - 2026-06-11

Referencia: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-WINDOW-PILOT-001.md

Gabi aprobo ejecutar el ultimo piloto ampliado sobre PostgreSQL local legacy gestion_de_negocios_core antes de pasar a DB dedicada o sandbox VPS evaluado. La ventana ejecutada fue 2026-06-03 a 2026-06-09, sin usar el dia en curso.

Gate:

Control Resultado
safe point ## main...origin/main, HEAD 64b1c2f50ed81f02ea764069230e183fc5e324ac
.env local existe / ignorado / no versionado PASS
PostgreSQL SELECT 1 PASS
SGC SELECT 1 solo lectura PASS
tabla destino existe PASS
filas pre-carga 1886
backup acotado business_observer PASS
pg_restore --list PASS

Backup de corrida:

Campo Valor
dump C:\APV\backups_postgres\openclawai\source_003_sales_items_window_pilot_001\20260611-123730-gestion_de_negocios_core-business_observer-pre-window-pilot-001.dump
sha256 4d76c8cd05735691728b46ab4a6f6387e429832d4af8f9db1c11f41ea0481a9f
bytes 382481
TOC lines 35

Extraccion y snapshot:

Control Resultado
query SOURCE-003-VENTAS-VNEXT-TABLA2-AUTHORITY-V2
flags Tabla1=0, Tabla2=1, Tabla3=0, Tabla4=0, Tabla5=0, Tabla6=0
filas extraidas 9760
columnas 68
snapshot C:\APV\openclawai\snapshots\source-003\SOURCE-003-TABLA2-V2-2026-06-03_2026-06-09_20260611-123846-0300.csv
snapshot sha256 6ead2bb9c7c1f23d3acb7aa49bdcb7ca66ea2fc663874f03fb0a4039ebf97072

Validacion pre-carga:

Control Resultado
headers esperados 68/68
Hora vacia 0
duplicados line_key_v4 0
nulos criticos 0
clientes unicos 794
vendedores unicos 29
SKU unicos 223
comprobantes unicos 2333
notas de credito 1286
CMV cero 102

Resultado de upsert:

Control Resultado
sync_batch_id e0aa281c-00ee-49ba-8119-1bfb91ff8ceb
inserts 7875
updates por hash cambiado 25
unchanged con last_seen_at refrescado 1860
filas con last_seen_at de corrida 9760
filas no vistas en ventana 1
filas finales 9761
duplicados line_key finales 0
source_row_hash nulo o vacio 0
line_sequence_v1 nulo 0

Comparacion contra snapshot:

Control Snapshot PostgreSQL observado Estado
filas 9760 9760 PASS
importe total 250966424.65 250966424.6500 PASS
CMV total 204329816.0149 204329816.0149 PASS

Performance:

Etapa Segundos
extraccion 13.278
transformacion 2.223
upsert 3.475
validacion post-carga 0.088

Estado final:

  • decision final: VERDE
  • rollback tecnico previo: SI, sin modificar destino
  • rollback de transaccion final: NO
  • datos quedaron cargados: SI
  • hard delete: NO
  • missing_from_source: NO
  • sync diaria: NO
  • carga masiva: NO
  • produccion final: NO
  • VPS, Docker, OpenClaw, NPM: NO TOCADOS

Proximo paso recomendado:

No ejecutar otro piloto ampliado sobre gestion_de_negocios_core. Preparar una DB dedicada local openclaw_business_observer_dev o evaluar formalmente un sandbox VPS antes de cualquier nueva carga, sync diaria, carga masiva o produccion final.