Problemas comunes y solución de incidencias
Síntomas, causas y soluciones de problemas que podemos verificar en el producto.
Si tu incidencia no aparece aquí, escribe a support@rowie.io con capturas y, si es posible, el ID de la transacción (o de la sesión, o el número de factura).
"Setup required" en Banking o Tap to Pay
La pantalla Account del POS móvil muestra una insignia Setup required en la fila Banking, y Tap to Pay / Terminal Readers permanecen deshabilitados hasta que Stripe Connect haya completado el onboarding y los cobros estén habilitados.
- Portal de vendedor → Banking (barra lateral → grupo FINANCE) → comprueba el estado.
- Si el onboarding no está completo, sigue el formulario alojado por Stripe: te indicará exactamente qué falta (DNI, datos bancarios, información del negocio).
- La primera verificación puede tardar 1–2 días para Stripe.
La comprobación de "listo para cobrar" en el código de la app es connectStatus.hasConnectedAccount && connectStatus.chargesEnabled: ambas tienen que ser true.
"Cannot delete location — it still has …"
El portal bloquea la desactivación de una ubicación si tiene registros dependientes. El mensaje exacto detalla qué lo bloquea. Las comprobaciones (rowie-api/src/routes/locations.ts):
- Open or in-progress table sessions: liquídalas o cancélalas primero.
- Menus, floor plans, active bookings, booking pages: reasígnalos a otra ubicación o bórralos primero.
- Only location in the org: no puedes eliminar tu última ubicación.
Mueve las dependencias y vuelve a intentarlo.
"Cannot delete menu with open sessions or tabs"
Una carta (catalog) no se puede eliminar mientras tenga sesiones o tabs abiertos. Liquida o cancela esos elementos en la página Tables y reintenta el borrado. El mismo patrón aplica a:
- Floor plans / tables con sesiones activas.
- Events / ticket tiers con entradas vendidas.
- Vendor subscription plans con suscriptores activos (cancélalos o migra primero).
- Tip pools que no estén en draft (solo puedes borrarlos en draft).
"Authentication failed" o pantalla bloqueada tras inactividad
Los tokens de autenticación expiran a los 15 minutos; tanto la app móvil como el portal de vendedor se renuevan automáticamente al recibir un 401. Si el refresh falla (por ejemplo, el refresh token también ha expirado tras 7 días, o iniciaste sesión en otro dispositivo y te ha echado), verás un toast "Authentication failed" y volverás a la pantalla de inicio de sesión.
- Solo en móvil: al iniciar sesión en un segundo dispositivo, el primero recibe SESSION_KICKED y se cierra automáticamente. Es intencional (protección frente a robo).
- El portal de vendedor no exige sesión única: puedes mantener varias pestañas abiertas.
Si te quedas bloqueado en una pantalla: cierra sesión y vuelve a entrar.
Cerrar un tab ha fallado / "Payment failed"
Cuando se cobra una tarjeta guardada en modo off-session para cerrar un tab y Stripe la rechaza, la sesión vuelve a open para que puedas reintentar. Causas habituales:
- La tarjeta requiere autenticación nueva / 3DS en cada cargo.
- Regla antifraude del emisor sobre cargos off-session.
- Fondos insuficientes.
Limitación conocida: las claves de idempotencia de Stripe para cerrar un tab son estables durante 24 horas. Si el primer intento se ha rechazado, reintentar con la misma tarjeta de inmediato devuelve el mismo intento rechazado. Solución: cobra con un Tap to Pay nuevo en lugar de cerrar con la tarjeta guardada, o pide al cliente que guarde una tarjeta nueva.
"Payment setup required" en el checkout
El POS móvil muestra esto cuando intentas cobrar pero Stripe Connect no está totalmente configurado. La solución es la misma que para la insignia "Setup required" anterior: completar el onboarding de Banking.
Recibos: envío y reenvío
Los recibos de Tap to Pay se deben enviar explícitamente: Stripe no los entrega automáticamente para las transacciones card_present.
- En la pantalla Payment Result justo después del cobro, introduce el email del cliente y toca Send receipt.
- Más tarde, abre cualquier transacción en History → Send receipt.
Si no llegan los recibos, revisa primero la carpeta de spam y luego comprueba que el email en la transacción sea correcto.
Los datos en tiempo real parecen obsoletos
La app usa Socket.IO para enviar actualizaciones (orders, sessions, tabs, menus, bookings, invoices, pay runs). TanStack Query está configurado con stale time infinito y sin polling: las invalidaciones llegan por eventos de socket.
Si algo parece obsoleto:
- Haz pull-to-refresh en la pantalla (móvil) o recarga la página (portal de vendedor).
- Cierra y vuelve a iniciar sesión para forzar una conexión de socket nueva.
- Comprueba que la URL de la API es accesible desde tu dispositivo.
El socket del portal se reconecta automáticamente con tokens nuevos (dynamic auth callback). El cliente móvil intenta hasta 10 reconexiones con backoff entre 1 y 5 s.
Rate-limited (HTTP 429) en páginas públicas de menu / table / booking
La API limita la creación pública de preorders, sessions y bookings por IP + session ID para mitigar el fraude (añadido tras el incidente de abril de 2026). El tráfico normal de clientes no lo activa. Si un test de carga o un bucle accidental lo dispara, espera a que se cierre la ventana (un minuto) y reintenta.
El botón Tap to Pay aparece en gris
- Entitlement de Apple Tap to Pay: la primera vez con una cuenta nueva de Stripe Connect, Apple tarda 1–2 días en habilitar el dispositivo.
- Banking no activo: revisa "Setup required" arriba.
- Dispositivo incorrecto: Tap to Pay necesita un iPhone XS o más reciente con iOS 16.4+ y código de bloqueo, o un Android con NFC (SDK 26+).
Cuenta marcada para revisión
Cuando se disparan las heurísticas de fraude (tasa de cargos bloqueados o fallidos por encima de los umbrales), el review_status de la cuenta pasa a needs_review y los payouts automáticos se pausan. Contacta con soporte: una vez que el equipo de Rowie apruebe la cuenta desde la cola de admin, los payouts se reanudan. El uso del producto en modo solo lectura sigue funcionando.