El bottom sheet que confirma toda operación financiera en MiCapi. Es un componente reutilizable con tres variantes —compra, venta, swap— que comparten estructura, comportamiento y reglas. Esta página es la fuente de verdad; documenta el componente aislado.
Los patterns Buy Crypto, Bank Withdrawal y Swapbeben de este componente: muestran el flujo completo end-to-end; esta página documenta el sheet reutilizable que aparece en el paso de confirmación de cada uno. Tasa canónica del DS: $458.320.000 / BTC.
Persistente · no dismissiblemediumImpact al confirmar3 variantesgate de monto alto
Tres variantes
Misma anatomía (handle · header · hero · filas · nota legal · footer), distinto contenido y semántica. El hero cambia según lo que le importa al usuario en cada operación.
VAR 1Compra · primaria
9:41
Comprar
Confirmar compra
0,00109 BTC
≈ $500.000 COP
Pagas$505.950 COP
Tasa$458.320.000 / BTC
Comisión$5.000 + $950 IVA
Método de pagoBre-B
Entrega estimadaHasta 24h hábiles
Ver desglose de costos
Al confirmar, el precio queda fijado. Si la compra no se ejecuta en 24 horas hábiles, tu dinero será devuelto sin descuentos a tu cuenta de origen.
VAR 2Venta · secundaria
9:41
Vender
Confirmar venta
$1.508.562 COP
Vendes 0,00350 BTC
Tasa$458.320.000 / BTC
Comisión (5%)$80.200 + $15.238 IVA
Cuenta destinoBancolombia · ****4521
Entrega estimadaHasta 1 día hábil
Al confirmar, el precio queda fijado. El COP se enviará a tu cuenta bancaria registrada.
VAR 3Swap · terciaria
9:41
Intercambiar
Confirmar intercambio
₿
0,00350
BTC
0,0508
ETH
Tasa1 BTC = 14,52 ETH
Comisión (1%)0,0000350 BTC + IVA
Recibes0,0508 ETH
Al confirmar, la tasa queda fijada. El intercambio se ejecuta de forma inmediata sobre tu portafolio.
Especificación por variante
Lo que cambia entre variantes. El comportamiento (persistente, haptic) es idéntico; el contenido y los gates difieren.
Aspecto
Compra
Venta
Swap
Header
"Confirmar compra"
"Confirmar venta"
"Confirmar intercambio"
Hero
Cripto que recibe 0,00109 BTC
COP al banco $1.508.562
Par de activos BTC → ETH
Sub-hero
≈ $500.000 COP
Vendes 0,00350 BTC
—
Comisión
1% + IVA
5% + IVA
1% + IVA
Involucra COP
Sí · método de pago
Sí · cuenta bancaria
No
Gate de monto alto
Sí · > $2.000.000 COP
Sí · > $10.000.000 COP
No
CTA primaria
"Confirmar compra"
"Confirmar venta"
"Confirmar intercambio"
Reglas transversales
Aplican a las tres variantes sin excepción.
Persistente
isDismissible: false + enableDrag: false + PopScope(canPop: false). No se cierra con tap en el backdrop, ni swipe down, ni back de Android. Solo con los botones explícitos "Confirmar" o "Cancelar". Una operación financiera no se cancela por accidente.
Haptic al confirmar
La CTA primaria dispara HapticFeedback.mediumImpact() — es una acción financiera irreversible. El retiro a wallet externa usa heavyImpact(). Cancelar no vibra. Cf. foundations-motion §4.
Gate de monto alto
Sobre el umbral (compra > $2.000.000, retiro > $10.000.000) aparece un checkbox de confirmación explícita con el monto literal; la CTA queda deshabilitada hasta marcarlo. Swap no tiene gate — no involucra COP.
Tasa canónica
En todo el DS la tasa de referencia es $458.320.000 / BTC. Cualquier valor distinto en mocks viejos está obsoleto y debe alinearse a este.
Gate de monto alto · ejemplo en variante compra
9:41
Comprar
Confirmar compra
0,00545 BTC
≈ $2.500.000 COP
Pagas$2.529.750 COP
Tasa$458.320.000 / BTC
Comisión$25.000 + $4.750 IVA
Método de pagoBre-B
Confirmo que quiero comprar 0,00545 BTC por $2.529.750 COP.
Cómo funciona el gate
Umbral por operaciónCompra dispara el gate sobre $2.000.000 COP; venta sobre $10.000.000 COP (los retiros típicos en Colombia son montos mayores). Swap no tiene gate.
Checkbox con monto literalEl texto repite cripto + COP exactos: "comprar 0,00545 BTC por $2.529.750". Frase plástica anti-error — el usuario afirma explícitamente lo que va a pasar.
CTA bloqueada hasta marcarEl botón "Confirmar" arranca disabled; se habilita solo al marcar el checkbox. Sin marca, no hay confirmación posible.
Fondo warning, no errorColor warning-bg + borde ámbar. Es una doble verificación, no una alarma — el tono es de cuidado, no de problema.
Cuatro estados · aplicados a la variante compra
El mismo sheet evoluciona: default (esperando confirmación) → processing (ejecutando) → success / error. El header y el hero dan continuidad entre estados.
01 · Default
9:41
Comprar
Confirmar compra
0,00109 BTC
≈ $500.000 COP
Pagas$505.950 COP
Comisión$5.000 + $950 IVA
MétodoBre-B
02 · Processing
9:41
Comprar
Procesando tu compra…
Estamos confirmando la operación. No cierres la app.
Recibes0,00109 BTC
Pagas$505.950 COP
03 · Success
9:41
Comprar
Compra completada
0,00109 BTC
≈ $500.000 COP
Añadido a tu portafolio · ref. MCP-2026-05-001
04 · Error
9:41
Comprar
No pudimos completar tu compra
No recibimos tu pago en el plazo. Si ya lo enviaste, puede tardar unos minutos.
Tu dinero no fue debitado
Light y dark · variante compra
LIGHTModo claro
9:41
Comprar
Confirmar compra
0,00109 BTC
≈ $500.000 COP
Pagas$505.950 COP
Tasa$458.320.000 / BTC
Comisión$5.000 + $950 IVA
Método de pagoBre-B
Al confirmar, el precio queda fijado. Si no se ejecuta en 24h hábiles, tu dinero será devuelto sin descuentos.
DARKModo oscuro
9:41
Comprar
Confirmar compra
0,00109 BTC
≈ $500.000 COP
Pagas$505.950 COP
Tasa$458.320.000 / BTC
Comisión$5.000 + $950 IVA
Método de pagoBre-B
Al confirmar, el precio queda fijado. Si no se ejecuta en 24h hábiles, tu dinero será devuelto sin descuentos.
Notas de modo
Sheet sobre darkEl sheet usa #16221F — una superficie ligeramente elevada sobre el lienzo #0F1A19, para diferenciarse sin bordes.
Scrim idénticoEl backdrop mantiene rgba(10,31,30,0.5) + blur en ambos modos — el oscurecimiento no depende del tema.
Hero legibleEl monto cripto pasa a #E4ECEB; el hero COP (variante venta) usa primary-300 para contraste AA sobre oscuro.
CTA verde constanteprimary-500 en ambos modos — único color de acción del DS.
A10 · Desglose de costos (bajo el link)
El sheet de confirmación muestra la comisión de forma resumida y un link subrayado "Ver desglose de costos". El desglose —comisión + IVA— no se muestra inline por defecto: aparece en un sub-sheet solo al tocar el link, para no cargar la confirmación.
⚠️ Corregido el 2026-09-14. Esta maqueta pintaba dos filas más —«Spread» y «Costo efectivo total», con cifras— que el addendum de 00-DECISIONES-CERRADAS §1.14 del vault (William, 2026-07-20) había retirado por engañosas: el spread va horneado en la tasa y para el Usuario es una tasa menos competitiva, no un cargo; y un total que sumara comisión + IVA excluiría el spread, que sí es costo real. El código ya lo impone (app/test/widget/cost_breakdown_test.dart), así que quien copiara esta maqueta chocaba con el centinela.
A10Sub-sheet abierto · compra
9:41
Comprar
Desglose de costos
Comisión MiCapi (1%)$5.000
IVA (19%)$950
Cómo funciona
Resumen inlineLa confirmación muestra "Comisión" de forma compacta. El resto no compite por atención.
Link subrayado"Ver desglose de costos" (primary-500, underline) abre el sub-sheet. Único punto de entrada al detalle.
Bajo demandaComisión + IVA, y nada más. Solo bajo el link — nunca inline por defecto.
El spread NO se itemizaVa horneado en la tasa (rate_cop). Para el Usuario es una tasa menos competitiva, no una tarifa aparte; itemizarlo lo convertiría en «cargo». Dónde sí se revela su existencia: el sheet «Sobre los precios», firmado por la Oficial de Cumplimiento.
Tampoco va un totalUn «Costo efectivo total» que sumara comisión + IVA excluiría el spread —que sí es costo real— y engañaría. Lo vinculante que el Usuario sí ve antes de confirmar es cuánto paga y cuánto recibe.