Correction : typo.
[tool/hledger.git] / doc / hledger.fr.slidy.ad
1 = Informatiser une comptabilité avec confiance
2 :author: git://git.autogeree.net/tool/hledger
3 :copyright: © 2014 (CC) BY Julien Moutinho <julm+hledger@autogeree.net>
4 :icons:
5 :iconsdir: ./icons
6 :numbered:
7 :toc:
8 :slidebackground: hledgersplash
9 :slidefontsizeadjust: -3
10 :incremental:
11 :revremark:
12 //:max-width: 45em
13 :scriptsdir: $PWD/javascripts
14 ifdef::backend-slidy2[:data-uri:]
15
16 ifdef::backend-slidy2[:slidebackground!:]
17
18 // a2x: --xsltproc-opts "--stringparam ulink.show 1"
19 // a2x: --xsltproc-opts "--stringparam ulink.footnotes 1"
20 // :source-highlighter: vim
21
22
23 == Le ++.ledger++ : un format de journal comptable ouvert.. et simple
24
25 [source,hledger]
26 ----
27 2014/05/01 Stand manif
28 Don:Anonyme -42
29 Caisse:Grève 42
30
31 2014/05/08 Propagande
32 Caisse:Grève -7
33 Achat:Impression:Tracts 7
34
35 ; Répéter ad nauseam
36 ----
37
38 [cols="a,a"]
39 |==================================
40 |
41 [float]
42 Les plus
43 ~~~~~~~~
44
45 [horizontal]
46 Transparent:: Visibilité de *toutes* les informations.
47 Pérenne:: Compréhensible sans logiciel particulier pour l’exploiter.
48 Modifiable:: Pas de verrou (plus ou moins illusoire) de validation.
49 Accès:: Pas de changement d’interface non-consenti.
50 Versionnable:: Suivi des modifications, fusion des contributions, et sauvegarde simples.
51 Écrit:: Langage pour s’exprimer clairement (par ex. dans un courriel ou une présentation).
52 Hors-ligne:: Pas besoin de réseau.
53 Interopérable::
54 Pas spécifique à un éditeur logiciel particulier
55 (sauf fonctionnalité expérimentale).
56 [horizontal]
57 ledger;; http://ledger-cli.org/[]
58 hledger;; http://hledger.org/[]
59 beancount;; http://furius.ca/beancount/[]
60 penny;; https://massysett.github.io/penny/[]
61 abandon;; https://github.com/hrj/abandon/[]
62
63 |
64 [float]
65 Les moins
66 ~~~~~~~~~
67
68 [horizontal]
69 Modifiable::
70 Mais, comme c'est un fichier, un véritable verrou validant +
71 peut être mis par une **signature cryptographique**.
72 +
73 [source,sh]
74 ----
75 % gpg --detach-sign $fichier.ledger
76 % gpg --verify $fichier.ledger.sig
77 ----
78
79 Textuel:: Préférable de ne pas avoir peur des caractères,
80 voire de bien savoir utiliser un éditeur de texte structuré.
81
82 Contrainte minimale::
83 « __N'a pas été conçu pour empêcher ses utilisateurs de commettre des actes stupides,
84 car cela les empêcherait aussi de réaliser des actes ingénieux.__ »
85 +
86 [source,hledger]
87 ----
88 2102/03/21 Chèque ; Date suspecte
89 5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser -145,00
90 5.Finance:1.Etablissement:2.Banque:001.Courant 145,00
91 ----
92 +
93 NOTE: Mais possibilité de vérifications d’invariants conventionnels avec des scripts.
94
95 |==================================
96
97 == ++hledger++ : un outil libre.. et convivial
98
99 [source,sh]
100 ----
101 % hledger balance '^6' '^7' --depth 2 -f Paris.2011.hledger
102 770,58€ 6.Charge
103 248,87€ 0.Achat
104 441,46€ 1.Service
105 55,25€ 2.Autre_service
106 25,00€ 5.Gestion
107 -726,00€ 7.Produit
108 -700,00€ 0.Vente
109 -26,00€ 5.Autre_gestion_courante
110 ‑-------------------
111 44,58€
112 ----
113
114 [cols="a,a"]
115 |==================================
116 |
117 [float]
118 Les plus
119 ~~~~~~~~
120
121 Philosophie Unix::
122 +
123 * « __Écrivez des programmes qui effectuent une seule chose et qui le font bien.__ »
124 * « __Écrivez des programmes qui collaborent.__ »
125 * « __Écrivez des programmes pour gérer des flux de texte, +
126 car c'est une interface universelle.__ »
127
128 Utilisation, Étude, Modification, Duplication::
129 Permises techniquement et légalement +
130 (« logiciel libre » sous ++GNU/GPLv3++)
131
132 Rigueur::
133 Programmé en http://fr.wikipedia.org/wiki/Haskell[Haskell]
134 [horizontal]
135 Fonctionnel pur;; Aucune mutation de données externes à une fonction (sans effet de bord).
136 Typage statique;; Vérification des erreurs de type avant l’exécution du programme.
137 Typage fort;; Aucune conversion implicite de types de données.
138
139 Relisible:: ≈13 000 lignes de Haskell (ou 160 écrans de 80 lignes) +
140 (plus ≈1 800 lignes pour ++hledger-web++).
141 +
142 NOTE: À équivalence fonctionnelle,
143 OpenERPv7 ≈80 000 lignes de Python (≈1 000 écrans).
144
145 Ancienneté:: Depuis 2007 (≈7 ans).
146
147 Portable:: GNU/Linux, Apple/MacOS, Microsoft/Windows
148 [horizontal]
149 Ligne de commande::
150 Contrôle l’ordinateur avec le langage.
151 +
152 [source,sh]
153 ----
154 % hledger add -f $fichier.hledger
155 % hledger balance -f $fichier.hledger
156 ----
157
158 Interface Web::
159 +
160 [source,sh]
161 ----
162 % hledger-web --server -f $fichier.hledger
163 % firefox "http://localhost:5000"
164 ----
165
166 Support:: ≈1 développeur à mi-temps-libéré
167 +
168 * Simon Michael (sm) <simon@joyful.com>
169 +
170 NOTE: Dons @ https://www.gittip.com/simonmichael/[]
171 +
172 [horizontal]
173 Messagerie instantanée;; <irc://irc.freenode.net#ledger>
174 Liste de discussion;; <hledger+subscribe@googlegroups.com>
175
176 Extensible::
177 +
178 [source,sh]
179 ----
180 % ghc hledger-fait-ce-que-je-veux.hs
181 % ./hledger-fait-ce-que-je-veux -f $fichier.hledger
182 ----
183
184 |
185 [float]
186 Les moins
187 ~~~~~~~~~
188
189 Pas tout en un::
190 Fait de la comptabilité, **et juste** de la comptabilité ;
191 pas un logiciel intégré type ERP (Enterprise Resource Planning)
192 du genre https://www.odoo.com/[Odoo] (anciennement « OpenERP ») :
193 Comptabilité + Point de vente + Facturation + Paye + Gestion de stock + Adhésion + Calendrier + Wiki + ...
194
195 En ligne de commande::
196 Peur **irrationnelle** mais fréquente,
197 d’être libre et d’avoir le pouvoir sur la machine,
198 au lieu d’être captif d’une interface.
199 +
200 NOTE: L’interface Web est simple, et s’améliore.
201
202 Read The Fucking Manual::
203 De même que maîtriser un plan comptable néçessite
204 en plus de le parcourir de **s’informer** sur son utilisation, +
205 de même maîtriser un langage et un logiciel en ligne de commande nécessite
206 de **s’informer** sur sa syntaxe, sa sémantique et son utilisation.
207 +
208 NOTE: http://hledger.org/manual/[].
209
210 |==================================
211
212 == Langage d’un fichier +.ledger+
213 Un +.ledger+ est un fichier de texte brut respectant une syntaxe préçise
214 qui forme une succession d’écritures comptables, classées librement.
215
216 ifdef::backend-slidy2[>>>]
217 === Définition informelle
218 [source,hledger]
219 .Fichier ++data/exemple-syntaxe.ledger++
220 ----
221 include::data/exemple-syntaxe.ledger[]
222 ----
223
224 .Conventions usuelles
225 * Classement des écritures par date.
226 * Classement des flux par signe, puis compte.
227
228 === Définition formelle
229
230 [cols="a,a",options="header"]
231 |==================================
232 ^|Syntaxe (grammaire https://fr.wikipedia.org/wiki/Forme_de_Backus-Naur[BNF])
233 ^|Informations (signatures fonctionnelles)
234 |
235 [source,conf]
236 -----------------------------------
237 journal ::= (écriture \| commentaire \| "⏎" \| "␣")*
238 -----------------------------------
239 |
240 [horizontal]
241 :role: math
242 **journal**:: latexmath:[$
243 :\>f:\textcolor{#D2691E}{\textbf{fichier}} →
244 \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack$]
245 |
246 [source,conf]
247 ----
248 écriture ::= date "␣" "␣"* libellé commentaire "⏎"
249 ("␣" flux "⏎")*
250 date ::= (année "/")? mois "/" jour
251 libellé ::= (· - (";"\|"⏎"))*
252 ----
253 |
254 [horizontal]
255 :role: math
256 **date**:: latexmath:[$
257 :\>e:\textcolor{#D2691E}{\textbf{\acute{e}criture}} →
258 (\textcolor{#083194}{\textbf{ann\acute{e}e}}:\textcolor{#D2691E}{\textbf{ℕ}},~
259 \textcolor{#083194}{\textbf{mois}}:\{\textcolor{#D2691E}{\textbf{01}},...,\textcolor{#D2691E}{\textbf{12}}\},~
260 \textcolor{#083194}{\textbf{jour}}:\{\textcolor{#D2691E}{\textbf{01}},...,\textcolor{#D2691E}{\textbf{31}}\})$]
261 **libellé**:: latexmath:[$
262 :\>e:\textcolor{#D2691E}{\textbf{\acute{e}criture}} →
263 \textcolor{#D2691E}{\textbf{texte}}$]
264 **commentaire**:: latexmath:[$
265 :\>e:\textcolor{#D2691E}{\textbf{\acute{e}criture}} →
266 \textcolor{#D2691E}{\textbf{texte}}$]
267 **tags**:: latexmath:[$
268 :\>e:\textcolor{#D2691E}{\textbf{\acute{e}criture}} →
269 \lbrack\textcolor{#D2691E}{\textbf{tag}}\rbrack
270 \ =\ \textbf{tags}~(\textbf{commentaire}~e)$]
271 **flux**:: latexmath:[$
272 :\>e:\textcolor{#D2691E}{\textbf{\acute{e}criture}} →
273 \lbrack\textcolor{#D2691E}{\textbf{flux}}\rbrack$]
274 |
275 [source,conf]
276 ----
277 flux ::= compte "␣␣" "␣"* ("-" crédit \| débit) ("␣"\|"⏎")* commentaire
278 compte ::= nom ( ":" nom )*
279 nom ::= (· - (":"\|"⏎")) (· - (":"\|"⏎"))*
280 crédit ::= quantité
281 débit ::= quantité
282 ----
283 |
284 [horizontal]
285 :role: math
286 **compte**:: latexmath:[$
287 :\>f:\textcolor{#D2691E}{\textbf{flux}} →
288 \lbrack\textcolor{#D2691E}{\textbf{nom}}\rbrack$]
289 **montant**::
290 latexmath:[$
291 :\>f:\textcolor{#D2691E}{\textbf{flux}} → \textcolor{#D2691E}{ℚ} = \displaystyle{
292 \left\{\begin{array}{ll} -~(\textbf{cr\acute{e}dit}~f) & \mathit{\mbox{si défini}} \\
293 (\textbf{d\acute{e}bit}~f) & \mathit{\mbox{sinon}}
294 \end{array}\right}$]
295 **tags**:: latexmath:[$
296 :\>f:\textcolor{#D2691E}{\textbf{flux}} →
297 \lbrack\textcolor{#D2691E}{\textbf{tag}}\rbrack
298 \ =\ \textbf{tags}~(\textbf{commentaire}~f)$]
299 |
300 [source,conf]
301 ----
302 commentaire ::= ( ";" (tag ":" valeur? \| ·)* )
303 ( ("⏎"\|"␣")* ";" (tag ":" valeur? \| ·)* )*
304 ----
305 |
306 [horizontal]
307 :role: math
308 **tags**:: latexmath:[$
309 :\>m:\textcolor{#D2691E}{\textbf{commentaire}} →
310 \lbrack\textcolor{#D2691E}{\textbf{tag}}\rbrack$]
311 **tag**:: latexmath:[$
312 :\>(\textcolor{#083194}{\textbf{tag}}:\textcolor{#D2691E}{\textbf{texte}},%
313 ~\textcolor{#083194}{\textbf{valeur}}:\textcolor{#D2691E}{\textbf{\mbox{texte}}\>?})$]
314 |==================================
315
316 == Commandes `hledger`
317
318 [source,sh]
319 .Syntaxe quasiment commune à toutes les commandes ++hledger++
320 ----
321 % hledger $commande $options $filtre -f $fichier.ledger
322 ----
323
324 ifdef::backend-slidy2[>>>]
325 === Afficher le plan comptable (`accounts`)
326
327 [cols="a,a"]
328 |==================================
329 |
330 [float]
331 [source,sh]
332 ----
333 % hledger accounts --tree -f data/exemple-syntaxe.ledger
334 sys::[hledger accounts --tree -f data/exemple-syntaxe.ledger]
335 ----
336
337 [source,sh]
338 ----
339 % hledger accounts --flat -f data/exemple-syntaxe.ledger
340 sys::[hledger accounts --flat -f data/exemple-syntaxe.ledger]
341 ----
342
343 [source,sh]
344 ----
345 % hledger accounts --tree '^A' -f data/exemple-syntaxe.ledger
346 sys::[hledger accounts --tree '^A' -f data/exemple-syntaxe.ledger]
347 ----
348 |
349 [float]
350 **comptes**::
351 latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack → \{\textcolor{#D2691E}{\textbf{compte}}\}$] +
352 = « __ensemble des comptes vers lesquels fluent les écritures__ » +
353 latexmath:[$=\{\ (\textbf{compte}\>f)\ \|\ f ← (\textbf{flux}\>e)\ \|\ e ← \mathbb E\ \}$]
354 **compte_parent**::
355 latexmath:[$:\>c : \textcolor{#D2691E}{\textbf{compte}} → \textcolor{#D2691E}{\textbf{compte}}\>?$] +
356 = « __plus long compte strictement préfixe d’un compte__ » +
357 latexmath:[$=\>c_{\lbrack0,\cdots,\|c\|-2\rbrack}\ \mbox{si}\ \|c\| \ge 2$]
358 **hiérachie_de_compte**::
359 latexmath:[$:\>\mathbb c : \textcolor{#D2691E}{\textbf{compte}} → \lbrack\textcolor{#D2691E}{\textbf{compte}}\rbrack$] +
360 = « __liste des comptes préfixes d’un compte__ » +
361 // = « __ensemble des comptes vers lesquels fluent les écritures et leur comptes parents__ » +
362 latexmath:[$=\>\lbrack{\ c\ :\ \lbrack{\ c\ \|\ c ← (\mathbf{compte\mbox{_}parent}\>{c})}\ \rbrack}\ \rbrack$]
363
364 |==================================
365
366 === Filtrer des écritures (`print`)
367
368 ++hledger++ permet de filtrer les écritures selon leurs données
369 (date, libellé, comptes, montants, tags, ...) ;
370 des expressions rationnelles peuvent être utilisées à cette fin.
371
372 NOTE: Cf. manuel : http://hledger.org/manual#query-arguments[]
373
374 [source,hledger]
375 ----
376 % hledger print 'A' -f data/exemple-syntaxe.ledger
377 sys::[hledger print 'A' -f data/exemple-syntaxe.ledger]
378 ----
379
380 [source,hledger]
381 ----
382 % hledger print '^A' -f data/exemple-syntaxe.ledger
383 sys::[hledger print '^A' -f data/exemple-syntaxe.ledger]
384 ----
385
386 [source,hledger]
387 ----
388 % hledger print '^B$' -f data/exemple-syntaxe.ledger
389 sys::[hledger print '^B$' -f data/exemple-syntaxe.ledger]
390 ----
391
392 [horizontal]
393 .Afficher des « journaux auxiliaires » (exemples approximatifs)
394 **Banque**::
395 +
396 [source,sh]
397 ----
398 hledger print -f $fichier.ledger '^5.Finance:1.Etablissement:2.Banque:'
399 ----
400 **Achats**::
401 +
402 [source,sh]
403 ----
404 hledger print -f $fichier.ledger '^(2.Immobilisation:1.Corporelle:|6.Charge:(0.Achat|1.Service|2.Autre_service):)'
405 ----
406 **Vente**::
407 +
408 [source,sh]
409 ----
410 hledger print -f $fichier.ledger '^7.Produit:0.Vente:'
411 ----
412 **Caisse**::
413 +
414 [source,sh]
415 ----
416 hledger print -f $fichier.ledger '^5.Finance:3.Caisse:'
417 ----
418 **Paye**::
419 +
420 [source,sh]
421 ----
422 hledger print -f $fichier.ledger '6.Charge:(3.Impôt:(1.|3.):|4.Personnel:)'
423 ----
424 **À nouveau**::
425 +
426 [source,sh]
427 ----
428 hledger print -f $fichier.ledger tag:ANV
429 ----
430 **Opération_Diverses**::
431 +
432 [source,sh]
433 ----
434 hledger print -f $fichier.ledger tag:OD
435 ----
436
437
438 === Calculer des soldes (`balance`)
439
440 [cols="a,a"]
441 |==================================
442 |
443 [float]
444 [source,sh]
445 .Balance de toutes les écritures
446 ----
447 % hledger balance -f data/exemple-syntaxe.ledger
448 sys::[hledger balance -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/']
449 ----
450
451 NOTE: Toutes les écritures devant avoir leur balance nulle,
452 cette balance sur toutes les écritures est également nulle.
453
454 [source,sh]
455 .Balance sur des comptes filtrés par expression rationnelle
456 ----
457 % hledger balance 'A' -f data/exemple-syntaxe.ledger
458 sys::[hledger balance 'A' -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/']
459 ----
460
461 [source,sh]
462 .Balance sur un compte racine
463 ----
464 % hledger balance '^A' -f data/exemple-syntaxe.ledger
465 sys::[hledger balance '^A' -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/']
466 ----
467
468 [source,sh]
469 .Sans accumulation des soldes d’une période à l’autre
470 ----
471 % hledger balance --daily -f data/exemple-syntaxe.ledger
472 sys::[hledger balance --daily -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/;s/[|]/\\|/g']
473 ----
474
475 [source,sh]
476 .Avec accumulation des soldes d’une période à l’autre
477 ----
478 % hledger balance --daily --historical -f data/exemple-syntaxe.ledger
479 sys::[hledger balance --daily --historical -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/;s/[|]/\\|/g']
480 ----
481
482 //[source,sh]
483 //.Suivi des comptes
484 //----
485 //% hledger balance -b 2012/02/01 -e 2012/04/30 --monthly -f $fichier.ledger >/tmp/bal.flow
486 //% hledger balance -b 2012/02/01 -e 2012/04/30 --cumulative --monthly -f $fichier.ledger >/tmp/bal.cumulative
487 //% hledger balance -b 2012/02/01 -e 2012/04/30 --historical --monthly -f $fichier.ledger >/tmp/bal.historical
488 //% gvimdiff -o /tmp/bal.{cumulative,historical}
489 //----
490 //image::data/gvimdiff-cumulative-historical.png[]
491 |
492 [float]
493 [horizontal]
494 **balance**::
495 latexmath:[$:\>\mathbb F : \lbrack\textcolor{#D2691E}{\textbf{flux}}\rbrack → ℚ$] +
496 = « __somme des montants des flux__ » +
497 latexmath:[$=\>{(\ m\ \|\ m ← m + (\textbf{montant}\>f)\ \|\ f ← \mathbb F\ \|\ m ← 0\ )$] +
498 **solde_de_compte**::
499 latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack → c : \textcolor{#D2691E}{\textbf{compte}} → ℚ$] +
500 latexmath:[$=\>{\textbf{balance}\>\lbrack{\ f\ \|\ f ← (\textbf{flux}\>e),\ c\>≼\>(\textbf{compte}\>f)\ \|\ e ← \mathbb E\ }\rbrack$] +
501 // latexmath:[$=\>{\displaystyle{\sum_{e ← \mathbb E}}\left(\sum_{\stackrel{f ← (\textbf{flux}\>e),}{c\ ≼\ (\textbf{compte}\>f)}}(\textbf{montant}\>f})\right)$]
502 **solde**::
503 latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack →
504 \lbrack\textcolor{#D2691E}{\textbf{flux}}\rbrack$] +
505 latexmath:[$=\>\displaystyle{\left\lbrack
506 \begin{array}{l}
507 (\textcolor{#083194}{\textbf{compte}}=c´, \textcolor{#083194}{\textbf{montant}}=m) \\
508 \|\ m ← (\mathbf{\mbox{solde_de_compte}}\,\mathbb E\,c´) \\
509 \|\ c´ ← (\mathbf{plan\mbox{_}comptable}\,c) \\
510 \|\ c ← (\mathbf{comptes}\,\mathbb E)
511 \end{array}}\right\rbrack$]
512
513 |==================================
514
515 Balance nulle de toute écriture::
516 ++hledger++ n’accepte aucune écriture qui ne respecte
517 pas cette contrainte de la tâche comptable : +
518 +
519 « __Pour toute écriture, tout ce qui est [black]_débité_ (+++++) dans ses comptes +
520 est forcément [black]_crédité_ (++-++) dans ses autres comptes, +
521 et réciproquement.__ »
522 +
523 * Formellement : latexmath:[$\forall e : \textcolor{#D2691E}{\textbf{\acute{e}criture}},
524 \ \textbf{balance}\>(\textbf{flux}\>{e}) = 0$]
525 +
526 [source,hledger]
527 ----
528 2014/04/12
529 Compte:Crédité -1234,56
530 Compte:Débité ; 1234,56 (montant inféré)
531 ----
532
533 === Calculer les écritures de clôture et ouverture (`equity`)
534 ++hledger-equity++ est du sucre syntaxique autour de ++hledger balance++,
535 il calcule une balance de soldes de comptes
536 et en fait deux écritures aux montants opposés,
537 respectivement :
538 [horizontal]
539 de clôture:: pour les solder à zéro en fin d’exercice ;
540 d’ouverture:: pour les réinitialiser à leur solde du précédent exercice.
541
542 [cols="a,a"]
543 |==================================
544 |
545 [float]
546 [source,sh]
547 ----
548 % hledger-equity -f data/exemple-syntaxe.ledger
549 sys::[hledger-equity -f data/exemple-syntaxe.ledger]
550 ----
551
552 [source,sh]
553 ----
554 % hledger-equity -f data/exemple-syntaxe.ledger '^A'
555 sys::[hledger-equity -f data/exemple-syntaxe.ledger '^A']
556 ----
557
558 [source,sh]
559 ----
560 % hledger-equity -f data/exemple-syntaxe.ledger '^B'
561 sys::[hledger-equity -f data/exemple-syntaxe.ledger '^B']
562 ----
563
564 |
565 [float]
566 [source,sh]
567 .Solde des comptes de gestion et calcul du compte de résultat
568 ----
569 % hledger balance --flat '^6' '^7' -f Paris.2011.hledger
570 248,87€ 6.Charge:0.Achat:6.Non_stocké:8.Autre_Matière,Fourniture:1.Atelier
571 441,46€ 6.Charge:1.Service:3.Location:2.Immobilière
572 24,00€ 6.Charge:2.Autre_service:3.Communication:6.Catalogue,Imprimé
573 31,25€ 6.Charge:2.Autre_service:7.Service_bancaire
574 25,00€ 6.Charge:5.Gestion:8.Divers:6.Cotisation_(vie_statutaire)
575 -700,00€ 7.Produit:0.Vente:6.Prest’action
576 -20,00€ 7.Produit:5.Autre_gestion_courante:6.Cotisation
577 -6,00€ 7.Produit:5.Autre_gestion_courante:8.Divers
578 ‑-------------------
579 44,58€ # <-- Résultat déficitaire de 44,58€
580 ----
581
582 [source,hledger]
583 .La même chose mais au format ++.ledger++
584 ----
585 % hledger-equity '^6' '^7' -f Paris.2011.hledger
586 2014/07/29
587 6.Charge:0.Achat:6.Non_stocké:8.Autre_Matière,Fourniture:1.Atelier -248,87€
588 6.Charge:1.Service:3.Location:2.Immobilière -441,46€
589 6.Charge:2.Autre_service:3.Communication:6.Catalogue,Imprimé -24,00€
590 6.Charge:2.Autre_service:7.Service_bancaire -31,25€
591 6.Charge:5.Gestion:8.Divers:6.Cotisation_(vie_statutaire) -25,00€
592 7.Produit:0.Vente:6.Prest'action 700,00€
593 7.Produit:5.Autre_gestion_courante:6.Cotisation 20,00€
594 7.Produit:5.Autre_gestion_courante:8.Divers 6,00€
595 equity:closing balances 44,58€
596
597 2014/07/29
598 6.Charge:0.Achat:6.Non_stocké:8.Autre_Matière,Fourniture:1.Atelier 248,87€
599 6.Charge:1.Service:3.Location:2.Immobilière 441,46€
600 6.Charge:2.Autre_service:3.Communication:6.Catalogue,Imprimé 24,00€
601 6.Charge:2.Autre_service:7.Service_bancaire 31,25€
602 6.Charge:5.Gestion:8.Divers:6.Cotisation_(vie_statutaire) 25,00€
603 7.Produit:0.Vente:6.Prest'action -700,00€
604 7.Produit:5.Autre_gestion_courante:6.Cotisation -20,00€
605 7.Produit:5.Autre_gestion_courante:8.Divers -6,00€
606 equity:opening balances -44,58€
607 ----
608
609 |==================================
610
611 === Suivre un compte (`register`)
612
613 [source,sh]
614 .Suivi de la somme des crédits du compte `5112`
615 ----
616 % hledger register -f Paris.2011.hledger 'amt:<0' '^5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser'
617 2011/05/23 Remise chq 0994029 ..Chèque_à_encaisser -100,00€ -100,00€
618 2011/09/29 Remise chq 1101801 ..Chèque_à_encaisser -20,00€ -120,00€
619 2011/11/18 Remise chq 1101802 ..Chèque_à_encaisser -2000,00€ -2120,00€
620 ----
621
622 [source,sh]
623 .Suivi de la somme des débits du compte `5112`
624 ----
625 % hledger register -f Paris.2011.hledger 'amt:>0' '^5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser'
626 2011/05/15 Prêt ..Chèque_à_encaisser 100,00€ 100,00€
627 2011/09/20 Cotisations ..Chèque_à_encaisser 20,00€ 120,00€
628 2011/11/10 Prêt ..Chèque_à_encaisser 2000,00€ 2120,00€
629 ----
630
631 NOTE: Si ces deux commandes ne donnent pas le même montant final
632 c’est qu’il reste des chèques à encaisser.
633
634
635 === Observer des statistiques (`stats`, `activity`)
636
637 [cols="a,a"]
638 |==================================
639 |
640 [float]
641 [source,sh]
642 .Statistiques annuelles
643 ----
644 % hledger stats --period yearly -f Paris.2012.hledger
645 Main journal file : Paris.2012.hledger
646 Included journal files : Paris.Plan_comptable.hledger
647 Cyclofficine.Plan_comptable.hledger
648 Transactions span : 2012-01-01 to 2013-01-01 (366 days)
649 Last transaction : 2012-12-31 (576 days ago)
650 Transactions : 210 (0.6 per day)
651 Transactions last 30 days: 0 (0.0 per day)
652 Transactions last 7 days : 0 (0.0 per day)
653 Payees/descriptions : 144
654 Accounts : 448 (depth 6)
655 Commodities : 1 (€)
656 ----
657
658 |
659 [float]
660 [source,sh]
661 .Jours de l’année avec au moins 5 flux
662 ----
663 hledger activity --period daily -f Paris.2012.hledger \| grep '\*\{5\}'
664 2012-01-01 ***********
665 2012-02-29 ******
666 2012-03-23 ******
667 2012-03-31 *********
668 2012-04-03 ******
669 2012-04-30 ********
670 2012-05-03 ****************
671 2012-05-11 ********
672 2012-05-14 ****************
673 2012-05-31 **********
674 2012-06-11 ******************
675 2012-06-30 *************
676 2012-07-13 *********
677 2012-07-17 ******
678 2012-07-30 ******
679 2012-07-31 ***********
680 2012-08-31 ******
681 2012-09-26 ********
682 2012-09-30 ******
683 2012-11-13 ********
684 2012-11-30 *****
685 2012-12-31 *************
686 ----
687
688 |==================================
689
690 === Écrire des écritures (`add`)
691
692 [source,sh]
693 .Sélection d’un modèle selon le libellé
694 ----
695 % hledger add -f /tmp/test.ledger
696 Adding transactions to journal file /tmp/test.ledger
697 Any command line arguments will be used as defaults.
698 Use tab key to complete, readline keys to edit, enter to accept defaults.
699 An optional (CODE) may follow transaction dates.
700 An optional ; COMMENT may follow descriptions or amounts.
701 If you make a mistake, enter < at any prompt to restart the transaction.
702 To end a transaction, enter . when prompted.
703 To quit, enter . at a date prompt or press control-d or control-c.
704 Date [2014/07/30]: 2014/01/01
705 Description: Libellé de l’écriture ; UN_TAG:, Autre_tag:Avec_Valeur
706 Account 1: A:AA
707 Amount 1: -42
708 Account 2: B:BB:BBB
709 Amount 2 [42.0]: 40
710 Account 3: B:A
711 Amount 3 [2.0]:
712 Account 4 (or . or enter to finish this transaction): .
713 2014/01/01 Libellé de l’écriture ; UN_TAG:, Autre_tag:Avec_Valeur
714 A:AA -42
715 B:BB:BBB 40
716 B:A 2.0
717
718 Save this transaction to the journal ? [y]: y
719 Saved.
720 Starting the next transaction (. or ctrl-D/ctrl-C to quit)
721 Date [2014/01/01]:
722 Description: Libellé d’une autre écriture
723 Using this similar transaction for defaults:
724 2014/01/01 Libellé de l’écriture ; UN_TAG:, Autre_tag:Avec_Valeur
725 A:AA -42
726 B:BB:BBB 40
727 B:A 2.0
728
729 Account 1 [A:AA]:
730 Amount 1 [-42.0]: 100
731 Account 2 [B:BB:BBB]: B
732 Amount 2 [-100.0]:
733 Account 3 (or . to finish this transaction) [B:A]: .
734 2014/01/01 Libellé d’une autre écriture
735 A:AA 100
736 B -100.0
737
738 Save this transaction to the journal ? [y]: y
739 Saved.
740 Starting the next transaction (. or ctrl-D/ctrl-C to quit)
741 Date [2014/01/01]: .
742 ----
743
744 [source,sh]
745 .Complètement automatique des comptes
746 ----
747 % hledger add -f data/exemple-plan-comptable.ledger
748 Adding transactions to journal file /home/julm/admin/cyber.coop/src/tool/hledger/doc/data/exemple-plan-comptable.ledger
749 Any command line arguments will be used as defaults.
750 Use tab key to complete, readline keys to edit, enter to accept defaults.
751 An optional (CODE) may follow transaction dates.
752 An optional ; COMMENT may follow descriptions or amounts.
753 If you make a mistake, enter < at any prompt to restart the transaction.
754 To end a transaction, enter . when prompted.
755 To quit, enter . at a date prompt or press control-d or control-c.
756 Date [2014/07/30]: yesterday
757 Description: Trololo
758 Account 1: 1.Capital:
759 1.Capital:0.Fonds 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement
760 1.Capital:0.Fonds:2.SDR 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:1.État
761 1.Capital:0.Fonds:2.SDR:4.Apport 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:2.Région
762 1.Capital:0.Fonds:2.SDR:6.Sub_invest_BR 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:3.Département
763 1.Capital:0.Fonds:3.ADR 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:4.Commune
764 1.Capital:0.Fonds:3.ADR:4.Apport 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:5.Collectivité_publique
765 1.Capital:0.Fonds:3.ADR:6.Sub_invest_BR 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:6.Entreprise_publique
766 1.Capital:0.Fonds:6.Réserve 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:7.Organisme_privé
767 1.Capital:0.Fonds:6.Réserve:3.Statutaire 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:8.Autre
768 1.Capital:0.Fonds:6.Réserve:8.Autre 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:2.Autre
769 1.Capital:1.Report 1.Capital:5.Provision_risque&charge
770 1.Capital:1.Report:0.Bénéfice 1.Capital:5.Provision_risque&charge:1.Risque
771 1.Capital:1.Report:5.Financeur 1.Capital:5.Provision_risque&charge:5.Impôt
772 1.Capital:1.Report:9.Déficit 1.Capital:5.Provision_risque&charge:8.Autre
773 1.Capital:2.Résultat 1.Capital:5.Provision_risque&charge:8.Autre:2.Congés_à_payer
774 1.Capital:2.Résultat:0.Bénéfice 1.Capital:6.Emprunt,Dette
775 1.Capital:2.Résultat:9.Déficit 1.Capital:6.Emprunt,Dette:4.Etablissement_crédit
776 1.Capital:3.Sub_invest_BNR 1.Capital:6.Emprunt,Dette:5.Dépôt,Caution
777 1.Capital:3.Sub_invest_BNR:1.Equipement 1.Capital:6.Emprunt,Dette:8.Autre
778 1.Capital:3.Sub_invest_BNR:1.Equipement:1.État 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt
779 1.Capital:3.Sub_invest_BNR:1.Equipement:2.Région 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:1.Bénévole
780 1.Capital:3.Sub_invest_BNR:1.Equipement:3.Département 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:2.Salarié-e
781 1.Capital:3.Sub_invest_BNR:1.Equipement:4.Commune 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:3.Cyclofficine
782 1.Capital:3.Sub_invest_BNR:1.Equipement:5.Collectivité_publique 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:4.Autre
783 1.Capital:3.Sub_invest_BNR:1.Equipement:6.Entreprise_publique 1.Capital:6.Emprunt,Dette:8.Autre:7.Dette
784 1.Capital:3.Sub_invest_BNR:1.Equipement:7.Organisme_privé 1.Capital:9.Fonds_dédiés
785 1.Capital:3.Sub_invest_BNR:1.Equipement:8.Autre 1.Capital:9.Fonds_dédiés:4.Sub_exploit
786 1.Capital:3.Sub_invest_BNR:8.Autre 1.Capital:9.Fonds_dédiés:5.Don_affecté
787 1.Capital:3.Sub_invest_BNR:9.Compte_résultat
788 Account 1: 1.Capital:6.Emprunt,Dette
789 1.Capital:6.Emprunt,Dette 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:4.Autre
790 1.Capital:6.Emprunt,Dette:4.Etablissement_crédit 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:1.Bénévole 1.Capital:6.Emprunt,Dette:8.Autre:7.Dette
791 1.Capital:6.Emprunt,Dette:5.Dépôt,Caution 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:2.Salarié-e
792 1.Capital:6.Emprunt,Dette:8.Autre 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:3.Cyclofficine
793 Account 1: 1.Capital:6.Emprunt,Dette:4.Etablissement_crédit
794 Amount 1: -666 ; Don’t panic
795 Account 2: 5.Finance:
796 5.Finance:1.Etablissement 5.Finance:1.Etablissement:2.Banque:002.Livret 5.Finance:8.Virement
797 5.Finance:1.Etablissement:1.Valeur 5.Finance:3.Caisse 5.Finance:8.Virement:0.Interne
798 5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser 5.Finance:3.Caisse:1.Siège 5.Finance:8.Virement:1.Fonds
799 5.Finance:1.Etablissement:2.Banque:001.Courant 5.Finance:3.Caisse:2.Atelier
800 Account 2: 5.Finance:1.Etablissement:2.Banque:001.Courant
801 Amount 2 [666.0]:
802 Account 3 (or . or enter to finish this transaction): .
803 2014/07/29 Trololo
804 1.Capital:6.Emprunt,Dette:4.Etablissement_crédit -666 ; Don’t panic
805 5.Finance:1.Etablissement:2.Banque:001.Courant 666.0
806
807 Save this transaction to the journal ? [y]: y
808 Saved.
809 Starting the next transaction (. or ctrl-D/ctrl-C to quit)
810 Date [2014/07/29]: .
811 ----
812
813 == Exercice comptable
814
815 ifdef::backend-slidy2[>>>]
816 === Plan comptable d’une association
817
818 //NOTE: Brouillon de documentation @ https://wiki.cyclocoop.org/Comptabilité/Document/Plan_comptable/[]
819
820 [source,hledger]
821 ----
822 include::data/Cyclofficine.Plan_comptable.hledger[]
823 ----
824
825 //[cols="a,a"]
826 //|==================================
827 //|
828 //[float]
829 //+
830 //[source,hledger]
831 //----
832 //01/01 Vélo ; Écriture d’engagement (pièce comptable : facture)
833 // 7.Produit:0.Vente:1.Produit_fini:1.Vélo -80
834 // 5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser 80
835 //01/02 Chèque ; Écriture de paiement (pièce comptable : relevé de compte)
836 // 5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser -80
837 // 5.Finance:1.Etablissement:2.Banque:001.Courant 80
838 //----
839 //+
840 //NOTE: pour des espèces, transiter par : ++5.Finance:3.Caisse:1.Siège++
841
842 //|==================================
843
844 === Relation de Chasles par écritures d’[black]*engagement* et de [black]*paiement*
845
846 ++hledger++ laisse l’humain s’occuper de ce principe de la tâche comptable
847 qui traduit la réalité temporelle des mouvements d’argent.
848
849 [source,hledger]
850 ----
851 01/01 Prestation ; Écriture d’engagement (pièce comptable : facture)
852 7.Produit:0.Vente:6.Prest'action -700,00
853 4.Tiers:1.Client:1.Client:1.Bien,Prestation:007.Mairie_du_XI 700,00
854 01/14 Virement ; Écriture de paiement (pièce comptable : relevé de compte)
855 4.Tiers:1.Client:1.Client:1.Bien,Prestation:007.Mairie_du_XI -700,00
856 5.Finance:1.Etablissement:2.Banque:001.Courant 700,00
857 ----
858
859 ==== Soldes nuls souhaitables
860
861 - Écritures des recettes
862 +
863 1. latexmath:[$\sum{\mbox{ventes}} + \sum{\mbox{dons}} = \sum{\mbox{espèces entrées en caisse}} + \sum{\mbox{Chèques à encaisser}}$] +
864 (Total des ventes + dons == Total d’espèces entrée en caisse + chèques à encaisser (5112))
865
866 2. Total chèques à encaisser (5112) == Total remises de chèques à la banque (512) (+/- chèques non déposés en banque)
867 +
868 NOTE: vérifier qu’il ne reste plus de chèques comptabilisés dans le tiroir
869
870 3. Solde du compte caisse (531) == Total entrées espèces en caisse - Total des sorties
871 (remises d’espèces en banque - sorties d’achats - erreur de caisse)
872
873 - Écritures de paye
874 +
875 TODO
876
877 == Import et export avec ++hledger++
878
879 Comme la plupart des logiciels de comptabilité,
880 ++hledger++ interropère avec le format de tableaux
881 http://en.wikipedia.org/wiki/Comma-separated_values[CSV]
882
883 ++hledger-print-csv++::
884 +
885 [source,sh]
886 ----
887 % hledger-print-csv -f data/exemple-syntaxe.ledger
888 sys::[hledger-print-csv -f data/exemple-syntaxe.ledger]
889 ----
890
891 ++*.ledger.rules++:: http://hledger.org/manual#csv-files[]
892 +
893 [source,txt]
894 ----
895 % cat banque-postale.livret_A.csv.rules
896 skip 1
897 fields date,description,amount
898 date-format %-d/%-m/%Y
899
900 if .INTERETS ACQUIS DECOMPTE D'INTERETS .
901 account1 Banque:Postale:Livret_A
902 account2 Recette:Intérêts:Inflation
903 ----
904
905 .Pour des besoins plus complexes
906 - https://github.com/eval/total_recall[]
907 - https://github.com/quentinsf/icsv2ledger[]
908 - ou script sur mesure (ex. ++hledger-of-oxygen-csv.pl++)
909
910 === Feuilles de calculs des documents comptables
911
912 ifdef::backend-slidy2[>>>]
913 ==== Bilan financier
914 TODO
915
916 ifdef::backend-slidy2[>>>]
917 ==== Comptes de résultats
918 TODO
919
920 == Installer `hledger`
921
922 * http://hledger.org/installing[]
923
924 [source,sh]
925 .Debian/jessie
926 ----
927 % sudo apt-get install hledger hledger-web
928 ----
929
930 ifdef::backend-slidy2[>>>]
931 === Via `cabal`
932 * http://www.haskell.org/cabal/[]
933
934 [source,sh]
935 .Debian/wheezy
936 ----
937 % echo 'PATH="$HOME/.cabal/bin:$PATH"' >>~/.profile
938 # NOTE: rajoute dans le chemins des exécutables
939 # les exécutables installés par cabal
940 % exit # NOTE: recharge ~/.profile
941
942 % sudo apt-get install ghc cabal-install \
943 libncurses5-dev libtinfo-dev zlib1g-dev
944 % cabal update
945 % cabal install cabal # NOTE: met à jour cabal
946 % cabal install happy # NOTE: anticipe une dépendance exécutable
947 % cabal install hledger
948 % cabal install alex # NOTE: anticipe une dépendance exécutable
949 % cabal install warp-2.0.3.4 hledger-web
950 # NOTE: aide cabal à sélectionner un warp qui fonctionne
951 ----
952
953 [source,sh]
954 .Mise-à-jour
955 ----
956 % cabal install --reinstall hledger hledger-web
957 ----
958
959 ifdef::backend-slidy2[>>>]
960 ==== Version de développement
961
962 [source,sh]
963 ----
964 % git clone http://github.com/simonmichael/hledger.git ~/src/hledger
965 % cd ~/src/hledger
966 % cabal install --reinstall --force-reinstalls \
967 ./hledger-lib ./hledger ./hledger-web
968 ----
969 === Utiliser un éditeur de texte structuré (`vim`)
970
971 Coloration syntaxique sur mesure::
972 * ++hledger.vim++
973 +
974 [source,vim]
975 .~/.vimrc
976 ----
977 autocmd BufNewFile,BufRead *.hledger,*.ledger setfiletype hledger
978 ----
979 Complètement automatique des comptes (`<Tab>`)::
980 +
981 * https://github.com/Shougo/neocomplete.vim[]
982 * https://github.com/Shougo/neocomplcache.vim[]
983 +
984 NOTE: Besoin de rajouter ++vim/autoload/neocomplcache/filters/sorter_bytes.vim++.
985 +
986 [source,vim]
987 .~/.vimrc
988 ----
989 autocmd Filetype hledger set iskeyword+=.,38,39,40,41,44,45,58 "
990 ----
991 Alignement automatique des montants::
992 +
993 * https://github.com/junegunn/vim-easy-align[]
994 +
995 [source,vim]
996 .~/.vimrc
997 ----
998 let g:easy_align_ignore_groups = ['Comment', 'String', 'hledgerTransaction']
999 ----
1000
1001 ifdef::backend-slidy2[>>>]
1002 ==== Suivre les modifications à plusieurs et/ou à distance (`git`)
1003 TODO
1004
1005 == +++hledger-web+++
1006 * http://localhost:5000[]
1007 +
1008 TODO
1009
1010 == Scripter ++hledger++
1011
1012 [source,sh]
1013 .Installer un script ++hledger++
1014 ----
1015 % echo 'PATH="$HOME/src/hledger/extra:$PATH"' >>~/.profile
1016 % exit # NOTE: recharge ~/.profile
1017 % ghc ~/src/hledger/extra/hledger-SCRIPT.hs
1018 ----
1019
1020 .Idées de scripts
1021 * Vérifier l’ordre des dates.
1022 * Chercher des écritures doublonnes.
1023
1024 == Merci
1025
1026 .Luca Pacioli
1027 image::data/Luca_Pacioli_(Gemaelde).jpeg[]
1028
1029 ifdef::backend-slidy2[]
1030 [hledgersplash,position: absolute; left: 50%; top: 10%;]
1031 &&&&
1032 image::data/hledger.splash.png[hledgersplash]
1033 &&&&
1034 endif::backend-slidy2[]