Skip to main content
Para la carga inicial (y para conectores por volcado) no hace falta producir eventos v1 a mano: basta con entregar los datos en el modelo canónico, ocho tablas con columnas fijas, y ejecutar conector-canonico, que hace la transformación, seudonimiza los clientes y deja un fichero de eventos listo para el validador.

Convenciones

  • Un fichero por tabla, CSV (UTF-8, cabecera, vacío = nulo) o Parquet, con el nombre de la tabla: tickets.csv, lineas_ticket.parquet…
  • Fechas en UTC. ISO-8601 con Z u offset; si vienen sin zona se interpretan como UTC (o la zona que indiques con --zona-naive).
  • Dinero en MXN sin IVA, salvo tickets.total, que es el total impreso en el ticket (con IVA) y sirve para comprobar el IVA.
  • cliente_id es el identificador interno del CRM. El conector lo seudonimiza con una sal que guardas tú; ningún identificador en claro llega al motor.
  • Solo se admiten las columnas listadas; una columna desconocida detiene la carga.

Tablas

clientes

Un registro por cliente identificable en el CRM.

tickets

Una fila por ticket de venta.

lineas_ticket

Una fila por línea de ticket. El margen sale de margen, de importe − coste o del coste estándar del artículo, en ese orden.

articulos

Catálogo de artículos con su categoría (la unidad de agregación de las compras).

campanas (opcional)

Campañas de cupones (opcional; da contexto a los envíos).

cupones_emitidos

Un cupón enviado a un cliente. Genera CUPON_RECIBIDO y, si vence sin redención, CUPON_CADUCADO.

redenciones

Un cupón usado en un ticket.

bajas (opcional)

Bajas de comunicaciones o de cuenta.

Transformar y validar

Opciones: --zona-naive America/Mexico_City para fechas sin zona en hora local; --margen-desconocido cero|pct:30 si hay líneas sin margen, coste ni coste estándar (por defecto se detiene); --sin-caducados para no sintetizar CUPON_CADUCADO a partir de los cupones vencidos sin redención.
Guarda la sal fuera del repositorio y no la pierdas: con otra sal, los mismos clientes tendrían otro cliente_ref y las cargas futuras no se enlazarían.

Si prefieres tablas en Postgres

El mismo modelo como DDL, para llenarlo con vistas o INSERT desde tu CRM y exportarlo después a CSV o Parquet: