FARO Connect
Sistema de dirección — de datos dispersos a acciones priorizadas
Caso demo · Distribuidora construcción
Sucursal SJ · Producto Cemento Premium x50kg
Fecha 2026-05-22 · Versión v1.1
01
Datos originales
Lo que la empresa ya tiene en sus Excel y planillas.
El usuario sube los archivos desde una pantalla de carga.
6 archivos: stock, caja, sueldos, ventas, compras, cobranzas.
02
Raw data
Una foto exacta de cada Excel antes de tocarlo. Por si hay que volver.
Cada fila se guarda igualita en una tabla con código único.
Guarda archivo + fila + usuario + fecha.
03
Mapeo
Un diccionario: "cuando este Excel dice X, en FARO se llama Y".
Se configura una vez por fuente y queda guardado.
"Cantidad" → quantity; "Sucursal" → branch_code.
04
Normalización
Decidir que "SJ", "San Juan" y "Suc. SJ" son la misma cosa.
Un catálogo de alias aprende los nombres. Si aparece uno nuevo, pregunta.
"SJ" → BR_SJ_001; "$4.444" → 4444.
05
Validación + confianza
Revisa que el dato sea correcto y le pone una nota de confianza.
Aplica reglas (fechas válidas, importes positivos) y suma un puntaje.
Si duda, pregunta a una persona. Puntaje 98/100.
06
Tablas canónicas
Ordena todo en cajones por tema: uno de stock, uno de caja, uno de ventas...
Guarda los datos limpios en tablas estándar que cruzan entre sí por código.
fact_stock, fact_cash, fact_sales, fact_payroll…
07
Indicadores
Las cuentas de toda la vida: cuánta plata hay, cuánto stock, cuánto se vende.
Aplica 13 fórmulas explícitas y guarda el resultado con fecha y origen.
Brecha caja −$15M; exposición $95M.
08
Umbrales
Cada empresa define sus límites: "$70M de stock ya es demasiado para mí".
Tabla configurable y versionada: queda quién cambió qué y cuándo.
Configurable por empresa, sucursal y producto.
09
Reglas de negocio
Cruza varios indicadores a la vez para ver si hay un problema serio.
Compara indicadores contra umbrales. Si todas las condiciones se cumplen, dispara una tensión.
SI stock alto Y ventas caen Y caja negativa → alerta.
10
Tensiones
El problema real combina varias alarmas. No son 5 problemas, es 1 crisis.
Agrupa las reglas activadas en una tensión principal y muestra las relacionadas.
5 reglas activas → 1 tensión principal + 4 secundarias.
11
Scoring
Como una nota del 1 al 100 para saber qué tan urgente es el problema.
Pondera impacto 30% + urgencia 25% + riesgo financiero 25% + operativo 10% + confianza 10%.
Severidad 90.15/100 → prioridad CRÍTICA.
12
Acción + tarea
Pasa de "tenés un problema" a "hacé esto, vos, en 48 horas".
Busca acciones del catálogo, las prioriza, asigna responsable y mide a los 7 días.
Acción + responsable + plazo 48h + evidencia.
1. Lo que la empresa entrega 6 archivos
El director envía sus Excel mensuales:
stock_sj_mayo.xlsxcuánto cemento hay
caja_diaria_sj.xlsxplata disponible
sueldos_mayo.xlsxqué se debe pagar
ventas_sj_14dias.xlsxcuánto se vendió
compras_pendientes.xlsxqué hay que pagar
cobranzas_vencidas.xlsxquién no pagó
Cada planilla con sus nombres, formatos y errores. Imposible ver el cuadro completo a ojo.
2. FARO Connect procesa 12 etapas
Ordena y unifica "SJ" pasa a ser BR_SJ_001. "$4.444" pasa a ser 4444. Todos los Excel hablan el mismo idioma.
Hace cuentas básicas Stock valorizado: $79.992.000. Caja proyectada en 7 días: −$15.000.000. Margen actual: 13% (objetivo 20%).
Cruza indicadores y detecta el problema 5 condiciones se cumplen a la vez: hay mucho stock, las ventas caen, la caja no alcanza, el margen está bajo, y las cobranzas vencidas son suficientes para tapar el hueco.
Le pone puntaje al problema Combina impacto, urgencia y riesgo financiero. Resultado: 90.15 / 100. Eso es prioridad CRÍTICA.
3. El director ve esto
Alerta crítica · 90.15
Sobrestock con presión de caja
San Juan · Cemento Premium x50kg
Tenés mucho stock parado$94.992.000 Te va a faltar caja en 7 días−$15.000.000 Vendiste menos que el período anterior−18% Tu margen está bajo el objetivo13% / 20% Pero tenés cobranzas vencidas que cobrar$27.000.000
Tarea · 48h · Finanzas + Compras + Comercial
  1. Cobrar $15M para cubrir la brecha de caja.
  2. Pausar nuevas compras de cemento.
  3. Revisar la orden pendiente de $15M.
  4. Lanzar venta dirigida cuidando el margen.
