🔇
BOT PAUSADO — no se procesan comprobantes de WhatsApp
Los mensajes que entren ahora quedan sin procesar (recuperables con Recuperar). Si la pausa no es intencional, reanudalo.
🚨
Revisalas antes de seguir cargando.

Comprobantes pendientes

Datos faltantes que el bot necesita que confirmes. · resolver · Ctrl+↵ resolver + aprender · Esc limpiar

Todo en orden

No hay correcciones pendientes. Si Vision no pudo extraer algo (sin ancla, sin cotización, banco ambiguo) aparecerá acá con sugerencia de la IA.

Dashboard

Volumen y top clientes/bancos.

Cantidad por día (14d)

Monto por día (14d)

Top 5 Clientes

ordenado por cantidad

Sin datos.

Top 5 Bancos

ordenado por cantidad

Sin datos.

Cotización promedio ingreso

ARS por USD · ponderada por monto USD

Cotización promedio egreso

ARS por USD · ponderada por monto USD

🤖 Reporte de salud (IA)

La IA analiza pendientes, alertas y fallidos y te da un resumen breve. Cuesta 1 análisis de tu cuota diaria.

    

Saldos por banco

últimos 30 días · ingresos − egresos
Banco Ingresos Egresos Saldo

Sin datos.

Reglas automáticas

El bot las evalúa antes de escribir en Sheets.

Nueva regla

Aún no creaste reglas.

Comprobantes cargados

Últimos 7 días. Doble-click en una celda para editar inline.

Fecha Tipo Monto Banco Operador Cliente Coti Caja

No hay filas en los últimos 7 días.

Sin resultados para el filtro actual.

Configuración

Editá cualquier dato del bot. Al guardar, se aplica al toque.

Elimina los huecos que quedaron de borrados viejos en las pestañas de Cuenta Corriente. Hace un backup antes; después verificás que quedó bien y lo conservás, o revertís.

Revisá las pestañas de Cuenta Corriente en el sheet. ¿Quedó bien?

Últimas compactaciones

Sin resultados

Estos grupos mandaron comprobantes pero no están en la whitelist. Agregalos y el bot empieza a procesarlos.

Persistentes (sobreviven reinicios)

Sin memos persistentes.

Sesión (se borran al reiniciar)

Sin memos de sesión.

Comandos

Atajos que el bot reconoce en los chats de WhatsApp.

Grupos de operaciones — en los chats donde caen los comprobantes
!Cierre de caja (también: cierre de caja)

Marcador de cierre del día. El bot reacciona ✍️ y lo usa como seed para el próximo !recuperar comprobantes (todo lo posterior se considera del día siguiente).

Chat-bot privado — el chat directo con el bot
!recuperar comprobantes (también: recuperar)

Backfill on-demand. Procesa los comprobantes que entraron mientras el bot estaba caído / desconectado.

Texto libre

Asistente Claude con tools sobre la planilla. Podés pedirle:

  • "Mostrame las últimas 5 de INGRESOS"
  • "Buscá tandas de Cuca con cotización 1430"
  • "Cambiá la fila 127 de EGRESOS, banco a FW FRAN"
  • "Las filas 120 a 125 son de Melo, no Final"

Si afecta más de 1 fila, el bot guarda una propuesta y te pide confirmación.

ok · si · dale · confirmo · hacelo

Confirma la última propuesta de update por lote (atajo sin quote-reply).

no · cancela · cancelar

Cancela la última propuesta abierta.

Quote-reply

Citá un mensaje del bot y respondé — resuelve la pendiente asociada (ej. "¿de quién es FIWIND?").

Reacciones del bot — lo que el bot pone en cada comprobante
Cargado OK
Esperando que confirmes algo
Falló (ver Pendientes → fallidos)
✍️
Cierre de caja registrado
🤖
Mensaje del propio bot (anti-echo)

Alertas

El bot detecta problemas y los lista acá. Pedile a Claude que las revise.

Sin alertas activas

El bot escanea bot.log cada 30s y detecta degradación de Vision, sin créditos, comprobantes fallidos en grupos críticos, etc. Si aparecen, las verás acá con sugerencia de acción.

⚡ Acciones bulk — resolver de a grupo:
Filtrar:

Sync con tu excel

El bot compara cada fila contra tu planilla por fecha+monto+banco. Las que no encuentra quedan como pendientes.

sincronizadas auto · marcadas manual · pendientes

Sync no configurado

Para usar esta feature, completá en config.json el bloque sheet_usuario con el ID de tu Sheet, la pestaña principal y las columnas FECHA/MONTO/BANCO.

⚙️ Configuración del sync
Col Match es la columna que se compara contra el BANCO que escribió el bot (en cajas tipo banco es el banco; en EFECTIVO es el cliente). El sync junta los fingerprints de todos los bloques de todas las cajas.

