SOURCE-003 Raw DDL Candidate¶
Fecha local: 2026-06-15
Estado: DDL RAW CANDIDATO / NO EJECUTADO / NO IMPLEMENTADO EN DB
portal_visible = yes
Scope: tenant
tenant_id: alpuntodeventa
Owner: Gabi / Carlos Canu
Fuente de verdad:
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-RAW-DDL-CANDIDATE.md
1. Objetivo¶
Disenar el paquete DDL candidato para la futura tabla RAW de
SOURCE-003 / SGC Ventas / Tabla 2 V2.
Tabla candidata:
text
business_observer.raw_source_003_sales_items
Este paquete es documental y revisable. No se ejecuto SQL, no se toco
PostgreSQL, no se creo tabla real, no se modifico Python, no se ejecuto
runner, no se genero CSV, no se cargo data y no se habilita sync diaria.
2. Relacion con la tabla piloto¶
La tabla existente:
text
business_observer.source_003_sales_items
queda explicitamente clasificada como PILOTO, no como RAW final.
Lectura obligatoria:
source_003_sales_itemses evidencia historica de piloto dedicado;- no reemplaza el contrato RAW;
- no debe usarse como tabla RAW final por conveniencia;
- no habilita produccion, carga masiva ni sync diaria;
- no define por si sola permisos, idempotencia ni rollback de la capa RAW.
La tabla candidata RAW usa otro nombre para evitar mezcla operacional entre piloto y evidencia gobernada futura.
3. Archivos SQL candidatos¶
Todos los SQL viven en:
text
docs/tenants/alpuntodeventa/business-observer/design/sql/
Paquete candidato:
004_source_003_raw_ddl_candidate_preflight.sql004_source_003_raw_ddl_candidate_forward.sql004_source_003_raw_ddl_candidate_rollback.sql004_source_003_raw_ddl_candidate_post_checks.sql
Regla: son SQL candidatos revisables. No fueron ejecutados.
4. Columnas candidatas¶
El DDL candidato preserva las columnas del prepared CSV vigente y suma la
metadata RAW obligatoria loaded_at.
Lectura de conteo:
| Grupo | Cantidad | Nota |
|---|---|---|
| Columnas prepared CSV vigentes | 83 |
Incluye 68 columnas de negocio y metadata tecnica del pipeline piloto. |
| Metadata RAW adicional obligatoria | 1 |
loaded_at, exigida por el contrato RAW. |
| Total fisico candidato | 84 |
Tabla RAW candidata, no tabla piloto. |
Columnas tecnicas y metadata RAW:
idtenant_idline_keyline_sequence_v1source_row_hashsource_systemsource_objectsource_query_versionsync_batch_idextracted_atloaded_atlast_seen_atcreated_atupdated_atrecord_status
Columnas de negocio preservadas desde Tabla 2 V2 / prepared CSV:
fechahora_origen_sgctipo_compnro_comptipo_doc_intnro_int_docdocumentocondicion_fiscal_rawcodigo_clientecliente_nombre_rawdireccion_de_pedidos_rawvendedor_codigovendedor_nombre_rawskuarticulo_rawmarca_rawproveedor_codigo_rawproveedor_nombre_rawcanal_rawramo_rawgrupo_rawrubro_rawmotivo_devolucion_rawhoja_ruta_rawdireccion_entrega_rawlocalidad_entrega_rawprovincia_entrega_rawcod_repartidor_rawrepartidor_rawzona_rawunidadesprecio_unitarioporc_desc_lineadesc_neto_unitario_lineaiva_alicuota_pctprecio_neto_unitario_cdesc_lineasubtotal_neto_item_cdesc_lineadesc_al_pie_pctdesc_pie_unitario_netoprecio_neto_unitario_cdesc_pieimponible_neto_itemperc_iibb_rawalicuota_perc_iibb_calculada_pctperc_iibb_item_unidadiibb_itemiva_item_unidadiva_itemimporte_total_unitarioimporte_total_itemtotal_desc_neto_lineatotal_desc_neto_al_pietotal_desc_nptotal_ajustes_saldos_ctacteperc_ivacosto_listadesc_compra1desc_compra2desc_compra3cmv_bruto_unidadcmv_bruto_itemdescuento_itemmarkupmax_dcto_articulocontribucion_itemindicador_tipo_registrolista_de_precio_rawpeso_totalvolumen_totalcant_bultos_vendidos
5. Claves candidatas¶
Clave tecnica:
text
id
Clave logica por batch:
text
tenant_id + sync_batch_id + line_key
La clave logica incluye sync_batch_id porque RAW preserva evidencia por
corrida. Un mismo line_key puede reaparecer en batches futuros para permitir
comparacion, drift y promocion controlada hacia core.
Clave de auditoria candidata:
text
tenant_id + sync_batch_id + source_row_hash
6. Constraints candidatas¶
El forward candidato define:
PRIMARY KEY (id);UNIQUE (tenant_id, sync_batch_id, line_key);- checks de no vacio para
tenant_id,line_key,source_row_hash,source_system,source_objectysource_query_version; - check de
record_statusenactive,inactive,corrected,missing_from_source; - check de
line_sequence_v1 >= 1; - check de formato observado
hora_origen_sgccomoHHMMSS; - checks de campos minimos de identidad documental, cliente, vendedor, SKU, unidades e importe total.
No se agrega check positivo para CMV o importes porque existen notas de
credito, ajustes, anulaciones y valores validamente negativos o cero.
7. Indices candidatos¶
Indices propuestos:
tenant_id, sync_batch_idtenant_id, sync_batch_id, line_keytenant_id, source_row_hashtenant_id, fechatenant_id, codigo_cliente, fechatenant_id, vendedor_codigo, fechatenant_id, sku, fechatenant_id, tipo_comp, nro_comptenant_id, record_status
8. Owner y grants¶
Owner candidato:
text
openclaw_bo_admin
Roles esperados:
openclaw_bo_adminopenclaw_bo_writeropenclaw_bo_reader
Permisos:
| Rol | Permisos tabla | Prohibiciones explicitas |
|---|---|---|
openclaw_bo_admin |
owner | n/a |
openclaw_bo_writer |
SELECT, INSERT, UPDATE |
sin DELETE, TRUNCATE, REFERENCES, TRIGGER |
openclaw_bo_reader |
SELECT |
sin escritura |
PUBLIC |
ninguno | sin privilegios sobre schema ni tabla |
writer no recibe DELETE. Cualquier rollback futuro debe pasar por paquete
separado, conteo esperado, fingerprint DB, aprobacion humana y bloqueo si hay
dependencias core o mart.
9. Preflight candidato¶
El preflight candidato es de catalogo y solo lectura. Debe validar:
- database esperada
openclaw_business_observer_dev; - schema
business_observerexistente y con owneropenclaw_bo_admin; - roles requeridos existentes;
- roles requeridos sin login;
- tabla RAW candidata ausente antes del forward;
- tabla piloto presente o ausente solo como observacion, sin tratarla como RAW final;
PUBLICsin privilegios sobrebusiness_observer;- que el preflight no crea objetos ni carga datos.
10. Forward candidato¶
El forward candidato:
- crea o valida schema
business_observercon owneropenclaw_bo_admin; - crea
business_observer.raw_source_003_sales_items; - define
84columnas fisicas; - define constraints, indices, comments, owner y grants;
- revoca privilegios de
PUBLIC; - otorga a
writersoloSELECT,INSERT,UPDATE; - otorga a
readersoloSELECT; - no inserta datos.
11. Rollback candidato¶
El rollback candidato elimina solo objetos de:
text
business_observer.raw_source_003_sales_items
Reglas:
- aborta si la tabla existe y tiene filas;
- no usa
TRUNCATE; - no borra datos;
- no toca
business_observer.source_003_sales_items; - no elimina schema ni roles;
- solo dropea indices y tabla si la tabla RAW candidata esta vacia.
12. Post-checks candidatos¶
Los post-checks deben exigir:
- tabla creada;
- owner
openclaw_bo_admin; 84columnas;- constraints esperadas;
- indices esperados;
- row count exacto
0; PUBLICsin privilegios;writerconSELECT,INSERT,UPDATEy sinDELETE;readerconSELECTy sin escritura;- tabla piloto diferenciada como piloto, no RAW final.
El resultado correcto despues de un forward aprobado en una tarea futura debe mantener:
text
row_count = 0
13. Bloqueos preservados¶
Quedan preservados:
PostgreSQLno tocado;- SQL no ejecutado;
- DB no modificada;
- tabla real no creada;
- Python no modificado;
- runner no ejecutado;
- CSV no generado;
- datos no cargados;
- rollback real no ejecutado;
- VPS, Docker, OpenClaw y NPM no tocados;
- push y deploy no realizados;
- sync diaria, carga masiva, produccion final y
OpenClaw executorbloqueados.
14. Decision¶
text
DDL RAW CANDIDATO / NO EJECUTADO / NO IMPLEMENTADO EN DB
El paquete candidato deja disenada la futura tabla RAW de SOURCE-003 como
evidencia gobernada por batch. La implementacion real sigue bloqueada hasta
aprobacion humana separada, fingerprint DB, gate de ejecucion, rollback
aprobado y validaciones previas.