b66680e6ba9ff6362ac69471e68e9ea494f3fadd
[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 de validation (plus ou moins illusoire).
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 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 ; Erreur de date
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 type https://www.odoo.com/[Odoo] (ancien 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 [float]
344 **comptes**::
345 latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack → \{\textcolor{#D2691E}{\textbf{compte}}\}$] +
346 = « __ensemble des comptes vers lesquels fluent les écritures__ » +
347 latexmath:[$=\{\ (\textbf{compte}\>f)\ \|\ f ← (\textbf{flux}\>e)\ \|\ e ← \mathbb E\ \}$]
348 **compte_parent**::
349 latexmath:[$:\>c : \textcolor{#D2691E}{\textbf{compte}} → \textcolor{#D2691E}{\textbf{compte}}\>?$] +
350 latexmath:[$=\>c_{\lbrack0,\cdots,\|c\|-2\rbrack}\ \mbox{si}\ \|c\| \ge 2$]
351 **hiérachie_de_compte**::
352 latexmath:[$:\>\mathbb c : \textcolor{#D2691E}{\textbf{compte}} → \lbrack\textcolor{#D2691E}{\textbf{compte}}\rbrack$] +
353 // = « __ensemble des comptes vers lesquels fluent les écritures et leur comptes parents__ » +
354 latexmath:[$=\>\lbrack{\ c\ :\ \lbrack{\ c\ \|\ c ← (\mathbf{compte\mbox{_}parent}\>{c})}\ \rbrack}\ \rbrack$]
355
356 |==================================
357
358 === Écrire des écritures (`add`)
359
360 [source,sh]
361 .Sélection d’un modèle selon le libellé
362 ----
363 % hledger add -f /tmp/test.ledger
364 Adding transactions to journal file /tmp/test.ledger
365 Any command line arguments will be used as defaults.
366 Use tab key to complete, readline keys to edit, enter to accept defaults.
367 An optional (CODE) may follow transaction dates.
368 An optional ; COMMENT may follow descriptions or amounts.
369 If you make a mistake, enter < at any prompt to restart the transaction.
370 To end a transaction, enter . when prompted.
371 To quit, enter . at a date prompt or press control-d or control-c.
372 Date [2014/07/30]: 2014/01/01
373 Description: Libellé de l’écriture ; UN_TAG:, Autre_tag:Avec_Valeur
374 Account 1: A:AA
375 Amount 1: -42
376 Account 2: B:BB:BBB
377 Amount 2 [42.0]: 40
378 Account 3: B:A
379 Amount 3 [2.0]:
380 Account 4 (or . or enter to finish this transaction): .
381 2014/01/01 Libellé de l’écriture ; UN_TAG:, Autre_tag:Avec_Valeur
382 A:AA -42
383 B:BB:BBB 40
384 B:A 2.0
385
386 Save this transaction to the journal ? [y]: y
387 Saved.
388 Starting the next transaction (. or ctrl-D/ctrl-C to quit)
389 Date [2014/01/01]:
390 Description: Libellé d’une autre écriture
391 Using this similar transaction for defaults:
392 2014/01/01 Libellé de l’écriture ; UN_TAG:, Autre_tag:Avec_Valeur
393 A:AA -42
394 B:BB:BBB 40
395 B:A 2.0
396
397 Account 1 [A:AA]:
398 Amount 1 [-42.0]: 100
399 Account 2 [B:BB:BBB]: B
400 Amount 2 [-100.0]:
401 Account 3 (or . to finish this transaction) [B:A]: .
402 2014/01/01 Libellé d’une autre écriture
403 A:AA 100
404 B -100.0
405
406 Save this transaction to the journal ? [y]: y
407 Saved.
408 Starting the next transaction (. or ctrl-D/ctrl-C to quit)
409 Date [2014/01/01]: .
410 ----
411
412 [source,sh]
413 .Complètement automatique des comptes
414 ----
415 % hledger add -f data/exemple-plan-comptable.ledger
416 Adding transactions to journal file /home/julm/admin/cyber.coop/src/tool/hledger/doc/data/exemple-plan-comptable.ledger
417 Any command line arguments will be used as defaults.
418 Use tab key to complete, readline keys to edit, enter to accept defaults.
419 An optional (CODE) may follow transaction dates.
420 An optional ; COMMENT may follow descriptions or amounts.
421 If you make a mistake, enter < at any prompt to restart the transaction.
422 To end a transaction, enter . when prompted.
423 To quit, enter . at a date prompt or press control-d or control-c.
424 Date [2014/07/30]: yesterday
425 Description: Trololo
426 Account 1: 1.Capital:
427 1.Capital:0.Fonds 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement
428 1.Capital:0.Fonds:2.SDR 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:1.État
429 1.Capital:0.Fonds:2.SDR:4.Apport 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:2.Région
430 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
431 1.Capital:0.Fonds:3.ADR 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:4.Commune
432 1.Capital:0.Fonds:3.ADR:4.Apport 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:5.Collectivité_publique
433 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
434 1.Capital:0.Fonds:6.Réserve 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:7.Organisme_privé
435 1.Capital:0.Fonds:6.Réserve:3.Statutaire 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:8.Autre
436 1.Capital:0.Fonds:6.Réserve:8.Autre 1.Capital:3.Sub_invest_BNR:9.Compte_résultat:2.Autre
437 1.Capital:1.Report 1.Capital:5.Provision_risque&charge
438 1.Capital:1.Report:0.Bénéfice 1.Capital:5.Provision_risque&charge:1.Risque
439 1.Capital:1.Report:5.Financeur 1.Capital:5.Provision_risque&charge:5.Impôt
440 1.Capital:1.Report:9.Déficit 1.Capital:5.Provision_risque&charge:8.Autre
441 1.Capital:2.Résultat 1.Capital:5.Provision_risque&charge:8.Autre:2.Congés_à_payer
442 1.Capital:2.Résultat:0.Bénéfice 1.Capital:6.Emprunt,Dette
443 1.Capital:2.Résultat:9.Déficit 1.Capital:6.Emprunt,Dette:4.Etablissement_crédit
444 1.Capital:3.Sub_invest_BNR 1.Capital:6.Emprunt,Dette:5.Dépôt,Caution
445 1.Capital:3.Sub_invest_BNR:1.Equipement 1.Capital:6.Emprunt,Dette:8.Autre
446 1.Capital:3.Sub_invest_BNR:1.Equipement:1.État 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt
447 1.Capital:3.Sub_invest_BNR:1.Equipement:2.Région 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:1.Bénévole
448 1.Capital:3.Sub_invest_BNR:1.Equipement:3.Département 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:2.Salarié-e
449 1.Capital:3.Sub_invest_BNR:1.Equipement:4.Commune 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:3.Cyclofficine
450 1.Capital:3.Sub_invest_BNR:1.Equipement:5.Collectivité_publique 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:4.Autre
451 1.Capital:3.Sub_invest_BNR:1.Equipement:6.Entreprise_publique 1.Capital:6.Emprunt,Dette:8.Autre:7.Dette
452 1.Capital:3.Sub_invest_BNR:1.Equipement:7.Organisme_privé 1.Capital:9.Fonds_dédiés
453 1.Capital:3.Sub_invest_BNR:1.Equipement:8.Autre 1.Capital:9.Fonds_dédiés:4.Sub_exploit
454 1.Capital:3.Sub_invest_BNR:8.Autre 1.Capital:9.Fonds_dédiés:5.Don_affecté
455 1.Capital:3.Sub_invest_BNR:9.Compte_résultat
456 Account 1: 1.Capital:6.Emprunt,Dette
457 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
458 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
459 1.Capital:6.Emprunt,Dette:5.Dépôt,Caution 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:2.Salarié-e
460 1.Capital:6.Emprunt,Dette:8.Autre 1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:3.Cyclofficine
461 Account 1: 1.Capital:6.Emprunt,Dette:4.Etablissement_crédit
462 Amount 1: -666 ; Don’t panic
463 Account 2: 5.Finance:
464 5.Finance:1.Etablissement 5.Finance:1.Etablissement:2.Banque:002.Livret 5.Finance:8.Virement
465 5.Finance:1.Etablissement:1.Valeur 5.Finance:3.Caisse 5.Finance:8.Virement:0.Interne
466 5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser 5.Finance:3.Caisse:1.Siège 5.Finance:8.Virement:1.Fonds
467 5.Finance:1.Etablissement:2.Banque:001.Courant 5.Finance:3.Caisse:2.Atelier
468 Account 2: 5.Finance:1.Etablissement:2.Banque:001.Courant
469 Amount 2 [666.0]:
470 Account 3 (or . or enter to finish this transaction): .
471 2014/07/29 Trololo
472 1.Capital:6.Emprunt,Dette:4.Etablissement_crédit -666 ; Don’t panic
473 5.Finance:1.Etablissement:2.Banque:001.Courant 666.0
474
475 Save this transaction to the journal ? [y]: y
476 Saved.
477 Starting the next transaction (. or ctrl-D/ctrl-C to quit)
478 Date [2014/07/29]: .
479 ----
480
481 === Filtrer des écritures (`print`)
482
483 ++hledger++ permet de filtrer les écritures selon leurs données
484 (date, libellé, comptes, montants, tags, ...) ;
485 des expressions rationnelles peuvent être utilisées à cette fin.
486
487 NOTE: Cf. manuel : http://hledger.org/manual#query-arguments[]
488
489 [horizontal]
490 .Afficher des « journaux auxiliaires » (exemples approximatifs)
491 **Banque**::
492 +
493 [source,sh]
494 ----
495 hledger print -f $fichier.ledger '^5.Finance:1.Etablissement:2.Banque:'
496 ----
497 **Achats**::
498 +
499 [source,sh]
500 ----
501 hledger print -f $fichier.ledger '^(2.Immobilisation:1.Corporelle:|6.Charge:(0.Achat|1.Service|2.Autre_service):)'
502 ----
503 **Vente**::
504 +
505 [source,sh]
506 ----
507 hledger print -f $fichier.ledger '^7.Produit:0.Vente:'
508 ----
509 **Caisse**::
510 +
511 [source,sh]
512 ----
513 hledger print -f $fichier.ledger '^5.Finance:3.Caisse:'
514 ----
515 **Paye**::
516 +
517 [source,sh]
518 ----
519 hledger print -f $fichier.ledger '6.Charge:(3.Impôt:(1.|3.):|4.Personnel:)'
520 ----
521 **À NouVeau**::
522 +
523 [source,sh]
524 ----
525 hledger print -f $fichier.ledger tag:ANV
526 ----
527 **Opération_Diverses**::
528 +
529 [source,sh]
530 ----
531 hledger print -f $fichier.ledger tag:OD
532 ----
533
534
535 === Calculer des soldes (`balance`)
536
537 [cols="a,a"]
538 |==================================
539 |
540 [float]
541 [source,sh]
542 .Balance de toutes les écritures
543 ----
544 % hledger balance -f data/exemple-syntaxe.ledger
545 sys::[hledger balance -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/']
546 ----
547
548 NOTE: Toutes les écritures devant avoir leur balance nulle,
549 cette balance sur toutes les écritures est également nulle.
550
551 [source,sh]
552 .Balance sur des comptes filtrés par expression rationnelle
553 ----
554 % hledger balance 'A' -f data/exemple-syntaxe.ledger
555 sys::[hledger balance 'A' -f data/exemple-syntaxe.ledger | sed -e 's/^[-=]/‑/']
556 ----
557
558 [source,sh]
559 .Balance sur un compte racine
560 ----
561 % hledger balance '^A' -f data/exemple-syntaxe.ledger
562 sys::[hledger balance '^A' -f data/exemple-syntaxe.ledger | sed -e 's/^[-=]/‑/']
563 ----
564
565 [source,sh]
566 .Sans accumulation des soldes d’une période à l’autre
567 ----
568 % hledger balance --daily -f data/exemple-syntaxe.ledger
569 sys::[hledger balance --daily -f data/exemple-syntaxe.ledger | sed -e 's/^[-=]/‑/;s/[|]/\\|/g']
570 ----
571
572 [source,sh]
573 .Avec accumulation des soldes d’une période à l’autre
574 ----
575 % hledger balance --daily --historical -f data/exemple-syntaxe.ledger
576 sys::[hledger balance --daily --historical -f data/exemple-syntaxe.ledger | sed -e 's/^[-=]/‑/;s/[|]/\\|/g']
577 ----
578
579 //[source,sh]
580 //.Suivi des comptes
581 //----
582 //% hledger balance -b 2012/02/01 -e 2012/04/30 --monthly -f $fichier.ledger >/tmp/bal.flow
583 //% hledger balance -b 2012/02/01 -e 2012/04/30 --cumulative --monthly -f $fichier.ledger >/tmp/bal.cumulative
584 //% hledger balance -b 2012/02/01 -e 2012/04/30 --historical --monthly -f $fichier.ledger >/tmp/bal.historical
585 //% gvimdiff -o /tmp/bal.{cumulative,historical}
586 //----
587 //image::data/gvimdiff-cumulative-historical.png[]
588 |
589 [float]
590 [horizontal]
591 **balance**::
592 latexmath:[$:\>\mathbb F : \lbrack\textcolor{#D2691E}{\textbf{flux}}\rbrack → ℚ$] +
593 = « __somme des montants des flux__ » +
594 latexmath:[$=\>{(\ m\ \|\ m ← m + (\textbf{montant}\>f)\ \|\ f ← \mathbb F\ \|\ m ← 0\ )$] +
595 **solde_de_compte**::
596 latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack → c : \textcolor{#D2691E}{\textbf{compte}} → ℚ$] +
597 latexmath:[$=\>{\textbf{balance}\>\lbrack{\ f\ \|\ f ← (\textbf{flux}\>e),\ c\>≼\>(\textbf{compte}\>f)\ \|\ e ← \mathbb E\ }\rbrack$] +
598 // latexmath:[$=\>{\displaystyle{\sum_{e ← \mathbb E}}\left(\sum_{\stackrel{f ← (\textbf{flux}\>e),}{c\ ≼\ (\textbf{compte}\>f)}}(\textbf{montant}\>f})\right)$]
599 **solde**::
600 latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack →
601 \lbrack\textcolor{#D2691E}{\textbf{flux}}\rbrack$] +
602 latexmath:[$=\>\displaystyle{\left\lbrack
603 \begin{array}{l}
604 (\textcolor{#083194}{\textbf{compte}}=c´, \textcolor{#083194}{\textbf{montant}}=m) \\
605 \|\ m ← (\mathbf{\mbox{solde_de_compte}}\,\mathbb E\,c´) \\
606 \|\ c´ ← (\mathbf{plan\mbox{_}comptable}\,c) \\
607 \|\ c ← (\mathbf{comptes}\,\mathbb E)
608 \end{array}}\right\rbrack$]
609
610 |==================================
611
612 === Suivre un compte (`register`)
613
614 [source,sh]
615 .Suivi de la somme des crédits du compte `5112`
616 ----
617 % hledger register -f Paris.2011.hledger 'amt:<0' '^5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser'
618 2011/05/23 Remise chq 0994029 ..Chèque_à_encaisser -100,00€ -100,00€
619 2011/09/29 Remise chq 1101801 ..Chèque_à_encaisser -20,00€ -120,00€
620 2011/11/18 Remise chq 1101802 ..Chèque_à_encaisser -2000,00€ -2120,00€
621 ----
622
623 [source,sh]
624 .Suivi de la somme des débits du compte `5112`
625 ----
626 % hledger register -f Paris.2011.hledger 'amt:>0' '^5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser'
627 2011/05/15 Prêt ..Chèque_à_encaisser 100,00€ 100,00€
628 2011/09/20 Cotisations ..Chèque_à_encaisser 20,00€ 120,00€
629 2011/11/10 Prêt ..Chèque_à_encaisser 2000,00€ 2120,00€
630 ----
631
632 === Calculer les écritures de clôture et ouverture (`equity`)
633 ++hledger-equity++ calcule une balance de comptes
634 et en fait deux écritures, respectivement :
635 [horizontal]
636 de clôture:: pour les solder à zéro en fin d’exercice ;
637 d’ouverture:: pour les réinitialiser à leur solde du précédent exercice.
638
639 [cols="a,a"]
640 |==================================
641 |
642 [float]
643 [source,sh]
644 ----
645 % hledger-equity -f data/exemple-syntaxe.ledger
646 sys::[hledger-equity -f data/exemple-syntaxe.ledger]
647 ----
648
649 [source,sh]
650 ----
651 % hledger-equity -f data/exemple-syntaxe.ledger '^A'
652 sys::[hledger-equity -f data/exemple-syntaxe.ledger '^A']
653 ----
654
655 [source,sh]
656 ----
657 % hledger-equity -f data/exemple-syntaxe.ledger '^B'
658 sys::[hledger-equity -f data/exemple-syntaxe.ledger '^B']
659 ----
660
661 |
662 [float]
663 [source,hledger]
664 .Solde des compte de gestion
665 ----
666 % hledger-equity '^6' '^7' -f Paris.2011.hledger
667 2014/07/29
668 6.Charge:0.Achat:6.Non_stocké:8.Autre_Matière,Fourniture:1.Atelier -248,87€
669 6.Charge:1.Service:3.Location:2.Immobilière -441,46€
670 6.Charge:2.Autre_service:3.Communication:6.Catalogue,Imprimé -24,00€
671 6.Charge:2.Autre_service:7.Service_bancaire -31,25€
672 6.Charge:5.Gestion:8.Divers:6.Cotisation_(vie_statutaire) -25,00€
673 7.Produit:0.Vente:6.Prest'action 700,00€
674 7.Produit:5.Autre_gestion_courante:6.Cotisation 20,00€
675 7.Produit:5.Autre_gestion_courante:8.Divers 6,00€
676 equity:closing balances 44,58€
677
678 2014/07/29
679 6.Charge:0.Achat:6.Non_stocké:8.Autre_Matière,Fourniture:1.Atelier 248,87€
680 6.Charge:1.Service:3.Location:2.Immobilière 441,46€
681 6.Charge:2.Autre_service:3.Communication:6.Catalogue,Imprimé 24,00€
682 6.Charge:2.Autre_service:7.Service_bancaire 31,25€
683 6.Charge:5.Gestion:8.Divers:6.Cotisation_(vie_statutaire) 25,00€
684 7.Produit:0.Vente:6.Prest'action -700,00€
685 7.Produit:5.Autre_gestion_courante:6.Cotisation -20,00€
686 7.Produit:5.Autre_gestion_courante:8.Divers -6,00€
687 equity:opening balances -44,58€
688 ----
689
690 |==================================
691
692
693 === Observer des statistiques (`stats`, `activity`)
694
695 [cols="a,a"]
696 |==================================
697 |
698 [float]
699 [source,sh]
700 .Statistiques annuelles
701 ----
702 % hledger stats --period yearly -f Paris.2012.hledger
703 Main journal file : Paris.2012.hledger
704 Included journal files : Paris.Plan_comptable.hledger
705 Cyclofficine.Plan_comptable.hledger
706 Transactions span : 2012-01-01 to 2013-01-01 (366 days)
707 Last transaction : 2012-12-31 (576 days ago)
708 Transactions : 210 (0.6 per day)
709 Transactions last 30 days: 0 (0.0 per day)
710 Transactions last 7 days : 0 (0.0 per day)
711 Payees/descriptions : 144
712 Accounts : 448 (depth 6)
713 Commodities : 1 (€)
714 ----
715
716 |
717 [float]
718 [source,sh]
719 .Jours de l’année avec au moins 5 flux
720 ----
721 hledger activity --period daily -f Paris.2012.hledger \| grep '\*\{5\}'
722 2012-01-01 ***********
723 2012-02-29 ******
724 2012-03-23 ******
725 2012-03-31 *********
726 2012-04-03 ******
727 2012-04-30 ********
728 2012-05-03 ****************
729 2012-05-11 ********
730 2012-05-14 ****************
731 2012-05-31 **********
732 2012-06-11 ******************
733 2012-06-30 *************
734 2012-07-13 *********
735 2012-07-17 ******
736 2012-07-30 ******
737 2012-07-31 ***********
738 2012-08-31 ******
739 2012-09-26 ********
740 2012-09-30 ******
741 2012-11-13 ********
742 2012-11-30 *****
743 2012-12-31 *************
744 ----
745
746 |==================================
747
748
749 == Exercice comptable
750
751 ifdef::backend-slidy2[>>>]
752 === Plan comptable d’une association
753
754 NOTE: Brouillon de documentation @ https://wiki.cyclocoop.org/Comptabilité/Document/Plan_comptable/[]
755
756 [source,hledger]
757 ----
758 include::data/Cyclofficine.Plan_comptable.hledger[]
759 ----
760
761 === Comptabiliser en partie double
762
763 [cols="a,a"]
764 |==================================
765 |
766 [float]
767 Balance nulle de toute écriture::
768 ++hledger++ n’accepte aucune écriture qui ne respecte
769 pas cette contrainte de la tâche comptable : +
770 +
771 « __Pour toute écriture, tout ce qui est [black]_débité_ (+++++) dans ses comptes +
772 est forcément [black]_crédité_ (++-++) dans ses autres comptes, +
773 et réciproquement.__ »
774 +
775 * Formellement : latexmath:[$\forall e : \textcolor{#D2691E}{\textbf{\acute{e}criture}},
776 \ \textbf{balance}\>(\textbf{flux}\>{e}) = 0$]
777 +
778 [source,hledger]
779 ----
780 2014/04/12
781 Compte:Crédité -1234,56
782 Compte:Débité ; 1234,56 (montant inféré)
783 ----
784
785 |
786 [float]
787 Relation de Chasles par écritures d’[black]*engagement* et de [black]*paiement*::
788 ++hledger++ laisse l’humain s’occuper de ce principe de la tâche comptable
789 qui traduit la réalité temporelle des mouvements d’argent.
790 +
791 [source,hledger]
792 ----
793 01/01 Prestation ; Écriture d’engagement (pièce comptable : facture)
794 7.Produit:0.Vente:6.Prest'action -700,00
795 4.Tiers:1.Client:1.Client:1.Bien,Prestation:007.Mairie_du_XI 700,00
796 01/14 Virement ; Écriture de paiement (pièce comptable : relevé de compte)
797 4.Tiers:1.Client:1.Client:1.Bien,Prestation:007.Mairie_du_XI -700,00
798 5.Finance:1.Etablissement:2.Banque:001.Courant 700,00
799 ----
800 //+
801 //[source,hledger]
802 //----
803 //01/01 Vélo ; Écriture d’engagement (pièce comptable : facture)
804 // 7.Produit:0.Vente:1.Produit_fini:1.Vélo -80
805 // 5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser 80
806 //01/02 Chèque ; Écriture de paiement (pièce comptable : relevé de compte)
807 // 5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser -80
808 // 5.Finance:1.Etablissement:2.Banque:001.Courant 80
809 //----
810 //+
811 //NOTE: pour des espèces, transiter par : ++5.Finance:3.Caisse:1.Siège++
812
813 |==================================
814
815 ==== Soldes nuls souhaitables
816
817 - Écritures des recettes
818 +
819 1. latexmath:[$\sum{\mbox{ventes}} + \sum{\mbox{dons}} = \sum{\mbox{espèces entrées en caisse}} + \sum{\mbox{Chèques à encaisser}}$] +
820 (Total des ventes + dons == Total d’espèces entrée en caisse + chèques à encaisser (5112))
821
822 2. Total chèques à encaisser (5112) == Total remises de chèques à la banque (512) (+/- argent non déposé en banque)
823 +
824 NOTE: vérifier qu’il ne reste plus de chèque comptabilisés dans le tiroir
825
826 3. Solde du compte caisse (531) == Total entrées espèces en caisse - Total des sorties
827 (remises d’espèces en banque - sorties d’achats - erreur de caisse)
828
829 - Écritures de paye
830 +
831 TODO
832
833 == Import et export avec `hledger`
834
835 * https://github.com/eval/total_recall[]
836 * https://github.com/quentinsf/icsv2ledger[]
837
838 === Feuilles de calculs des documents comptables
839
840 ifdef::backend-slidy2[>>>]
841 ==== Bilan financier
842 TODO
843
844 ifdef::backend-slidy2[>>>]
845 ==== Comptes de résultats
846 TODO
847
848 == Installer `hledger`
849
850 * http://hledger.org/installing[]
851
852 [source,sh]
853 .Debian/jessie
854 ----
855 % sudo apt-get install hledger hledger-web
856 ----
857
858 ifdef::backend-slidy2[>>>]
859 === Via `cabal`
860 * http://www.haskell.org/cabal/[]
861
862 [source,sh]
863 .Debian/wheezy
864 ----
865 % echo 'PATH="$HOME/.cabal/bin:$PATH"' >>~/.profile
866 # NOTE: rajoute dans le chemins des exécutables
867 # les exécutables installés par cabal
868 % exit # NOTE: recharge ~/.profile
869
870 % sudo apt-get install ghc cabal-install \
871 libncurses5-dev libtinfo-dev zlib1g-dev
872 % cabal update
873 % cabal install cabal # NOTE: met à jour cabal
874 % cabal install happy # NOTE: anticipe une dépendance exécutable
875 % cabal install hledger
876 % cabal install alex # NOTE: anticipe une dépendance exécutable
877 % cabal install warp-2.0.3.4 hledger-web
878 # NOTE: aide cabal à sélectionner un warp qui fonctionne
879 ----
880
881 [source,sh]
882 .Mise-à-jour
883 ----
884 % cabal install --reinstall hledger hledger-web
885 ----
886
887 ifdef::backend-slidy2[>>>]
888 ==== Version de développement
889
890 [source,sh]
891 ----
892 % git clone http://github.com/simonmichael/hledger.git ~/src/hledger
893 % cd ~/src/hledger
894 % cabal install --reinstall --force-reinstalls \
895 ./hledger-lib ./hledger ./hledger-web
896 ----
897 === Utiliser un éditeur de texte structuré (`vim`)
898
899 Coloration syntaxique sur mesure::
900 * ++hledger.vim++
901 +
902 [source,vim]
903 .~/.vimrc
904 ----
905 autocmd BufNewFile,BufRead *.hledger,*.ledger setfiletype hledger
906 ----
907 Complètement automatique des comptes (`<Tab>`)::
908 +
909 * https://github.com/Shougo/neocomplete.vim[]
910 * https://github.com/Shougo/neocomplcache.vim[]
911 +
912 NOTE: Besoin de rajouter ++vim/autoload/neocomplcache/filters/sorter_bytes.vim++.
913 +
914 [source,vim]
915 .~/.vimrc
916 ----
917 autocmd Filetype hledger set iskeyword+=.,38,39,40,41,44,45,58 "
918 ----
919 Alignement automatique des montants::
920 +
921 * https://github.com/junegunn/vim-easy-align[]
922 +
923 [source,vim]
924 .~/.vimrc
925 ----
926 let g:easy_align_ignore_groups = ['Comment', 'String', 'hledgerTransaction']
927 ----
928
929 ifdef::backend-slidy2[>>>]
930 ==== Suivre les modifications à plusieurs et/ou à distance (`git`)
931 TODO
932
933 == +++hledger-web+++
934 * http://localhost:5000[]
935 +
936 TODO
937
938 == Scripter ++hledger++
939
940 [source,sh]
941 .Installer un script ++hledger++
942 ----
943 % echo 'PATH="$HOME/src/hledger/extra:$PATH"' >>~/.profile
944 % exit # NOTE: recharge ~/.profile
945 % ghc ~/src/hledger/extra/hledger-SCRIPT.hs
946 ----
947
948 .Idées de scripts
949 * Vérifier l’ordre des dates.
950 * Chercher des écritures doublonnes.
951
952 == Merci
953
954 .Luca Pacioli
955 image::data/Luca_Pacioli_(Gemaelde).jpeg[]
956
957 ifdef::backend-slidy2[]
958 [hledgersplash,position: absolute; left: 50%; top: 10%;]
959 &&&&
960 image::data/hledger.splash.png[hledgersplash]
961 &&&&
962 endif::backend-slidy2[]