SOURCE-003 Drift Analysis 001¶
Fecha: 2026-06-10
Estado: DRIFT CONFIRMADO / SIN CARGA / PILOTO NO ESTABLE
Scope: tenant
tenant_id: alpuntodeventa
Owner: Gabi / Carlos Canu
Fuente de verdad:
docs/tenants/alpuntodeventa/business-observer/SOURCE-003-DRIFT-ANALYSIS-001.md
Documentos relacionados:
docs/tenants/alpuntodeventa/business-observer/SOURCE-INVENTORY-RESULTS-003.mddocs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-PILOT-LOAD.mddocs/tenants/alpuntodeventa/business-observer/source-authority/SOURCE-003-VENTAS-VNEXT-TABLA2-AUTHORITY.sql
1. Objetivo¶
Investigar por que la extraccion actual de SOURCE-003 / Tabla 2 vNext para
2026-06-08 no coincide con la evidencia historica documentada.
La investigacion se ejecuto en modo INVENTORY + VALIDATE, sin cargar datos,
sin migraciones, sin inserts, sin PostgreSQL y sin modificar tablas.
2. Safe point¶
git status -sb:## main...origin/maingit rev-parse HEAD:ffd71f4051c6ce72c7851fb69272407df24510ea
3. Alcance aplicado¶
- conexion
SGC: solo lectura funcional SELECT 1contraSGC:PASS- autoridad SQL ejecutada:
SOURCE-003-VENTAS-VNEXT-TABLA2-AUTHORITY.sql - fecha:
2026-06-08 - salida:
Tabla 2 PostgreSQL: no tocado- inserts, upserts, deletes, migraciones: no ejecutados
- objetos persistentes en origen: no creados
- documentacion: solo agregados
- datos personales: no expuestos
La conexion se abrio con intencion de lectura, aislamiento
READ UNCOMMITTED, uso de temporales de sesion de la autoridad SQL y cierre
con rollback.
4. Resultado actual confirmado¶
| Metrica | Resultado actual |
|---|---|
| filas totales | 1262 |
| columnas | 68 |
| clientes unicos | 124 |
| comprobantes unicos | 299 |
| vendedores unicos | 23 |
SKU unicos |
178 |
suma Importe_Total_Todos_los_Items |
24866892.52 |
suma CMVBruto_Item |
19078909.1264 |
CMVBruto_Item cero |
6 |
| importes negativos | 171 |
| unidades negativas | 171 |
valores Hora distintos |
272 |
Hora minima |
080221 |
Hora maxima |
160711 |
Tipos de comprobante actuales:
| Tipo de comprobante | Filas | Importe total | CMV total |
Clientes | Vendedores | SKU |
Comprobantes |
|---|---|---|---|---|---|---|---|
FACTURA A |
124 |
4311929.18 |
3045966.6289 |
9 |
5 |
70 |
21 |
FACTURA B |
16 |
460205.46 |
324310.3792 |
2 |
2 |
14 |
3 |
GUIA DE DESPACHO |
951 |
24514320.20 |
17018487.6089 |
89 |
18 |
148 |
139 |
N/C GUIA DE DESPACHO |
151 |
-3629636.91 |
-713499.1325 |
103 |
22 |
53 |
133 |
NOTA CREDITO A |
1 |
-9989.46 |
-8963.1076 |
1 |
1 |
1 |
1 |
NOTA CREDITO B |
19 |
-779935.95 |
-587393.2505 |
1 |
1 |
19 |
2 |
5. Comparacion contra evidencia historica¶
Evidencia historica documentada:
| Metrica | Historico | Actual | Delta actual - historico |
|---|---|---|---|
| filas | 1269 |
1262 |
-7 |
| importe total | 24852533.32 |
24866892.52 |
14359.20 |
CMV total |
19122718.36 |
19078909.1264 |
-43809.2336 |
| clientes unicos | 125 |
124 |
-1 |
| vendedores unicos | 23 |
23 |
0 |
SKU unicos |
178 |
178 |
0 |
Tipos de comprobante:
| Tipo de comprobante | Historico | Actual | Delta |
|---|---|---|---|
FACTURA A |
124 |
124 |
0 |
FACTURA B |
16 |
16 |
0 |
GUIA DE DESPACHO |
954 |
951 |
-3 |
N/C GUIA DE DESPACHO |
155 |
151 |
-4 |
NOTA CREDITO A |
1 |
1 |
0 |
NOTA CREDITO B |
19 |
19 |
0 |
Residual historico menos actual:
| Metrica | Residual |
|---|---|
| filas | 7 |
| importe total | -14359.20 |
CMV total |
43809.2336 |
GUIA DE DESPACHO |
3 |
N/C GUIA DE DESPACHO |
4 |
6. Control de deriva de SQL¶
Se ejecuto tambien la autoridad SQL historica del commit
5ed86a68df1d54e371ff728052658ca7a2bc3b7d, anterior a la incorporacion de
Hora.
Resultado con datos actuales de SGC:
| Autoridad SQL | Columnas | Filas | Importe total | CMV total |
|---|---|---|---|---|
SQL historico sin Hora |
67 |
1262 |
24866892.52 |
19078909.1264 |
SQL actual con Hora |
68 |
1262 |
24866892.52 |
19078909.1264 |
Conclusion: la diferencia no proviene de la incorporacion de Hora ni de una
deriva material del SQL autoridad. El cambio en Git agrega Hora a la salida,
pero no modifica filtros, joins ni calculos.
7. Identificacion agregada de las 7 filas¶
La autoridad filtra:
sql
WHERE v.Estado <> 'ANULADO'
La vista actual ecommerce.dbo.V_VENTAS para 2026-06-08 contiene estos
estados por tipo:
Estado actual SGC |
Tipo de comprobante | Filas |
|---|---|---|
ANULADO |
GUIA DE DESPACHO |
20 |
ANULADO |
N/C GUIA DE DESPACHO |
4 |
DEVOLUCION |
N/C GUIA DE DESPACHO |
78 |
DEVOLUCION |
NOTA CREDITO A |
1 |
EN TRANSITO |
FACTURA A |
94 |
EN TRANSITO |
FACTURA B |
8 |
EN TRANSITO |
GUIA DE DESPACHO |
513 |
EN TRANSITO |
N/C GUIA DE DESPACHO |
73 |
EN TRANSITO |
NOTA CREDITO B |
19 |
ENTREGADO |
FACTURA A |
30 |
ENTREGADO |
FACTURA B |
8 |
ENTREGADO |
GUIA DE DESPACHO |
438 |
Cruce agregado entre crudo actual, salida actual e historico:
| Tipo | Crudo actual | ANULADO actual |
Salida actual | Historico | Filas que explican el delta |
|---|---|---|---|---|---|
FACTURA A |
124 |
0 |
124 |
124 |
0 |
FACTURA B |
16 |
0 |
16 |
16 |
0 |
GUIA DE DESPACHO |
971 |
20 |
951 |
954 |
3 |
N/C GUIA DE DESPACHO |
155 |
4 |
151 |
155 |
4 |
NOTA CREDITO A |
1 |
0 |
1 |
1 |
0 |
NOTA CREDITO B |
19 |
0 |
19 |
19 |
0 |
Lectura:
- las
7filas de diferencia quedan identificadas en grano agregado como3filas deGUIA DE DESPACHOy4filas deN/C GUIA DE DESPACHO - esas filas estan hoy fuera de
Tabla 2porque el estado actual del origen las deja dentro del universoANULADO - no se expusieron clientes, documentos, direcciones ni comprobantes
V_VENTASno expone columnas de auditoria de modificacion; solo se observaronFecha,HorayEstadoentre las columnas relevantes- sin snapshot historico de filas no es posible reconstruir con certeza documental el identificador exacto de cada fila historica
8. Casos especiales¶
Notas de credito:
| Control | Historico | Actual | Delta |
|---|---|---|---|
N/C GUIA DE DESPACHO |
155 |
151 |
-4 |
NOTA CREDITO A |
1 |
1 |
0 |
NOTA CREDITO B |
19 |
19 |
0 |
| total notas de credito | 175 |
171 |
-4 |
Notas de credito actuales:
| Metrica | Resultado |
|---|---|
| filas activas | 171 |
| importe total | -4419562.32 |
CMV total |
-1309855.4906 |
N/C GUIA DE DESPACHO anuladas actuales |
4 |
importe de N/C GUIA DE DESPACHO anuladas actuales |
-95494.84 |
CMV de N/C GUIA DE DESPACHO anuladas actuales |
-0.0004 |
Anulaciones:
| Control | Resultado |
|---|---|
filas actuales con Estado = ANULADO |
24 |
GUIA DE DESPACHO anuladas actuales |
20 |
N/C GUIA DE DESPACHO anuladas actuales |
4 |
| comprobantes unicos anulados actuales | 9 |
| clientes unicos anulados actuales | 6 |
| vendedores unicos anulados actuales | 5 |
SKU unicos anulados actuales |
17 |
| filas inferidas como nuevas exclusiones vs historico | 7 |
Devoluciones y motivos activos:
| Motivo | Filas | Importe total | CMV total |
|---|---|---|---|
AJUSTE K |
86 |
-2668591.94 |
-7994.0787 |
ANULADO |
19 |
-779935.95 |
-587393.2505 |
MERMAS Y ROTURAS VENCIDOS |
19 |
-189312.00 |
-123130.5549 |
RECHAZO PARCIAL NO PIDIO |
13 |
-434066.34 |
-341096.1040 |
FALTANTE DE MERC. EN ARMADO |
12 |
-180907.56 |
-130254.5535 |
SIN STOCK |
5 |
-70872.96 |
-54559.5489 |
Creditos NP:
| Control | Resultado |
|---|---|
filas activas con Total_Desc_NP <> 0 |
85 |
suma activa Total_Desc_NP |
-2656736.66 |
filas anuladas actuales con Total_Desc_NP <> 0 |
4 |
suma anulada actual Total_Desc_NP |
-95494.84 |
Mermas:
| Control | Resultado |
|---|---|
filas activas con motivo MERMAS Y ROTURAS VENCIDOS |
19 |
| importe activo asociado | -189312.00 |
CMV activo asociado |
-123130.5549 |
| filas anuladas actuales con ese motivo | 0 |
Ajustes cuenta corriente:
| Control | Resultado |
|---|---|
filas activas con Total_Ajustes_Saldos_CtaCte <> 0 |
1 |
suma activa Total_Ajustes_Saldos_CtaCte |
-9146.44 |
| filas anuladas actuales con ajuste cuenta corriente | 0 |
9. Hipotesis evaluadas¶
Hipotesis 1 - cambio en SQL autoridad¶
Resultado: DESCARTADA.
Evidencia:
- el SQL historico sin
Horadevuelve los mismos agregados actuales - el diff de autoridad entre la evidencia historica y el SQL vigente solo
incorpora
Horaa la salida - los filtros y calculos relevantes permanecen iguales
Hipotesis 2 - cambio retroactivo de estados en SGC¶
Resultado: PROBABLE.
Evidencia:
- el delta de filas se explica exactamente por tipo:
3GUIA DE DESPACHOy4N/C GUIA DE DESPACHO - esos son los unicos tipos donde la salida actual cae contra el historico
- la fuente actual contiene filas
ANULADOpara esos tipos y la autoridad las excluye - el conteo historico de
N/C GUIA DE DESPACHOcoincide con el crudo actual, mientras que la salida actual pierde las4que hoy estan anuladas
Hipotesis 3 - cambios economicos adicionales en filas vivas¶
Resultado: POSIBLE / PROBABLE.
Evidencia:
- el residual economico historico menos actual es
-14359.20de importe y43809.2336deCMV - sumar todas las filas actualmente anuladas no reproduce ese residual
- no hay snapshot historico de filas para comparar
source_row_hash CMVBruto_Itemse calcula con join al maestro vivoPRODUCTS, por lo que cambios de costo/lista/descuentos de compra pueden alterarCMVhistorico aunque las ventas tengan la misma fecha
10. Causa probable¶
La causa probable es deriva retroactiva de SGC para la fecha 2026-06-08,
principalmente por cambios de Estado que hoy excluyen 7 filas que antes
formaban parte de Tabla 2.
La diferencia economica no debe atribuirse solo a esas 7 filas sin snapshot
historico, porque la fuente y los maestros usados por la autoridad son vivos.
El CMV en particular depende del maestro PRODUCTS actual y no de un costo
historico congelado dentro de la salida.
11. Clasificacion SOURCE-003¶
Clasificacion: C) mezcla de ambas.
Lectura:
- no es plenamente reproducible historicamente desde
SGCvivo - si se ejecuta dos veces cerca en el tiempo puede comportarse como fuente operativa consistente
- si se reejecuta despues de anulaciones, devoluciones o cambios de maestros, puede cambiar retroactivamente para una misma fecha cerrada
Por lo tanto, SOURCE-003 debe tratarse como fuente viva con componentes
retroactivos y calculos dependientes de maestros vivos.
Regla operativa:
SOURCE-003 / SGC Ventasno debe tratarse como historico congelado por fecha de comprobante- el
SGCpuede modificar, anular, refacturar o ajustar comprobantes ya emitidos aproximadamente hasta7dias hacia atras - las causas operativas esperadas incluyen liquidacion de entregas, rechazos de clientes, anulaciones, refacturacion, descuentos posteriores, notas de credito, ajustes de cuenta corriente y cambios de cobro o entrega
- una fecha ya cargada puede cambiar si se vuelve a leer desde
SGCvivo - el estado raw del comprobante debe preservarse si la salida o una extension futura de autoridad lo expone
12. Riesgo para sync¶
Riesgo: ALTO si se usa una fecha piloto o una ventana historica como baseline
estable sin snapshot.
Riesgos concretos:
- no sirve un incremental simple basado solo en
ultima fecha cargada - un gate fijo por conteo/totales puede fallar aunque el pipeline este bien
- reintentos sobre la misma fecha pueden producir filas y hashes distintos
- anulaciones retroactivas pueden requerir deletes logicos o cambio de estado, no solo inserts
- una linea puede aparecer, cambiar valores, desaparecer de una extraccion activa, quedar anulada o recibir una nota de credito/ajuste posterior
- el
CMVpuede variar por cambios de maestroPRODUCTS - sin
source_row_hashhistorico no se puede saber que filas cambiaron - una unica fecha piloto no congelada puede bloquear cargas correctas futuras
13. Recomendacion y mitigacion¶
No usar 2026-06-08 como fecha piloto estable.
Estrategia propuesta:
carga historica inicial: backfill controlado desde la autoridadTabla 2, consync_batch_id,extracted_at,line_key_v4ysource_row_hash_v1.snapshot diario: guardar la salida completa deTabla 2por fecha de extraccion para congelar evidencia y conciliaciones futuras.watermark: registrar fecha/hora de extraccion y version de autoridad SQL usada para cada batch.ventana movil: reprocesar inicialmente10dias para cubrir una semana operativa aproximada mas margen; ajustar luego con evidencia real.upsert: persistir portenant_id + line_key; insertar si no existe, actualizar si cambiasource_row_hashy refrescarlast_seen_atsi la fila reaparece sin cambios.missing_from_source: si una linea deja de aparecer dentro de una extraccionfullo de ventana controlada, marcarla comomissing_from_source; no hacerhard delete.freeze date: elegir una nueva fecha piloto solo despues de tomar snapshot y congelar sus agregados esperados desde ese snapshot, no desdeSGCvivo.drift gate: comparar cada corrida contra el ultimo snapshot y clasificar altas, bajas logicas y cambios de hash antes de tocar destino.estado fuente: preservarEstadoraw cuando se disene la sync, porque el filtroEstado <> 'ANULADO'es una causa directa de deriva.
Ejemplo operativo:
- el dia
2026-06-08se carga una guia por$10.000 - el
2026-06-10el cliente rechaza parte del pedido o se refactura un descuento - el
SGCpuede mostrar para2026-06-08un importe diferente, una nota de credito o un estado distinto - la sync no debe confiar en la ultima fecha cargada; debe volver a leer
2026-06-08dentro de la ventana movil y actualizarPostgreSQLportenant_id + line_keyysource_row_hash
14. Respuesta explicita¶
Pregunta: Podemos seguir usando 2026-06-08 como fecha piloto estable?
Respuesta: NO.
Motivo:
- la fecha ya no reproduce los agregados historicos documentados
- el SQL autoridad no explica la diferencia
- el origen vivo cambio retroactivamente para la misma fecha
15. Proximo paso recomendado¶
Revisar humanamente la estrategia de carga historica inicial, snapshot diario,
ventana movil inicial de 10 dias, upsert por tenant_id + line_key,
comparacion por source_row_hash y freeze date desde snapshot antes de
cualquier nuevo intento de carga hacia
business_observer.source_003_sales_items.
16. Checklist¶
- sin
PostgreSQL:SI - sin inserts:
SI - sin migraciones:
SI - sin modificaciones de tablas:
SI - solo lectura
SGC:SI - deriva documentada:
SI - fuente viva documentada:
SI - ventana movil inicial sugerida:
10 dias - upsert/hash/last_seen/missing_from_source documentados:
SI - causa probable identificada:
SI - mitigacion propuesta:
SI - datos personales expuestos:
NO
17. Snapshot controlado posterior - 2026-06-10¶
Referencia:
docs/tenants/alpuntodeventa/business-observer/SOURCE-003-SNAPSHOT-001.md
Se ejecuto un snapshot controlado posterior de SOURCE-003 / Tabla 2 V2 para
2026-06-09, fecha cerrada mas reciente disponible al 2026-06-10. La
extraccion forzo @ShowTabla2 = 1 y @ShowTabla1/3/4/5/6 = 0, con un unico
resultset de Tabla 2.
Resultado agregado:
| Metrica | Resultado |
|---|---|
| filas | 1886 |
| 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 nuevo snapshot queda valido como base congelada para piloto
- no reemplaza la clasificacion de fuente viva ni elimina el riesgo de deriva
- el siguiente intento de carga, si se aprueba, debe gatear contra el snapshot
y no contra una expectativa historica reconstruida desde
SGCvivo - no se ejecuto carga, sync, migracion ni escritura en destino