Todo sincronizado. Las filas del bot ya están en tu excel.

Sin filas para sincronizar.

No hay filas en los últimos 30 días.

Estado Fecha Tipo Monto Banco Cliente Operador Caja

⬇️ Faltantes en el bot

Filas del Excel del operador que NO están en la planilla del bot. Podés importarlas una por una o en bloque.

Defaults para importar (aplicados a todas, override por fila abajo)
Sin resultados

Si dejás cotización vacía, cada fila se importa con pendiente "sin_cotizacion" para completarla a mano. Cliente vacío = "Final".

Fecha (Excel) Tipo Monto Banco Cliente (Excel) Tab Excel
Click "Cargar faltantes" para ver qué filas del Excel no están en el bot.

📚 Memoria de la IA

Ejemplos que la IA aprendió de tus correcciones. Cada vez que resolvés un pendiente con "Aprender", se registra acá y se usa como referencia en próximas sugerencias.

Sin ejemplos aprendidos todavía. Resolvé un pendiente con "Aprender" y aparecerá acá.

Tipo Entrada Salida Contexto Hits Fuente

🧠 Recuerdos

Memoria de largo plazo de la IA. Hechos durables, preferencias y decisiones que la IA recuerda entre sesiones (supera la ventana del chat). La IA propone; vos confirmás. Solo los confirmados se le inyectan como contexto.

Lo que cargás acá entra confirmado directo. No guardes datos que rutean plata (clientes/bancos tienen su propia pantalla).

Sin recuerdos todavía. La IA propondrá algunos a medida que charlen, o cargá uno manual arriba.

Categoría Scope Recuerdo Estado Hits

🗂️ Historial de comprobantes

Cada comprobante (imagen o PDF) que el bot procesó, con su ancla y los datos extraídos. Click en una tarjeta para ver el comprobante completo.

No hay comprobantes en el historial todavía.

Fecha / hora
Monto
Banco
Tipo
Fila movimiento
Archivo original

Ancla


        

📥 Recuperar comprobantes

Elegí un chat, mirá los últimos mensajes con foto/PDF y tildá cuáles cargar al planillón.

📚 Ayuda — Machete

Todo lo que necesitás saber para usar el bot. Las secciones expanden con click. Usá Ctrl+F para buscar en toda la página.

🤖 ¿Qué hace el bot?

Bot de WhatsApp que escucha grupos configurados, levanta los comprobantes (imagen o PDF) que entran, los manda a Claude Vision para extraer monto/banco/fecha, y escribe la fila en una planilla de Google Sheets.

Reacciona si lo registró, si falló, si quedó como pendiente.

Tiene dashboard web en localhost:3001 con saldos, movimientos, palanca, cuenta corriente y más.

💬 Cómo agregar grupos de WhatsApp
  1. Mandá cualquier mensaje al grupo nuevo (cualquier mensaje, no importa).
  2. En bot.log aparece: [CHAT DESCONOCIDO] ID: 12036...@g.us (Nombre del Grupo).
  3. Andá al tab Config (o editá config.json) y agregá en la sección chats:
    "12036...@g.us": "NOMBRE_OPERADOR"
  4. Si el chat es USDT/USD/Cable PURO (sin foto, solo texto), agregalo a chat_meta:
    "12036...@g.us": { "tipo": "usdt" }
  5. Reiniciá el bot. Cambios en config.json requieren reinicio.
🧾 Cómo procesa los comprobantes
  1. Llega un mensaje con foto/PDF a un grupo del whitelist.
  2. El bot busca un ancla en el caption o en los últimos 50 mensajes del chat.
  3. Si no hay ancla → ✖.
  4. Descarga la media (PDF → primera página como PNG).
  5. Manda a Claude Vision: extrae monto, banco, fecha, tipo del comprobante.
  6. Cliente y cotización siempre vienen del ancla (lo que diga la foto se descarta).
  7. Escribe la fila en INGRESOS o EGRESOS según el tipo. ✔.
📌 Ancla: formato y reacciones

Formato típico de ancla:

Cliente: Carlos
🟢 Ingreso
Cotización: 1430
Divisa: ARS
Estado: confirmado

Reacciones del bot:

  • Cargado OK
  • Falló (sin ancla, error de Vision, etc.)
  • Cargado pero quedó pendiente (falta cotización, spread, cliente canónico, etc.)
  • 📌 Ancla válida sin foto adjunta (espera comprobante)
  • Ancla con cliente desconocido
  • ⚠️ Ancla sin cotización y sin default
  • ✍️ Cierre de caja marcador

Tip: el ancla vale para TODOS los comprobantes que vengan después en el chat, hasta que aparezca otro ancla. No hace falta repetirlo.

