SOURCE-003 Importer Load Raw Plan¶
Fecha local: 2026-06-15
Estado: LOAD-RAW PLAN DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTABLE
portal_visible = yes
Scope: tenant
tenant_id: alpuntodeventa
Owner: Gabi / Carlos Canu
Fuente de verdad:
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-LOAD-RAW-PLAN.md
1. Objetivo futuro de load-raw¶
Definir el plan controlado para un futuro comando:
text
python scripts/source_003_importer.py load-raw
El objetivo futuro de load-raw sera cargar evidencia validada de
SOURCE-003 / Tabla 2 V2 hacia una capa raw gobernada, trazable,
idempotente y auditable.
Este documento no implementa el comando, no modifica Python, no crea tablas,
no crea DDL, no ejecuta SQL, no toca PostgreSQL, no genera CSV y no carga
datos.
2. Alcance permitido futuro¶
El alcance permitido futuro queda limitado a:
- entorno
local-devo DB dedicada explicitamente aprobada; - base con fingerprint documentado y validado antes de escribir;
- batch unico, explicito y aprobado;
- tabla raw futura con
DDLaprobado en una tarea separada; - rollback por batch aprobado en una tarea separada.
Restricciones duras:
- nunca usar
postgres-sandboxcomo produccion; - nunca asumir que
postgres-sandboxes DB productiva del observer; - nunca tocar VPS produccion sin contrato previo de entorno, datos, permisos, rollback, observabilidad y aprobacion humana;
- nunca ejecutar
load-rawdesde unPASSdestatus,validate-preparedodry-run.
La auditoria vigente de VPS PostgreSQL indica que solo hay
postgres-sandbox visible para ese frente. Esa evidencia bloquea cualquier
lectura de ese sandbox como produccion.
3. Precondiciones obligatorias¶
Antes de implementar o ejecutar load-raw en el futuro deben existir todas
estas precondiciones:
python scripts/source_003_importer.py validate-preparedcon resultadoPASS;- CSV prepared historico existente y fuera de Git;
- CSV generated existente y validado;
- contrato RAW
SOURCE-003publicado; - contrato importer publicado;
DDLraw aprobado en una tarea separada;- rollback raw aprobado en una tarea separada;
- target DB aprobada como
local-devo DB dedicada, no sandbox productivo; - fingerprint DB esperado documentado;
- batch explicito aprobado;
- politica idempotente aprobada para batch ya existente;
- evidencia de que el
prepared CSVcontiene1886filas,83columnas,source_row_hashno vacio yline_keyno vacio.
Si falta una sola precondicion, el resultado esperado del futuro comando debe
ser BLOCKED.
4. Comportamiento esperado del comando futuro¶
El comportamiento futuro debe ser seguro por defecto.
Reglas de CLI:
- el modo por defecto debe ser
planodry-run; --dry-rundebe estar disponible y no tocar DB;--executedebe ser obligatorio para escribir;--executeno debe alcanzar por si solo: debe combinarse con confirmaciones exactas de DB, batch, tabla y hash;- fingerprint de DB obligatorio antes de cualquier escritura;
- batch explicito obligatorio;
- target table explicita o gobernada por contrato;
- tenant explicito obligatorio:
--tenant-id alpuntodeventa; - source explicito obligatorio:
SOURCE-003; - salida humana y JSON opcional con flags de auditoria.
Campos minimos de salida esperados:
json
{
"command": "load-raw",
"result": "BLOCKED|DRY_RUN|PASS|FAIL",
"tenant_id": "alpuntodeventa",
"source_id": "SOURCE-003",
"sync_batch_id": "1827f887-9499-4579-b4f3-234d54f41f7f",
"rows_expected": 1886,
"db_fingerprint_checked": true,
"postgresql_touched": false,
"sql_executed": false,
"data_written": false,
"rollback_executed": false
}
En dry-run, postgresql_touched, sql_executed, data_written y
rollback_executed deben quedar en false, salvo que exista un modo
read-only futuro explicitamente nombrado y aprobado para fingerprint.
5. Relacion con tablas existentes¶
La tabla piloto existente:
text
business_observer.source_003_sales_items
debe revisarse antes de cualquier diseno fisico futuro, pero no debe asumirse como raw final.
Lectura obligatoria:
source_003_sales_itemses una tabla piloto de ventas itemizadas;- no es automaticamente la tabla
rawfinal; - no define por si sola el contrato de
raw; - no habilita produccion;
- no habilita sync diaria;
- no reemplaza el
DDLraw futuro.
Diferencias conceptuales:
| Capa | Proposito | Estado |
|---|---|---|
| Piloto | Evidencia controlada de carga previa y validaciones. | Existe historicamente. |
| Staging | Area transitoria para validar antes de commit. | Futura, no implementada. |
| Raw | Evidencia persistida gobernada del origen o prepared validado. | Contractual, no implementada. |
| Produccion | Entorno operativo final con contratos, permisos, observabilidad y rollback. | Bloqueada. |
6. Validaciones previas futuras¶
Antes de escribir, load-raw debe validar como minimo:
- DB correcta por fingerprint;
- schema correcto;
- tabla correcta;
- ownership correcto;
- grants correctos;
- target table compatible con contrato raw aprobado;
- batch inexistente o politica idempotente clara;
- row count esperado
1886; - columnas esperadas
83para prepared CSV vigente; - hashes
source_row_hashno vacios; line_keyno vacio;tenant_id = alpuntodeventa;sync_batch_id = 1827f887-9499-4579-b4f3-234d54f41f7fpara el batch piloto vigente, si ese batch se usa como evidencia;record_status = active;- fecha unica esperada
2026-06-09para el batch piloto vigente; - CSV fuera de Git;
- sha256 esperado del prepared historico:
3f16a957a79fc84d4ca37930988287cb81f05166210d057fcf8b45007f184afe; - sha256 esperado del generated vigente:
6fb44d9870a567e728df9bbdcc6b83279d84791bd732626c9e19ccf3a28dc903.
Si cualquier validacion falla, el futuro comando debe abortar antes de escribir.
7. Transaccion esperada¶
La futura escritura debe ocurrir en una unica transaccion controlada:
text
BEGIN
fingerprint/checks de sesion
carga a staging temporal o area controlada
validaciones post-copy/pre-commit
insercion o merge gobernado hacia raw
validaciones finales pre-commit
COMMIT solo si todo pasa
ROLLBACK si algo falla
Reglas:
- staging temporal o carga controlada obligatoria;
- no escribir directo sin validaciones intermedias;
- no hacer
COMMITsi faltan conteos, hashes, batch, grants o checks de integridad; - no ejecutar rollback automatico de batches anteriores;
- no usar
TRUNCATE; - no borrar datos fuera del batch actual;
- registrar evidencia si una transaccion falla.
8. Idempotencia¶
La idempotencia futura debe proteger contra duplicacion de filas y contra reintentos ambiguos.
Reglas:
- mismo
sync_batch_idy mismo contenido: debe quedar como reintento seguro oBLOCKEDsegun politica aprobada; - mismo
sync_batch_idcon contenido distinto:BLOCKED; - batch nuevo con filas ya existentes por
tenant_id + line_key: aplicar politica aprobada antes de escribir; idtecnico no puede ser identidad funcional;source_row_hashdebe gobernar deteccion de cambios;line_keydebe gobernar identidad de linea cuando aplique.
La politica exacta debe estar documentada antes de implementar escritura.
9. Deduplicacion¶
Antes de cargar a raw, el futuro comando debe detectar:
- duplicados internos por
tenant_id + line_key; - duplicados internos por
source_row_hashsi aplica; - conflictos con datos ya existentes del mismo batch;
- conflictos con datos existentes de otros batches;
- lineas sin
line_key; - filas sin
source_row_hash.
Para el batch piloto vigente el criterio esperado es:
1886filas;0line_keyvacios;0source_row_hashvacios;0duplicados criticos por identidad aprobada.
10. Rollback por batch¶
El rollback futuro debe ser un comando separado:
text
python scripts/source_003_importer.py rollback-batch
load-raw no debe ejecutar rollback automatico de datos ya commiteados.
Reglas obligatorias:
- rollback solo por
tenant_id + sync_batch_id + source_id; - fingerprint DB obligatorio;
- aprobacion humana separada;
- conteo esperado de filas a afectar;
- bloqueo si hay dependencias en
coreomart; - prohibido
TRUNCATE; - prohibido borrar batches ajenos;
- evidencia antes y despues.
11. Logs y auditoria esperados¶
El futuro comando debe registrar:
- SAFE POINT;
- comando;
- operador o contexto de aprobacion;
- tenant;
- source;
- batch;
- ventana;
- raw/prepared paths;
- hashes esperados y observados;
- target DB fingerprint;
- target schema y table;
- resultado de prevalidaciones;
- cantidad de filas staged;
- cantidad de filas insertadas, actualizadas, ignoradas o bloqueadas;
- validaciones post-copy/pre-commit;
- commit o rollback transaccional;
- flags de auditoria:
postgresql_touched,sql_executed,data_written,rollback_executed,sync_enabled.
Los logs no deben imprimir passwords, tokens, connection strings completas ni secretos.
12. Outputs esperados del comando¶
Outputs minimos:
- resultado
DRY_RUN,PASS,FAILoBLOCKED; - resumen legible para operador;
- JSON opcional;
- exit code estable;
- evidencia lista para documentar una ejecucion futura;
- lista de guardrails evaluados;
- lista de bloqueos preservados;
- conteos esperados y observados;
- decision final.
En esta etapa documental, la unica decision valida es:
text
LOAD-RAW PLAN DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTABLE
13. Riesgos¶
Riesgos principales:
- confundir tabla piloto con raw final;
- usar
postgres-sandboxcomo produccion; - ejecutar contra VPS sin contrato de entorno;
- duplicar batch ya cargado;
- escribir con fingerprint DB incorrecto;
- aceptar drift de hash o conteo;
- hacer commit parcial;
- borrar datos por rollback demasiado amplio;
- filtrar secretos en logs;
- interpretar un
PASSread-only como autorizacion de escritura; - mezclar piloto, staging, raw y produccion;
- avanzar a sync diaria antes de cerrar idempotencia y observabilidad.
Mitigacion:
- defaults seguros;
--executeobligatorio para escritura;- fingerprint obligatorio;
- batch explicito;
- target table gobernada;
- staging y validaciones pre-commit;
- rollback separado;
- evidencia por batch;
- produccion bloqueada hasta contrato previo.
14. Criterios de aceptacion para futura implementacion¶
Una futura implementacion de load-raw solo sera aceptable si:
- mantiene
dry-runcomo camino seguro; - exige
--executepara escribir; - exige tenant, source, batch, hash y target;
- valida fingerprint DB;
- valida
validate-prepared PASS; - valida row count
1886para el batch piloto vigente; - valida hashes no vacios;
- valida
line_keyno vacio; - bloquea duplicados;
- usa transaccion con staging o carga controlada;
- ejecuta validaciones post-copy/pre-commit;
- commitea solo si todo pasa;
- revierte la transaccion si falla antes de commit;
- no ejecuta rollback de batches anteriores;
- emite logs seguros;
- emite JSON de auditoria;
- preserva
sync_enabled=false; - no toca
postgres-sandboxcomo produccion; - no toca VPS produccion sin contrato especifico;
- tiene pruebas locales sin DB para plan/dry-run;
- tiene una tarea separada aprobando
DDLraw; - tiene una tarea separada aprobando rollback por batch.
15. Que NO habilita¶
Este plan no habilita:
- sync diaria;
- carga masiva;
- produccion;
OpenClaw executor;- jobs automaticos;
- scheduler;
promote-core;build-mart;- rollback real;
DDL;- tablas nuevas;
- ejecucion SQL;
- tocar
PostgreSQL; - tocar VPS;
- tocar
Docker; - tocar
OpenClaw; - tocar
NPM; - deploy;
- push.
16. Decision¶
text
LOAD-RAW PLAN DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTABLE
El plan controlado para el futuro comando load-raw del importer
SOURCE-003 queda documentado. La implementacion y cualquier escritura siguen
bloqueadas hasta una tarea futura con aprobacion explicita, DDL raw aprobado,
rollback aprobado, fingerprint DB y gate humano.