Ledger-cli y el ledger-mode de emacs
Hace un tiempo ya hablé de ledger-cli
, una herramienta de gestión contable que funciona desde la línea de comandos y consiste
básicamente en guardar la información en texto plano en un fichero
ledger. Ledger se traduciría al «español contable» como libro
diario, diario o mayor. Por lo tanto, todo el trabajo consiste
básicamente en introducir los datos de forma ordenada con cualquier
editor y luego extraerlos con ledger-cli
de forma ordenada.
No quiero que este artículo sea específicamente contable. Mi idea es
mostrar cómo voy haciendo para llevar un poco de control en mis
cuentas con herramientas potentes pero que se manejan perfectamente en
texto plano. ¿Por qué texto plano y contabilidad? Pues básicamente
porque eso me permite acceder a mis datos siempre, desde cualquier
dispositivo con cualquier editor que sea capaz de cargar texto.
Además, el ejecutable ledger
también lo puedes instalar en el
termux
de android® y sincronizar tu libro diario con cualquier
herramienta que se te ocurra (yo lo hago con git
, porque me permite
controlar cuándo se hacen qué cambios y revertirlos si es necesario).
El fichero que se ha generando al escribir este artículo también se puede descargar del blog.
Emacs se ha convertido en mi editor favorito para todo y por tanto
lo utilizo también para realizar mis apuntes contables. Además, tiene
un modo que me facilita la vida. Lo primero será tener instalado en
nuestro sistema la herramienta ledger-cli
. Como eso depende
básicamente de cada sistema operativo digo sólo las dos que yo he
utilizado en mi OpenSuse y en el termux
de android®:
sudo zypper install ledger
o en termux
apt install ledger
Después lo que necesitamos es instalar el modo de emacs que nos facilitará la vida:
M-x package-install RET ledger-mode RET
Y con esto ya tenemos todas las herramientas para comenzar a llevar nuestra contabilidad.
Crear nuestro libro mayor
Hay una serie de pasos que dar, aunque muy sencillos. Lo primer será
crear un fichero de texto plano. Si en el nombre añadimos la extensión
.ledger
, emacs activará el modo mayor automáticamente. Sin
embargo, es posible hacer lo mismo sin necesidad de poner esa
extensión añadiendo como primera línea del fichero la siguiente:
; -*- Ledger -*-
Y ya está. Ya tienes tu fichero dispuesto a recoger todos los datos que podamos meter. Pero para que las cosas funcionen mejor podemos ajustar aún más las entradas.
Ajuste de moneda
ledger-cli
soporta cualquier tipo de moneda, porque no tiene
predefinida ninguna y por tanto es bueno configurar las monedas en las
que trabajaremos. Lo digo en plural, porque podemos trabajar en varias
a la vez en el mismo libro y llevar también un registros de valores de
cambio y muchas otras cosas que exceden un artículo como éste. Para
resumir comento el código que utilizo yo para trabajar (sólo en
euros).
commodity € note Euros format 1.000,00€ default
La divisa (commodity) es el símbolo € como dice la primera linea. No
tiene más misterio: cualquier cifra que lleve un símbolo € se
considerará una cantidad en esa divisa. La línea note
la podemos
ahorrar, es sólo un comentario que nos ayuda a saber qué tipo de
divisa utilizamos. Con una moneda y su símbolo no tiene mucho sentido,
pero es que podemos contabilizar con «latas de cerveza» y al definir su
commodity
necesitaremos más explicaciones de lo que significa y por
qué lo utilizamos. La opción format
establece con esa sintaxis tan
simple que el separador de miles es el «.» y el de decimales la «,» y
además que el símbolo lo colocaremos detrás. default
le dice a
ledger
que si hay una cifra en algún sitio que no lleva el símbolo
monetario, por defecto tomará esa como su commodity
.
Definición de cuentas
Cuando definimos las cuentas tenemos a nuestro alcance muchas
opciones, como definir qué tipo de moneda utilizaremos en esa cuenta.
En mi caso, como sólo me manejo en euros no tiene mucho sentido todas
esas opciones y lo más complicado que utilizo son algunos alias
y
algunas note
. Pero lo más importante, es tenerlas ordenadas en los
grupos principales contables y los nombres aquí, como todo en ledger
son arbitrarios: lo que quiere decir que puedes utilizar los que
quieras, pero para tener una contabilidad ajustada debes ser
consistente con el nombre elegido.
Concretamente tengo las cuentas agrupadas en Activo
, Pasivo
,
Ingresos
, Gastos
y Patrimonio
.
Voy a poner un ejemplo de cuenta para que se vea cómo las tengo configuradas.
account Gastos:Otros Gastos:Metálico note Cuenta para anotar los gastos en metálico sin justificar alias Menudencias
Definir una cuenta es importante porque luego podemos exigir a
ledger
que sólo admita al extraer los datos las cuentas que tenemos
en la cabecera. Eso hace que nos obliguemos a ser consistentes, que
los errores tipográficos aparezcan a la primera de cambio y que los
resúmenes de gastos o cualquier otro listado no sean infinitos con
multitud de cuentas similares con leves matices.
Para aquellos que quieran ajustarse al Plan General Contable, nada nos impide nombrar una cuenta con números. Por ejemplo:
account 5.Cuentas financieras note Grupo 5 del Plan General Contable account 5.Cuentas financieras:521.Deudas a corto plazo note Cuentas para las deudas a corto plazo del Grupo 5 del PGC
Pero eso es más técnico contable y no vamos a entrar en ello. Basta
con saberlo, por si queremos utilizar ledger
para asuntos más serios
que llevar un poco de control sobre gastos que es para lo que lo
utilizo yo.
Balance de apertura
¿Cómo iniciamos nuestro registro contable? Pues por el principio, obviamente. Pero si no lo hemos hecho desde el inicio de los tiempos, o por lo menos desde que tenemos uso de razón, lo más probable es que tengamos que iniciar la contabilidad no desde cero, sino de la situación donde nos encontremos. Por ejemplo, podríamos suponer una situación como la siguiente:
2018/10/30 Balance de apertura Activo:Bancos:Ladrones y cia 6,54€ Activo:Bancos:El saqueador y cia -25,84€ Activo:Inmuebles:Casa 2.160,04€ Activo:Metálico 0,47€ Activo:Plan de Pensiones 82,65€ Pasivo:Hipoteca -1.372,23€ Patrimonio:Balance Apertura
Lo que nos lleva a tener ya un asiento en nuestro diario, sin embargo, aún no he explicado cómo se hace eso de los asientos que no son para sentarse.
Anotar un asiento
Lo primero es saber qué es un asiento. Pues básicamente es la anotación de una transacción. Seguro que en cualquier manual de contabilidad se pueden encontrar mejores definiciones de las que yo puedo dar. Pero lo que necesitamos para definir esa transacción son básicamente: fecha, descripción, cuenta de entrada y cuenta de salida.
Vamos a suponer que comprado un poco de fruta y lo quiero anotar en mi
diario y que me ha costado 1,27€. El comando para anotar es
ledger-add-transaction
y la podemos llamar con M-x
de la línea de
comandos de emacs, el atajo de teclado es C-c C-a
. Emacs
preguntará por una fecha, si no hemos introducido antes más
transacciones nos sugerirá la fecha actual, pero si hemos metido más,
nos sugerirá la última fecha introducida. También se pude ir al final
del fichero y hacerlo a mano, escribiendo todo el texto a falta del
automatismo, pero mejor dejar que emacs busque el sitio
correspondiente a esa fecha para mantener ordenado el diario por
fechas.
2018/10/30 Compra en la frutería ; Me he comprado un poco de fruta para variar Gastos:Alimentación 1,27€ Activo:Metálico -1,27€
En un fichero ledger-cli
se comienza un asiento en una nueva línea
comenzando por la fecha y una descripción de la transacción. Como se
ve la fecha está ajustada en la izquierda y luego vienen tres líneas
indentadas. La primera es un comentario porque su primer símbolo es
;
. La siguiente línea anota 1,27€ a la cuenta de
Gastos:Alimentación
. Por tanto, la siguiente anotará -1,27€ en la
cuenta de Activo:Metálico
. Ledger
también permite que la última
línea aparezca sin valor, lo que hará es calcular el valor de la
transacción y lo anotará balanceado en la última cuenta. Como vemos en
el balance de apertura
lo que ocurrirá es que el sistema anotará en
Patrimonio:Balance Apertura
el valor de -851,63€.
Mi recomendación es escribir y cuadrar el asiento manualmente para
evitar errores. Porque, como se puede ver, el valor final de un
asiento siempre es 0. Una transacción se llama transacción porque el
dinero que entra por un lado sale por el otro. O dicho de otro modo,
viendo el ejemplo, se han ido a Gastos:Alimentación
1,27€ que han
salido como -1,27€ de Activo:Metálico
.
He anotado la compra en una cuenta genérica de alimentación, si
quiero ser más fino en las anotaciones, para saber cuánto gasto en
cada tienda o con cada proveedor de servicios o con lo que sea, podría
haber hecho una cuenta Gastos:Alimentación:Frutería
y así en los
informes de gastos que puedo generar me aparecerá el desglose con más
detalles.
Anotaciones múltiples, diferidas y virtuales
Una anotación múltiple es similar a la que ya hemos visto en el balance de apertura. Se hacen anotaciones en diversas cuentas, unas suman otras restan, pero al final todo debe sumar 0 (eso sí es importante, hay que grabárselo a fuego en la memoria).
Pero puede ser que tengamos que hacer alguna anotación múltiple distinta, por ejemplo, cuando pagamos un bien con dinero de dos cuentas distintas, pero también puede ser una transacción con la misma cuenta. Imaginemos por ejemplo que jugamos a la lotería, bonoloto, primitiva o lo que sea, todas las semanas y un día nos pagan un premio de 30,00€. Podríamos hacer un asiento como el siguiente:
2018/10/31 Lotería Gastos:Lotería 14,00€ Gastos:Lotería -30,00€ Activo:Metálico 16,00€
Hay que hacer notar que los ingresos se anotan con un menos delante.
Eso es porque se detraen de otra cuenta. Para no liarme pienso en
esas cuentas como cuentas externas, aparecen en mi libro pero son de
otra persona o ente. En este caso Gastos:Lotería
es una cuenta la
empresa pública Loterías y Apuestas del Estado, a la que yo le
sumo activos cuando compro lotería y le resto activos cuando me
pagan premios. Como estoy quitando activos, el premio, la cantidad
la anoto en negativo. El caso es que al final en mi bolsillo han
aparecido 16,00€; mi bolsillo se llama Activo:Metálico
(por si había
alguna duda). En el ejemplo, utilizo dos veces la misma cuenta para
mostrar que aunque después de echar la lotería yo sólo veré 16€, en
realidad la transacción ha sido más compleja: me tenías que pagar 30€
pero se han cobrado de ahí la lotería que he comprado.
En otras ocasiones no pagamos en el acto. Las tarjetas de crédito es lo que tienen, que las compras las realizamos hoy pero lo anotan en tu cuenta dentro de unos días (aunque sean de débito). Si eres ordenado con la contabilidad cuando haces un gasto, lo anotas en el diario. El problema es que luego vas a ajustar tus cuentas, consultas con el banco y como aún no han anotado esa compra que hiciste con tarjeta, las cuentas no te cuadran. Para eso se puede hacer una anotación que yo llamo diferida. Se hace la anotación pero se le advierte al programa que está pendiente de realizar. Vamos a poner un ejemplo: voy al supermercado y hago la compra semanal y como me ha subido mucho decido utilizar mi tarjeta de crédito porque no llevo efectivo suficiente, haré una anotación como la siguiente:
2018/10/31 * Compra semanal Gastos:Alimentación:Mencabrona 85,49€ Activo:Bancos:Ladrones y cia -85,49€
Nótese el *
entre la fecha y la descripción. Además observaremos
también que emacs ha cambiado los colores de esa entrada y la hace
distinta para destacarla de las otras. Cuando hablemos de generar
informes y hacer listados de las cuentas, veremos que podemos pedirle
a ledger-cli
que contabilice esas entradas o no y cómo podemos hacer
para encontrarlas rápido y quitarles el *
cuando ya son anotaciones
efectivas. Hay mucho más juego con este tipo de anotaciones (pero yo
aún no he necesitado de ello), siempre es bueno echarle un ojo a la
documentación de ledger-cli
para saber la cantidad de cosas que se
pueden hacer.
También es posible que necesitemos utilizar alguna cuenta virtual.
Voy a poner un ejemplo chorra: Contabilizo una hipoteca que tengo
contratada y voy pagando mes a mes. Parte de lo que pago va a
amortizar el préstamo hipotecario que lo tengo anotado en la cuenta
Pasivo:Hipoteca
y otra parte a pagar los intereses al banco. El caso
es que al final, de mi cuenta bancaria desaparece la cantidad de
259,50€. Sin embargo, cuando hago una relación de gastos, el sistema
sólo me contabilizará los Gastos:Intereses Hipoteca
... Lo otro no
es un gasto, es una inversión, me diría el director de la sucursal y
yo le creí.
2018/10/31 Pago de hipoteca Pasivo:Hipoteca 235,47€ Gastos:Intereses Hipoteca 24,03€ Activo:Bancos:El saqueador y cia -259,50€
¿Cómo hago para que cuando saque mi relación de gastos mensuales me
contabilice lo que amortizo? Porque a final de mes sí lo tengo
descontado de mis ingresos y tengo que contar con ello. Una solución
posible es anotarlo virtualmente. Podemos abrir una cuenta
Gastos:Hipoteca amortizado
, por ejemplo y decirle al programa que lo
tenga en cuenta, pero sólo como un recordatorio para mí. La anotación
quedaría como sigue:
2018/10/31 Pago de hipoteca Pasivo:Hipoteca 235,47€ Gastos:Intereses Hipoteca 24,03€ Activo:Bancos:El saqueador y cia -259,50€ (Gastos:Hipoteca amortizado) 235,47€
En este caso vemos que todas las anotaciones no suman 0, pero es que la última no es una anotación real. Al poner la cuenta entre paréntesis le estamos diciendo al programa que es una cuenta virtual que la utilizaremos para realizar cálculos de forma sencilla, pero que en realidad no hay transacción. Podríamos incluso tener varias cuentas virtuales, en el caso, por ejemplo, de que la hipoteca está a nombre de dos personas y cada una paga su parte.
Como vemos el sistema de anotación es muy flexible y permite hacer
muchas cosas. Cosas financiaras y complicadas que si queréis avanzar
en ellas tendréis que leer en la documentación de ledger-cli
. Para
llevar mi control diario sobre mis gastos, con lo que he contado
será suficiente.
Autocompletado
La tarea de hacer las anotaciones puede ser ardua y proclive a fallos
si tengo que escribirlo todo. Sin embargo, el ledger-mode
me
proporciona una herramienta imprescindible: el autocompletado.
Se basa en que muchas transacciones son repetidas la mayor parte de las veces. Por ejemplo, si voy al supermercado a hacer la compra semanal tendré que hacer una anotación cada semana. Con un ejemplo lo veremos más claro.
- Inicio una transacción con
C-c C-a
aceptando la fecha corregida o escribiendo la correspondiente. - A continuación de la fecha escribo
Comp
y pulso<TAB>
. Automágicamenteledger-mode
completa a «Compra en la frutería», pero como eso no es lo que quiero vuelvo a pulsar<TAB>
y ahora sí aparece el buscado «Compra semanal». - Ahora necesito que me escriba las cuentas correspondientes:
C-c TAB
y tengo copiada la última transacción. - Modifico los valores y ya tengo la anotación hecha
Hay veces que la transacción es nueva y no hay ningún asiento que
copiar. En esos casos ledger-mode
también facilita la anotación
sugiriendo las cuentas. Por ejemplo, hemos comprado algo que no es una
compra periódica y queremos anotarlo. Vamos a probar anotando que
hemos comprado unas castañas en el puesto de la esquina, pero nos da
igual el detalle, lo vamos a anotar a nuestra cuenta de gastos en
metálico sin justificar, porque es una menudencia.
- Inicio de la transacción con
C-c C-a
y completamos la fecha. - Escribimos "Compra de castañas asadas" y
<RET>
- Pulsamos
<TAB>
para indentar, pulsamosG <TAB>
y elledger-mode
lo completará aGastos:
. - Si no tenemos claro a qué subcuenta de
Gastos
vamos a anotarlo podemos ir dando a<TAB>
para que vaya sugiriendo una tras otra. - Como nosotros tenemos claro que la subcuenta será
Otros Gastos
, pulsamosO <TAB>
yledger-cli
completará aGastos:Otros Gastos:
y si volvemos darle<TAB>
añadirá elMetálico
(porque no hay otras subcuentas de la subcuenta, si no hará un recorrido por ellas).
El procedimiento contado así parece engorroso pero a la segunda vez que lo utilizas todo ya sabes cómo funciona, porque es muy intuitivo. Es una forma de aligerar el trabajo cuando hay muchas anotaciones que realizar.
Generar informes
Hasta ahora hemos visto cómo introducir los datos en nuestro libro
diario, ahora toca sacar de él información. Como antes comenzamos por
las cuentas, vamos a hacer lo mismo. Hemos ido haciendo apuntes y
anotando a cuentas que en realidad no hemos definido en la cabecera.
¿Cómo sabemos cuántas hay, cuántas he necesitado para la contabilidad
hasta ahora? Muy fácil, se lo preguntaré a ledger-cli
desde la linea
de comandos:
ledger -f prueba-ledger.ledger accounts
Llamo al ejecutable ledger
diciéndole que utilice el fichero de
entrada -f prueba-ledger.ledger
y que me liste las cuentas
accounts
.
El resultado será:
Activo:Bancos:El saqueador y cia Activo:Bancos:Ladrones y cia Activo:Inmuebles:Casa Activo:Metálico Activo:Plan de Pensiones Gastos:Alimentación Gastos:Alimentación:Mencabrona Gastos:Hipoteca amortizado Gastos:Intereses Hipoteca Gastos:Lotería Gastos:Otros Gastos:Metálico Pasivo:Hipoteca Patrimonio:Balance Apertura
Podemos utilizar este listado para generar nuestra lista de cuentas
(si no las hemos ido definiendo cuando comenzamos la contabilidad).
Como ya he dicho, una opción para encontrar errores de tecleo es
utilizar la opción --strict
cuando hagamos consultas de nuestras
cuentas, eso hará que sólo se tengan en cuenta las anotaciones a
cuentas definidas en la cabecera y que lance un error en las demás
transacciones. Si no fuera un error, que hubiéramos decidido anotar en
una nueva cuenta y se nos ha olvidado definirla, es el recordatorio
perfecto para hacerlo.
El sistema de informes de ledger-cli
es muy completo y extenso.
Puede hacer también cálculos financieros, estudios de gastos, por
meses, anuales, y un largo etcétera que se nos iría del objetivo de
este minitutorial. Si alguien tiene curiosidad o necesidad de este
tipo de cosas, la documentación de ledger-cli
es muy completa y
exhaustiva con ejemplos que ayudan a clarificar todas las cosas que
puede hacer.
En mi caso tengo una serie de informes que me utilizo habitualmente,
así que me he creado un archivo informes.el
que puedo cargar cuando
lo necesito. El contenido es el siguiente:
;;; Listados para ledger-mode (require 'ledger-mode) (setq ledger-reports (quote ((#("asiento apertura" 0 1 (idx 0)) "%(binary) -f %(ledger-file) equity --real --strict Activo Pasivo") (#("balance" 0 1 (idx 1)) "%(binary) -f %(ledger-file) bal --strict --real -y %Y/%m/%d") (#("registro" 0 1 (idx 2)) "%(binary) -f %(ledger-file) reg --strict --real -y %Y/%m/%d") (#("cuenta" 0 1 (idx 3)) "%(binary) -f %(ledger-file) reg %(account) --real -y %Y/%m/%d") (#("por meses" 0 1 (idx 4)) "%(binary) -f %(ledger-file) reg %(account) -M --real -y %Y/%m/%d") (#("resumen" 0 1 (idx 5)) "%(binary) -f %(ledger-file) bal Gastos Ingresos --collapse-if-zero -y %Y/%m/%d") (#("cierre" 0 1 (idx 6)) "%(binary) -f %(ledger-file) bal --real --strict --format \" %-40(account) %10(market(display_total) * -1)\n%/\" --no-total --flat") (#("comparado" 0 1 (idx 7)) "%(binary) -f %(ledger-file) --real --strict cleared") (#("estudio de gastos" 0 1 (idx 8)) "%(binary) bal -f %(ledger-file) Gastos --current --format \"%-35((depth_spacer)+(partial_account)) %10(percent(market(display_total), market(parent.total))) %16(market(display_total))\n%/\""))))
Lo tengo en un fichero diferente y en código elisp
para facilitar su
carga cuando es necesario. Se puede tener en el fichero init.el
,
pero los informes suelen ser algo puntual, no necesito tener ese
código cargado cada vez que inicio emacs, ni siquiera cuando estoy
en ledger-mode
, porque la mayor parte de las veces sólo se
introducen datos. Necesitaré ver los informes, sólo cuando debo
compara cuentas con las anotadas en el banco, por ejemplo. O cuando
necesito saber en qué se ha gastado el dinero. Tan sólo hay que cargar
el código con M-x load-file
.
No voy a explicar todos los aspectos de los informes, porque cada uno
tiene sus manías y le gusta ver la información de una forma distinta y
hay tantas que son motivo de un capítulo completo en la documentación
de ledger-cli
. Sólo destacaré algunos aspectos muy concretos y
útiles. Por ejemplo, una opción que se repite bastante en los
informes es el formato de fecha -y %Y/%m/%d
para ver las fechas en
el formato ISO. Otra opción que se repite bastante es --real
que le
dice al sistema que tenga en cuenta sólo las transacciones reales y
deje a un lado las virtuales, como vimos antes en la entrada que
marcábamos como (Gastos:Hipoteca amortizado)
. La que más se repite
es, sin duda, la opción --strict
para que sólo haga listado con
cuentas definidas.
Para comprobarlo vamos a hacer un balance
habiendo introducido un
error en una cuenta a propósito como sigue a continuación:
2018/10/31 Compra de chuches Gastos:Otros Gastos:Metálco 2,30€ Activo:Metálico
Si ahora lanzamos una consulta de balance
que tenemos en ese
fichero, el resultado será el siguiente:
Report: balance Command: ledger -f /home/notxor/Sync/prueba-ledger.ledger bal --strict --real -y %Y/%m/%d =================================================================================================================== Warning: "/home/notxor/Sync/prueba-ledger.ledger", line 61: Unknown account 'Gastos:Otros Gastos:Metálco' 1.890,05€ Activo -364,29€ Bancos -285,34€ El saqueador y cia -78,95€ Ladrones y cia 2.160,04€ Inmuebles:Casa 11,65€ Metálico 82,65€ Plan de Pensiones 98,34€ Gastos 86,76€ Alimentación 85,49€ Mencabrona 24,03€ Intereses Hipoteca -16,00€ Lotería 3,55€ Otros Gastos 2,30€ Metálco 1,25€ Metálico -1.136,76€ Pasivo:Hipoteca -851,63€ Patrimonio:Balance Apertura -------------------- 0
Como vemos, lo hace, sin embargo nos aparece una línea de Warning
que nos dice el fichero y la línea donde ha encontrado una cuenta
desconocida.
Uno de los informes que más se utiliza es el que muestra un listado de una cuenta en concreto, por ejemplo, para cuadrar el valor que nos dice el banco que tenemos en la cuenta, con el valor que tenemos anotado, que como ya dije antes, no tiene por qué coincidir. Vamos a hacer un ejemplo:
- Lanzamos un informe con
C-c C-o C-r
seleccionamoscuenta
. - Decimos qué cuenta queremos, en nuestro caso:
Activo:Bancos:Ladrones y cia
. Además si estamos en el buffer deledger
situados en una línea con una cuenta determinada,ledger-mode
nos sugerirá esa cuenta como primera opción. El resultado nos aparece en un buffer de informe:
Report: cuenta Command: ledger -f /home/notxor/Sync/prueba-ledger.ledger reg Activo\:Bancos\:Ladrones\ y\ cia --real -y %Y/%m/%d ================================================================================================================== 2018/10/30 Balance de apertura Activo:Bancos:Ladrones y cia 6,54€ 6,54€ 2018/10/31 Compra semanal Activo:Bancos:Ladrones y cia -85,49€ -78,95€
Como vemos, sólo hay dos registros y sabemos que tenemos un descubierto de -78,95€ aunque el banco nos dice que tenemos 6,54€ en ella. ¿Dónde está el descuadre? Si recordamos, habíamos anotado la Compra semanal como pendiente de anotar, que es lo que ha sucedido ahora. Para comprobar que es así:
- Situados en el buffer
*Ledger Report*
y pulsamose
. - Modificamos el comando de informe añadiendo la opción
-U
y<RET>
. Eso ocultará las transacciones pendientes de anotar.
Si no coincide volvemos a editar la consulta para que aparezcan y
punteamos con la cuenta a ver qué transacciones se han anotado
ya. Situados en el buffer de informe, pulsando <RET>
en una de las
líneas del informe, ledger-mode
nos llevará al asiento
correspondiente. Por lo que buscar una transacción es más sencillo de
lo que parece cuando tenemos un fichero conteniendo la contabilidad de
varios años, si podemos acotar por fechas: por ejemplo, para que sólo
salgan las transacciones del mes de enero de este año se pueden
utilizar las opciones -b 2018/01/01
y -e 2018/01/31
. Como es
lógico -b
para el inicio (begin) y -e
para el final (end) del
periodo.
Cierre contable
Con periodicidad anual, generalmente, se hace un cierre contable
para observar cómo van las cosas. Bueno, realmente se puede hacer cada
vez que uno necesite echar un vistazo al estado de las cuentas. Para
eso me creé un informe que llamé cierre
. Lo destacable de este
informe es que me hace el asiento de cierre automáticamente utilizando
la opción --format
que va acompañada de una expresión algo más
compleja y por eso la explicaré aquí. El código en elisp
se
convertirá en
" %-40(account) %10(market(display_total) * -1)\n"
El formato, primero deja cuatro espacios en blanco y luego hay una
columna definida como %-40(account)
es decir: el nombre de la cuenta
con cuarenta caracteres de ancho alineados a la izquierda (por eso el
-). La siguiente columna es %10(market(display_total) * -1)\n
. Es
decir: 10 caracteres de ancho y un cálculo que básicamente es cambiar
de signo el valor total de la cuenta. El resultado en nuestro caso
será:
Activo:Bancos:El saqueador y cia 285,34€ Activo:Bancos:Ladrones y cia 78,95€ Activo:Inmuebles:Casa -2.160,04€ Activo:Metálico -11,65€ Activo:Plan de Pensiones -82,65€ Gastos:Alimentación -86,76€ Gastos:Alimentación:Mencabrona -85,49€ Gastos:Intereses Hipoteca -24,03€ Gastos:Lotería 16,00€ Gastos:Otros Gastos:Metálico -3,55€ Pasivo:Hipoteca 1.136,76€ Patrimonio:Balance Apertura 851,63€
Sin embargo, si la anotamos tal cual y actualizamos la consulta nos
saltará un error, porque en la cuenta de Gastos:Alimentación
está
contada dos veces la compra en el Mencabrona
de 85,49€ por lo que
tendremos que ajustar esos errores antes de hacer el cierre anual.
Una vez hecho el ajuste contable queda hacer la apertura, y para ello también creé un informe que lo hace.
Conclusión
Con mi intención de llevar toda mi información en ficheros de texto
plano, ledger-cli
me facilita el trabajo contable. No necesito
sofisticados programas de entorno gráfico con formatos cerrados y un
gran gasto de recursos gráficos y de memoria.