Introducción
Esta guía proporciona detalles sobre la integración de tiendas físicas con WoowUp mediante una conexión directa con su base de datos SQL. Esto permite una experiencia de CRM omnicanal, integrando datos de manera diaria y eficiente.
Conexión Típica
A continuación, se presenta un diagrama que ilustra una conexión típica entre la base de datos SQL de la marca y la plataforma WoowUp:
WoowUp consultará y procesará los datos una vez por día en un horario preestablecido o pactado con el cliente. Este procesamiento diario asegura que la información esté siempre actualizada y disponible para su análisis y uso en campañas de marketing.
Requisitos para la Conexión
Seguridad:
Se deben implementar medidas de protección adecuadas para garantizar la seguridad de los datos:
Configuración del firewall del cliente para permitir el acceso únicamente desde la IP fija de WoowUp.
La base de datos debe contar con protocolo de seguridad TLS 1.2 como mínimo.
Las credenciales otorgadas a WoowUp deben ser de un usuario con permisos de solo lectura sobre las vistas configuradas.
Restricciones:
No es posible la conexión mediante VPN.
La base debe ser accesible desde internet a través de la IP fija habilitada (no se admiten conexiones por túneles ni proxies intermedios).
Credenciales SQL
Para establecer la conexión, el cliente debe proveer a WoowUp los siguientes datos:
Motor de Base de Datos: SQL Server, MySQL, PostgreSQL, etc.
Host: dirección pública o nombre DNS accesible desde la IP de WoowUp.
Port: puerto del motor (1433 para SQL Server, 3306 para MySQL, 5432 para PostgreSQL, etc.).
Database / Schema: nombre de la base de datos y/o esquema donde residen las vistas.
User: usuario con permisos de SELECT sobre las vistas de la integración.
Password: contraseña asociada al usuario.
Por su parte, WoowUp proporcionará al cliente:
IP fija desde la cual WoowUp realizará las consultas, para que el cliente la habilite en su firewall.
Configuración de Vistas
WoowUp maneja los datos divididos en entidades. Es necesario desarrollar una vista por entidad. Los nombres de las columnas deben coincidir exactamente con los solicitados en esta documentación.
Análisis de datos previo
Antes de construir las vistas, se realiza una instancia de análisis de datos en conjunto entre el equipo de Integraciones de WoowUp y el equipo técnico del cliente. El objetivo es:
Relevar las tablas y campos disponibles en la base de origen.
Validar que los campos mínimos obligatorios estén disponibles.
Identificar reglas de negocio particulares (devoluciones, notas de crédito, ventas multi-medio de pago, clientes genéricos).
Definir el conjunto de entidades a integrar (Tiendas, Clientes, Ventas, Pagos, Productos, Categorías).
Acordar el horario del ciclo de procesamiento diario.
Convención de nombres de las vistas
Las vistas deben nombrarse con el prefijo woowup_ seguido del nombre de la entidad, en singular y en español:
woowup_tiendas
woowup_clientes
woowup_ventas
woowup_pagos -- opcional
woowup_productos -- opcional
woowup_categorias -- opcional
Entidades soportadas
Tiendas (obligatoria)
Clientes (obligatoria)
Ventas (obligatoria)
Pagos (opcional, se utiliza cuando una venta tiene múltiples medios de pago)
Productos (opcional, solo si la información proviene del ERP y no del ecommerce)
Categorías (opcional, solo si la información proviene del ERP y no del
ecommerce)
Filtrado por createtime y updatetime
Todas las vistas deben exponer las columnas createtime y updatetime, que WoowUp utilizará para filtrar los registros nuevos o modificados en cada ciclo:
createtime: fecha y hora de creación del registro en la base del cliente.
updatetime: fecha y hora de última modificación del registro.
❗ Ambos campos deben estar siempre en horario UTC. Si la base del cliente almacena los timestamps en horario local, la vista debe encargarse de convertirlos a UTC.
Ejemplo:
SELECT * FROM woowup_clientes
WHERE updatetime >= '2024-04-14 00:00:00'
OR createtime >= '2024-04-14 00:00:00';
Configuración de Vistas por Entidad
Tiendas
Integración de las tiendas donde los clientes pueden realizar compras. Incluye tiendas físicas, canales web equivalentes (como MercadoLibre) y tiendas de bancos cuando aplique.
Recomendación: excluir la tienda de ecommerce de esta vista. Las ventas y la tienda del ecommerce se toman directamente desde la API del ecommerce mediante el conector correspondiente.
❗ En esta entidad NO es posible incluir atributos extendidos.
Consulta SQL de Ejemplo
SELECT * FROM woowup_tiendas;
Campos / Cabeceras de la entidad Tiendas
Campo | Tipo | Descripción | Ejemplo | Obligatorio |
name |
| Identificador único de la tienda | A101 | Sí |
display_name |
| Nombre de la tienda | Sucursal Palermo | Sí |
branch_zone_code |
| Código de la zona | 13 | No |
branch_zone_name |
| Nombre de la zona | Buenos Aires | No |
Clientes
Integración de datos de clientes, incluyendo identificadores (document y/o email), datos de contacto, datos geográficos, género, cumpleaños y preferencias de comunicación.
Consulta SQL de Ejemplo
Se filtran los clientes actualizados y creados en las últimas 48 horas.
SELECT * FROM woowup_clientes
WHERE updatetime >= ‘2024-04-14 00:00:00’
OR createtime >= '2024-04-14 00:00:00';
❗Debes enviar al menos un identificador del cliente (document y/o email)
❗Los campos createtime y updatetime deben estar en horario UTC
Clientes sin identificador: si la base del cliente no captura al menos un identificador, se debe completar con un document genérico (siempre el mismo, por ejemplo 99999999) para consolidar todas esas ventas bajo un mismo cliente genérico. Notificar al equipo de WoowUp sobre el uso de este criterio.
Campos / Cabeceras de la entidad Clientes
Campo | Tipo | Descripción | Ejemplo | Obligatorio |
document | String | Documento o cédula del cliente. Para clientes genéricos usar un valor único (ej: 99999999). | 30300300 | Sí* |
String | Email del cliente. No utilizar emails genéricos (ver Buenas Prácticas). | Sí* | ||
createtime | Datetime | Fecha de creación del cliente en horario UTC. | 2024-04-28 10:39:00 | Sí |
updatetime | Datetime | Fecha de última modificación en horario UTC. | 2024-06-22 20:52:00 | Sí |
first_name | String | Nombre del cliente. | Christian | No |
last_name | String | Apellido del cliente. | Vitale | No |
full_name | String | Nombre completo. Usar cuando el origen no tiene nombre y apellido separados. | Christian Vitale | No |
telephone | String | Teléfono con formato E.164 internacional (sin espacios ni símbolos). Ej: 5491173682446. | 5491173682446 | No |
birthdate | Date | Fecha de nacimiento sin hora. Formato YYYY-MM-DD. | 1992-03-31 | No |
gender | Enum | Género. Valores: M, F, vacío. | M | No |
street | String | Calle y número. | Ohm 2220 | No |
city | String | Ciudad. | CABA | No |
state | String | Provincia/Estado. | CABA | No |
department | String | Barrio o departamento. | Villa Urquiza | No |
postcode | String | Código postal. | 1431 | No |
document_type | String | Tipo de documento (DNI, RUT, CURP, CPF, etc.). | DNI | No |
points | Integer | Puntos del programa de Loyalty. Solo si el cliente tiene Loyalty contratado. | 100 | No |
mailing_enabled | Enum | Habilitación para email. Valores: enabled, disabled. | enabled | No |
sms_enabled | Enum | Habilitación para SMS. Valores: enabled, disabled. | disabled | No |
whatsapp_enabled | Enum | Habilitación para WhatsApp. Valores: enabled, disabled. | enabled | No |
👉 Esta entidad permite agregar Atributos Extendidos. ¿Qué son? Son campos que no son nativos en WoowUp, como tipo de membresía, tienda de registro o deporte favorito. Para parametrizarlos en WoowUp, puedes seguir las Instrucciones.
El nombre del campo para un atributo extendido se envía en formato custom_attributes.{nombre_atributo}. Ese atributo se va a crear en WoowUp con el nombre que se encuentre en la cabecera. Por ejemplo, si deseas crear el atributo para Clientes "membresia_gold", el campo sería custom_attributes.membresia_gold.
Nota sobre document / RUT / documentos extranjeros
El campo document admite distintos tipos según el país. Debe enviarse siempre como string (sin puntos, guiones ni espacios, salvo que el formato del país lo requiera):
Argentina — DNI: solo números, entre 7 y 8 dígitos.
Chile — RUT: con dígito verificador, sin puntos ni guión. Ej: 123456789K.
Uruguay — CI: solo números con dígito verificador al final.
México — CURP / RFC: string alfanumérico en mayúsculas.
Brasil — CPF: solo números, 11 dígitos.
Ventas
Integración de datos de ventas, incluyendo identificador del comprador, datos de la factura y productos comprados. Cada fila representa un producto distinto dentro de una misma factura.
Consulta SQL de Ejemplo
Se filtran las ventas creadas en las últimas 24 horas.
SELECT * FROM woowup_ventas
WHERE updatetime >= '2024-04-14 00:00:00'
OR createtime >= '2024-04-14 00:00:00';
❗ No enviar las ventas del ecommerce. Esas se obtienen desde la API del ecommerce a través del conector correspondiente.
❗ Los campos Total, Gross, Discount y Tax deben ser globales de toda la factura. Para un mismo invoice_number deben repetirse línea a línea.
❗ Enviar al menos un identificador de cliente (document y/o email).
❗ createtime y updatetime deben estar en horario UTC.
Campos / Cabeceras de la entidad Ventas
Campo | Tipo | Descripción | Ejemplo | Obligatorio |
document | String | Documento o cédula del cliente. | 36872489 | Sí* |
String | Email del cliente. | Sí* | ||
invoice_number | String | Número de factura. Debe ser único por venta. | 0001-A-00000230321 | Sí |
createtime | Datetime | Fecha y hora de la venta en horario UTC. | 2024-01-23 16:32:05 | Sí |
updatetime | Datetime | Fecha de última modificación en horario UTC. | 2024-01-23 16:32:05 | Sí |
channel | Enum | Canal de venta. Valores: web, in-store. | in-store | Sí |
branch_name | String | Código de tienda. Debe coincidir con el campo name de la vista de Tiendas. | A101 | Sí |
points | Integer | Puntos otorgados. Aplica solo si el cliente tiene Loyalty contratado. | 100 | No |
shipping | Float | Costo de envío. NO debe sumarse al total. | 500 | No |
gross | Float | Subtotal de la factura (sin impuestos, envíos ni descuentos). Se repite línea a línea. | 9000 | Sí |
tax | Float | Impuestos de la factura. Se repite línea a línea. | 1400 | No |
discount | Float | Descuento total de la factura (incluye descuentos de producto y de factura). Se repite línea a línea. | 2000 | No |
total | Float | Total de la factura. Se repite línea a línea. No incluye shipping. | 9400 | Sí |
payment_type | Enum | Medio de pago. Valores: credit, debit, mercadopago, todopago, cash, other. Ver nota sobre Pagos. | debit | Sí** |
payment_brand | String | Marca de la tarjeta. | Visa | No |
payment_bank | String | Banco emisor. | Banco Galicia | No |
payment_installments | Integer | Cantidad de cuotas. | 6 | No |
payment_total | Float | Total por medio de pago. | 9400 | No |
seller_name | String | Nombre del vendedor. | Gil Gunderson | No |
seller_email | String | Email del vendedor. | No | |
seller_external_id | String | Id externo del vendedor. | 10 | No |
SKU | String | Código del producto. Debe coincidir con el SKU del ecommerce. | AB123324 | Sí |
product_name | String | Nombre del producto. | Celular Moto Z | Sí |
brand | String | Marca del producto. | Motorola | No |
quantity | Integer | Cantidad de unidades. En notas de crédito debe ser negativo. | 2 | Sí |
unit_price | Float | Precio unitario sin impuestos ni descuentos. En notas de crédito debe ser negativo. | 1000 | Sí |
variations | String | Variantes del producto. Formato clave-valor separado por pipes (|). | Color: Blanco | Talle: XXXL | No |
👉 Esta entidad permite agregar Atributos Extendidos. ¿Qué son? Son campos que no son nativos en WoowUp, como la promoción utilizada o si usó un cupón de descuento. Para parametrizarlos en WoowUp, puedes seguir las Instrucciones.
El nombre del campo para un atributo extendido se envía en formato custom_attributes.{nombre_atributo}. Ese atributo se va a crear en WoowUp con el nombre que se encuentre en la cabecera. Por ejemplo, si deseas crear el atributo para Ventas "cupon_descuento", el campo sería custom_attributes.cupon_descuento.
Zona horaria
createtime y updatetime deben estar siempre en horario UTC. Si la base de origen guarda los timestamps en horario local, la vista debe convertirlos a UTC.
Cuando el origen no dispone de horario (solo fecha), enviar la venta con la hora hardcodeada al último minuto del día (23:59:59). Esto es necesario para que WoowUp pueda asociar correctamente la venta a cualquier campaña o automatización que se haya ejecutado ese día: si se envía con hora 00:00:00, la venta queda antes de la ejecución de la campaña y no se atribuiría.
Invoice_number único
El invoice_number debe ser único a nivel cuenta. Cuando la numeración del comprobante se repite entre sucursales o tipos de comprobante, se recomienda armarlo concatenando:
{punto_de_venta}-{letra_comprobante}-{numero_comprobante}
Por ejemplo: 0001-A-00000123. La combinación invoice_number + branch_name siempre debe ser única.
SKU por vertical
El SKU de la vista de Ventas debe coincidir con el SKU del ecommerce, para poder cruzar correctamente la información de producto entre ambos orígenes.
Moda: usar el código de referencia del producto (no el SKU de variante por talle/color).
Farma y Electro: usar el SKU completo de variante.
Notas de crédito y devoluciones
Las notas de crédito se exponen en la misma vista de Ventas, con valores numéricos negativos en los siguientes campos:
gross
discount
tax
total
unit_price
quantity
payment_total (si aplica)
points (si aplica)
El invoice_number de la nota de crédito debe ser distinto al de la venta original, siguiendo la misma regla de unicidad.
Uso de discount
El campo discount debe reflejar el descuento total aplicado a la factura, incluyendo tanto descuentos a nivel factura (cupón general) como descuentos a nivel producto (2x1, promo por SKU). Esto es clave para que el Perfil 360 del cliente y las métricas de Analytics reflejen correctamente la rentabilidad real.
Pagos (Opcional)
La vista de Pagos es opcional y resulta útil cuando una misma venta puede tener más de un medio de pago asociado. Permite vincular a un invoice_number múltiples registros de pago.
Consulta SQL de Ejemplo
Se filtran los pagos de las ventas creadas en las últimas 24 horas.
SELECT * FROM woowup_pagos
WHERE updatetime >= '2024-04-14 00:00:00'
OR createtime >= '2024-04-14 00:00:00';
Campos / Cabeceras de la entidad Pagos
Campo | Tipo | Descripción | Ejemplo | Obligatorio |
invoice_number | String | Número de factura tal cual figura en woowup_ventas. | FAC0123213 | Sí |
createtime | Datetime | Fecha de creación del pago en UTC. | 2024-01-23 16:32:05 | Sí |
updatetime | Datetime | Fecha de última modificación en UTC. | 2024-01-23 16:32:05 | Sí |
branch_name | String | Tienda donde se realizó la venta. | A101 | Sí |
type | Enum | Tipo de pago. Valores: credit, debit, cash, mercadopago, other. | credit | Sí |
brand | String | Marca de la tarjeta. | VISA | No |
bank | String | Banco emisor. | Banco Galicia | No |
total | Float | Total pagado por este medio de pago. | 1299 | Sí |
installments | Integer | Cantidad de cuotas. | 2 | No |
card_first_digits | String | Primeros 6 dígitos de la tarjeta (BIN). | 123456 | No |
Nota sobre card_first_digits (BIN)
El BIN corresponde a los primeros 6 dígitos del número de tarjeta. Permite identificar marca, banco emisor y tipo de tarjeta sin necesidad de enviar esos campos por separado.
Debe enviarse siempre como string (no como número), para preservar ceros a la izquierda.
Nunca enviar más de 6 dígitos: enviar más información de la tarjeta puede implicar incumplimiento de PCI-DSS.
Productos (Opcional)
La vista de Productos aplica únicamente cuando la información de catálogo proviene del ERP. Si el catálogo se obtiene desde la integración de ecommerce.
Reglas generales
category_id debe contener siempre el ID de la categoría hija (último nivel). NO se deben enviar nombres de categorías, solo IDs.
Ejemplo: si la estructura es BD01 > BE01 > BE50, el valor correcto de category_id es BE50.
Consulta SQL de ejemplo
SELECT * FROM woowup_productos
WHERE updatetime >= '2024-04-14 00:00:00'
OR createtime >= '2024-04-14 00:00:00';
Campos / Cabeceras de la entidad Productos
Campo | Tipo | Descripción | Ejemplo | Obligatorio |
sku | String | Código único del producto. Debe coincidir con el SKU del ecommerce. | AB123324 | Sí |
name | String | Nombre del producto. | Celular Moto Z | Sí |
createtime | Datetime | Fecha de creación del producto en UTC. | 2024-01-23 16:32:05 | Sí |
updatetime | Datetime | Fecha de última modificación en UTC. | 2024-01-23 16:32:05 | Sí |
category_id | String | ID de la categoría hija (último nivel). Debe existir en woowup_categorias. | BE50 | Sí |
brand | String | Marca del producto. | Motorola | No |
image_url | String | URL pública de la imagen principal. | https://... | No |
product_url | String | URL pública del producto en el ecommerce. | https://... | No |
active | Enum | Estado del producto. Valores: true, false. | true | No |
Categorías (Opcional)
La vista de Categorías es fundamental para que WoowUp pueda reconstruir la jerarquía del árbol de categorías. Aplica únicamente si la vista de Productos también se configura.
Reglas obligatorias
La jerarquía se define únicamente mediante el campo parent_id.
Cada categoría debe tener id único, name y parent_id (vacío o null solo para categorías raíz).
Campos / Cabeceras de la entidad Categorías
Campo | Tipo | Descripción | Ejemplo | Obligatorio |
id | String | Identificador único de la categoría. | BE50 | Sí |
name | String | Nombre visible de la categoría. | Billeteras Mujer | Sí |
parent_id | String | ID de la categoría padre. Vacío o null para categorías raíz. | BE01 | Sí* |
createtime | Datetime | Fecha de creación en UTC. | 2024-01-23 16:32:05 | Sí |
updatetime | Datetime | Fecha de última modificación en UTC. | 2024-01-23 16:32:05 | Sí |
Ejemplo de jerarquía
id | name | parent_id |
BD01 | Accesorios |
|
BE01 | Accesorios Mujer | BD01 |
BE50 | Billeteras Mujer | BE01 |
Cómo WoowUp construye el árbol de categorías
WoowUp no recibe la jerarquía armada: la construye internamente siguiendo los IDs y sus relaciones:
Lee el category_id del producto (ej: BE50).
Busca ese ID en la vista de Categorías.
Identifica su parent_id (BE01) y lo vuelve a buscar. Encuentra que BE01 tiene como parent_id a BD01.
Busca BD01, encuentra parent_id vacío, finaliza la jerarquía.
De esta manera el producto queda asociado a Accesorios > Accesorios Mujer > Billeteras Mujer.
Errores frecuentes a evitar
Devolver en category_id un ID que no existe en la vista de Categorías.
No exponer las categorías raíz.
Asignar productos a categorías padre en lugar de categorías hijas.
Generar ciclos en la jerarquía (una categoría que sea ancestro de sí misma).
Procesos de Datos
Análisis de datos (etapa previa)
Antes de construir las vistas se realiza una reunión técnica entre el equipo del cliente y el de Integraciones de WoowUp:
Se releva la arquitectura de la base de datos del cliente.
Se mapean campos disponibles vs. campos obligatorios.
Se identifican reglas de negocio (multipago, NCs, clientes genéricos, multi-tienda).
Se acuerda el alcance del primer entregable.
Se define el horario del ciclo diario.
Proceso diario
WoowUp ejecuta diariamente las consultas a las vistas configuradas, en el horario pactado con el cliente (por defecto, medianoche). En cada ciclo:
Se conecta a la base del cliente con la IP fija whitelisteada.
Ejecuta SELECT sobre cada vista filtrando por createtime/updatetime de las últimas 48 horas.
Procesa los registros y los integra a la plataforma.
Genera un reporte de sincronización accesible desde Configuración > Sincronizaciones.
Proceso histórico
Durante el onboarding se realiza una carga inicial de hasta 2 años de datos históricos, para poblar la base de WoowUp con el comportamiento histórico de los clientes.
A diferencia de CSV: en SQL no se entregan archivos separados ni hay carpeta history. Las vistas deben contener directamente los registros de los últimos 2 años. WoowUp coordinará con el cliente la ventana de procesamiento histórico para que las consultas no impacten en performance.
El procesamiento histórico se realiza durante el sprint pactado en la "Reunión Técnica de Tiendas Físicas". Una vez finalizado, será necesaria una validación de los datos por parte del cliente.
Validación de Datos
Cantidad de clientes
En WoowUp, ir a Segmentos y, sin aplicar filtros, hacer clic en el símbolo #. Puede haber más clientes en WoowUp que en la base original, porque WoowUp crea automáticamente un cliente cuando detecta una venta con un document/email no presente en la vista de Clientes.
Cantidad y totales de ventas
Ir a Analytics > Listado de Facturas. Filtrar por fechas y tiendas, asegurándose de excluir la tienda de ecommerce para comparar contra los datos del ERP/POS.
Tiendas procesadas
Acceder a Configuración > Tiendas (menú lateral) para ver las tiendas procesadas y editarlas si fuese necesario.
Consistencia entre vistas
Todos los branch_name usados en Ventas existen en Tiendas.
Todos los document/email usados en Ventas existen (o serán creados automáticamente) en Clientes.
Los invoice_number son únicos por cuenta.
Si se configura Pagos: la suma de total por invoice_number en Pagos coincide con el total de la factura en Ventas.
Contingencias
Esta sección describe cómo detectar y resolver problemas en el procesamiento diario de los datos vía SQL.
¿Cómo te enterás de que algo falló?
Hay dos vías por las que podés enterarte de un problema en la integración. Lo ideal es tener las tres activas para no depender de una sola.
a) Notificaciones automáticas de WoowUp
WoowUp puede avisarte por email cuando deja de recibir datos. Para activarlas, ir a Configuración > Notificaciones y configurar al menos las siguientes alertas:
Clientes y ventas: Igual o menos de 0 creados en los últimos 3 días
Productos: Igual o menos de 0 creados en los últimos 7 días
Estas reglas disparan un email cuando WoowUp detecta que dejaron de llegar datos, lo cual suele ser el primer síntoma de que la conexión a la base se rompió o las vistas dejaron de devolver registros.
c) Monitoreo del lado del cliente (recomendado)
WoowUp solo puede avisarte de lo que recibe. Si la base del cliente queda inaccesible o las vistas devuelven datos incompletos, WoowUp se entera tarde (cuando ya pasaron varios días sin información). Por eso recomendamos que el cliente configure sus propias alertas para:
Caída o inaccesibilidad de la base de datos.
Cambios de IP saliente o de configuración del firewall que puedan dejar fuera a WoowUp.
Vistas que dejan de devolver registros cuando se esperaba que tuvieran movimiento.
Volumen de registros significativamente distinto al promedio (caída abrupta o pico anómalo).
Tiempos de ejecución de las vistas que crecen por encima del umbral esperado.
Recibiste una alerta: ¿qué hacer?
Cuando WoowUp deja de procesar datos, la causa casi siempre cae en una de estas cinco categorías. Recorrelas en este orden:
1. ¿La base está respondiendo?
Conectarse a la base con el mismo usuario configurado para WoowUp y ejecutar una consulta simple (por ejemplo, SELECT 1). Si la base no responde o el usuario fue bloqueado, el problema está antes de las vistas.
2. ¿La conexión sigue habilitada?
Si la base responde pero WoowUp no logra conectarse, validar:
Las credenciales no cambiaron (usuario, contraseña, motor, host, puerto).
La IP fija de WoowUp sigue whitelisteada en el firewall. Si hubo cambios de infraestructura, proveedor de cloud o reconfiguración del firewall, la IP puede haber quedado bloqueada.
El protocolo TLS 1.2 (o superior) sigue habilitado en la base.
3. ¿Las vistas existen y son accesibles?
Conectarse con el usuario de WoowUp y ejecutar SELECT * FROM woowup_tiendas LIMIT 1 (y lo mismo para clientes, ventas y las opcionales que apliquen). Si alguna vista no existe o el usuario no tiene permisos de SELECT sobre ella, el ciclo va a fallar. Esto suele pasar después de migraciones, refactors o cambios de esquema del lado del cliente.
4. ¿Las vistas tienen datos del período esperado?
Ejecutar la misma consulta filtrada por las últimas 24 horas:
SELECT COUNT(*) FROM woowup_ventas WHERE createtime >= DATEADD(hour, -24, GETUTCDATE()) OR updatetime >= DATEADD(hour, -24, GETUTCDATE());
Si el COUNT da 0, hay dos opciones posibles: realmente no hubo movimiento (feriado, caída del POS) o el filtro de createtime/updatetime quedó mal y no está devolviendo lo que debería. Validar contra el ERP del cliente si efectivamente hubo ventas ese día.
5. ¿Las vistas están respondiendo a tiempo?
Ejecutar las consultas manualmente y medir cuánto tardan. Si alguna vista tarda más del tiempo de respuesta esperado, WoowUp aborta la consulta por timeout y el ciclo se marca como fallido. Las causas más frecuentes:
Falta de índices en
createtimeyupdatetime.Joins costosos que crecen con el volumen de datos.
Cálculos en tiempo real dentro de la vista que conviene materializar.
Encontraste el problema: ¿cómo lo resolvés?
Si la falla se extendió más allá de las 24 horas, contactar a soporte para coordinar una resincronización manual del período afectado.
La falla persiste y no encontrás la causa
Si después de recorrer los cinco puntos anteriores el problema sigue, escribir a [email protected] incluyendo:
Nombre de la cuenta.
Fecha del ciclo afectado.
Vista o vistas que están fallando (si lo pudiste identificar).
Una descripción breve de lo que validaste hasta el momento.
Buenas Prácticas por Entidad
Tiendas
No exponer almacenes ni depósitos donde el cliente no realiza compras.
Excluir la tienda de ecommerce; WoowUp la obtiene desde la API del ecommerce.
Usar un name estable en el tiempo. Cambiarlo implica que WoowUp interprete la tienda como nueva.
Clientes
Enviar al menos un identificador (document o email) por cliente.
No enviar emails genéricos (ej: [email protected]). Si la base obliga a tener email, devolver [email protected] o NULL.
Para clientes no identificados, consolidar bajo un único document genérico (ej: 99999999) y notificar al equipo de WoowUp.
Enviar el teléfono en formato internacional E.164.
Cuando la base no separa nombre y apellido, exponer el campo full_name.
Convertir createtime y updatetime a UTC dentro de la vista si la base los almacena en horario local.
Ventas
No exponer ventas sin al menos un identificador de cliente.
Los SKUs deben coincidir con los del ecommerce.
La combinación invoice_number + branch_name debe ser única.
No exponer las ventas del ecommerce; se obtienen por el conector propio de WoowUp.
Las devoluciones y notas de crédito se exponen con valores negativos en gross, discount, tax, total, unit_price, quantity, payment_total y points.
Los campos gross, discount, tax y total deben repetirse línea a línea para un mismo invoice_number.
El costo de envío (shipping) NO debe sumarse al total.
Pagos
Si se expone la vista Pagos, NO exponer payment_type ni campos de pago en Ventas.
La suma de total por invoice_number en Pagos debe coincidir con el total en Ventas.
Enviar el BIN (card_first_digits) cuando esté disponible; nunca más de 6 dígitos.
Productos y Categorías
Si el catálogo se integra por ecommerce, NO exponer Productos ni Categorías.
category_id en Productos siempre refiere a la categoría hija.
Todas las categorías referenciadas desde Productos deben existir en Categorías.
Consideraciones Finales
Disponibilidad de la base
Si la base del cliente no está disponible cuando WoowUp ejecuta el ciclo:
Las ventas y movimientos de ese día no quedan disponibles en WoowUp hasta el próximo ciclo.
Las automatizaciones y campañas dependientes de esos datos no se disparan.
El Perfil 360 del cliente queda desactualizado.
Zona horaria
createtime y updatetime deben estar en UTC en todas las vistas. Cuando la fuente no tiene hora (solo fecha), enviar 23:59:59 UTC en el último minuto del día, para que la venta quede correctamente asociada a campañas que se hayan ejecutado en el día.
Modificaciones a la estructura de la vista
Si el cliente modifica las columnas de una vista (renombra, agrega o elimina campos), debe avisar al equipo de Integraciones de WoowUp antes de aplicar el cambio en producción. Cambios no coordinados pueden romper el ciclo de sincronización.


