Saltar al contenido principal

Declara los roles de flujo de caja en tu libro mayor: una línea de metadatos reemplaza la suposición

Publicado 9 min de lecturaMike ThriftMike Thrift
Declara los roles de flujo de caja en tu libro mayor: una línea de metadatos reemplaza la suposición

Todo estado de flujo de caja se basa en una decisión silenciosa tomada una vez por cuenta: ¿es esta cuenta parte del efectivo que estás explicando, o es una actividad de operación, inversión o financiación? Si aciertas en esa decisión, el estado te dice a dónde fue realmente tu dinero. Si fallas, el estado te engaña con confianza.

Hasta ahora, el informe de flujo de caja de Beancount.io tomaba esa decisión por ti con heurísticas: la raíz de la cuenta, más una suposición basada en el nombre sobre qué activos cuentan como efectivo. Para la mayoría de los libros, la suposición era correcta la mayoría de las veces, y fallaba en silencio el resto. Una cuenta de corretaje con un nombre inadecuado caía en la sección equivocada. Un fondo del mercado monetario que es efectivo en todos los sentidos prácticos permanecía en Actividades de Inversión porque su nombre no lo decía.

A partir de hoy, puedes hacer la clasificación explícita. Una línea de metadatos estándar de beancount en la directiva open de la cuenta:

2000-01-01 open Assets:US:Brokerage
  cash-flow-role: "investing"
 
2000-01-01 open Assets:US:Marcus:Savings
  cash-flow-role: "cash"

Una clave, cuatro valores — cash, operating, investing, financing — y esa es toda la configuración. No hay página de ajustes, ni archivo JSON, ni diálogo de opciones por informe. La próxima vez que cargues el informe de flujo de caja, los flujos de la cuenta de corretaje aparecen bajo Actividades de Inversión, la cuenta de ahorros se une al montón de efectivo cuyo cambio explica el estado, y todas las demás cuentas siguen funcionando exactamente como antes.

El informe de flujo de caja de Beancount.io para el libro de ejemplo: un gráfico de flujo de caja neto mensual sobre tablas detalladas de actividades de operación e inversión.

Qué significa cada rol

Un estado de flujo de caja clasifica cada cuenta en uno de dos trabajos, y cash-flow-role responde a ambos con una sola palabra:

  • "cash" — la cuenta pertenece al montón de efectivo y equivalentes. Las cuentas de efectivo nunca aparecen como partidas individuales; el estado explica el cambio en su saldo combinado, y las transferencias entre dos cuentas de efectivo se cancelan, como debería ser al mover dinero de cheques a ahorros.
  • "operating" / "investing" / "financing" — la cuenta no es efectivo, y su cambio en el período aparece como una línea bajo esa sección de actividad.

Por defecto, el informe trata las cuentas de activos cuyos nombres contienen Cash, Checking, Savings o Bank como equivalentes de efectivo. Declarar un rol anula eso en ambas direcciones. cash-flow-role: "cash" atrae una cuenta que la regla del nombre no detecta — un fondo del mercado monetario, una billetera de stablecoin. Y cash-flow-role: "investing" en Assets:US:Bank:CD hace dos cosas con una línea: excluye el CD del efectivo y lo archiva bajo inversiones, aunque su nombre habría coincidido con la regla de efectivo.

Deliberadamente usamos una clave en lugar de dos. "¿Es esta cuenta efectivo?" y "¿a qué sección de actividad pertenece?" nunca fueron preguntas independientes — una cuenta es parte del montón de efectivo o pertenece exactamente a una sección de actividad. Dos claves habrían permitido estados sin sentido, como una cuenta de efectivo con un rol de actividad. Una clave hace que los estados ilegales sean irrepresentables, y toda la especificación cabe en un tuit.

La vista Por Actividad del informe de flujo de caja, apilando los flujos de efectivo de operación, inversión y financiación por mes.

La clasificación que declaras es la clasificación que usa toda vista. El gráfico Por Actividad apila los flujos de operación, inversión y financiación de cada mes; mueve el rol de una cuenta, y sus flujos se mueven a la capa correcta del gráfico, a la sección correcta del estado y a la línea correcta de la exportación, todo a la vez.

Lo declarado supera a lo inferido — y el informe muestra su trabajo

La clasificación ahora se resuelve en un orden estricto: primero tus metadatos, segundo la heurística integrada. Y el informe es honesto sobre lo que hizo. El estado termina con un panel de "Efectivo y equivalentes en este informe" que lista exactamente qué cuentas trató como efectivo al construir los números, y luego las concilia: efectivo al inicio del período, efectivo al final del período y el cambio neto que explican las secciones de actividad.

El final del estado de flujo de caja: la conciliación del cambio neto en efectivo y equivalentes, y el panel que lista las cuentas tratadas como efectivo al construir el informe.

El informe también distingue las clasificaciones que declaraste de las que infirió, y esa distinción se traslada a las exportaciones CSV y Markdown: un estado construido enteramente con roles declarados ya no lleva la línea de divulgación de "clasificación inferida", porque en ese punto la clasificación no es una inferencia — es parte de tus libros.