FARO Connect
El caminito de un dato — una bolsa de cemento atravesando las 12 etapas
Página 2 / 2 · Trazabilidad del caso
Cada número en la alerta es clickeable hasta esta fila.
Punto de partida
Una fila del Excel
Fecha 22/05/2026 Sucursal SJ Producto Cemento LN 50 Cantidad 18000 Unidad bolsa Costo $4.444 Proveedor Premium
01
Datos originales
Entra stock_sj_mayo.xlsx (archivo subido por admin)
Sale Fuente reconocida: SRC_STOCK_EXCEL
Cómo lo hacedetectar_fuente(filename): empieza con "stock_"SRC_STOCK_EXCEL empieza con "caja_"SRC_CASH_EXCEL empieza con "ventas_"SRC_SALES_EXCEL // + 3 fuentes más en el catálogo
El sistema identifica el tipo de archivo y lo asocia a un origen conocido.
02
Raw data
Entra Fila 1 del Excel (sin tocar)
Sale RAW_000001 + batch + hash + timestamp
Cómo lo haceraw_record = { batch_code: BATCH_001 row_number: 1 raw_payload: { ... JSON tal cual ... } row_hash: sha256(payload) created_at: 2026-05-22T09:30:00 }
Guarda copia exacta en una tabla. Si después hay duda, se puede volver al original.
03
Mapeo
Entra "Fecha", "Sucursal", "Cantidad", "Costo Unitario"
Sale snapshot_date, branch_ext, quantity, unit_cost
Cómo lo hacemapping[SRC_STOCK_EXCEL]: "Fecha" → snapshot_date (parse_date) "Sucursal" → branch_ext (uppercase) "Cantidad" → quantity (parse_int) "Costo Unitario" → unit_cost (parse_currency)
Los nombres del Excel se traducen al idioma estándar de FARO.
04
Normalización
Entra "SJ", "Cemento LN 50", "$4.444", "bolsa", "Prem"
Sale BR_SJ_001, PRD_CEM_LN_50KG, 4444, UNIT_BAG, SUP_PREMIUM_001
Cómo lo hacealias_map = { "SJ", "San Juan", "Suc SJ"BR_SJ_001 "Cemento LN 50"PRD_CEM_LN_50KG "Prem", "Premium"SUP_PREMIUM_001 } parse_currency_ars("$4.444") → 4444
Cada texto se reemplaza por su código único. Los importes pierden el "$" y los puntos.
05
Validación + confianza
Entra Registro normalizado completo
Sale + confidence_score: 98.25 (CONF_VERIFIED)
Cómo lo haceconfidence_score = 0.50 × 100 // exact_match (todo matchea) + 0.25 × 100 // required_fields completos + 0.15 × 95 // format_validity + 0.10 × 90 // source_reliability // = 98.25 → CONF_VERIFIED
Revisa fecha, cantidad, importe, catálogos. Calcula confianza ponderada y aprueba el registro.
06
Tablas canónicas
Entra Registro validado de stock
Sale Fila en fact_stock: quantity=18000, unit_cost=4444, stock_value=79.992.000
Cómo lo haceINSERT INTO fact_stock VALUES ( branch: BR_SJ_001 product: PRD_CEM_LN_50KG date: 2026-05-22 quantity: 18000 unit_cost: 4444 value: 79992000 // qty × cost )
Se archiva en la tabla de hechos de stock. Ya cruza con dim_branch, dim_product, dim_supplier.
07
Indicadores
Entra fact_stock + fact_purchase_orders + fact_cash + fact_sales
Sale IND_STOCK_VALUE = 79.992.000
IND_STOCK_EXPOSURE = 94.992.000
IND_CASH_GAP_7D = −15.000.000
Cómo lo haceIND_STOCK_VALUE = qty × cost = 79.992.000 IND_STOCK_EXPOSURE = stock + compras_pend = 94.992.000 IND_CASH_GAP_7D = caja − sueldos − pagos = −15.000.000
Las 13 fórmulas calculan todo: stock valorizado, exposición, brecha de caja, margen, etc.
08
Umbrales
Entra IND_STOCK_EXPOSURE = 94.992.000
Sale 94.992.000 > 70.000.000 → ✓ supera límite
Cómo lo hacethresholds[COM_DEMO_CONSTR.] = { STOCK_EXPOSURE_HIGH: 70.000.000 CASH_GAP_NEGATIVE: 0 SALES_DROP_14D: −10 } if 94.992.000 > 70.000.000 → SUPERA ✓
El sistema compara cada indicador contra el límite definido por la empresa.
09
Reglas de negocio
Entra 4 indicadores comparados vs sus umbrales
Sale RULE_OVERSTOCK_CASH_PRESSURE → activada (4/4 condiciones ✓)
Cómo lo haceRULE_OVERSTOCK_CASH_PRESSURE = { STOCK_EXPOSURE > THR_HIGH ✓ SALES_VAR_14D < THR_DROP ✓ CASH_GAP_7D < 0 ✓ PENDING_PURCH > 0 ✓ } if all ✓ → fire(TEN_OVERSTOCK_CASH_PRESSURE)
La regla pide 4 condiciones simultáneas. Las 4 se cumplen → dispara la tensión.
10
Tensiones
Entra 5 reglas activadas simultáneamente
Sale TEN_OVERSTOCK_CASH_PRESSURE (principal) + 4 secundarias relacionadas
Cómo lo haceactivas = [RULE_OVERSTOCK, RULE_PURCHASE, RULE_MARGIN, RULE_PAYROLL, RULE_COLLECTION] principal = max(activas, key: indics × áreas) → TEN_OVERSTOCK_CASH_PRESSURE secundarias = otras que comparten indicador
No se muestran 5 alertas inconexas. Se consolidan en una tensión principal.
11
Scoring
Entra Impacto 92, Urgencia 90, Riesgo fin. 95, Op. 75, Confianza 88
Sale severity_score = 90.15 → PRI_CRITICAL
Cómo lo haceseverity = 0.30×92 = 27.60 // impacto + 0.25×90 = 22.50 // urgencia + 0.25×95 = 23.75 // riesgo fin + 0.10×75 = 7.50 // op + 0.10×88 = 8.80 // confianza = 90.15 → PRI_CRITICAL
Aplica la fórmula ponderada. 90.15 supera el umbral 80 → prioridad crítica.
12
Acción + tarea
Entra Tensión crítica + catálogo de 8 acciones
Sale TASK_20260522_0001
5 acciones · 48h · Finanzas + Compras + Comercial
Cómo lo haceacciones = catalogo[TEN_OVERSTOCK_CASH_PRESSURE] top_5 = sorted(acciones, by: action_score)[:5] task = create( acciones: top_5, areas: [FINANZAS, COMPRAS, COMERCIAL], due_at: now + 48h, review: now + 7d )
Selecciona las acciones que mejor matchean. Asigna responsables, plazo y agenda revisión.
Resultado
Lo que el director ve
Sobrestock con presión de caja · San Juan · Cemento Premium x50kg
Severidad 90.15/100 · Prioridad CRÍTICA · Tarea TASK_20260522_0001 · Plazo 48h
Alerta