En Guangzhou el equipo convierte USDT a yuanes para pagarle al proveedor, y en Caracas
se fondea la operación de China. Hoy eso se anota como gasto, porque no hay otra casilla: y el
pie de gastos termina contando como consumo plata que nunca se consumió. Swap lo anota como lo
que es —sale de una cuenta, entra en otra— en la misma pantalla de siempre.
Tipos de movimiento
2 → 3
Por swap
1 pantalla · 1 Guardar
Pantallas nuevas
0
Pie de gastos
no se mueve
9:41
Nuevomovimiento
GastoIngresoSwap
De
Mogos Logistics
Binance USDTAlipay CNYICBC CNY
A
Mogos Logistics
Binance USDTAlipay CNYICBC CNY
Sale
2.000,00USDT
Tasa7,12 CNY por 1 USDT
Entra
14.240,00CNY
Traspaso interno · no toca el pie de gastos.
Nota opcional
Pago proveedor Yiwu
Guardar
01El swap disfrazado de gasto
el problema
Caja ya tiene dos casillas: Gasto e Ingreso. Un swap no es ninguna de las dos, así que
hoy entra por la que más se le parece. Cada conversión de USDT a yuanes y cada fondeo de Caracas a China
aterriza como gasto, y a fin de mes el pie de Finanzas cuenta dos veces la misma plata: una cuando salió
de Binance y otra cuando de verdad se le pagó al proveedor.
Hoy · sin Swap
Dos registros sueltos, o uno mentiroso.
El operador convierte 2.000 USDT a yuanes en Alipay.
No hay dónde anotarlo: lo mete como gasto desde Binance.
Cuando le paga al proveedor con esos yuanes, anota otro gasto.
Finanzas ve dos salidas por la misma plata y no sabe cuál es real.
Si además fondearon a China desde Caracas, el ingreso del otro lado nunca se anota: la
cuenta de Alipay aparece con plata que no vino de ningún lado.
Registros
2 sueltos
Pie de gastos
inflado
Par visible
no
Con Swap
Un movimiento con dos extremos.
El operador toca Swap en el mismo toggle de siempre.
Elige de dónde sale y a dónde entra: empresa y cuenta, las dos veces.
Escribe lo que sale; lo que entra ya viene calculado con la tasa del día.
Un solo Guardar. Si las empresas difieren, el par queda vinculado y visible.
El pie de gastos no se mueve: un traspaso no es consumo.
Registros
1 gesto
Pie de gastos
intacto
Par visible
sí
La regla de fondo
Un swap no es P&L. Mover plata entre dos cuentas no la gasta ni la gana; solo cambia dónde
está. Si la tasa no cierra —el banco dio un poco menos de lo esperado—, esa diferencia es
diferencia de cambio, no un gasto. Es la única cifra que un swap puede aportarle al resultado, y
tiene su propio nombre.
02El tercer tipo
el control
El toggle no cambia de forma: sigue siendo el mismo control segmentado, con el mismo fondo
--paper y los mismos 44 px de alto. Pasa de dos columnas a tres. Lo que sí es nuevo es
cómo se ve el tercero seleccionado, porque la regla de color del control es estricta y no se toca.
GastoIngresoSwap
GastoPastilla blanca con sombra y punto --rojo. Tinta --rojo-deep. Como hoy.
GastoIngresoSwap
IngresoFondo --lima-soft, borde --lima-deep, punto --lima-deep. Tinta --success-ink. Como hoy.
GastoIngresoSwap
Swap · nuevoFondo --celeste-soft, borde --celeste-deep, tinta --celeste-ink. Y el mark no es un punto: es una flecha de doble vía.
Por qué una flecha y no un punto
Gasto e Ingreso son direcciones de la plata, y por eso llevan un punto con color de signo: rojo
sale, lima entra. Un swap no tiene dirección —tiene dos extremos—, así que su mark es una flecha
de doble vía. El estado no queda cifrado solo en el matiz: cambia también la forma, que es lo que hace
que el control se lea igual de bien en una pantalla al sol de Guangzhou.
rojo #C9313C · solo el punto de Gastolima-deep #A7C95A · solo el punto de Ingresoceleste-soft #E4F5FB · fondo del Swapceleste-ink #26708C · tinta del Swap · 4,97 : 1
Ninguno de los tres es un relleno de color de marca detrás de texto blanco. Blanco sobre
celeste o sobre lima da 1,3 : 1 y está prohibido en el control real; el tercero respeta la
misma regla que los otros dos.
03La pantalla: anatomía
nueve marcas
Es la misma pantalla Nuevo movimiento. No hay asistente por pasos, no hay pantalla nueva
y no hay segundo Guardar. Lo que cambia al elegir Swap es el cuerpo del formulario: donde en un gasto va
una cuenta, acá van dos.
9:41
Nuevomovimiento
01GastoIngresoSwap
02
De
03Mogos Logistics
Binance USDTAlipay CNYICBC CNY
A
Mogos Logistics
04
Binance USDTAlipay CNYICBC CNY
05
Sale
2.000,00USDT
06Tasa7,12 CNY por 1 USDT
07
Entra
14.240,00CNY
08Traspaso interno · no toca el pie de gastos.
Nota opcional
Pago proveedor Yiwu
09Guardar
Tres estados, no un menú
El mismo control segmentado de siempre, con una columna más. Swap se distingue por tono
y por forma —celeste con flecha de doble vía—, nunca por un relleno de marca detrás de
texto blanco. El resto de la pantalla se reordena debajo; el encabezado no se mueve.
«De» y «A» son un solo objeto
Una tarjeta partida por un hairline, con la flecha sobre la costura. No son dos formularios: es
un movimiento leído de arriba abajo. En un teléfono eso importa más que en una pantalla grande —
no hay dónde poner dos columnas sin que el pulgar se pierda.
La empresa filtra las cuentas
Igual que en un gasto: Company no viaja en el payload, acota los chips de
abajo por su financialEntity. Elegir Mogos Logistics arriba deja ver Binance,
Alipay e ICBC; elegir Mogos C.A. deja ver Caja VE, Bancamiga y Zelle.
Cuenta real, nunca canal
Un chip por MoneyAccount —Binance USDT, Alipay CNY—, nunca
«transferencia» ni «efectivo»: es lo que le deja a Finanzas cuadrar contra el banco. Elegir el
chip fija la moneda del monto, y por eso el rótulo al lado de la cifra es un espejo y no un
control.
«Sale» es el objeto de la pantalla
Neue Haas 900 con cifras tabulares, como el monto de un gasto. Es el único número que el operador
escribe en el camino feliz: lo lee de la app por la que acaba de mandar la plata.
La tasa es sugerencia, no ley
El mismo chip con lápiz que ya existe. Llega con la tasa del día y el operador la corrige si la
suya fue otra. Se congela con el registro —la que él vio, no la que exista mañana— y nunca
bloquea Guardar.
«Entra» viene calculado, y se puede corregir
Llega precargado con sale × tasa. Si el banco dio otra cosa, el operador escribe lo
que de verdad llegó y aparece una línea que nombra la diferencia. Es diferencia de cambio,
no un gasto, y así se dice.
Una línea dice a dónde va esto en el libro
Antes de guardar, en un renglón: si es la misma empresa, traspaso interno que no toca el
pie de gastos; si son dos empresas, de cuál sale y a cuál entra, y que tampoco suma al pie.
Nadie tiene que saberse la regla de memoria.
Un solo Guardar
Un gesto, aunque por dentro un swap entre empresas escriba dos filas. La app no le pide al
operador que anote dos veces lo que para él fue un solo movimiento.
Marca 07 · cuando la tasa no cierra
El operador mandó 2.000 USDT esperando 14.240,00 CNY y Alipay acreditó 14.221,50. Corrige
Entra y la pantalla dice la diferencia en vez de esconderla:
Sale
2.000,00USDT
Tasa7,12 CNY por 1 USDT
Entra
14.221,50CNY
esperado 14.240,00·diferencia −18,50 CNYdiferencia de cambio
Traspaso interno · no toca el pie de gastos.
La diferencia no bloquea el guardado y no se anota como gasto. Es el único
aporte que un swap puede hacerle al resultado del mes, y va con su propio nombre.
Nota de implementación
Los chips de cuenta están dibujados a 36 px porque las maquetas son dibujos a escala. En la
app real el área de toque es ≥ 44 px —el piso de la casa, y lo que
caja-chip.tsx ya hace hoy con los chips de empresa: mismo rótulo de 11 px, mismo
relleno estrecho, altura al piso.
04Dos casos, una pantalla
misma empresa · dos empresas
La pantalla es idéntica en los dos. Lo único que decide qué se escribe en el libro es si la
empresa de arriba y la de abajo son la misma. El operador no elige el tratamiento contable: elige
de dónde sale y a dónde entra, y la línea de previsualización le dice el resto.
Conversión
misma empresa
Mogos Logistics convierte USDT en yuanes para pagarle al proveedor de Yiwu. La plata no sale
de la empresa: se muda de Binance a Alipay. Acá el operador ya corrigió lo que de verdad acreditó
Alipay, y la pantalla nombra la diferencia.
9:41
Nuevomovimiento
GastoIngresoSwap
De
Mogos Logistics
Binance USDTAlipay CNYICBC CNY
A
Mogos Logistics
Binance USDTAlipay CNYICBC CNY
Sale
2.000,00USDT
Tasa7,12 CNY por 1 USDT
Entra
14.221,50CNY
esperado 14.240,00 ·diferencia de cambio −18,50 CNY
Traspaso interno · no toca el pie de gastos.
Nota opcional
Pago proveedor Yiwu
Guardar
EscribeUn traspaso interno de Mogos Logistics: sale de Binance, entra en Alipay.
CategoríaTraspaso
Pie de gastosNo cambia. No es P&L.
Diferencia−18,50 CNY como diferencia de cambio — no como gasto.
Par vinculadoNo hace falta: no cruza empresas.
Fondeo
dos empresas
Mogos C.A. le manda plata a Mogos Logistics para que siga operando en China. Acá sí
cruza de una empresa a otra, así que un solo Guardar escribe dos filas vinculadas: la que sale
y la que entra.
9:41
Nuevomovimiento
GastoIngresoSwap
De
Mogos C.A.
Caja VE USDBancamiga BsZelle USD
A otra empresa
Mogos Logistics
Binance USDTAlipay CNYICBC CNY
Sale
1.500,00USD
Tasa7,18 CNY por 1 USD
Entra
10.770,00CNY
Sale de Mogos C.A. · entra a Mogos Logistics · no suma al pie de gastos.
Nota opcional
Fondeo operación China
Guardar
EscribeUn egreso en Mogos C.A. y un ingreso en Mogos Logistics, vinculados.
CategoríaTraspaso en los dos.
Pie de gastosExcluidos. Ni el egreso ni el ingreso entran en el pie operativo ni en los totales de gasto.
GuardarUno solo. El par lo arma el sistema, no el operador.
Par vinculadoSí. Andreina los ve juntos, no como dos movimientos sueltos.
Swap en la app, Traspaso en el libro
Son dos palabras a propósito, no un descuido. Swap es lo que el operador hace: mover
plata de un lado a otro. Traspaso es cómo Finanzas lo clasifica. El operador nunca ve la
palabra Traspaso en la pantalla de captura, y Andreina nunca ve la palabra Swap en el libro.
05Lo que ve Finanzas
el par y el pie
Un swap entre empresas escribe dos filas, y dos filas sueltas son exactamente el problema que
esta pantalla vino a resolver. Por eso llegan vinculadas: en el admin se leen como un par, con una
llave que dice que la salida de una es la entrada de la otra.
Mogos Logistics · AlipayIngreso · Traspaso · Fondeo operación China
+10.770,00CNY
Un solo swap · tasa congelada 7,18 CNY por 1 USD · registrado por Luis Herrera
Hoy · el swap adentro
48.200USD · gastos
Con Swap · afuera
35.700USD · gastos
Flete naviero18.400
Logística9.100
Nómina5.300
Oficina2.900
Traspaso — no es gasto12.500
Agosto en la operación de China. Los 12.500 USD en rojo nunca se gastaron:
cambiaron de cuenta. Con Swap salen del pie y el gasto real del mes baja de 48.200 a
35.700 USD — un 26 % que hoy se está contando dos veces.
06Sistema
leído el 27 ago 2026
Casi todo lo que necesita esta pantalla ya está construido y funcionando en Caja. Lo que
falta son cuatro cosas concretas, y ninguna es una pantalla: son un valor de enum, una llave, una
exclusión y un branch de formulario.
Ya existe
La pantalla, casi entera
El control segmentado — caja-segmented-control.tsx es genérico sobre el valor
y ya dibuja el punto de color. Pasar de dos a tres opciones no lo toca.
Empresa — empresa-select.tsx filtra las cuentas por
financialEntity. Se usa dos veces en vez de una.
Chips de cuenta — account-chips.tsx, un chip por MoneyAccount
con su moneda. Idénticos arriba y abajo.
El monto y su teclado — amount-block.tsx: un solo buffer, teclado acoplado en
móvil, campo real en escritorio.
La tasa — rate-chip.tsx, sugerida y editable, sin escribir en
/exchange-rates y sin bloquear el guardado.
Congelar la tasa — appliedRate, equivalentUsd y
rateSource ya viven en Egreso y en Ingreso.
Falta
Cuatro piezas, ninguna es pantalla
TRASPASO no existe como categoría. Hoy EgresoCategoryEnum
tiene once valores y IngresoCategoryEnum siete; en ninguno está. Hace falta
en los dos, con su migración.
No hay vínculo entre un egreso y un ingreso. El par necesita una llave común —un
swapId— o Andreina ve dos filas sueltas y borrar una deja la otra huérfana.
Nada excluye una categoría del pie. Sacar TRASPASO de los totales de gasto es
trabajo de admin/finanzas, no de Caja: acá solo se marca.
El tipo tiene dos valores.movimientoTipoEnum es
['gasto','ingreso']. El tercero es una línea, pero arrastra el branch del formulario y
el del guardado.
Una decisión que no tomamos acá
La diferencia de cambio necesita dónde aterrizar en el libro cuando el par cruza empresas: es la
única cifra del swap que sí toca el resultado. La pantalla la captura y la nombra; dónde se
asienta es de Finanzas, y se decide con Andreina antes de la fase 3.
07Fases
cuatro · la primera sin migración
1
El tercer estado
sin migración
Un valor más en movimientoTipoEnum, una opción más en
createMovimientoTipoOptions() con su tratamiento celeste y su flecha, y la
rejilla del control de 1fr 1fr a 1fr 1fr 1fr. Nada se guarda todavía:
elegir Swap muestra el formulario y Guardar queda inerte. Es la fase que deja ver la pantalla
real en un teléfono real.
2
Traspaso interno
misma empresa
Migración: TRASPASO en las dos categorías. Guardar un swap de misma empresa
escribe el par en la misma entidad y la diferencia de cambio queda capturada. El pie de gastos ya
no cuenta las conversiones de USDT: es el 100 % del alivio para la operación de China.
3
Entre empresas, vinculado
el par
La llave swapId y el guardado transaccional: un Guardar escribe egreso e
ingreso o no escribe ninguno. Editar o borrar uno toca al otro. Requiere la decisión de Finanzas
sobre dónde asienta la diferencia de cambio.
4
El par en el admin
finanzas
La vista de par en admin/finanzas y la exclusión de TRASPASO del
pie operativo y de los totales de gasto. Es la fase en la que el número que Andreina mira deja de
estar inflado.
08Qué no hacemos
alcance
Cinco cosas que caben en la palabra «swap» y quedan fuera, con la razón.
Ejecutar el cambioCotizar la tasaSwap de tres patasConciliar el parSaldos por cuenta
Ejecutar el cambio — Caja anota lo que ya pasó en Binance o en el banco. No manda plata
a ningún lado, y nunca va a tener una llave que lo permita.
Cotizar la tasa — la app propone la del día y congela la que el operador vio, igual que en un
gasto. Buscar la mejor tasa no es trabajo de una pantalla de captura.
Swap de tres patas — USDT → USD → CNY se anota como dos swaps. Una pantalla con tres
extremos es un asistente por pasos, y esa es justo la forma que Caja evita.
Conciliar el par — cruzar el traspaso con lo que llegó del banco vive en
admin/finanzas, como toda conciliación.
Saldos por cuenta — saber cuánto queda en Alipay exige el saldo real, que Caja no tiene. Lo
que la app muestra son movimientos, no saldos.
Sale de una cuenta, entra en otra, y el pie de gastos no se mueve.
Swap le da a la plata que solo cambia de bolsillo la casilla que nunca tuvo: un movimiento con dos
extremos, un solo Guardar, y un par que Finanzas lee junto.