💱 Venta/Compra USDT con comprobante (foto)

Para que el bot trate un comprobante como operación USDT con spread, el ancla debe tener Cliente: Venta USDT o Cliente: Compra USDT.

  • Venta = entran pesos (ingreso ARS) + sale USDT.
  • Compra = salen pesos (egreso ARS) + entra USDT.

El bot escribe la fila ARS con coti pendiente, y encola un pendiente cotizacion_usdt para que el operador complete el spread desde la web. Al resolver: se calcula cotAjustada y se escribe la fila en CAJA USDT (partida doble).

📝 Venta USDT por texto puro (sin foto)

Cuando no hay comprobante (operación con cliente conocido), el operador puede cargarla solo con texto:

Cliente: venta usdt
🟢
Cotización: 1468
BANCO: FIWIND JUAN
Divisa: usdt
Usdt: 6.252
Ars: $9.178.000

El bot encola un pendiente venta_compra_usdt_texto. El operador confirma desde la web y se cargan las 2 filas (INGRESO ARS + VENTA USDT).

Nota: la coti del ancla (1468) es la al cliente. La coti ajustada (con spread aplicado) es la que va a planilla.

🏦 Chats USDT / USD / Cable puros

Si el chat tiene chat_meta.tipo seteado a "usdt", "usd" o "cable", el bot procesa los mensajes solo con texto (sin foto). Formato:

USDT puro:

Cliente: Melo
🟢 Ingreso
Banco: Trust Maxi
Cotización: 2,2
Monto: 1500 usdt

Cable: agrega Cotización: 0.18 a su favor (o en contra) + Monto: 1500 usd.

USD efectivo: sin banco, sin spread. Solo cliente + USD: monto.

⏳ Pendientes (tipos)

Cuando el bot no puede completar una carga, encola un pendiente que el operador resuelve desde la tab Pendientes.

  • cliente: cliente del ancla no matchea canónico → operador elige o agrega
  • banco_persona: comprobante tiene CBU/Alias desconocido → mapear a cuenta
  • sin_cotizacion: fila ARS sin coti (sin default en chat_meta)
  • cotizacion_usdt: venta/compra USDT — falta completar spread
  • sin_ancla: foto sin ancla detectable
  • comprobante_fallido: Vision no pudo leer (carga manual)
  • venta_compra_usdt_texto: venta USDT por texto puro — confirmar y cargar 2 filas
🚨 Alertas

El banner rojo arriba indica si hay alertas críticas. Click → tab Alertas.

  • error_log: error técnico (Vision falló, Sheets desconectado, etc.)
  • fallidos_seguidos: 3+ comprobantes ✖ seguidos en un chat
  • wa_caido: WhatsApp Web desconectado
  • fix_no_funciono: una correción IA no se aplicó
  • auth_sin_ready: bot autenticado pero no llega a ready
  • grupo_inactivo: chat sin actividad x días
  • cliente_fallback_recurrente: cliente cae a "Final" repetidamente
  • monto_chico: comprobante con monto < umbral (spam/prueba)
  • anomalia_dia_quieto: pasaron horas sin movs
  • anomalia_volumen_alto: hoy hubo 3× más movs que el promedio
  • comprobante_sospechoso: Vision detectó signos de edición
💰 Cierre de caja diario

En el dashboard (home → card "Cotización promedio TT") hay botón "Cierre de caja" que:

  1. Muestra preview de comisiones del día por sub-banco (COPTER MATEO, TP JUAN, etc.) con % editable.
  2. Permite ajustar la coti que se usa para dolarizar.
  3. Checkbox para cerrar la palanca al confirmar.
  4. Al confirmar: escribe N filas de "Comisión bancaria" en EGRESOS + cierra palanca si correspondía.

Idempotente: si lo apretás 2 veces el mismo día, no duplica.

📊 Dashboard Next.js (localhost:3001)

Páginas:

  • / Saldos — cards de las 7 cajas + cot promedio + spread + evolución.
  • /caja Caja Detalle — breakdown por banco/wallet, editor por caja.
  • /movimientos Tabla unificada con filtros (caja, ingreso/egreso, fecha, búsqueda), stats por día.
  • /actividad Conteo de movimientos por día (gráfico de barras), top 20 clientes y bancos.
  • /cuenta-corriente Saldo USD por cliente con desglose por moneda nativa, editar/ajustar saldo.
  • /cargar Form manual para agregar movimiento.
  • /recuperar Re-procesar comprobantes viejos de chats WhatsApp.
  • /simular Calculadora qué-pasaría-si de palanca/spread.
  • /health Estado del bot (uptime, WA, IA, alertas, snapshot).
  • /settings Editor estructurado del config.json.
