propuesta · ago 2026
Caja · presupuesto de oficina

Cuánto queda del mes, sin preguntárselo a nadie.

La oficina de China gasta contra un presupuesto mensual que hoy no se ve en ninguna pantalla: se pregunta por chat y se responde de memoria. La alcancía lo pone fijo en Caja — un frasco que se vacía con cada gasto de la oficina de China y que dice, de un vistazo, cuánto queda del mes.

Presupuesto
Mensual
Moneda
USD
Dirección
Frasco
Endpoint
Ya existe

Hoy: el presupuesto existe, pero nadie lo ve

China · WhatsApp · de memoria

La oficina de China tiene un monto asignado cada mes. Se gasta contra él todos los días — alquiler, courier, insumos, nómina— y la única forma de saber cuánto queda es preguntar por chat y esperar a que alguien sume. Cuando la respuesta llega, ya se gastó otra vez.

La consecuencia no es contable, es de ritmo: nadie sabe si va rápido o lento. Se descubre que el mes se pasó cuando el mes ya se pasó.

Hoy

«¿Cuánto nos queda del mes?»

  • La pregunta viaja. Sale por chat, la responde una persona, y la respuesta es una estimación.
  • Nadie ve el ritmo. Saber que se gastaron $7.080 no dice nada si no se sabe cuánto mes queda.
  • El traspaso confunde. Mover plata de una cuenta propia a otra parece un gasto enorme y no lo es.
Latencia de la respuesta: horas · fuente: la memoria de alguien
Con la alcancía

La respuesta está fija en la pantalla

  • Siempre visible. Vive en el chrome de Caja: en Hoy y en la barra de escritorio, no detrás de un menú.
  • Se entiende sin explicación. El nivel del frasco es la respuesta; al lado, «quedan 4 días» la pone en tiempo.
  • El traspaso no la vacía. Solo el gasto operativo baja el nivel; el movimiento entre cuentas propias lo dice en la fila.
Latencia: 0 · fuente: GET /finance/budgets, que ya existe

Tres formas de dibujar la misma alcancía

mismo dato · misma copy

Las tres muestran lo mismo — queda $4.920,00 de $12.000,00, agosto, oficina China — y comparten estados, copy y fuente. Lo que cambia es la forma, y con ella dos cosas que sí importan en una PWA: cuánto alto ocupan y si dicen el ritmo del mes. Cada una se muestra al ancho real de la pantalla, 390 px.

Carlos eligió la B, el frasco, después de ver el Studio en cresco-a el 27 de agosto. A y C se quedan acá como el registro de lo que se evaluó y de lo que costaba cada una; el resto de la pieza —el chrome, los estados y las métricas— ya está dibujado con el frasco.

Barra / tanqueevaluada

Hoyjue 27 ago
CH
Alcancía · queda de agosto Oficina · CN
$4.920,00 Va sobrada
plata41 %
mes13 %
Gastado $7.080,00 de $12.000,004 días
Dos rieles que se vacían en la misma dirección y miden lo mismo: lo que queda. El grueso es la plata, el fino es el mes. Si el grueso es más largo, sobra presupuesto — y el chip lo dice en palabras, para que el color nunca sea el único canal.
  • La más compacta de las tres y la única que se condensa a una línea de 44 px sin perder nada.
  • Responde «¿voy bien?», no solo «¿cuánto queda?».
  • Se condensa a una línea al hacer scroll y en la barra de escritorio.
  • Es la menos literal: no se parece a una alcancía.
Alto
143 px
Ritmo
Condensa
44 px

Alcancía / frascoelegida

