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>
8 :slidebackground: hledgersplash
9 :slidefontsizeadjust: -3
13 :scriptsdir: $PWD/javascripts
14 ifdef::backend-slidy2[:data-uri:]
16 ifdef::backend-slidy2[:slidebackground!:]
18 // a2x: --xsltproc-opts "--stringparam ulink.show 1"
19 // a2x: --xsltproc-opts "--stringparam ulink.footnotes 1"
20 // :source-highlighter: vim
23 == Le ++.ledger++ : un format de journal comptable ouvert.. et simple
27 2014/05/01 Stand manif
33 Achat:Impression:Tracts 7
39 |==================================
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.
54 Pas spécifique à un éditeur logiciel particulier
55 (sauf fonctionnalité expérimentale).
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/[]
70 Mais, comme c'est un fichier, un véritable verrou validant +
71 peut être mis par une **signature cryptographique**.
75 % gpg --detach-sign $fichier.ledger
76 % gpg --verify $fichier.ledger.sig
79 Textuel:: Préférable de ne pas avoir peur des caractères,
80 voire de bien savoir utiliser un éditeur de texte structuré.
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.__ »
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
93 NOTE: Mais possibilité de vérifications d’invariants conventionnels avec des scripts.
95 |==================================
97 == ++hledger++ : un outil libre.. et convivial
101 % hledger balance '^6' '^7' --depth 2 -f Paris.2011.hledger
105 55,25€ 2.Autre_service
109 -26,00€ 5.Autre_gestion_courante
115 |==================================
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.__ »
128 Utilisation, Étude, Modification, Duplication::
129 Permises techniquement et légalement +
130 (« logiciel libre » sous ++GNU/GPLv3++)
133 Programmé en http://fr.wikipedia.org/wiki/Haskell[Haskell]
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.
139 Relisible:: ≈13 000 lignes de Haskell (ou 160 écrans de 80 lignes) +
140 (plus ≈1 800 lignes pour ++hledger-web++).
142 NOTE: À équivalence fonctionnelle,
143 OpenERPv7 ≈80 000 lignes de Python (≈1 000 écrans).
145 Ancienneté:: Depuis 2007 (≈7 ans).
147 Portable:: GNU/Linux, Apple/MacOS, Microsoft/Windows
150 Contrôle l’ordinateur avec le langage.
154 % hledger add -f $fichier.hledger
155 % hledger balance -f $fichier.hledger
162 % hledger-web --server -f $fichier.hledger
163 % firefox "http://localhost:5000"
166 Support:: ≈1 développeur à mi-temps-libéré
168 * Simon Michael (sm) <simon@joyful.com>
170 NOTE: Dons @ https://www.gittip.com/simonmichael/[]
173 Messagerie instantanée;; <irc://irc.freenode.net#ledger>
174 Liste de discussion;; <hledger+subscribe@googlegroups.com>
180 % ghc hledger-fait-ce-que-je-veux.hs
181 % ./hledger-fait-ce-que-je-veux -f $fichier.hledger
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 + ...
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.
200 NOTE: L’interface Web est simple, et s’améliore.
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.
208 NOTE: http://hledger.org/manual/[].
210 |==================================
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.
216 ifdef::backend-slidy2[>>>]
217 === Définition informelle
219 .Fichier ++data/exemple-syntaxe.ledger++
221 include::data/exemple-syntaxe.ledger[]
224 .Conventions usuelles
225 * Classement des écritures par date.
226 * Classement des flux par signe, puis compte.
228 === Définition formelle
230 [cols="a,a",options="header"]
231 |==================================
232 ^|Syntaxe (grammaire https://fr.wikipedia.org/wiki/Forme_de_Backus-Naur[BNF])
233 ^|Informations (signatures fonctionnelles)
236 -----------------------------------
237 journal ::= (écriture \| commentaire \| "⏎" \| "␣")*
238 -----------------------------------
242 **journal**:: latexmath:[$
243 :\>f:\textcolor{#D2691E}{\textbf{fichier}} →
244 \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack$]
248 écriture ::= date "␣" "␣"* libellé commentaire "⏎"
250 date ::= (année "/")? mois "/" jour
251 libellé ::= (· - (";"\|"⏎"))*
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$]
277 flux ::= compte "␣␣" "␣"* ("-" crédit \| débit) ("␣"\|"⏎")* commentaire
278 compte ::= nom ( ":" nom )*
279 nom ::= (· - (":"\|"⏎")) (· - (":"\|"⏎"))*
286 **compte**:: latexmath:[$
287 :\>f:\textcolor{#D2691E}{\textbf{flux}} →
288 \lbrack\textcolor{#D2691E}{\textbf{nom}}\rbrack$]
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}}
295 **tags**:: latexmath:[$
296 :\>f:\textcolor{#D2691E}{\textbf{flux}} →
297 \lbrack\textcolor{#D2691E}{\textbf{tag}}\rbrack
298 \ =\ \textbf{tags}~(\textbf{commentaire}~f)$]
302 commentaire ::= ( ";" (tag ":" valeur? \| ·)* )
303 ( ("⏎"\|"␣")* ";" (tag ":" valeur? \| ·)* )*
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 |==================================
316 == Commandes `hledger`
319 .Syntaxe quasiment commune à toutes les commandes ++hledger++
321 % hledger $commande $options $filtre -f $fichier.ledger
324 ifdef::backend-slidy2[>>>]
325 === Afficher le plan comptable (`accounts`)
328 |==================================
333 % hledger accounts --tree -f data/exemple-syntaxe.ledger
334 sys::[hledger accounts --tree -f data/exemple-syntaxe.ledger]
339 % hledger accounts --flat -f data/exemple-syntaxe.ledger
340 sys::[hledger accounts --flat -f data/exemple-syntaxe.ledger]
345 % hledger accounts --tree '^A' -f data/exemple-syntaxe.ledger
346 sys::[hledger accounts --tree '^A' -f data/exemple-syntaxe.ledger]
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\ \}$]
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$]
364 |==================================
366 === Filtrer des écritures (`print`)
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.
372 NOTE: Cf. manuel : http://hledger.org/manual#query-arguments[]
376 % hledger print 'A' -f data/exemple-syntaxe.ledger
377 sys::[hledger print 'A' -f data/exemple-syntaxe.ledger]
382 % hledger print '^A' -f data/exemple-syntaxe.ledger
383 sys::[hledger print '^A' -f data/exemple-syntaxe.ledger]
388 % hledger print '^B$' -f data/exemple-syntaxe.ledger
389 sys::[hledger print '^B$' -f data/exemple-syntaxe.ledger]
393 .Afficher des « journaux auxiliaires » (exemples approximatifs)
398 hledger print -f $fichier.ledger '^5.Finance:1.Etablissement:2.Banque:'
404 hledger print -f $fichier.ledger '^(2.Immobilisation:1.Corporelle:|6.Charge:(0.Achat|1.Service|2.Autre_service):)'
410 hledger print -f $fichier.ledger '^7.Produit:0.Vente:'
416 hledger print -f $fichier.ledger '^5.Finance:3.Caisse:'
422 hledger print -f $fichier.ledger '6.Charge:(3.Impôt:(1.|3.):|4.Personnel:)'
428 hledger print -f $fichier.ledger tag:ANV
430 **Opération_Diverses**::
434 hledger print -f $fichier.ledger tag:OD
438 === Calculer des soldes (`balance`)
441 |==================================
445 .Balance de toutes les écritures
447 % hledger balance -f data/exemple-syntaxe.ledger
448 sys::[hledger balance -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/']
451 NOTE: Toutes les écritures devant avoir leur balance nulle,
452 cette balance sur toutes les écritures est également nulle.
455 .Balance sur des comptes filtrés par expression rationnelle
457 % hledger balance 'A' -f data/exemple-syntaxe.ledger
458 sys::[hledger balance 'A' -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/']
462 .Balance sur un compte racine
464 % hledger balance '^A' -f data/exemple-syntaxe.ledger
465 sys::[hledger balance '^A' -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/']
469 .Sans accumulation des soldes d’une période à l’autre
471 % hledger balance --daily -f data/exemple-syntaxe.ledger
472 sys::[hledger balance --daily -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/;s/[|]/\\|/g']
476 .Avec accumulation des soldes d’une période à l’autre
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']
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}
490 //image::data/gvimdiff-cumulative-historical.png[]
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)$]
503 latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack →
504 \lbrack\textcolor{#D2691E}{\textbf{flux}}\rbrack$] +
505 latexmath:[$=\>\displaystyle{\left\lbrack
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$]
513 |==================================
515 Balance nulle de toute écriture::
516 ++hledger++ n’accepte aucune écriture qui ne respecte
517 pas cette contrainte de la tâche comptable : +
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.__ »
523 * Formellement : latexmath:[$\forall e : \textcolor{#D2691E}{\textbf{\acute{e}criture}},
524 \ \textbf{balance}\>(\textbf{flux}\>{e}) = 0$]
529 Compte:Crédité -1234,56
530 Compte:Débité ; 1234,56 (montant inféré)
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,
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.
543 |==================================
548 % hledger-equity -f data/exemple-syntaxe.ledger
549 sys::[hledger-equity -f data/exemple-syntaxe.ledger]
554 % hledger-equity -f data/exemple-syntaxe.ledger '^A'
555 sys::[hledger-equity -f data/exemple-syntaxe.ledger '^A']
560 % hledger-equity -f data/exemple-syntaxe.ledger '^B'
561 sys::[hledger-equity -f data/exemple-syntaxe.ledger '^B']
567 .Solde des comptes de gestion et calcul du compte de résultat
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
579 44,58€ # <-- Résultat déficitaire de 44,58€
583 .La même chose mais au format ++.ledger++
585 % hledger-equity '^6' '^7' -f Paris.2011.hledger
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€
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€
609 |==================================
611 === Suivre un compte (`register`)
614 .Suivi de la somme des crédits du compte `5112`
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€
623 .Suivi de la somme des débits du compte `5112`
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€
631 NOTE: Si ces deux commandes ne donnent pas le même montant final
632 c’est qu’il reste des chèques à encaisser.
635 === Observer des statistiques (`stats`, `activity`)
638 |==================================
642 .Statistiques annuelles
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)
661 .Jours de l’année avec au moins 5 flux
663 hledger activity --period daily -f Paris.2012.hledger \| grep '\*\{5\}'
664 2012-01-01 ***********
670 2012-05-03 ****************
672 2012-05-14 ****************
673 2012-05-31 **********
674 2012-06-11 ******************
675 2012-06-30 *************
679 2012-07-31 ***********
685 2012-12-31 *************
688 |==================================
690 === Écrire des écritures (`add`)
693 .Sélection d’un modèle selon le libellé
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
712 Account 4 (or . or enter to finish this transaction): .
713 2014/01/01 Libellé de l’écriture ; UN_TAG:, Autre_tag:Avec_Valeur
718 Save this transaction to the journal ? [y]: y
720 Starting the next transaction (. or ctrl-D/ctrl-C to quit)
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
730 Amount 1 [-42.0]: 100
731 Account 2 [B:BB:BBB]: B
733 Account 3 (or . to finish this transaction) [B:A]: .
734 2014/01/01 Libellé d’une autre écriture
738 Save this transaction to the journal ? [y]: y
740 Starting the next transaction (. or ctrl-D/ctrl-C to quit)
745 .Complètement automatique des comptes
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
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
802 Account 3 (or . or enter to finish this transaction): .
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
807 Save this transaction to the journal ? [y]: y
809 Starting the next transaction (. or ctrl-D/ctrl-C to quit)
813 == Exercice comptable
815 ifdef::backend-slidy2[>>>]
816 === Plan comptable d’une association
818 //NOTE: Brouillon de documentation @ https://wiki.cyclocoop.org/Comptabilité/Document/Plan_comptable/[]
822 include::data/Cyclofficine.Plan_comptable.hledger[]
826 //|==================================
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
840 //NOTE: pour des espèces, transiter par : ++5.Finance:3.Caisse:1.Siège++
842 //|==================================
844 === Relation de Chasles par écritures d’[black]*engagement* et de [black]*paiement*
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.
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
859 ==== Soldes nuls souhaitables
861 - Écritures des recettes
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))
866 2. Total chèques à encaisser (5112) == Total remises de chèques à la banque (512) (+/- chèques non déposés en banque)
868 NOTE: vérifier qu’il ne reste plus de chèques comptabilisés dans le tiroir
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)
877 == Import et export avec ++hledger++
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]
883 ++hledger-print-csv++::
887 % hledger-print-csv -f data/exemple-syntaxe.ledger
888 sys::[hledger-print-csv -f data/exemple-syntaxe.ledger]
891 ++*.ledger.rules++:: http://hledger.org/manual#csv-files[]
895 % cat banque-postale.livret_A.csv.rules
897 fields date,description,amount
898 date-format %-d/%-m/%Y
900 if .INTERETS ACQUIS DECOMPTE D'INTERETS .
901 account1 Banque:Postale:Livret_A
902 account2 Recette:Intérêts:Inflation
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++)
910 === Feuilles de calculs des documents comptables
912 ifdef::backend-slidy2[>>>]
916 ifdef::backend-slidy2[>>>]
917 ==== Comptes de résultats
920 == Installer `hledger`
922 * http://hledger.org/installing[]
927 % sudo apt-get install hledger hledger-web
930 ifdef::backend-slidy2[>>>]
932 * http://www.haskell.org/cabal/[]
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
942 % sudo apt-get install ghc cabal-install \
943 libncurses5-dev libtinfo-dev zlib1g-dev
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
956 % cabal install --reinstall hledger hledger-web
959 ifdef::backend-slidy2[>>>]
960 ==== Version de développement
964 % git clone http://github.com/simonmichael/hledger.git ~/src/hledger
966 % cabal install --reinstall --force-reinstalls \
967 ./hledger-lib ./hledger ./hledger-web
969 === Utiliser un éditeur de texte structuré (`vim`)
971 Coloration syntaxique sur mesure::
977 autocmd BufNewFile,BufRead *.hledger,*.ledger setfiletype hledger
979 Complètement automatique des comptes (`<Tab>`)::
981 * https://github.com/Shougo/neocomplete.vim[]
982 * https://github.com/Shougo/neocomplcache.vim[]
984 NOTE: Besoin de rajouter ++vim/autoload/neocomplcache/filters/sorter_bytes.vim++.
989 autocmd Filetype hledger set iskeyword+=.,38,39,40,41,44,45,58 "
991 Alignement automatique des montants::
993 * https://github.com/junegunn/vim-easy-align[]
998 let g:easy_align_ignore_groups = ['Comment', 'String', 'hledgerTransaction']
1001 ifdef::backend-slidy2[>>>]
1002 ==== Suivre les modifications à plusieurs et/ou à distance (`git`)
1005 == +++hledger-web+++
1006 * http://localhost:5000[]
1010 == Scripter ++hledger++
1013 .Installer un script ++hledger++
1015 % echo 'PATH="$HOME/src/hledger/extra:$PATH"' >>~/.profile
1016 % exit # NOTE: recharge ~/.profile
1017 % ghc ~/src/hledger/extra/hledger-SCRIPT.hs
1021 * Vérifier l’ordre des dates.
1022 * Chercher des écritures doublonnes.
1027 image::data/Luca_Pacioli_(Gemaelde).jpeg[]
1029 ifdef::backend-slidy2[]
1030 [hledgersplash,position: absolute; left: 50%; top: 10%;]
1032 image::data/hledger.splash.png[hledgersplash]
1034 endif::backend-slidy2[]