📥 Recuperar comprobantes

Pantalla para procesar comprobantes que no se cargaron en su momento (bot apagado, error, etc.).

  1. Tab "Recuperar 📥" → elegí chat por nombre.
  2. Opcional: filtrar por fecha específica (date picker).
  3. Vista de mensajes con foto / venta USDT texto + estado (procesado / sin procesar).
  4. Tildá los que querés y "Procesar seleccionados".
  5. Botón "📅 Procesar todos los del día (N)" selecciona todos los del día filtrado de una.

Cap interno: 50 mensajes por batch. Si hay más, repetir.

📂 Sync Excel (comparación con tu planilla)

Sub-tabs:

  • Pendientes en el bot: filas en INGRESOS/EGRESOS del bot que NO están en tu Excel. Marcá "Ya cargada" si las cargaste manual.
  • Faltantes en el bot: filas en tu Excel que NO están en el bot. Importá una por una o en bloque.

El matching es por fecha + monto + banco (fingerprint con año desde el último fix). Los falsos negativos se marcan ✓ a mano.

Filtros: por fecha exacta (date picker) o últimos N días.

🧠 Chat IA

Tab "Chat IA 🤖" — conversación con Claude (Sonnet) con tools del bot. Cuota: 100 llamadas/día.

Tools disponibles:

  • listar_pendientes_abiertos
  • listar_alertas_abiertas
  • listar_filas_recientes
  • obtener_clientes_canonicos / obtener_bancos_canonicos
  • recuperar_comprobantes_chat (cuesta plata por Vision)
  • consultar_actividad (movs por día, top clientes/bancos)
  • proponer_accion (sugerencia con botón "Aplicar")

Slash commands: /ayuda, /resumen, /alertas, /pendientes, /aprendido.

🔄 Snapshot inicial (borrón y cuenta nueva)

Cuando los saldos del histórico se ensucian, podés crear un snapshot inicial con los saldos correctos al día X (fecha_corte). El bot ignora todos los movs anteriores a esa fecha y arranca con los saldos declarados.

Se edita desde el modal "Editar snapshot completo" en la pantalla Caja del dashboard. Soporta las 7 cajas + cuenta corriente por cliente + palanca abierta inicial.

🛠️ Comandos útiles WhatsApp (chat-bot)

En el chat-bot configurado en config.chat_bot_id:

  • !recuperar comprobantes: backfill manual (~300 últimos msgs por chat).
  • !pausar / !despausar: silencia el bot.
  • !cierre de caja: marcador para el próximo backfill (anchor).
⌨️ Atajos del dashboard
  • Ctrl+K (Cmd+K en Mac): abre la búsqueda global en el sidebar — busca clientes, bancos, pendientes y alertas.
  • Botón "Refrescar todo" al pie del sidebar: limpia todos los caches y relee Sheets en vivo. Usar después de editar manualmente la planilla.
  • SSE en tiempo real: las cards se actualizan solas cada vez que cambia algo (mov, edit, pendiente resuelto, etc.). Throttle de 3s para evitar saturar.
❓ Troubleshooting (problemas comunes)
  • Comprobante sin reacción: el chat no está en config.chats (ver bot.log "[CHAT DESCONOCIDO]"), o el bot está pausado, o el mensaje es anterior al arranque del bot (usar Recuperar).
  • ✖ rojo: abrí bot.log con Bloc de notas, buscá la línea con el msgId. Causas típicas: ancla no detectada, foto ilegible, monto no parseable.
  • Sheets no actualiza: verificá que la planilla esté compartida con el email del Service Account. Probá click "Refrescar todo" en el sidebar.
  • "Cuota IA agotada": el bot llegó al límite diario (100/día por default). Esperar a medianoche o resetear desde el chat.
  • WhatsApp pide QR cada vez: sesión corrupta. Borrar carpeta jano_session/ y re-escanear.
  • Bot lento al arrancar: normal, WhatsApp Web tarda ~30-60s en sincronizar. Si tarda más de 4 min, mirar bot.log por errores.
  • Saldo incorrecto: capaz hay fechas mal formateadas (número serial vs DD/MM/YYYY). Probá click "Refrescar todo".

🔍 Por qué no matchea

Comparación entre la fila del bot y la más parecida en tu planilla.

Buscando coincidencias...

✏️ Editar fila completa

Sheets:

Sin resultados
Sin resultados

Los campos vacíos no se modifican. MONTO USD (col J) se recalcula si cambiás monto o cotización.

Rescatar comprobantes

Busca mensajes no procesados en los grupos configurados y los carga ahora.

seleccionada(s)

Editar fila

Editar filas

Tickeá los campos que querés aplicar a todas las seleccionadas.

Verificando sesión…