Hoyjue 27 ago
CH
Oficina · CN
Alcancía · queda de agosto $4.920,00 41 % · quedan 4 días Gastado $7.080,00 de $12.000,00 Va sobrada
Elegida · Carlos, 27 ago
La dirección. El frasco con nivel: lo que cualquiera entiende sin explicación. Las tres rayitas de medida le dan escala, la tapa con ranura hace de icono de la app, y el pie dice de qué empresa es la alcancía.
  • Cero curva de aprendizaje: un frasco medio vacío es un frasco medio vacío.
  • Memorable: es la imagen que la gente ya usa para hablar del presupuesto.
  • Es la más alta de las tres en Hoy (157 px contra 143) — se paga con el frasco en miniatura al condensar.
  • No dibuja el ritmo del mes: el «quedan 4 días» lo dice en texto, no en la forma.
Alto
157 px
Ritmo
No
Condensa
44 px

Número y anilloevaluada

Hoyjue 27 ago
CH
Alcancía · queda de agosto $4.920,00 de $12.000,00 · 59 % gastado Va sobrada
La plata como número y el mes como anillo: dos objetos, dos preguntas. La orilla del arco es hoy, así que un tick aparte sería el mismo dato dibujado dos veces.
  • El anillo se lee de lejos: la mejor para la barra ancha de escritorio o un TV de oficina.
  • Separa plata y tiempo, sin pedir que se comparen dos longitudes.
  • La proporción de la plata queda en texto («59 % gastado»), no en la forma.
  • El anillo pide 96 px de alto que en el teléfono compiten con la lista.
Alto
142 px
Ritmo
Condensa
Regular
Un solo frasco, tres tamaños

La forma elegida se usa en todas partes y no se mezcla con las otras: el frasco grande al tope de Hoy y como portada del mes en /metricas, y el mismo frasco en miniatura (26 × 32) en la línea condensada del teléfono y en la barra de escritorio. Al condensarse cambia el tamaño, nunca la metáfora — un riel ahí sería una segunda forma para el mismo dato. A y C no se implementan.

Dónde vive: el chrome, no una ruta

Hoy · barra de escritorio

La alcancía no es una pantalla: es parte del marco de Caja. En el teléfono se abre entera al tope de Hoy y se condensa a una línea cuando la lista sube, sin soltarse del encabezado. En escritorio vive en la barra de arriba, así que se ve en Hoy, en Nuevo movimiento y en el detalle.

  1. Teléfono · pegada al encabezado

    El frasco entero al tope de Hoy. Al desplazar la lista se condensa a una línea de 44 px que no se suelta: el mismo frasco a 26 × 32, monto y porcentaje. Nunca tapa el botón Nuevo movimiento, que sigue fijo abajo.

  2. Escritorio · dentro de la barra

    Va en CajaDesktopBar, entre la etiqueta «Caja» y la pill de la URL. Como la barra es del layout, la alcancía se ve también en /nuevo y en /movimiento/[id].

  3. Es un enlace, no un panel

    Tocarla lleva a /metricas. En Hoy no se despliega, no abre acordeón y no crece: la pantalla de captura no se convierte en un tablero.

  4. Es del departamento, no de la empresa

    El frasco es la pareja Oficina × CN, así que no cambia al presionar un chip de empresa: los chips filtran la lista por entidad, el frasco sigue siendo el sobre del mes. Con una empresa VE o US puesta no se pinta — el sitio se cierra, no queda un hueco.

  5. Sin monto no desaparece

    Si nadie definió el presupuesto del mes, se muestra igual, con un guión y un Definir monto. El vacío es justamente el mensaje.

Escritorio. Desliza la barra para verla completa. La alcancía condensada es la misma pieza del teléfono, con el mismo frasco y las mismas cifras tabulares — no una segunda implementación.

Cinco estados y el cambio de mes

forma + texto + color

Un semáforo que solo cambia de color deja fuera a quien no distingue rojo y verde, y a cualquiera que mire de reojo. Cada estado cambia además el chip en palabras, el nivel del frasco y, cuando hace falta, la textura del líquido.

