Component · ConfirmationSheet · canónico

ConfirmationSheet

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 Swap beben 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 dismissible mediumImpact al confirmar 3 variantes gate 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
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
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
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

  1. 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.
  2. 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.
  3. CTA bloqueada hasta marcarEl botón "Confirmar" arranca disabled; se habilita solo al marcar el checkbox. Sin marca, no hay confirmación posible.
  4. 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
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

Notas de modo

  1. Sheet sobre darkEl sheet usa #16221F — una superficie ligeramente elevada sobre el lienzo #0F1A19, para diferenciarse sin bordes.
  2. Scrim idénticoEl backdrop mantiene rgba(10,31,30,0.5) + blur en ambos modos — el oscurecimiento no depende del tema.
  3. Hero legibleEl monto cripto pasa a #E4ECEB; el hero COP (variante venta) usa primary-300 para contraste AA sobre oscuro.
  4. 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

  1. Resumen inlineLa confirmación muestra "Comisión" de forma compacta. El resto no compite por atención.
  2. Link subrayado"Ver desglose de costos" (primary-500, underline) abre el sub-sheet. Único punto de entrada al detalle.
  3. Bajo demandaComisión + IVA, y nada más. Solo bajo el link — nunca inline por defecto.
  4. 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.
  5. 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.