Guía de uso · Sellix
Sellix detecta automáticamente dónde se está yendo el margen de tu empresa. Esta guía te explica cómo funciona el motor, cómo configurarlo, y cómo usar el WMS subyacente para capturar datos de calidad.
Auditoría IA · qué es y cómo funciona
Sellix es un sistema operativo financiero invisible que corre encima de tu operación. No te gestiona el negocio — te muestra exactamente dónde está perdiéndose tu margen, en dinero real, mes a mes.
Cómo funciona en 4 pasos
1Conexión de datos
Conectás tus sistemas: WMS interno, ERP, Excel maestro, sistema de facturación. Cada empresa elige qué conectar. Si no tenés nada, te damos el WMS de Sellix.
2Calibración
Cargás tus costos operativos reales: costo/hora de operario, target de horas para preparar un pedido, costo de procesar 1 devolución, baseline aceptable de devoluciones por proveedor. Sin esto, los detectores trabajan con valores genéricos. Con esto, te muestran tu dinero.
3El motor corre cada 6 horas
Los 10 detectores escanean tu data buscando patrones de fuga. Cada hallazgo viene con título, descripción, evidencia y money_impact mensual estimado.
4Vos resolvés y suma a tu marcador
En la pantalla "💰 Fugas detectadas" ves las fugas priorizadas por impacto en pesos. Cada vez que resolvés una, suma al "Recuperado · 30 días". Las fugas se auto-resuelven cuando la causa desaparece entre corridas.
Los 10 detectores · Leak Detection Engine
| Detector | Qué busca | Cómo calcula impacto |
|---|---|---|
| 🎯 Diferencias de stock | Variance entre auditoría y stock teórico | variance × cost_uyu del SKU |
| 🧊 Stock muerto | SKUs sin movimiento +90 días | qty disponible × cost_uyu |
| ⚠ Errores de operario | Operarios con error rate > 2σ del promedio del equipo | errors × $200 (heurística) |
| 📉 Cancelaciones anómalas | Spike de cancelaciones vs baseline 90d | $ de facturación cancelada |
| 🐌 Rotación lenta | SKUs con stock que cubre +90 días de demanda | 50% del valor inmovilizado |
| 🚨 Salidas sin escaneo | Movimientos de salida que bypassearon escaneo | 5% del valor de los pedidos afectados |
| 🔴 Margen real negativo | SKUs cuyo margen real (precio − cost − devoluciones − daño) es <0 | (margen real negativo) × volumen mensual |
| 🏭 Fuga por proveedor | Proveedores con tasa de devolución/daño > baseline | (returns_cost + damaged_cost) / 6 meses |
| ⏱ Demoras de preparación | Promedio order→shipped > target configurado | (horas exceso) × $/hora operario |
| 💸 Clientes no rentables | Clientes con margen real <10% | −margen_real / 3 (mensualizado) |
Severidad automática
Cada hallazgo recibe una severidad según el money_impact:
- Critical: $100.000 UYU+ por mes
- High: $30.000 - $100.000
- Medium: $5.000 - $30.000
- Low: hasta $5.000
Score por área operativa
Sellix agrupa los hallazgos en 4 áreas y le da a cada una un score de 0 a 100, con semáforo:
| Área | Detectores que la componen |
|---|---|
| 🏬 Depósito | Diferencias de stock + Salidas sin escaneo + Errores de operario |
| 🛒 Compras | Stock muerto + Rotación lenta + Fuga por proveedor |
| 💵 Ventas | Cancelaciones + Margen real negativo + Clientes no rentables |
| 🚛 Logística | Demoras de preparación |
El cálculo: Score = 100 − (impacto_total_área / baseline_mensual) × 100, donde baseline = 5% de tu facturación mensual o $20.000 (lo que sea mayor). Verde ≥80 · Ámbar 50-79 · Rojo <50.
Configurar costos para que las cuentas sean tuyas
Andá a "💰 Fugas detectadas" → botón "⚙ Costos" arriba a la derecha. Cargás 5 valores:
| Parámetro | Default | Cómo calcularlo |
|---|---|---|
| Costo/hora de operario | $800 UYU | (sueldo + cargas + extras) ÷ horas trabajadas mes |
| Target order → shipped | 4 horas | Tu meta operativa razonable |
| Costo de procesar 1 devolución | $500 UYU | (tiempo inspección + reingreso + rework + logística inversa) |
| % de depreciación al dañarse | 1.0 (pérdida total) | 0.5 si vendés segundas, 1.0 si tirás |
| Tasa devolución aceptable proveedor | 0.03 (3%) | El % típico de tu industria |
Apenas guardás, el motor re-corre con tus parámetros.
WMS subyacente · captura de datos
Si no tenés un sistema operativo de depósito, te damos el de Sellix. El WMS captura la data que después el motor analiza.
Qué es Sellix WMS
Sellix es un sistema operativo de depósito para empresas chicas y medianas: lleva el control físico de cada unidad, exige escaneo en puerta para que no salga nada sin registrar, te permite mover stock entre depósitos con confirmación remota del camionero, y se integra con tu sistema de facturación electrónica para emitir el CFE automáticamente al despachar.
Conceptos básicos
| Término | Qué es |
|---|---|
| Depósito | Edificio físico donde se guarda mercadería. Podés tener varios. |
| Ubicación | Posición exacta dentro de un depósito (zona / rack / posición). Cada una puede tener un QR. |
| SKU | Código interno de un producto. Ej: SKU-001 = "Aceite girasol 1.5 L". |
| Unidad | Cada cosa física rastreable. Podés tener 50 unidades del mismo SKU. |
| Pedido | Solicitud de un cliente con líneas (SKU + cantidad). Estados: pendiente → reservado → picking → packed → ready → shipped. |
| Movimiento | Cualquier acción física registrada: ingreso, transfer, picking, salida, daño, devolución. Audit trail inmutable. |
Primeros pasos (5 min)
1Crear un depósito
Configuración → Depósitos → "+ Nuevo depósito". Mínimo necesitás uno para arrancar.
2Crear ubicaciones
Configuración → Ubicaciones. Te recomendamos zonas tipo A / B, racks numerados 01 / 02, posiciones 01 a 10. Pegale un QR a cada una si vas a escanear.
3Cargar SKUs
Inventario → SKUs → "+ Nuevo SKU". Definí código, nombre, costo, precio y stock mínimo (te avisamos cuando bajes de ese umbral).
4Ingresar mercadería
Inventario → Ingreso mercadería. Escaneá la ubicación destino y cargá las unidades. Cada unit nueva queda en estado available.
5Hacer un pedido de prueba
Pedidos → "+ Nuevo pedido". Reservá → Pick → Pack → Ready → Door scan. Felicitaciones, despachaste tu primer pedido.
Pedidos · ciclo completo
Cada pedido pasa por 7 estados. Vas a ver el estado actual con un pill de color al lado del nº de pedido:
| Estado | Qué pasó | Próxima acción |
|---|---|---|
pending | Recién creado, aún sin reservar stock. | Reservar |
reserved | Stock asignado pero todavía en sus posiciones. | Empezar picking |
picking | Operario está sacando las unidades del rack. | Continuar / cerrar picking |
packed | Todo recolectado y embalado. | Marcar listo |
ready | Listo en zona de despacho. | Door scan del operario · o link de retiro al camionero |
shipped | Salió del depósito · auto-emisión de CFE si está activo. | — |
cancelled | Abortado · units liberadas al stock. | — |
shipped tiene que haber door scan del operario en puerta, o confirmación del camionero desde el link único que le mandás (con factura, foto de la mercadería y firma digital · ver Links de retiro · camionero remoto más abajo). Cualquiera de las dos cierra el pedido y deja audit trail completo. La regla operativa de Sellix es que siempre quede traza de quién confirmó la salida · esto evita robo, error de despacho y pérdida.
Ingreso de mercadería
Cuando llega mercadería al depósito desde un proveedor, andá a Inventario → Ingreso mercadería. Por cada SKU recibido:
- Elegí el SKU.
- Indicá la cantidad.
- Escaneá (o seleccioná) la ubicación destino.
- Confirmá. Se crean N unidades nuevas en estado
availableen esa ubicación, y queda registrado un movement typeinbound.
Picking con escaneo
El operario abre Pedidos → Picking y le aparecen las órdenes asignadas. Por cada línea:
- El sistema le dice qué SKU buscar y cuántas unidades.
- Escanea cada unit (QR de la unidad o del rack).
- Cuando completa todas las líneas, el pedido pasa a
packed.
Si el operario escanea un código que no corresponde, el sistema lo rechaza. Esto previene errores de armado.
Salida del depósito · dos rutas válidas
Para cerrar un pedido y pasarlo de ready a shipped tenés dos opciones. Las dos dejan audit trail completo (quién, cuándo, qué) y las dos disparan la facturación si la tenés integrada.
Opción A · Door scan del operario
El operario abre Salida en puerta, escanea el código del pedido (o lo tipea). El sistema valida:
- Que el pedido esté en estado
ready. - Que el código matchee.
- Que el operario tenga permiso.
Si todo OK · las units pasan a shipped, el pedido se cierra, y se dispara la emisión del CFE (en el sistema de facturación que ya tenés). Útil cuando tu propio operario carga el camión.
Opción B · Link de retiro al camionero (sin door scan)
Cuando viene un camionero externo a buscar mercadería · en lugar de pedirle a tu operario que esté presente en la puerta, generás un link único, lo mandás al chofer y él lo confirma desde el celular:
- Ve los datos del pedido (cliente, items, factura).
- Tipea el número de factura para verificar que coincida con el remito que le dieron.
- Saca foto de la mercadería cargada en el camión (opcional pero recomendado para audit).
- Firma con el dedo en la pantalla.
- Confirma · el pedido pasa a
shippedautomáticamente.
Sellix registra timestamp, GPS si lo permitió, IP del dispositivo, factura ingresada, foto y firma. El link queda used y no se puede reusar. Detalles del flujo y configuración del PIN extra en Links de retiro · camionero remoto abajo.
Cuándo usar cuál: door scan para envíos con tu propio camión o tu propio operario en puerta · link de retiro para camioneros externos, transportes contratados, retiros del cliente final, o cualquier caso donde no tenga sentido que tu operario haga papeleo extra.
Links de retiro · camionero remoto F107
Cuando un camionero externo viene a buscar mercadería al depósito, en lugar de hacer él el papeleo o de que tu operario dependa de él, generás un link único que el camionero abre en su celular y confirma el retiro desde ahí.
Cómo funciona
1La secretaria genera el link
Desde la lista de pedidos (estado packed o ready) clickea "🚚 Link", carga el nº de factura, datos del chofer, opcional PIN, opcional expiración.
2Le manda el link al camionero
Aparece un botón "📋 Copiar link" y "💬 Abrir WhatsApp" con un mensaje prearmado. Pegá el link en el WhatsApp del chofer.
3El camionero lo abre en su celular
Ve los datos del pedido (cliente, items), tipea el nº de factura, opcionalmente saca foto de la mercadería, firma con el dedo, y confirma.
4Sellix registra todo
Timestamp, GPS (si lo permitió), IP, factura ingresada, foto, firma. La orden queda shipped. El link queda used y no se puede reusar.
Cuándo usar PIN extra
Si el envío es de alto valor o vas a mandar el link por un canal compartido (un grupo de WhatsApp, email a una secretaría), activá el PIN. Pasale los 4 dígitos al chofer por mensaje privado o llamada. El sistema le pide ambos para confirmar.
Si algo sale mal
Cualquier link activo lo podés revocar desde Retiros (camionero) → fila → Revocar. El camionero ya no va a poder confirmar con ese link, vas a tener que generar uno nuevo.
Transferencias entre depósitos F108
Mover stock del depósito A al B con doble confirmación: el camionero confirma despacho al salir de A y recepción al llegar a B. Las units quedan en estado in_transit mientras tanto, así sabés en todo momento dónde está la mercadería.
1Crear la transferencia
Operación → Transferencias → "+ Nueva transferencia". Elegí depósito origen y destino, agregá líneas (SKU + cantidad). Sellix reserva automáticamente las units en el origen.
2Generar link de despacho
Botón "Despachar →". Se crea un link tipo retiro pero marcado como transfer_dispatch.
3El camionero confirma al salir
Abre el link, ingresa nº de remito, foto, firma, GPS. Las units pasan a in_transit y la transfer queda en estado in_transit.
4Generar link de recepción
Botón "Generar recepción →". Le mandás este link a quien recibe en el depósito destino.
5Confirmar recepción
El receptor abre el link, ingresa nº de remito, confirma. Las units pasan a available en una ubicación del depósito destino, y la transfer cierra como received.
INGRESO/AUTO/PENDIENTE donde dejar la mercadería. Después podés re-ubicarla manualmente en su rack definitivo.
Devoluciones · RMA workflow completo F109
Cuando un cliente devuelve mercadería, Sellix te lleva todo el flow: motivo categorizado, inspección por línea, decisión final (vuelve a stock / dañado / reembolso / reposición).
Crear una RMA
Desde la lista de pedidos, encontrá uno en estado shipped y clickeá "↩ Devolver". O andá a Devoluciones → "+ Nueva devolución".
- Elegí el motivo: defectuoso, error de despacho, cliente cambió de idea, dañado en tránsito, producto equivocado, otro.
- Detalle libre (qué reportó el cliente).
- Líneas con SKU + cantidad devuelta.
- Confirmar — Sellix asigna un nº RMA tipo
RMA-2026-0042.
Inspección al recibir la devolución
Cuando llega la mercadería al depósito, andá a la RMA y clickeá "Inspeccionar →". Por cada línea cargás:
| Condición | Decisión | Qué hace Sellix |
|---|---|---|
good | Restock | Las units vuelven a available en una ubicación de retornos del depósito. |
damaged | Damaged | Las units pasan a estado damaged, no vuelven al stock vendible. |
| cualquiera | Refund only | Sin cambio de inventario · registra el monto reembolsado. |
| cualquiera | Replacement | Sin cambio de inventario · queda nota para que armes una orden de reposición. |
Cerrar la RMA
Cuando todas las líneas tienen condición + decisión, clickeás "✓ Cerrar y aplicar". Sellix dispara los cambios de inventario y deja un movement type return o damage según corresponda.
Depósitos y ubicaciones
Configuración → Depósitos. Cada depósito tiene nombre y dirección. Podés tener uno solo o varios (con plan Enterprise tenés multi-depósito completo).
Configuración → Ubicaciones. Estructura recomendada: Zona / Rack / Posición. Por ejemplo: A / 01 / 03. Asignále un QR único a cada ubicación para que los operarios escaneen en lugar de tipear.
SKUs y stock mínimo
Cada SKU tiene código (único, ej SKU-001), nombre, categoría, costo, precio, y opcional un stock mínimo. Si las units disponibles bajan de ese mínimo, Sellix te manda una alerta por email (configurable en Alertas).
Operarios y permisos
Configuración → Equipo. Tres roles:
- Owner — vos, dueño de la cuenta. Acceso total.
- Supervisor — admin operativo. Crea pedidos, gestiona stock, no toca facturación ni equipo.
- Operario — sólo PWA mobile. Hace picking, packing, door scan, ingreso. No ve KPIs ni facturación.
Alertas y resumen diario F111
Configuración → Alertas. Tres tipos de alertas + el resumen diario:
- Stock crítico — cuando un SKU baja del mínimo.
- Pedidos pendientes — sin reservar hace más de 24 hs.
- Auditorías acumuladas — tareas de auditoría sin completar hace más de 48 hs.
- Resumen diario — KPIs del día anterior cada mañana entre 6 y 8 AM.
El "📧 Test resumen diario" te manda un email al instante con los KPIs de ayer, para que veas cómo queda antes de activarlo.
Facturación electrónica
Configuración → Facturación. Sellix no emite el CFE directamente — se conecta a tu sistema (Memory, Defontana, Bantotal, Conecta-Uy, o cualquiera vía webhook custom). Al confirmar el despacho, Sellix le manda los datos del pedido a tu sistema, y tu sistema emite el CFE en DGI.
Si tu proveedor no está pre-integrado, usá la opción Webhook custom. Esto es lo que más usa la mayoría: tu dev arma un endpoint que recibe el POST de Sellix.
📡 Integración DGI · webhook custom
Documentación técnica para el dev de tu sistema de facturación. Acá está todo lo que necesita saber para que tu sistema reciba los datos de cada despacho y emita el CFE.
Estructura del payload
Sellix hace POST al endpoint que vos configuraste, con los datos del pedido despachado en JSON.
Headers
Content-Type: application/json
User-Agent: Sellix-WMS/1.0 (+https://sellix.lat)
X-Sellix-Timestamp: 1735689600
X-Sellix-Signature: sha256=a4b2c8... (sólo si tenés webhook_secret configurado)
Authorization: <el auth_header que configuraste, opcional>
Body
{
"sellix_order_id": 12345,
"order_number": "ORD-2026-00042",
"shipped_at": "2026-05-05T14:32:18.123Z",
"total_uyu": 18450.50,
"client": {
"name": "Distribuidora Acme S.A.",
"rut": "210000000018",
"type": "business",
"delivery_address": "Av. Italia 1234, Montevideo"
},
"lines": [
{
"sku": "SKU-001",
"name": "Aceite girasol 1.5L",
"qty": 24,
"unit_price_uyu": 285,
"subtotal_uyu": 6840
},
{
"sku": "SKU-014",
"name": "Arroz Pony 1kg",
"qty": 30,
"unit_price_uyu": 145,
"subtotal_uyu": 4350
}
]
}
Respuesta esperada
Tu sistema debe responder con 200 o 201 y un JSON con al menos uno de:
{
"invoice_id": "CFE-12345", // o "id" o "cfe_id"
"invoice_url": "https://...", // o "url" o "cfe_url"
"status": "ok"
}
Sellix guarda invoice_id y invoice_url en la orden. Si tu sistema no devuelve nada útil, es OK también — el llamado se considera exitoso si responde 2xx.
Verificación HMAC F113
Cada llamado de Sellix viene firmado para que puedas verificar que vino de Sellix y no de un atacante. Te lo damos como header X-Sellix-Signature y un X-Sellix-Timestamp para prevenir ataques de replay.
Receta
computed = HMAC_SHA256(webhook_secret, timestamp + "." + body)
válido si computed == header X-Sellix-Signature (sin el prefijo "sha256=")
El timestamp son segundos Unix. El body es el JSON tal cual te llegó (no lo re-serialices, usá el raw body).
Ejemplos por lenguaje
const crypto = require('crypto');
const express = require('express');
const app = express();
const WEBHOOK_SECRET = process.env.SELLIX_WEBHOOK_SECRET;
const FIVE_MIN = 5 * 60;
// Importante: usar express.raw para preservar el body exacto
app.post('/sellix-webhook',
express.raw({ type: 'application/json' }),
(req, res) => {
const ts = req.header('X-Sellix-Timestamp');
const sig = (req.header('X-Sellix-Signature') || '').replace(/^sha256=/, '');
const body = req.body.toString('utf8');
// Verificar timestamp dentro de la ventana (anti replay)
const age = Math.abs(Math.floor(Date.now() / 1000) - parseInt(ts, 10));
if (!ts || age > FIVE_MIN) return res.status(401).json({ error: 'timestamp_expired' });
// Verificar firma
const expected = crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(ts + '.' + body)
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) {
return res.status(401).json({ error: 'invalid_signature' });
}
const data = JSON.parse(body);
// emitir CFE en tu sistema...
const cfe = await emitirCFE(data);
res.json({ invoice_id: cfe.id, invoice_url: cfe.url });
});
<?php
$WEBHOOK_SECRET = getenv('SELLIX_WEBHOOK_SECRET');
$body = file_get_contents('php://input');
$ts = $_SERVER['HTTP_X_SELLIX_TIMESTAMP'] ?? '';
$sig = preg_replace('/^sha256=/', '', $_SERVER['HTTP_X_SELLIX_SIGNATURE'] ?? '');
// Timestamp dentro de 5 minutos
if (!$ts || abs(time() - intval($ts)) > 300) {
http_response_code(401);
die(json_encode(['error' => 'timestamp_expired']));
}
// Verificar firma
$expected = hash_hmac('sha256', $ts . '.' . $body, $WEBHOOK_SECRET);
if (!hash_equals($expected, $sig)) {
http_response_code(401);
die(json_encode(['error' => 'invalid_signature']));
}
$data = json_decode($body, true);
// emitir CFE en tu sistema...
$cfe = emitirCFE($data);
header('Content-Type: application/json');
echo json_encode(['invoice_id' => $cfe['id'], 'invoice_url' => $cfe['url']]);
import hmac, hashlib, os, time
from flask import Flask, request, jsonify, abort
WEBHOOK_SECRET = os.environ['SELLIX_WEBHOOK_SECRET'].encode()
app = Flask(__name__)
@app.post('/sellix-webhook')
def sellix_webhook():
body = request.get_data() # raw bytes
ts = request.headers.get('X-Sellix-Timestamp', '')
sig = request.headers.get('X-Sellix-Signature', '').removeprefix('sha256=')
# Timestamp dentro de 5 minutos
if not ts or abs(int(time.time()) - int(ts)) > 300:
abort(401, 'timestamp_expired')
# Verificar firma
expected = hmac.new(
WEBHOOK_SECRET,
f'{ts}.{body.decode()}'.encode(),
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(expected, sig):
abort(401, 'invalid_signature')
data = request.get_json()
# emitir CFE en tu sistema...
cfe = emitir_cfe(data)
return jsonify(invoice_id=cfe['id'], invoice_url=cfe['url'])
Política de reintentos F113
Si tu endpoint responde 4xx o 5xx, o si hay timeout (>20 s), o si Sellix no puede llegar al server, el llamado entra en cola de reintentos automáticos. La frecuencia es backoff progresivo:
| Intento | Tiempo desde el primer fallo |
|---|---|
| 1 (original) | al confirmar despacho |
| 2 | +5 min |
| 3 | +15 min |
| 4 | +30 min |
| 5 | +1 h |
| 6 | +2 h |
| 7 | +4 h |
| 8 | +8 h |
| 9 (último) | +16 h |
Total: ~32 hs de ventana de reintentos. Después de 9 intentos, Sellix se rinde — la entrada queda en el log con estado fallido y vas a tener que reintentar manualmente.
Reintento manual
En Configuración → Facturación → Historial de emisiones, cualquier fila fallida tiene un botón "🔄 Reintentar". Útil si arreglaste algo en tu sistema y querés despachar la emisión sin esperar al próximo intento programado.
Idempotencia
Tu endpoint debe ser idempotente — si recibís el mismo sellix_order_id dos veces, no emitas dos CFE. Lo más fácil es checkear en tu base si ya tenés un CFE para ese order_id antes de emitir.
INSERT ... ON CONFLICT DO NOTHING con sellix_order_id como key única en tu tabla de emisiones. Si tu sistema no soporta eso, query antes de emitir.
🔌 Cómo conectar tu sistema DGI con Sellix
Guía paso a paso para enchufar el sistema de facturación electrónica que ya tenés (Memory, Defontana, Bantotal, Conecta-Uy o el que sea) con Sellix. Tiempo estimado: 30-60 minutos con tu dev o el soporte de tu proveedor.
Qué necesitás antes de arrancar
1. Tu sistema de facturación electrónica activo
El que ya estás usando para emitir CFE en DGI. Si no tenés ninguno, primero contratá uno (Memory, Conecta-Uruguay, Defontana, Bantotal y otros). Sellix no es certificado DGI · es la capa de inteligencia que va arriba.
2. Acceso técnico al sistema (URL del API + tu API key del proveedor)
Pedile a tu proveedor o a tu administrador del sistema:
| Dato | Dónde se obtiene |
|---|---|
| URL del endpoint API | Documentación del proveedor o panel de configuración. Ej: https://api.memory.com.uy/v2/ |
| API key / token de tu cuenta | Panel del proveedor → Integraciones / API. Cada proveedor lo llama distinto: access_token, integration_key, secret. |
| RUT de tu empresa | Tu RUT de DGI · ya lo tenés. Sellix lo usa para identificar comprobantes en el log. |
| Tipo de comprobante por default | e-Factura, e-Ticket, e-Remito · según tu operación. Lo decidís vos en cada despacho o lo dejás como default. |
3. Dev o soporte técnico de tu proveedor (durante el setup)
Si tu proveedor está en nuestra lista de presets (Memory, Defontana, Bantotal, Conecta-Uy), no necesitás dev · es config. Si tu proveedor no está, o tenés un sistema custom, necesitás un dev por 1-2 horas para armar el receptor del webhook.
Cómo conectar según tu proveedor
Conectar Memory con Sellix
- Entrá a tu cuenta de Memory: memory.com.uy
- Andá a Configuración → Integraciones / API y generá un access token de tipo "lectura + emisión".
- Copiá la URL del API que te dan (típicamente
https://api.memory.com.uy/v2/) y el token. - En Sellix · andá a Configuración → Facturación · elegí proveedor "Memory" · pegá la URL y el token. Probá la conexión.
- Para que Memory le avise a Sellix cada vez que emite un CFE: pedile a soporte de Memory que configure un webhook saliente apuntando a tu URL de Sellix (te la mostramos en el panel 📥 Eventos entrantes) con tu API key de Sellix como header
X-Sellix-API-Key.
Conectar Conecta-Uruguay con Sellix
- Logueate en el panel de Conecta-Uruguay.
- Andá a Mi cuenta → API / Integraciones · habilitá API access y copiá tu integration key.
- En Sellix · Configuración → Facturación · proveedor "Conecta-Uruguay" · pegá la URL del endpoint de Conecta y la key.
- Conecta-Uruguay tiene módulo de webhooks salientes nativo · configurá el evento "CFE emitido" apuntando a la URL de Sellix con tu API key como header.
Conectar Defontana con Sellix
- Entrá a tu Defontana cloud → Administración → Integraciones.
- Generá un API client con permisos de lectura de comprobantes y consulta de stock/clientes.
- Vas a recibir un
client_id+secret. Pegalos en Sellix → Configuración → Facturación · proveedor "Defontana". - Defontana no tiene webhooks salientes nativos en todos los planes. Si tu plan los soporta, configuralos. Si no, pedile al soporte de Defontana que active el módulo o que tu dev arme un cron job (5-15 min) que consulte los CFE nuevos y los empuje a Sellix.
Conectar Bantotal con Sellix
- Bantotal es típicamente self-hosted o on-premise · necesitás coordinar con tu dpto de IT.
- Pedile al admin de tu Bantotal que habilite el módulo de integraciones y genere credenciales API.
- Configurá en Sellix la URL interna de tu Bantotal y las credenciales · proveedor "Bantotal".
- Para que Bantotal avise a Sellix de cada emisión, tu IT puede armar un trigger en la base de datos o un servicio middleware que escuche CFEs nuevos y haga POST a Sellix con tu API key.
Conectar tu sistema propio o uno no listado
Si tu sistema de facturación es un desarrollo propio o un proveedor que no está en la lista, usá el modo Webhook custom. Necesitás un dev por unas horas:
- En Sellix · Configuración → Facturación · elegí proveedor "Webhook custom" · pegá la URL del endpoint de tu sistema que recibe los datos.
- Sellix te genera un
webhook_secret· copialo y configuralo en tu sistema receptor. - Tu dev arma el endpoint receptor que valida el HMAC, lee el JSON con los datos del despacho y llama a tu sistema DGI para emitir el CFE.
- Para el flujo inverso (tu sistema → Sellix): tu dev arma un job que cada vez que se emite un CFE, hace POST a la URL de Sellix con tu API key. Más abajo está el formato del JSON exacto.
Eventos entrantes · tu sistema → Sellix F128
Cuando tu sistema de facturación emite algo (factura, devolución, ajuste de stock), te conviene avisarle a Sellix para que el motor de detección tenga los datos al día. Sin esto, tendrías que subir Excel manualmente cada cierto tiempo.
URL del endpoint
POST https://sellix.lat/api/inbound/event
Headers
Content-Type: application/json
X-Sellix-API-Key: slx_
La API key la generás desde Sellix → Integraciones · API · al crearla, marcá scope "write".
Body · 4 tipos de evento
1. Venta creada (la más importante · cuando emitís un CFE)
{
"event_type": "sale.created",
"external_id": "A-12345",
"source": "memory",
"data": {
"order_number": "A-12345",
"shipped_at": "2026-05-06T14:30:00Z",
"total_uyu": 18450.50,
"external_invoice_id": "CFE-A-001-0012345",
"external_invoice_url": "https://...",
"client": {
"name": "Distribuidora Acme S.A.",
"rut": "210000000018",
"type": "business"
},
"lines": [
{ "sku": "SKU-001", "name": "Aceite girasol 1.5L", "qty": 24, "unit_price_uyu": 285 },
{ "sku": "SKU-014", "name": "Arroz Pony 1kg", "qty": 30, "unit_price_uyu": 145 }
]
}
}
2. SKU alta o modificación
{
"event_type": "sku.upserted",
"external_id": "SKU-001",
"data": {
"sku": "SKU-001",
"name": "Aceite girasol 1.5L",
"cost_uyu": 220,
"price_uyu": 285,
"category": "Almacén",
"min_stock": 50
}
}
3. Devolución / nota de crédito
{
"event_type": "return.created",
"external_id": "NC-2026-0042",
"data": {
"order_number": "A-12345",
"reason": "defect",
"lines": [
{ "sku": "SKU-001", "qty": 3, "condition": "damaged", "refund_amount": 855 }
]
}
}
4. Ajuste de stock (entrada o salida no atribuible a una venta)
{
"event_type": "stock.adjusted",
"external_id": "ADJ-2026-0099",
"data": {
"sku": "SKU-001",
"delta_qty": 50, // positivo = entrada · negativo = salida
"reason": "purchase" // purchase | damage | inventory_correction | other
}
}
Respuesta exitosa
{
"ok": true,
"event_id": 12345,
"result": "order_upserted",
"ref": "A-12345",
"order_id": 678
}
Idempotencia · cómo evitar duplicados
Si mandás el mismo external_id dos veces para el mismo event_type, Sellix detecta el duplicado y devuelve el resultado del original sin procesar de nuevo:
{
"ok": true,
"duplicate": true,
"event_id": 12345,
"result": { ... }
}
Esto te permite reintentar sin miedo si tu llamado falló por timeout o red.
Ejemplo de receptor en Node.js
const fetch = require('node-fetch');
async function notifySellix(eventType, externalId, data) {
const res = await fetch('https://sellix.lat/api/inbound/event', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Sellix-API-Key': process.env.SELLIX_API_KEY,
},
body: JSON.stringify({
event_type: eventType,
external_id: externalId,
source: 'mi_sistema',
data,
}),
});
return await res.json();
}
// En tu trigger de "CFE emitido":
await notifySellix('sale.created', 'A-12345', {
order_number: 'A-12345',
total_uyu: 18450.50,
client: { name: 'Acme', rut: '210000000018' },
lines: [{ sku: 'SKU-001', qty: 24, unit_price_uyu: 285 }],
});
Eventos salientes · Sellix → tu sistema
El flujo inverso está documentado en la sección Estructura del payload más abajo. Funciona así: cuando confirmás un despacho desde Sellix (door scan o link del camionero), Sellix le manda un POST a la URL de tu sistema que vos configuraste, con los datos del pedido. Tu sistema emite el CFE en DGI con esa data y te devuelve el invoice_id. Sellix lo guarda en la orden.
Despacho operativo en Sellix
↓ (POST con datos del pedido)
Tu sistema de facturación
↓ (llamada a DGI con tus credenciales)
DGI emite CFE
↓ (response con número CFE)
Tu sistema responde a Sellix con invoice_id
↓
Sellix guarda invoice_id en la orden
PARALELO (cuando tu sistema emite algo por su cuenta):
Tu sistema emite CFE / nota crédito / ajusta stock
↓ (POST a /api/inbound/event con tu API key)
Sellix ingesta y dispara motor de detección
↓
Aparecen las fugas en tu panel
FAQ
¿Puedo desactivar la auto-emisión y emitir manualmente?
Sí. En Configuración → Facturación, desmarcá "Emitir CFE automáticamente al cerrar el pedido". Después podés emitir manualmente desde el detalle de cada pedido (sirve igual si el cierre fue por door scan o por link al camionero).
¿Qué pasa si mi sistema responde lento?
Sellix espera hasta 20 segundos. Si tu endpoint tarda más, se considera timeout y entra en reintentos. Lo recomendable: respondé rápido (200 inmediato) y procesá la emisión en un job aparte.
¿Puedo usar Sellix sin facturación electrónica?
Sí. La integración es opcional. Sellix funciona como WMS puro y vos seguís emitiendo CFE en tu sistema actual sin integrar.
¿El camionero necesita instalar una app?
No. El link de retiro es una PWA — se abre en cualquier celular con un browser moderno. Si quiere, puede tocar "Agregar a inicio" para que quede como ícono, pero no es obligatorio.
¿Qué pasa si el camionero no tiene internet?
Necesita conectividad para abrir el link y confirmar. Si está offline, va a tener que conectarse cuando llegue (o usar datos móviles). Versiones futuras pueden incluir modo offline con sync diferido.
¿Puedo borrar movimientos o pedidos?
No. Por diseño Sellix mantiene un audit trail inmutable. Lo que sí podés es cancelar un pedido (libera units) o marcar como damaged una unit que se rompió.
¿Cuántos pedidos por mes soporta?
Plan Starter: hasta 500/mes. Pro: hasta 5.000/mes. Enterprise: ilimitado. Internamente Sellix corre sobre SQLite que aguanta tranquilo decenas de miles de movimientos por día — la migración a PostgreSQL está prevista para clientes Enterprise con multi-tenant.
Términos y condiciones
Última actualización: mayo 2026 · vigente para todos los clientes activos.
1. Sobre Sellix
Sellix es un servicio de software como servicio (SaaS) que se conecta al sistema de gestión que ya usa tu empresa (ERP, sistema de stock, sistema de facturación) para detectar fugas operativas y de margen. Sellix nunca actúa como agente fiscal, nunca emite documentos tributarios, y nunca se conecta directamente con DGI · todos los datos vienen del sistema que ya tenés y que vos administrás.
2. Suscripción y facturación
La contratación es mensual (o anual con descuento), por transferencia bancaria. Sin permanencia mínima · podés cancelar avisando con 30 días de anticipación. Los precios mostrados son finales · sin costos ocultos.
3. Garantía 10×
Si en los primeros 30 días Sellix no detecta fugas operativas por al menos 10 veces tu ticket mensual, te devolvemos el setup completo. La garantía aplica a todos los planes y no requiere justificación · solo escribirnos a negocioluchocarbone23@gmail.com.
4. Tu data
Tu data es tuya. Sellix la procesa para correr los detectores y mostrarte hallazgos. No la vendemos, no la compartimos con terceros, no la usamos para entrenar modelos. Si te das de baja, podés exportarla en CSV/Excel y la borramos de nuestros servidores en menos de 7 días.
5. Disponibilidad
Hacemos lo razonable para mantener el servicio disponible 99% del tiempo. No nos responsabilizamos por interrupciones causadas por proveedores de infraestructura (Render, AWS), DGI, sistemas del cliente, o eventos de fuerza mayor. El status del servicio en tiempo real está en /status.
6. Limitación de responsabilidad
Sellix te muestra hallazgos basados en la data que vos cargás o nos conectás. Las decisiones operativas (cambiar precios, dar de baja productos, negociar con proveedores) son siempre tuyas. Nuestra responsabilidad máxima ante cualquier reclamo se limita al monto que pagaste en los últimos 12 meses.
7. Modificaciones
Si cambian estos términos, te avisamos por mail con 30 días de anticipación. Si no estás de acuerdo, podés cancelar la suscripción sin penalidad.
Política de privacidad
Última actualización: mayo 2026.
Qué data guardamos
Para que Sellix funcione, almacenamos: el nombre y email del usuario administrador, datos de la empresa (razón social, RUT), y la data operativa que vos nos importás o conectás (productos, movimientos, ventas, compras, clientes, proveedores). No tocamos credenciales tributarias · esas viven en tu sistema.
Cookies
Solo cookies esenciales para mantener la sesión y guardar tu preferencia de idioma. No usamos cookies de marketing ni tracking de terceros. Sin Google Analytics, sin Facebook Pixel, sin retargeting.
Servidores
Tu data vive en servidores en Uruguay (Render, infraestructura cumple con estándares SOC 2). Los backups automáticos van a un bucket cifrado.
Tus derechos
Podés pedir en cualquier momento: copia de toda tu data en CSV/JSON, corrección de información incorrecta, o eliminación total de tu cuenta. Escribinos a negocioluchocarbone23@gmail.com y respondemos en menos de 72 horas.
Contacto
Para cualquier pregunta sobre privacidad o uso de datos: negocioluchocarbone23@gmail.com
Seguridad de la información
Última actualización: junio 2026.
Cifrado de datos
Toda comunicación entre tu navegador y Sellix viaja por HTTPS (TLS 1.3). Las credenciales de conectores externos (Google Drive, WhatsApp Business) se guardan cifradas con AES-256-GCM · clave derivada del JWT secret del servidor. Nadie, ni el equipo de Sellix, puede leer tus tokens sin acceso al servidor.
Multi-tenant blindado
Cada empresa cliente tiene su propio business_id en todas las queries de la base de datos. Los datos de una empresa jamás cruzan con los de otra. Esto es enforced por linter automatizado en cada deploy.
Privacidad PII y OpenAI
Cuando Sellix usa OpenAI (asesor IA o lector universal v2 cuando un archivo es ambiguo), los nombres de tus clientes, proveedores, RUTs y emails se anonimizan ANTES de enviar el prompt. La IA ve "CLIENT_001" en lugar de "COFAS". Los aliases son únicos por empresa · ningún cliente comparte mapping con otro. Podés ver tu estado actual en privacy-dashboard.html.
Backups
Cada noche a las 03:00 UTC se hace snapshot automático de la base de datos (gzip + SHA256). Retención 30 días por defecto. Los backups quedan en disco del servidor · NUNCA se mandan por mail ni a servicios de terceros.
Reglas duras del producto (enforced por código)
- Cero queries sin business_id (multi-tenant absoluto)
- UYU, USD y unidades jamás se suman en una misma cifra
- "?" en costo = null · nunca inventamos
- PII anonimizada antes de OpenAI
- El dueño aprueba toda acción · la IA nunca ejecuta sola
- Sellix no firma con DGI ni se certifica como software fiscal · solo audita
Reportar vulnerabilidad
Si descubrís un problema de seguridad, escribinos privadamente a negocioluchocarbone23@gmail.com. Respondemos en 48 horas y acreditamos a quien reporte issues legítimos.