Oficina · CN
Alcancía · queda de agosto Sin monto definido para agosto Sin monto Definir monto
Sin montoEl estado del día 1, y el de hoy: el monto todavía no está escrito. Vidrio punteado, sin líquido y un guión en vez de cero — cero es un dato, esto es la falta de dato. Definir monto escribe desde Caja.
Oficina · CN
Alcancía · queda de agosto $4.920,00 41 % · quedan 4 días Gastado $7.080,00 de $12.000,00 Va sobrada
Va sobradaCuatro décimos de frasco para cuatro días de mes. El estado normal: se lee sin números y no pide nada.
Oficina · CN
Alcancía · queda de agosto $720,00 6 % · quedan 4 días Queda menos plata que mes Apretada
ApretadaEl líquido apenas cubre el fondo y cambia de familia. No es un error: es el aviso de que al ritmo de hoy no se llega a fin de mes.
Oficina · CN
Alcancía · queda de agosto $0,00 Se acabó el presupuesto de agosto Quedan 4 días de mes Agotada
AgotadaFrasco vacío y el vidrio en el rojo de la casa. No bloquea nada: Caja sigue registrando gastos, porque el gasto ya ocurrió y ocultarlo no lo deshace.
Oficina · CN
Alcancía · queda de agosto −$340,00 Gastado $12.340,00 de $12.000,00 Quedan 4 días de mes Sobregirada
SobregiradaEl frasco se llena y se raya en diagonal: pasado el borde, el nivel ya no significa nada y la textura lo dice. overBudget ya lo calcula el API.

Y una pregunta al cambiar de mes

El mes no se cierra solo: ni se resetea ni arrastra por su cuenta (decisión 08). El día 1 llega una notificación con lo que sobró y dos botones que dicen en qué monto arranca el mes — no «arrastrar» y «resetear» a secas, sino el número que resulta de cada uno.

  1. Los botones dicen el resultado

    «Arrastrar» y «resetear» son jerga de presupuesto; el número al que arranca septiembre no lo es. Cada botón lleva el suyo, así que la decisión se toma mirando la cifra, no traduciendo la palabra.

  2. Una vez al mes, y no bloquea

    Mientras no se responda, la alcancía muestra el mes nuevo con el monto que ya tenía. La notificación espera; Caja sigue registrando gastos.

  3. El mismo sitio donde se escribe el monto

    Es el segundo camino de la decisión 10: el monto se define en Caja, y acá se confirma o se cambia sin ir a ningún lado.

Qué la vacía — y qué no

gasto sí · traspaso no

Una alcancía que baja con cualquier movimiento deja de servir a la semana. La regla es corta: baja el nivel el gasto operativo de la oficina de China — la pareja Oficina × CN. Nada más.

Baja el nivel

El gasto operativo de China

  • Egresos atribuidos a la pareja Oficina × CN, salgan de la caja que salgan: Alipay, ICBC o Binance. Alquiler, nómina, courier, insumos, flete interno.
  • En cualquier moneda, convertido a USD con la tasa del día y congelado en budgetUsdAmount: una tasa nueva no revalúa gasto viejo.
  • Desde el día que se pagó (spentAt), no desde el día que se registró: un gasto anotado tarde cae en su mes.
Suma: spentUsd, que el API ya calcula.
No baja el nivel

Todo lo que no es consumo

  • Traspasos entre las cajas de la propia oficina. Pasar de ICBC a Binance no gasta nada: la plata sigue siendo de la casa. La fila lo dice con traspaso · no consume.
  • Gastos de VE y de US LLC, y los de otros departamentos (Marketing, Operaciones). Otro bolsillo: el sobre es solo Oficina × CN.
  • Ingresos. Un cobro no recarga la alcancía; la recarga es una decisión del mes, no un movimiento suelto.
Se ven en la lista, no se atribuyen a ningún presupuesto.
La tasa se congela, y por eso el número aguanta

Cada egreso guarda su valor en USD y la tasa que se usó (budgetUsdAmount, budgetAppliedRate) en el momento de atribuirlo. Si el yuan se mueve a mitad de mes, lo gastado no cambia — sería un mes que se reescribe solo. byCurrency[] guarda además el monto original, así que la alcancía siempre puede decir «$7.080,00, de los cuales ¥50.976».

