caja · swap · ago 2026
Caja · tercer tipo de movimiento

La plata que solo cambia de bolsillo.

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

El 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.

  1. El operador convierte 2.000 USDT a yuanes en Alipay.
  2. No hay dónde anotarlo: lo mete como gasto desde Binance.
  3. Cuando le paga al proveedor con esos yuanes, anota otro gasto.
  4. Finanzas ve dos salidas por la misma plata y no sabe cuál es real.
  5. 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.

  1. El operador toca Swap en el mismo toggle de siempre.
  2. Elige de dónde sale y a dónde entra: empresa y cuenta, las dos veces.
  3. Escribe lo que sale; lo que entra ya viene calculado con la tasa del día.
  4. Un solo Guardar. Si las empresas difieren, el par queda vinculado y visible.
  5. El pie de gastos no se mueve: un traspaso no es consumo.
Registros
1 gesto
Pie de gastos
intacto
Par visible
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.

El 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 Gasto lima-deep #A7C95A · solo el punto de Ingreso celeste-soft #E4F5FB · fondo del Swap celeste-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.

La 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.

  1. 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.

  2. «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.

  3. 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.

  4. Cuenta real, nunca canal

    Un chip por MoneyAccountBinance 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.

  5. «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.

  6. 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.

  7. «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.

  8. 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.

  9. 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

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.

Dos 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.

  • 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.

  • 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.

Lo 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.

Traspaso · 27 ago 2026fuera del pie de gastos
Mogos C.A. · Caja VEEgreso · Traspaso · Fondeo operación China
−1.500,00USD
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.

Sistema

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 segmentadocaja-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.
  • Empresaempresa-select.tsx filtra las cuentas por financialEntity. Se usa dos veces en vez de una.
  • Chips de cuentaaccount-chips.tsx, un chip por MoneyAccount con su moneda. Idénticos arriba y abajo.
  • El monto y su tecladoamount-block.tsx: un solo buffer, teclado acoplado en móvil, campo real en escritorio.
  • La tasarate-chip.tsx, sugerida y editable, sin escribir en /exchange-rates y sin bloquear el guardado.
  • Congelar la tasaappliedRate, 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.

Fases

cuatro · la primera sin migración
  1. 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. 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. 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. 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.

Qué no hacemos

alcance

Cinco cosas que caben en la palabra «swap» y quedan fuera, con la razón.

Ejecutar el cambio Cotizar la tasa Swap de tres patas Conciliar el par Saldos 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.