Ir al contenido principal

Integración SQL para Tiendas Físicas

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

String

Identificador único de la tienda

A101

display_name

String

Nombre de la tienda

Sucursal Palermo

branch_zone_code

String

Código de la zona

13

No

branch_zone_name

String

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í*

email

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

updatetime

Datetime

Fecha de última modificación en horario UTC.

2024-06-22 20:52:00

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í*

email

String

Email del cliente.

Sí*

invoice_number

String

Número de factura. Debe ser único por venta.

0001-A-00000230321

createtime

Datetime

Fecha y hora de la venta en horario UTC.

2024-01-23 16:32:05

updatetime

Datetime

Fecha de última modificación en horario UTC.

2024-01-23 16:32:05

channel

Enum

Canal de venta. Valores: web, in-store.

in-store

branch_name

String

Código de tienda. Debe coincidir con el campo name de la vista de Tiendas.

A101

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

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

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

product_name

String

Nombre del producto.

Celular Moto Z

brand

String

Marca del producto.

Motorola

No

quantity

Integer

Cantidad de unidades. En notas de crédito debe ser negativo.

2

unit_price

Float

Precio unitario sin impuestos ni descuentos. En notas de crédito debe ser negativo.

1000

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

createtime

Datetime

Fecha de creación del pago en UTC.

2024-01-23 16:32:05

updatetime

Datetime

Fecha de última modificación en UTC.

2024-01-23 16:32:05

branch_name

String

Tienda donde se realizó la venta.

A101

type

Enum

Tipo de pago. Valores: credit, debit, cash, mercadopago, other.

credit

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

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

name

String

Nombre del producto.

Celular Moto Z

createtime

Datetime

Fecha de creación del producto en UTC.

2024-01-23 16:32:05

updatetime

Datetime

Fecha de última modificación en UTC.

2024-01-23 16:32:05

category_id

String

ID de la categoría hija (último nivel). Debe existir en woowup_categorias.

BE50

brand

String

Marca del producto.

Motorola

No

image_url

String

URL pública de la imagen principal.

No

product_url

String

URL pública del producto en el ecommerce.

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

name

String

Nombre visible de la categoría.

Billeteras Mujer

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

updatetime

Datetime

Fecha de última modificación en UTC.

2024-01-23 16:32:05

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:

  1. Lee el category_id del producto (ej: BE50).

  2. Busca ese ID en la vista de Categorías.

  3. Identifica su parent_id (BE01) y lo vuelve a buscar. Encuentra que BE01 tiene como parent_id a BD01.

  4. 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 createtime y updatetime.

  • 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.


¿Ha quedado contestada tu pregunta?