El problema que ataca el módulo
El usuario fintech vive disperso entre apps. Banking en PortfolioMap los une en una vista:
- Una para banking diario, otra para FX, otra para tarjetas virtuales, otra para SEPA Instant y SWIFT.
- Cuenta multi-divisa, tarjeta virtual con tokenization y SWIFT con SCA pendiente conviven en la misma pantalla.
- Mismo design system, mismo audit trail, mismo flujo de excepciones.
Proceso y validación
- Hipótesis inicial: "una vista plana de todas las cuentas". Descartada tras 2 iteraciones — con 6+ cuentas multi-divisa el dashboard se rompía.
- Versión actual: agrupa por kind (current, savings, brokerage, pension, crypto) con badges de divisa nativa y columna fija de equivalente EUR.
- Validación continua con time-to-balance (segundos hasta encontrar un saldo) + conversaciones con freelance multi-país, founder con 3 jurisdicciones y expat USD + EUR + GBP.
- Cada release pasa por un check de SCA en flujos críticos — un fallo aquí no es UI, es regulatorio.
Decisiones de modelo de datos
- Cuenta: saldo nativo + equivalente EUR + available + pending out + rate/yield + BIC/IBAN cuando aplica.
- Tarjeta: network, kind, límite mensual, gasto mes en curso, freeze, contactless, online, withdraw, % rewards, tokenization (Apple/Google Pay).
- Transacción: 15 categorías unificadas con Lifestyle, status (posted/pending/declined), country code y notas para reconciliación con el ledger.
Decisiones de UI
- Tabla canónica con 3 modos (list, cards, chart) que comparten paginación.
- Modales canónicos para "Manage card", "Send transfer" o "Convert FX": bottom-sheet con drag handle en móvil, centered card en desktop, focus trap, ESC, scroll-lock, safe-area-inset-bottom.
- Flujos sensibles (transfer SWIFT, convert FX) confirman con el threshold de firma del usuario antes de ejecutar.
Cómo encaja con el resto del producto
- Las transacciones del ledger aparecen en el activity feed cross-module del dashboard.
- Goals (Lifestyle) enlaza a cuentas reales de Banking.
- FX programados (T+1 SEPA Instant, T+2 SWIFT) aparecen como eventos en el calendar.
- La reconciliación cross-cuenta es un job de Operations.
.webp)
.webp)
.webp)