Los errores tipográficos se manejan como debe hacerlo una herramienta de texto plano. cash-flow-role: "invsting" no se acepta en silencio ni se ignora en silencio: la cuenta vuelve a la heurística predeterminada, y el panel de estado lo señala — "valor de rol de flujo de caja desconocido, usando el predeterminado" — para que el error sea visible donde miras, no enterrado en un registro.

Si no cambias nada, nada cambia

Las cuentas sin anotar usan los mismos valores predeterminados publicados que antes: Ingresos y Gastos se asignan a operación, Activos no monetarios a inversión, Pasivos y Patrimonio a financiación, y los equivalentes de efectivo por coincidencia de nombre forman el montón de efectivo. Un libro existente se renderiza idénticamente antes y después de esta versión. La mayoría de los usuarios anotarán un puñado de cuentas — aquellas donde el valor predeterminado es incorrecto — y no pensarán en el resto.

La portabilidad no se ve afectada. Los metadatos en directivas open son sintaxis básica de beancount, analizados por toda herramienta v2/v3 e ignorados por cualquier cosa que no busque esta clave específica. bean-check pasa, Fava se encoge de hombros, y tu libro sigue siendo totalmente utilizable fuera de Beancount.io.

Cada vista de tu efectivo coincide con todas las demás

Un resolutor compartido produce el rol final para cada cuenta, y cada consumidor lee de él:

  • El informe de flujo de caja construye sus secciones de actividad y su línea final — cambio neto en efectivo y equivalentes — a partir de los roles resueltos.
  • Las exportaciones CSV, Markdown y de impresión llevan los mismos números, con la divulgación de clasificación inferida solo donde se usó realmente una heurística.
  • El diagrama de Sankey general lee las mismas declaraciones, así que una cuenta que marcaste como efectivo deja de aparecer como nodo de flujo, y tus roles de actividad declarados se respetan para cuentas no monetarias.
  • El panel de estado de cuentas deja de listar una cuenta declarada como "activo no clasificado".

El diagrama de Sankey general, dibujando el flujo de dinero desde ingresos a través de efectivo hacia categorías de gastos, inversiones y ahorros — construido con las mismas clasificaciones de cuentas que el informe de flujo de caja.

No hay forma de que el estado y el diagrama estén en desacuerdo sobre qué es tu efectivo, porque solo hay una respuesta sobre la cual discrepar.

Por qué el libro mayor, y no una página de ajustes

Esta es la parte de la versión que nos entusiasma más. Consideramos una interfaz de ajustes y la rechazamos, por tres razones:

  1. El libro mayor es la fuente de verdad. Una clasificación que vive en cualquier otro lugar puede discrepar de los libros que describe. Una clasificación que vive en la directiva open viaja con la cuenta — a través de renombres, de movimientos de repositorio, de cada cliente que lee el archivo.
  2. El texto plano es diferenciable, buscable y revisable. Si mantienes tu libro en git — y si usas Beancount.io, lo haces — la regla de clasificación ahora es algo que puedes grep, diff y blame, y algo que un revisor puede ver en una solicitud de extracción. Una página de ajustes no es nada de eso.
  3. Funciona sin conexión y en todas partes. Cualquier editor puede declarar un rol. Cualquier cliente futuro que lea el libro obtiene la clasificación gratis, sin ajustes por cliente que sincronizar.

Por la misma razón, las clasificaciones son deliberadamente no efectivas por fecha. Los metadatos describen la naturaleza de la cuenta, que rara vez cambia; cuando cambia, editas la directiva open, y tu historial de git registra qué cambió y cuándo. Ese historial es la pista de auditoría.

Pruébalo en tu libro

La funcionalidad se está implementando en todos los libros ahora. Declarar un rol solo requiere un editor de texto:

  1. Abre el archivo donde vive la directiva open de la cuenta.
  2. Añade cash-flow-role: "cash" (o "operating", "investing", "financing") como una línea de metadatos indentada debajo de ella.
  3. Recarga el informe de flujo de caja. Tu declaración gana sobre la heurística de inmediato.

Comienza con las cuentas donde la suposición predeterminada es incorrecta — el CD que no es realmente efectivo, el fondo del mercado monetario que realmente lo es, la cuenta de corretaje que quieres claramente bajo Actividades de Inversión. Deja el resto en paz. La especificación completa — valores aceptados, precedencia, clasificaciones predeterminadas y cómo se manejan los valores inválidos — vive en la referencia de Roles de Flujo de Caja.

El informe de flujo de caja es parte de cada libro de Beancount.io, junto con el estado de resultados y el balance general. Si te estás poniendo al día sobre qué más se lanzó este verano — importaciones más inteligentes, un asistente de IA con capacidad de acción y una aplicación móvil reconstruida — las notas de la versión 3.6 cubren el resto.

Tus libros ya sabían qué cuentas son inversiones y cuáles son gastos diarios. Ahora el estado de flujo de caja también lo sabe.

Comparte este artículo