Las métricas viven en otra ruta

/metricas

La alcancía responde una pregunta: ¿cuánto queda?. Todo lo demás —en qué se fue, cómo van los meses, qué cuenta pesa más— es otra conversación y otra pantalla. Se llega tocando la alcancía; en Hoy nunca se despliega, porque Hoy es para registrar, no para analizar.

  1. El frasco encuentra su sitio

    Acá el alto no compite con nada, así que la dirección B —la más literal— es la portada del mes. Es el mismo dato de la barra del chrome, con más aire.

  2. En qué se fue

    La dona por categoría sale de las categorías que Egreso ya tiene. Cinco tajadas y «Otros»; más de eso deja de leerse.

  3. Cómo van los meses

    Una barra por mes con el porcentaje consumido. Es la vista que contesta «¿este mes fue caro?», que la alcancía sola no puede responder.

  4. Sin cruces de moneda

    Todo en USD, con el original disponible al tocar. Ninguna cifra de esta pantalla suma bolívares con yuanes.

Casi toda la alcancía ya está construida

finance · prisma · caja

Al abrir el esquema aparece la sorpresa útil de esta propuesta: el presupuesto ya existe en la base de datos, con atribución por egreso y tasa congelada. Lo que falta no es el motor: es el mes, la fila del presupuesto y la pantalla.

Ya está

Lo que se reutiliza tal cual

  • model Budget (finance_budgets) — límite en USD por Department y entidad, archivable con active.
  • Egreso.budgetId + budgetUsdAmount + budgetAppliedRate — la atribución, con el valor en USD y la tasa del día congelados.
  • GET /finance/budgets — devuelve limitUsd, spentUsd, overBudget (calculado al leer, nunca guardado) y byCurrency[]. Filtra por entity.
  • GET /finance/budgets/:id — el detalle con los egresos atribuidos, que es la lista de /metricas.
  • Department + Budget — la pareja que el sobre necesita ya existe. Departamentos hoy: Marketing, Oficina (5c417221-…) y Operaciones. La alcancía es una fila de finance_budgets: departmentId = Oficina, entity = CN, limitUsd = lo que escriban. Oficina hoy solo carga una fila US_LLC de $50.
  • El chrome de CajaHoyHeader, CajaDesktopBar y los chips de empresa: los tres sitios donde entra la alcancía, ya construidos.
Falta

Los cuatro huecos reales

  • El mes. Budget es un total corrido, sin período: hoy no se resetea nunca. La alcancía es mensual, y el cierre no es automático — lo decide una notificación al cambiar de mes (decisión 08). Es el único cambio de modelo grande.
  • La fila y el valor CN. El sobre no necesita modelo nuevo: es la pareja departmentId + entity que Budget ya tiene. Falta crear la fila al escribir el monto — y que CN exista, porque hoy FinancialEntityEnum es { VE, US_LLC }. Sin departamento nuevo.
  • Excluir el traspaso. El modelo todavía no distingue un movimiento entre cuentas propias de un gasto, y la alcancía necesita que no se atribuya.
  • La vista. El endpoint existe y no lo consume ninguna pantalla de Caja. Eso es exactamente lo que dibuja esta propuesta.

Decisiones

10 tomadas · 0 abiertas

Las cuatro que quedaban abiertas —el monto, el cierre de mes, de qué cuelga y quién edita— las cerró Carlos el 27 de agosto. Ninguna cambió el dibujo: la maqueta ya mostraba a la vez el número de ejemplo y el estado sin monto.

PuntoDecisiónPor qué
01MonedaUSD, sin sumar monedas cruzadas. El original queda a un toque.Budget es canónico en USD y byCurrency explica de dónde salió cada trozo. Un total mixto imprime una cifra que Finanzas no puede reproducir desde ningún registro.
02Dónde viveEn el chrome de Caja — Hoy y barra de escritorio. No es una ruta.Es un indicador, no un informe. Si hay que ir a buscarlo, se vuelve a preguntar por chat, que es el problema que resuelve.
03Forma por defectoA, la barra, en el chrome. B en /metricas, C en escritorio ancho.A es la más compacta y la única que se condensa a una línea de 44 px sin perder nada; con C dice ritmo, B no. Las tres pintan el mismo dato: no son tres implementaciones.
04El traspasoNo consume, y la fila lo dice con traspaso · no consume.Mover plata entre cuentas propias no es gasto. Esconder la fila haría dudar del total; marcarla lo explica sin abrir nada.
05Al agotarseNo bloquea el registro. Avisa, no impide.El gasto ya ocurrió. Una app que se niega a anotarlo no evita el sobregiro: solo pierde el dato y devuelve el problema al chat.
06EstadosColor + palabra + forma, siempre los tres.El color solo deja fuera a quien no lo distingue y a cualquiera que mire de reojo — que es como se mira un indicador fijo.
07El montoLo escriben ellos en Caja. No es un número fijo que se configura aparte.El monto cambia con la operación y quien lo sabe es quien gasta. Pedirlo por el admin lo volvería un trámite y la alcancía nacería vacía. El estado «sin monto» es la puerta: Definir monto escribe.
08Cambio de mesNi reset ni arrastre automáticos. Cada mes una notificación pregunta: arrastrar lo que sobró, o empezar de nuevo.Las dos son legítimas y dependen del mes. Elegir una por defecto sería inventar una política que nadie pidió; preguntar una vez al mes cuesta un toque, y los dos botones dicen en qué monto arranca septiembre.
09De qué cuelgaDe la pareja que Budget ya tiene: departmentId = Oficina (5c417221-…) + entity = CN. La fila se crea al escribir el monto.El sobre vive en finance_budgets (departmentId + entity + limitUsd), no en el departamento: un Department.entity opcional y anulable queda como etiqueta por defecto —Marketing y Operaciones no la necesitan—. Ni departamento nuevo; lo único que hay que agregar es el valor CN al enum, que hoy es { VE, US_LLC }. Oficina hoy solo carga una fila US_LLC de $50.
10Quién edita el montoCaja, más la notificación mensual como segundo camino.Mismo motivo que 07: quien gasta es quien sabe. El admin sigue viendo y auditando el presupuesto; lo que se mueve es dónde se escribe.

Qué no hacemos

el alcance que se sostiene

La alcancía es un indicador de una línea. Todo lo que la convierta en un módulo de control presupuestario queda fuera de esta propuesta — no porque no sirva, sino porque cada cosa de esta lista la vuelve algo que hay que administrar.

Aprobaciones Bloquear el gasto Presupuesto por categoría Alertas por correo Proyecciones Editar el monto desde Hoy Alcancías para otros departamentos
  • Aprobaciones y bloqueos — la alcancía informa; quien decide si un gasto se hace es una persona, y ya lo decide antes de abrir Caja.
  • Presupuesto por categoría — cinco sobres pequeños en vez de uno se administran solos y nadie los mantiene. Un sobre, y la dona de /metricas para ver en qué se fue.
  • Alertas por correo — el indicador está fijo en la pantalla que el operador ya usa todos los días; una notificación sería el mismo dato llegando peor.
  • Proyecciones — «a este ritmo se acaba el día 24» suena bien y es una estimación. Los dos rieles dicen lo mismo sin inventar nada.
  • Editar el monto desde Hoy — el monto es dato maestro de Finanzas. Desde Caja se ve y se pide; se define en el admin.
  • Alcancías para otros departamentos — el pedido es de la oficina de China. Como el sobre es una fila departmentId + entity, darle una a Marketing o a Operaciones después es una fila más, no un rediseño.

El presupuesto del mes, vaciándose a la vista.

Un frasco fijo en Caja que dice cuánto queda y si va sobrada — sin abrir nada, sin preguntarle a nadie. El motor ya está en el sistema; falta el mes, la fila del presupuesto y esta pantalla.