Ajout : doc/ (suite)
[tool/hledger.git] / doc / hledger.fr.slidy.ad
index 27d0628..b66680e 100644 (file)
@@ -20,7 +20,7 @@ ifdef::backend-slidy2[:slidebackground!:]
 // :source-highlighter: vim
 
 
-== Le ++.ledger++ : un format de __Grand Livre__ ouvert.. et simple
+== Le ++.ledger++ : un format de journal comptable ouvert.. et simple
 
 [source,hledger]
 ----
@@ -30,64 +30,72 @@ ifdef::backend-slidy2[:slidebackground!:]
 
 2014/05/08 Propagande
        Caisse:Grève             -7
-       Achat:Impression:Tracts   7
+       Achat:Impression:Tracts   7
 
 ; Répéter ad nauseam
 ----
 
-ifdef::backend-slidy2[>>>]
-=== Les plus
+[cols="a,a"]
+|==================================
+|
+[float]
+Les plus
+~~~~~~~~
+
 [horizontal]
-Transparent:: Visibilité de _toutes_ les informations.
-Pérenne:: Compréhensible sans peine.
-Modifiable:: Pas d’interface protectrice.
+Transparent:: Visibilité de *toutes* les informations.
+Pérenne:: Compréhensible sans logiciel particulier pour l’exploiter.
+Modifiable:: Pas de verrou de validation (plus ou moins illusoire).
 Accès:: Pas de changement d’interface non-consenti.
-Versionnable:: Suivi et fusion simples des modifications.
-Écrit:: Langage pour s’exprimer clairement, par exemple pour discuter dans un courriel.
+Versionnable:: Suivi des modifications, fusion des contributions, et sauvegarde simples.
+Écrit:: Langage pour s’exprimer clairement (par ex. dans un courriel ou une présentation).
 Hors-ligne:: Pas besoin de réseau.
 Interopérable::
 Pas spécifique à un éditeur logiciel particulier
 (sauf fonctionnalité expérimentale).
-* http://ledger-cli.org/[]
-* http://hledger.org/[]
-* http://furius.ca/beancount/[]
-* https://massysett.github.io/penny/[]
-* https://github.com/hrj/abandon/[]
+[horizontal]
+ledger;; http://ledger-cli.org/[]
+hledger;; http://hledger.org/[]
+beancount;; http://furius.ca/beancount/[]
+penny;; https://massysett.github.io/penny/[]
+abandon;; https://github.com/hrj/abandon/[]
+
+|
+[float]
+Les moins
+~~~~~~~~~
 
-=== Les moins
 [horizontal]
 Modifiable::
-Mais pas moins que les autres logiciels
-et à nuancer si couplé à un gestionnaires de versions,
-et/ou avec signature cryptographiques.
+Mais, comme c'est un fichier, un verrou-validant +
+peut être mis par une **signature cryptographique**.
 +
 [source,sh]
 ----
-% git tag --sign   v2011 -m "Clôture de la comptabilité 2011"
-% git tag --verify v2011
-----
-+
-[source,sh]
-----
-% gpg --sign         $fichier.hledger
-% gpg --verify-files $fichier.hledger.gpg
+% gpg --detach-sign $fichier.ledger
+% gpg --verify      $fichier.ledger.sig
 ----
 
-Textuel:: Préférable de bien savoir utiliser
-un éditeur de texte structuré.
-Peu contraint::
+Textuel:: Préférable de ne pas avoir peur des caractères,
+voire de bien savoir utiliser un éditeur de texte structuré.
+
+Contrainte minimale::
+« __N'a pas été conçu pour empêcher ses utilisateurs de commettre des actes stupides,
+car cela les empêcherait aussi de réaliser des actes ingénieux.__ »
 +
 [source,hledger]
 ----
-2102/03/21 Remise chq (1101804)
+2102/03/21 Chèque ; Erreur de date
        5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser  -145,00
        5.Finance:1.Etablissement:2.Banque:001.Courant            145,00
 ----
++
+NOTE: Mais possibilité de vérifications d’invariants conventionnels avec des scripts.
 
-NOTE: KISS
-
+|==================================
 
 == ++hledger++ : un outil libre.. et convivial
+
 [source,sh]
 ----
 % hledger balance '^6' '^7' --depth 2 -f Paris.2011.hledger
@@ -103,160 +111,135 @@ NOTE: KISS
               44,58€
 ----
 
-ifdef::backend-slidy2[>>>]
-=== Les plus
+[cols="a,a"]
+|==================================
+|
+[float]
+Les plus
+~~~~~~~~
+
+Philosophie Unix::
++
+* « __Écrivez des programmes qui effectuent une seule chose et qui le font bien.__ »
+* « __Écrivez des programmes qui collaborent.__ »
+* « __Écrivez des programmes pour gérer des flux de texte, +
+    car c'est une interface universelle.__ »
 
-Utilisation::
-Étude::
-Modification::
-Duplication::
+Utilisation, Étude, Modification, Duplication::
 Permises techniquement et légalement +
-(« logiciel libre » sous ++GNU/GPLv3++)
+(« logiciel libre » sous ++GNU/GPLv3++)
 
-Certification::
+Rigueur::
 Programmé en http://fr.wikipedia.org/wiki/Haskell[Haskell]
 [horizontal]
-Fonctionnel pur;; Aucune mutation de données externes à une fonction (effet de bord).
-Typage statique;; Vérification des erreurs de type avant l’exécution du programme.
+Fonctionnel pur;; Aucune mutation de données externes à une fonction (sans effet de bord).
+Typage statique;; Vérification des erreurs de type avant l’exécution du programme.
 Typage fort;; Aucune conversion implicite de types de données.
 
-Portable:: GNU/Linux, Apple/MacOS, Microsoft/Windows
-
-Support:: ~1 développeur à mi-temps
+Relisible:: ≈13 000 lignes de Haskell (ou 160 écrans de 80 lignes) +
+(plus ≈1 800 lignes pour ++hledger-web++).
 +
-* Simon Michael <simon@joyful.com>
+NOTE: À équivalence fonctionnelle,
+OpenERPv7 ≈80 000 lignes de Python (≈1 000 écrans).
+
+Ancienneté:: Depuis 2007 (≈7 ans).
 
+Portable:: GNU/Linux, Apple/MacOS, Microsoft/Windows
 [horizontal]
 Ligne de commande::
+Contrôle l’ordinateur avec le langage.
 +
 [source,sh]
 ----
-       % hledger balance -f $fichier.hledger
+% hledger add     -f $fichier.hledger
+% hledger balance -f $fichier.hledger
 ----
+
 Interface Web::
 +
 [source,sh]
 ----
-       % hledger-web --server -f $fichier.hledger
-       % firefox "http://localhost:5000"
-----
-Extensible::
-+
-[source,sh]
-----
-       % ghc hledger-fait-ce-que-je-veux.hs
-       % ./hledger-fait-ce-que-je-veux -f $fichier.hledger
+% hledger-web --server -f $fichier.hledger
+% firefox "http://localhost:5000"
 ----
 
-ifdef::backend-slidy2[>>>]
-=== Les moins
-Ligne de commande::
+Support:: ≈1 développeur à mi-temps-libéré
 +
-...
-
-== Installer `hledger`
-
-* http://hledger.org/installing[]
+* Simon Michael (sm) <simon@joyful.com>
++
+NOTE: Dons @ https://www.gittip.com/simonmichael/[]
++
+[horizontal]
+Messagerie instantanée;; <irc://irc.freenode.net#ledger>
+Liste de discussion;; <hledger+subscribe@googlegroups.com>
 
+Extensible::
++
 [source,sh]
-.Debian/jessie
 ----
-% sudo apt-get install hledger hledger-web
+% ghc hledger-fait-ce-que-je-veux.hs
+% ./hledger-fait-ce-que-je-veux -f $fichier.hledger
 ----
 
-ifdef::backend-slidy2[>>>]
-=== Via `cabal`
-* http://www.haskell.org/cabal/[]
-
-[source,sh]
-.Debian/wheezy
-----
-% echo 'PATH="$HOME/.cabal/bin:$PATH"' >>~/.profile
-  # NOTE: rajoute dans le chemins des exécutables
-  # les exécutables installés par cabal
-% exit # NOTE: recharge ~/.profile
-
-% sudo apt-get install ghc cabal-install \
-               libncurses5-dev libtinfo-dev zlib1g-dev
-% cabal update
-% cabal install cabal # NOTE: met à jour cabal
-% cabal install happy # NOTE: anticipe une dépendance exécutable
-% cabal install hledger
-% cabal install alex # NOTE: anticipe une dépendance exécutable
-% cabal install warp-2.0.3.4 hledger-web
-  # NOTE: aide cabal à sélectionner un warp qui fonctionne
-----
-
-[source,sh]
-.Mise-à-jour
-----
-% cabal install --reinstall hledger hledger-web
-----
+|
+[float]
+Les moins
+~~~~~~~~~
+
+Pas tout en un::
+Fait de la comptabilité, **et juste** de la comptabilité ;
+pas un logiciel intégré type ERP (Enterprise Resource Planning)
+du genre type https://www.odoo.com/[Odoo] (ancien OpenERP) :
+Comptabilité + Point de vente + Facturation + Paye + Gestion de stock + Adhésion + Calendrier + Wiki + ...
+
+En ligne de commande::
+Peur **irrationnelle** mais fréquente,
+d’être libre et d’avoir le pouvoir sur la machine,
+au lieu d’être captif d’une interface.
++
+NOTE: L’interface Web est simple, et s’améliore.
 
-ifdef::backend-slidy2[>>>]
-==== Version de développement
+Read The Fucking Manual::
+De même que maîtriser un plan comptable néçessite
+en plus de le parcourir de **s’informer** sur son utilisation, +
+de même maîtriser un langage et un logiciel en ligne de commande nécessite
+de **s’informer** sur sa syntaxe, sa sémantique et son utilisation.
++
+NOTE: http://hledger.org/manual/[].
 
-[source,sh]
-----
-% git clone http://github.com/simonmichael/hledger.git ~/src/hledger
-% cd ~/src/hledger
-% cabal install --reinstall --force-reinstalls \
-                ./hledger-lib ./hledger ./hledger-web
-----
+|==================================
 
-== Écrire en +.ledger+
+== Langage d’un fichier +.ledger+
 Un +.ledger+ est un fichier de texte brut respectant une syntaxe préçise
-qui forme une succession d’écritures comptables, ordonnées librement.
+qui forme une succession d’écritures comptables, classées librement.
 
 ifdef::backend-slidy2[>>>]
-=== Exemple
+=== Définition informelle
 [source,hledger]
+.Fichier ++data/exemple-syntaxe.ledger++
 ----
-; Ceci est un exemple de livre comptable « ledger »
-; NOTE: fantaisiste comptablement parlant, mais syntaxiquement correct
-
-2014/01/01 Libellé de l’écriture ; UN_TAG:, Autre_tag:Avec_Valeur
-       Compte:Sous-Compte                         -42 ; flux créditant
-       Autre_Compte:Sous-Compte:Sous-Sous-Compte   42 ; flux débitant
-
-2014/01/01 Deuxième écriture le même jour
-       Vente:Âme  -666 ; (tag de flux) Arnaque:
-       Kapital     666
-
-2014/01/02 Troisième écriture le jour suivant avec ventilation des flux
-       Compte:Crédité:A  -1
-       Compte:Crédité:B  -2
-       Compte:Débité:Z    1
-       Compte:Débité:Y    1
-       Compte:Débité:X:x  1
-
-2014/04/12
-       Compte:Crédité  -1234,56
-       Compte:Débité ;  1234,56 (montant inféré)
-
-2014/02/01 Écriture non ordonnée par date ; Ok, mais déconseillé
-       Compte:Débité    1
-       Compte:Crédité  -1 ; Flux non ordonné par crédit/débit
-        ; c'est juste moins lisible...
-
-; Répéter ad nauseam
+include::data/exemple-syntaxe.ledger[]
 ----
 
-=== Langage
+.Conventions usuelles
+* Classement des écritures par date
+* Classement des flux par signe, puis compte
+
+=== Définition formelle
 
 [cols="a,a",options="header"]
 |==================================
 ^|Syntaxe (grammaire https://fr.wikipedia.org/wiki/Forme_de_Backus-Naur[BNF])
-^|Structure (signatures fonctionnelles)
+^|Informations (signatures fonctionnelles)
 |
 [source,conf]
 -----------------------------------
-livre ::= (écriture \| commentaire \| "⏎" \| "␣")*
+journal ::= (écriture \| commentaire \| "⏎" \| "␣")*
 -----------------------------------
 |
 [horizontal]
 :role: math
-**livre**:: latexmath:[$
+**journal**:: latexmath:[$
        :\>f:\textcolor{#D2691E}{\textbf{fichier}} →
        \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack$]
 |
@@ -330,162 +313,181 @@ commentaire ::= ( ";" (tag ":" valeur? \| ·)* )
        ~\textcolor{#083194}{\textbf{valeur}}:\textcolor{#D2691E}{\textbf{\mbox{texte}}\>?})$]
 |==================================
 
-NOTE: RTFM @ http://hledger.org/manual/[].
-
-
-=== Calculs
-
-[horizontal]
-**compte_parent**::
- latexmath:[$:\>c : \textcolor{#D2691E}{\textbf{compte}} → \textcolor{#D2691E}{\textbf{compte}}\>?$] +
- latexmath:[$=\>c_{\lbrack0,\cdots,|c|-2\rbrack}\ \mbox{si}\ |c| \ge 2$]
-**hiérarchie_de_compte**::
- latexmath:[$:\>\mathbb c : \textcolor{#D2691E}{\textbf{compte}} → \lbrack\textcolor{#D2691E}{\textbf{compte}}\rbrack$] +
- latexmath:[$=\>\lbrack{\ c\ :\ \lbrack{\ c\ |\ c ← (\mathbf{compte\mbox{_}parent}\>{c})}\ \rbrack}\ \rbrack$]
-**comptes**::
- latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack → \{\textcolor{#D2691E}{\textbf{compte}}\}$] +
- latexmath:[$\{\ (\textbf{compte}\>f)\ |\ f ← (\textbf{flux}\>e)\ |\ e ← \mathbb E\ \}$]
-**balance**::
- latexmath:[$:\>\mathbb F : \lbrack\textcolor{#D2691E}{\textbf{flux}}\rbrack → ℚ$] +
- latexmath:[$=\>{(\ m\ |\ m ← m + (\textbf{montant}\>f)\ |\ f ← \mathbb F\ |\ m ← 0\ )$] +
-**solde_de_compte**::
- latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack → c : \textcolor{#D2691E}{\textbf{compte}} → ℚ$] +
- latexmath:[$=\>{\textbf{balance}\>\lbrack{\ f\ |\ f ← (\textbf{flux}\>e),\ c\>≼\>(\textbf{compte}\>f)\ |\ e ← \mathbb E\ }\rbrack$] +
-// latexmath:[$=\>{\displaystyle{\sum_{e ← \mathbb E}}\left(\sum_{\stackrel{f ← (\textbf{flux}\>e),}{c\ ≼\ (\textbf{compte}\>f)}}(\textbf{montant}\>f})\right)$]
-**solde**::
- latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack →
-       \lbrack\textcolor{#D2691E}{\textbf{flux}}\rbrack$] +
- latexmath:[$=\>\displaystyle{\left\lbrack
-       \begin{array}{l}
-       (\textcolor{#083194}{\textbf{compte}}=c´, \textcolor{#083194}{\textbf{montant}}=m) \\
-       |\ m ← (\mathbf{\mbox{solde_de_compte}}\,\mathbb E\,c´) \\
-       |\ c´ ← (\mathbf{hi\acute{e}rarchie\mbox{_}de\mbox{_}compte}\,c) \\
-       |\ c ← (\mathbf{comptes}\,\mathbb E)
-       \end{array}}\right\rbrack$]
-
-
-=== Utiliser un éditeur de texte structuré (`vim`)
+== Commandes `hledger`
 
-Coloration syntaxique sur mesure::
-* ++hledger.vim++
-+
-[source,vim]
-.~/.vimrc
-----
-autocmd BufNewFile,BufRead *.hledger,*.ledger setfiletype hledger
-----
-Complètement automatique des comptes (`<Tab>`)::
-+
-* https://github.com/Shougo/neocomplete.vim[]
-* https://github.com/Shougo/neocomplcache.vim[]
-+
-[source,vim]
-.~/.vimrc
-----
-autocmd Filetype hledger set iskeyword+=.,38,39,40,41,44,45,58 "
-----
-Alignement automatique des montants::
-+
-* https://github.com/junegunn/vim-easy-align[]
-+
-[source,vim]
-.~/.vimrc
+[source,sh]
+.Syntaxe quasiment commune à toutes les commandes ++hledger++
 ----
-       let g:easy_align_ignore_groups = ['Comment', 'String', 'hledgerTransaction']
+% hledger $commande $options $filtre -f $fichier.ledger
 ----
 
 ifdef::backend-slidy2[>>>]
-==== Suivre les modifications à plusieurs et/ou à distance (`git`)
-TODO
+=== Afficher le plan comptable (`accounts`)
 
-== Commandes `hledger`
-
-ifdef::backend-slidy2[>>>]
-=== Calculer des soldes (`balance`)
+[cols="a,a"]
+|==================================
+|
+[float]
 [source,sh]
 ----
-% hledger balance -f $fichier.ledger $filtre
+% hledger accounts --tree -f data/exemple-syntaxe.ledger
+sys::[hledger accounts --tree -f data/exemple-syntaxe.ledger]
 ----
 
 [source,sh]
-.Suivi des comptes
-----
-% hledger balance -b 2012/02/01 -e 2012/04/30              --monthly -f $fichier.ledger >/tmp/bal.flow
-% hledger balance -b 2012/02/01 -e 2012/04/30 --cumulative --monthly -f $fichier.ledger >/tmp/bal.cumulative
-% hledger balance -b 2012/02/01 -e 2012/04/30 --historical --monthly -f $fichier.ledger >/tmp/bal.historical
-% gvimdiff -o /tmp/bal.{cumulative,historical}
-----
-image::data/gvimdiff-cumulative-historical.png[]
-
-ifdef::backend-slidy2[>>>]
-=== Filtrer des écritures (`print`)
-TODO
-
-ifdef::backend-slidy2[>>>]
-=== Suivre un compte (`register`)
-TODO
-
-ifdef::backend-slidy2[>>>]
-=== Observer des statistiques (`stats`, `activity`)
-TODO
-
-
-== Exercice comptable
-
-ifdef::backend-slidy2[>>>]
-=== Plan comptable d’une association
-
-* DOC : https://wiki.cyclocoop.org/Comptabilité/Document/Plan_comptable/[]
-
-[source,hledger]
 ----
-#include::data/Cyclofficine.Plan_comptable.hledger[]
+% hledger accounts --flat -f data/exemple-syntaxe.ledger
+sys::[hledger accounts --flat -f data/exemple-syntaxe.ledger]
 ----
+|
+[float]
+**comptes**::
+ latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack → \{\textcolor{#D2691E}{\textbf{compte}}\}$] +
+ = « __ensemble des comptes vers lesquels fluent les écritures__ » +
+ latexmath:[$=\{\ (\textbf{compte}\>f)\ \|\ f ← (\textbf{flux}\>e)\ \|\ e ← \mathbb E\ \}$]
+**compte_parent**::
+ latexmath:[$:\>c : \textcolor{#D2691E}{\textbf{compte}} → \textcolor{#D2691E}{\textbf{compte}}\>?$] +
+ latexmath:[$=\>c_{\lbrack0,\cdots,\|c\|-2\rbrack}\ \mbox{si}\ \|c\| \ge 2$]
+**hiérachie_de_compte**::
+ latexmath:[$:\>\mathbb c : \textcolor{#D2691E}{\textbf{compte}} → \lbrack\textcolor{#D2691E}{\textbf{compte}}\rbrack$] +
+// = « __ensemble des comptes vers lesquels fluent les écritures et leur comptes parents__ » +
+ latexmath:[$=\>\lbrack{\ c\ :\ \lbrack{\ c\ \|\ c ← (\mathbf{compte\mbox{_}parent}\>{c})}\ \rbrack}\ \rbrack$]
 
-=== Comptabiliser en partie double
+|==================================
 
-Solde nul de toute écriture::
-+
-Pour toute écriture;;
-Tout ce qui est _débité_ (+++++) dans ses comptes +
-est forcément _crédité_ (++-++) dans ses autres comptes.
-+
-* latexmath:[$\forall e : \textcolor{#D2691E}{\textbf{\acute{e}criture}},
-       \ \textbf{balance}\>(\textbf{flux}\>{e}) = 0$]
+=== Écrire des écritures (`add`)
 
-Relation de Chasles par écritures d’engagement et de paiement::
-+
-[source,hledger]
+[source,sh]
+.Sélection d’un modèle selon le libellé
+----
+% hledger add -f /tmp/test.ledger
+Adding transactions to journal file /tmp/test.ledger
+Any command line arguments will be used as defaults.
+Use tab key to complete, readline keys to edit, enter to accept defaults.
+An optional (CODE) may follow transaction dates.
+An optional ; COMMENT may follow descriptions or amounts.
+If you make a mistake, enter < at any prompt to restart the transaction.
+To end a transaction, enter . when prompted.
+To quit, enter . at a date prompt or press control-d or control-c.
+Date [2014/07/30]: 2014/01/01
+Description: Libellé de l’écriture ; UN_TAG:, Autre_tag:Avec_Valeur
+Account 1: A:AA
+Amount  1: -42
+Account 2: B:BB:BBB
+Amount  2 [42.0]: 40
+Account 3: B:A
+Amount  3 [2.0]: 
+Account 4 (or . or enter to finish this transaction): .
+2014/01/01 Libellé de l’écriture    ; UN_TAG:, Autre_tag:Avec_Valeur
+    A:AA               -42
+    B:BB:BBB            40
+    B:A                2.0
+
+Save this transaction to the journal ? [y]: y
+Saved.
+Starting the next transaction (. or ctrl-D/ctrl-C to quit)
+Date [2014/01/01]: 
+Description: Libellé d’une autre écriture
+Using this similar transaction for defaults:
+2014/01/01 Libellé de l’écriture    ; UN_TAG:, Autre_tag:Avec_Valeur
+    A:AA               -42
+    B:BB:BBB            40
+    B:A                2.0
+
+Account 1 [A:AA]: 
+Amount  1 [-42.0]: 100
+Account 2 [B:BB:BBB]: B
+Amount  2 [-100.0]: 
+Account 3 (or . to finish this transaction) [B:A]: .
+2014/01/01 Libellé d’une autre écriture
+    A:AA           100
+    B           -100.0
+
+Save this transaction to the journal ? [y]: y
+Saved.
+Starting the next transaction (. or ctrl-D/ctrl-C to quit)
+Date [2014/01/01]: .
 ----
-01/01 Écriture d’engagement
-       7.Produit:0.Vente:1.Produit_fini:1.Vélo                  -80
-       5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser   80
 
-01/02 Écriture de paiement
-       5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser  -80
-       5.Finance:1.Etablissement:2.Banque:001.Courant            80
+[source,sh]
+.Complètement automatique des comptes
+----
+% hledger add -f data/exemple-plan-comptable.ledger
+Adding transactions to journal file /home/julm/admin/cyber.coop/src/tool/hledger/doc/data/exemple-plan-comptable.ledger
+Any command line arguments will be used as defaults.
+Use tab key to complete, readline keys to edit, enter to accept defaults.
+An optional (CODE) may follow transaction dates.
+An optional ; COMMENT may follow descriptions or amounts.
+If you make a mistake, enter < at any prompt to restart the transaction.
+To end a transaction, enter . when prompted.
+To quit, enter . at a date prompt or press control-d or control-c.
+Date [2014/07/30]: yesterday
+Description: Trololo
+Account 1: 1.Capital:
+1.Capital:0.Fonds                                                                  1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement
+1.Capital:0.Fonds:2.SDR                                                            1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:1.État
+1.Capital:0.Fonds:2.SDR:4.Apport                                                   1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:2.Région
+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
+1.Capital:0.Fonds:3.ADR                                                            1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:4.Commune
+1.Capital:0.Fonds:3.ADR:4.Apport                                                   1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:5.Collectivité_publique
+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
+1.Capital:0.Fonds:6.Réserve                                                        1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:7.Organisme_privé
+1.Capital:0.Fonds:6.Réserve:3.Statutaire                                           1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:8.Autre
+1.Capital:0.Fonds:6.Réserve:8.Autre                                                1.Capital:3.Sub_invest_BNR:9.Compte_résultat:2.Autre
+1.Capital:1.Report                                                                 1.Capital:5.Provision_risque&charge
+1.Capital:1.Report:0.Bénéfice                                                      1.Capital:5.Provision_risque&charge:1.Risque
+1.Capital:1.Report:5.Financeur                                                     1.Capital:5.Provision_risque&charge:5.Impôt
+1.Capital:1.Report:9.Déficit                                                       1.Capital:5.Provision_risque&charge:8.Autre
+1.Capital:2.Résultat                                                               1.Capital:5.Provision_risque&charge:8.Autre:2.Congés_à_payer
+1.Capital:2.Résultat:0.Bénéfice                                                    1.Capital:6.Emprunt,Dette
+1.Capital:2.Résultat:9.Déficit                                                     1.Capital:6.Emprunt,Dette:4.Etablissement_crédit
+1.Capital:3.Sub_invest_BNR                                                         1.Capital:6.Emprunt,Dette:5.Dépôt,Caution
+1.Capital:3.Sub_invest_BNR:1.Equipement                                            1.Capital:6.Emprunt,Dette:8.Autre
+1.Capital:3.Sub_invest_BNR:1.Equipement:1.État                                     1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt
+1.Capital:3.Sub_invest_BNR:1.Equipement:2.Région                                   1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:1.Bénévole
+1.Capital:3.Sub_invest_BNR:1.Equipement:3.Département                              1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:2.Salarié-e
+1.Capital:3.Sub_invest_BNR:1.Equipement:4.Commune                                  1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:3.Cyclofficine
+1.Capital:3.Sub_invest_BNR:1.Equipement:5.Collectivité_publique                    1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:4.Autre
+1.Capital:3.Sub_invest_BNR:1.Equipement:6.Entreprise_publique                      1.Capital:6.Emprunt,Dette:8.Autre:7.Dette
+1.Capital:3.Sub_invest_BNR:1.Equipement:7.Organisme_privé                          1.Capital:9.Fonds_dédiés
+1.Capital:3.Sub_invest_BNR:1.Equipement:8.Autre                                    1.Capital:9.Fonds_dédiés:4.Sub_exploit
+1.Capital:3.Sub_invest_BNR:8.Autre                                                 1.Capital:9.Fonds_dédiés:5.Don_affecté
+1.Capital:3.Sub_invest_BNR:9.Compte_résultat
+Account 1: 1.Capital:6.Emprunt,Dette
+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
+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
+1.Capital:6.Emprunt,Dette:5.Dépôt,Caution                   1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:2.Salarié-e
+1.Capital:6.Emprunt,Dette:8.Autre                           1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:3.Cyclofficine
+Account 1: 1.Capital:6.Emprunt,Dette:4.Etablissement_crédit
+Amount  1: -666 ; Don’t panic
+Account 2: 5.Finance:
+5.Finance:1.Etablissement                                5.Finance:1.Etablissement:2.Banque:002.Livret            5.Finance:8.Virement
+5.Finance:1.Etablissement:1.Valeur                       5.Finance:3.Caisse                                       5.Finance:8.Virement:0.Interne
+5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser  5.Finance:3.Caisse:1.Siège                               5.Finance:8.Virement:1.Fonds
+5.Finance:1.Etablissement:2.Banque:001.Courant           5.Finance:3.Caisse:2.Atelier
+Account 2: 5.Finance:1.Etablissement:2.Banque:001.Courant
+Amount  2 [666.0]: 
+Account 3 (or . or enter to finish this transaction): .
+2014/07/29 Trololo
+    1.Capital:6.Emprunt,Dette:4.Etablissement_crédit          -666    ;  Don’t panic
+    5.Finance:1.Etablissement:2.Banque:001.Courant           666.0
+
+Save this transaction to the journal ? [y]: y
+Saved.
+Starting the next transaction (. or ctrl-D/ctrl-C to quit)
+Date [2014/07/29]: .
 ----
-+
-NOTE: pour des espèces, transiter par : ++5.Finance:3.Caisse:1.Siège++
-
-==== Soldes nuls souhaitables
-
-- Écritures des recettes
-+
-1. latexmath:[$\sum{\mbox{ventes}} + \sum{\mbox{dons}} = \sum{\mbox{espèces entrées en caisse}} + \sum{\mbox{Chèques à encaisser}}$] +
-(Total des ventes + dons == Total d’espèces entrée en caisse + Chèques à encaisser (5112))
-2. Total chèques à encaisser (5112) == Total remises de chèques à la banque (512) (+/- argent non déposé en banque)
-3. Solde du compte caisse (531) == Total entrées espèces en caisse - Total des sorties (remises d’espèces en banque - sorties d’achats - erreur de caisse)
-4. Solde compte caisse (531) == Total entrées en caisse - Dépôt espèce en banque - Achat en espèce
 
+=== Filtrer des écritures (`print`)
 
-- Écritures de paye
-+
-TODO
+++hledger++ permet de filtrer les écritures selon leurs données
+(date, libellé, comptes, montants, tags, ...) ;
+des expressions rationnelles peuvent être utilisées à cette fin.
 
+NOTE: Cf. manuel : http://hledger.org/manual#query-arguments[]
 
-=== Journaux (filtres)
 [horizontal]
+.Afficher des « journaux auxiliaires » (exemples approximatifs)
 **Banque**::
 +
 [source,sh]
@@ -516,7 +518,7 @@ hledger print -f $fichier.ledger '^5.Finance:3.Caisse:'
 ----
 hledger print -f $fichier.ledger '6.Charge:(3.Impôt:(1.|3.):|4.Personnel:)'
 ----
-**À NouVeaux**::
+**À NouVeau**::
 +
 [source,sh]
 ----
@@ -529,18 +531,135 @@ hledger print -f $fichier.ledger tag:ANV
 hledger print -f $fichier.ledger tag:OD
 ----
 
-=== Clôture / Ouverture (`equity`)
+
+=== Calculer des soldes (`balance`)
+
+[cols="a,a"]
+|==================================
+|
+[float]
+[source,sh]
+.Balance de toutes les écritures
+----
+% hledger balance -f data/exemple-syntaxe.ledger
+sys::[hledger balance -f data/exemple-syntaxe.ledger | sed -e 's/^-/‑/']
+----
+
+NOTE: Toutes les écritures devant avoir leur balance nulle,
+cette balance sur toutes les écritures est également nulle.
+
+[source,sh]
+.Balance sur des comptes filtrés par expression rationnelle
+----
+% hledger balance 'A' -f data/exemple-syntaxe.ledger
+sys::[hledger balance 'A' -f data/exemple-syntaxe.ledger | sed -e 's/^[-=]/‑/']
+----
+
+[source,sh]
+.Balance sur un compte racine
+----
+% hledger balance '^A' -f data/exemple-syntaxe.ledger
+sys::[hledger balance '^A' -f data/exemple-syntaxe.ledger | sed -e 's/^[-=]/‑/']
+----
+
+[source,sh]
+.Sans accumulation des soldes d’une période à l’autre
+----
+% hledger balance --daily -f data/exemple-syntaxe.ledger
+sys::[hledger balance --daily -f data/exemple-syntaxe.ledger | sed -e 's/^[-=]/‑/;s/[|]/\\|/g']
+----
+
+[source,sh]
+.Avec accumulation des soldes d’une période à l’autre
+----
+% hledger balance --daily --historical -f data/exemple-syntaxe.ledger
+sys::[hledger balance --daily --historical -f data/exemple-syntaxe.ledger | sed -e 's/^[-=]/‑/;s/[|]/\\|/g']
+----
+
+//[source,sh]
+//.Suivi des comptes
+//----
+//% hledger balance -b 2012/02/01 -e 2012/04/30              --monthly -f $fichier.ledger >/tmp/bal.flow
+//% hledger balance -b 2012/02/01 -e 2012/04/30 --cumulative --monthly -f $fichier.ledger >/tmp/bal.cumulative
+//% hledger balance -b 2012/02/01 -e 2012/04/30 --historical --monthly -f $fichier.ledger >/tmp/bal.historical
+//% gvimdiff -o /tmp/bal.{cumulative,historical}
+//----
+//image::data/gvimdiff-cumulative-historical.png[]
+|
+[float]
+[horizontal]
+**balance**::
+ latexmath:[$:\>\mathbb F : \lbrack\textcolor{#D2691E}{\textbf{flux}}\rbrack → ℚ$] +
+ = « __somme des montants des flux__ » +
+ latexmath:[$=\>{(\ m\ \|\ m ← m + (\textbf{montant}\>f)\ \|\ f ← \mathbb F\ \|\ m ← 0\ )$] +
+**solde_de_compte**::
+ latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack → c : \textcolor{#D2691E}{\textbf{compte}} → ℚ$] +
+ latexmath:[$=\>{\textbf{balance}\>\lbrack{\ f\ \|\ f ← (\textbf{flux}\>e),\ c\>≼\>(\textbf{compte}\>f)\ \|\ e ← \mathbb E\ }\rbrack$] +
+// latexmath:[$=\>{\displaystyle{\sum_{e ← \mathbb E}}\left(\sum_{\stackrel{f ← (\textbf{flux}\>e),}{c\ ≼\ (\textbf{compte}\>f)}}(\textbf{montant}\>f})\right)$]
+**solde**::
+ latexmath:[$:\>\mathbb E : \lbrack\textcolor{#D2691E}{\textbf{\acute{e}criture}}\rbrack →
+       \lbrack\textcolor{#D2691E}{\textbf{flux}}\rbrack$] +
+ latexmath:[$=\>\displaystyle{\left\lbrack
+       \begin{array}{l}
+       (\textcolor{#083194}{\textbf{compte}}=c´, \textcolor{#083194}{\textbf{montant}}=m) \\
+       \|\ m ← (\mathbf{\mbox{solde_de_compte}}\,\mathbb E\,c´) \\
+       \|\ c´ ← (\mathbf{plan\mbox{_}comptable}\,c) \\
+       \|\ c ← (\mathbf{comptes}\,\mathbb E)
+       \end{array}}\right\rbrack$]
+
+|==================================
+
+=== Suivre un compte (`register`)
+
+[source,sh]
+.Suivi de la somme des crédits du compte `5112`
+----
+% hledger register -f Paris.2011.hledger 'amt:<0' '^5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser'
+2011/05/23 Remise chq 0994029   ..Chèque_à_encaisser      -100,00€      -100,00€
+2011/09/29 Remise chq 1101801   ..Chèque_à_encaisser       -20,00€      -120,00€
+2011/11/18 Remise chq 1101802   ..Chèque_à_encaisser     -2000,00€     -2120,00€
+----
+
+[source,sh]
+.Suivi de la somme des débits du compte `5112`
+----
+% hledger register -f Paris.2011.hledger 'amt:>0' '^5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser'
+2011/05/15 Prêt                 ..Chèque_à_encaisser       100,00€       100,00€
+2011/09/20 Cotisations          ..Chèque_à_encaisser        20,00€       120,00€
+2011/11/10 Prêt                 ..Chèque_à_encaisser      2000,00€      2120,00€
+----
+
+=== Calculer les écritures de clôture et ouverture (`equity`)
 ++hledger-equity++ calcule une balance de comptes
 et en fait deux écritures, respectivement :
 [horizontal]
 de clôture:: pour les solder à zéro en fin d’exercice ;
 d’ouverture:: pour les réinitialiser à leur solde du précédent exercice.
 
+[cols="a,a"]
+|==================================
+|
+[float]
+[source,sh]
+----
+% hledger-equity -f data/exemple-syntaxe.ledger
+sys::[hledger-equity -f data/exemple-syntaxe.ledger]
+----
+
 [source,sh]
 ----
-% hledger-equity -f $fichier.ledger $filtre
+% hledger-equity -f data/exemple-syntaxe.ledger '^A'
+sys::[hledger-equity -f data/exemple-syntaxe.ledger '^A']
 ----
 
+[source,sh]
+----
+% hledger-equity -f data/exemple-syntaxe.ledger '^B'
+sys::[hledger-equity -f data/exemple-syntaxe.ledger '^B']
+----
+
+|
+[float]
 [source,hledger]
 .Solde des compte de gestion
 ----
@@ -568,6 +687,149 @@ d’ouverture:: pour les réinitialiser à leur solde du précédent exercice.
     equity:opening balances                                                  -44,58€
 ----
 
+|==================================
+
+
+=== Observer des statistiques (`stats`, `activity`)
+
+[cols="a,a"]
+|==================================
+|
+[float]
+[source,sh]
+.Statistiques annuelles
+----
+% hledger stats --period yearly -f Paris.2012.hledger
+Main journal file        : Paris.2012.hledger
+Included journal files   : Paris.Plan_comptable.hledger
+                           Cyclofficine.Plan_comptable.hledger
+Transactions span        : 2012-01-01 to 2013-01-01 (366 days)
+Last transaction         : 2012-12-31 (576 days ago)
+Transactions             : 210 (0.6 per day)
+Transactions last 30 days: 0 (0.0 per day)
+Transactions last 7 days : 0 (0.0 per day)
+Payees/descriptions      : 144
+Accounts                 : 448 (depth 6)
+Commodities              : 1 (€)
+----
+
+|
+[float]
+[source,sh]
+.Jours de l’année avec au moins 5 flux
+----
+hledger activity --period daily -f Paris.2012.hledger \| grep '\*\{5\}'
+2012-01-01 ***********
+2012-02-29 ******
+2012-03-23 ******
+2012-03-31 *********
+2012-04-03 ******
+2012-04-30 ********
+2012-05-03 ****************
+2012-05-11 ********
+2012-05-14 ****************
+2012-05-31 **********
+2012-06-11 ******************
+2012-06-30 *************
+2012-07-13 *********
+2012-07-17 ******
+2012-07-30 ******
+2012-07-31 ***********
+2012-08-31 ******
+2012-09-26 ********
+2012-09-30 ******
+2012-11-13 ********
+2012-11-30 *****
+2012-12-31 *************
+----
+
+|==================================
+
+
+== Exercice comptable
+
+ifdef::backend-slidy2[>>>]
+=== Plan comptable d’une association
+
+NOTE: Brouillon de documentation @ https://wiki.cyclocoop.org/Comptabilité/Document/Plan_comptable/[]
+
+[source,hledger]
+----
+include::data/Cyclofficine.Plan_comptable.hledger[]
+----
+
+=== Comptabiliser en partie double
+
+[cols="a,a"]
+|==================================
+|
+[float]
+Balance nulle de toute écriture::
+++hledger++ n’accepte aucune écriture qui ne respecte
+pas cette contrainte de la tâche comptable : +
++
+« __Pour toute écriture, tout ce qui est [black]_débité_ (+++++) dans ses comptes +
+est forcément [black]_crédité_ (++-++) dans ses autres comptes, +
+et réciproquement.__ »
++
+* Formellement : latexmath:[$\forall e : \textcolor{#D2691E}{\textbf{\acute{e}criture}},
+       \ \textbf{balance}\>(\textbf{flux}\>{e}) = 0$]
++
+[source,hledger]
+----
+2014/04/12
+       Compte:Crédité  -1234,56
+       Compte:Débité ;  1234,56 (montant inféré)
+----
+
+|
+[float]
+Relation de Chasles par écritures d’[black]*engagement* et de [black]*paiement*::
+++hledger++ laisse l’humain s’occuper de ce principe de la tâche comptable
+qui traduit la réalité temporelle des mouvements d’argent.
++
+[source,hledger]
+----
+01/01 Prestation ; Écriture d’engagement (pièce comptable : facture)
+       7.Produit:0.Vente:6.Prest'action                              -700,00
+       4.Tiers:1.Client:1.Client:1.Bien,Prestation:007.Mairie_du_XI   700,00
+01/14 Virement ; Écriture de paiement (pièce comptable : relevé de compte)
+       4.Tiers:1.Client:1.Client:1.Bien,Prestation:007.Mairie_du_XI  -700,00
+       5.Finance:1.Etablissement:2.Banque:001.Courant                 700,00
+----
+//+
+//[source,hledger]
+//----
+//01/01 Vélo ; Écriture d’engagement (pièce comptable : facture)
+//     7.Produit:0.Vente:1.Produit_fini:1.Vélo                  -80
+//     5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser   80
+//01/02 Chèque ; Écriture de paiement (pièce comptable : relevé de compte)
+//     5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser  -80
+//     5.Finance:1.Etablissement:2.Banque:001.Courant            80
+//----
+//+
+//NOTE: pour des espèces, transiter par : ++5.Finance:3.Caisse:1.Siège++
+
+|==================================
+
+==== Soldes nuls souhaitables
+
+- Écritures des recettes
++
+1. latexmath:[$\sum{\mbox{ventes}} + \sum{\mbox{dons}} = \sum{\mbox{espèces entrées en caisse}} + \sum{\mbox{Chèques à encaisser}}$] +
+(Total des ventes + dons == Total d’espèces entrée en caisse + chèques à encaisser (5112))
+
+2. Total chèques à encaisser (5112) == Total remises de chèques à la banque (512) (+/- argent non déposé en banque)
++
+NOTE: vérifier qu’il ne reste plus de chèque comptabilisés dans le tiroir
+
+3. Solde du compte caisse (531) == Total entrées espèces en caisse - Total des sorties
+(remises d’espèces en banque - sorties d’achats - erreur de caisse)
+
+- Écritures de paye
++
+TODO
+
 == Import et export avec `hledger`
 
 * https://github.com/eval/total_recall[]
@@ -583,28 +845,114 @@ ifdef::backend-slidy2[>>>]
 ==== Comptes de résultats
 TODO
 
-== `hledger-web`
+== Installer `hledger`
+
+* http://hledger.org/installing[]
+
+[source,sh]
+.Debian/jessie
+----
+% sudo apt-get install hledger hledger-web
+----
+
+ifdef::backend-slidy2[>>>]
+=== Via `cabal`
+* http://www.haskell.org/cabal/[]
+
+[source,sh]
+.Debian/wheezy
+----
+% echo 'PATH="$HOME/.cabal/bin:$PATH"' >>~/.profile
+  # NOTE: rajoute dans le chemins des exécutables
+  # les exécutables installés par cabal
+% exit # NOTE: recharge ~/.profile
+
+% sudo apt-get install ghc cabal-install \
+               libncurses5-dev libtinfo-dev zlib1g-dev
+% cabal update
+% cabal install cabal # NOTE: met à jour cabal
+% cabal install happy # NOTE: anticipe une dépendance exécutable
+% cabal install hledger
+% cabal install alex # NOTE: anticipe une dépendance exécutable
+% cabal install warp-2.0.3.4 hledger-web
+  # NOTE: aide cabal à sélectionner un warp qui fonctionne
+----
+
+[source,sh]
+.Mise-à-jour
+----
+% cabal install --reinstall hledger hledger-web
+----
+
+ifdef::backend-slidy2[>>>]
+==== Version de développement
+
+[source,sh]
+----
+% git clone http://github.com/simonmichael/hledger.git ~/src/hledger
+% cd ~/src/hledger
+% cabal install --reinstall --force-reinstalls \
+                ./hledger-lib ./hledger ./hledger-web
+----
+=== Utiliser un éditeur de texte structuré (`vim`)
+
+Coloration syntaxique sur mesure::
+* ++hledger.vim++
++
+[source,vim]
+.~/.vimrc
+----
+autocmd BufNewFile,BufRead *.hledger,*.ledger setfiletype hledger
+----
+Complètement automatique des comptes (`<Tab>`)::
++
+* https://github.com/Shougo/neocomplete.vim[]
+* https://github.com/Shougo/neocomplcache.vim[]
++
+NOTE: Besoin de rajouter ++vim/autoload/neocomplcache/filters/sorter_bytes.vim++.
++
+[source,vim]
+.~/.vimrc
+----
+autocmd Filetype hledger set iskeyword+=.,38,39,40,41,44,45,58 "
+----
+Alignement automatique des montants::
++
+* https://github.com/junegunn/vim-easy-align[]
++
+[source,vim]
+.~/.vimrc
+----
+let g:easy_align_ignore_groups = ['Comment', 'String', 'hledgerTransaction']
+----
+
+ifdef::backend-slidy2[>>>]
+==== Suivre les modifications à plusieurs et/ou à distance (`git`)
 TODO
 
-== (bonus) Scripter ++hledger++
+== +++hledger-web+++
+* http://localhost:5000[]
++
 TODO
 
-ifdef::backend-slidy2[>>>]
-=== Installer un script ++hledger++
+== Scripter ++hledger++
+
 [source,sh]
+.Installer un script ++hledger++
 ----
 % echo 'PATH="$HOME/src/hledger/extra:$PATH"' >>~/.profile
 % exit # NOTE: recharge ~/.profile
 % ghc ~/src/hledger/extra/hledger-SCRIPT.hs
 ----
 
-== Communauté
-
-[horizontal]
-Chat:: <irc://irc.freenode.net#ledger>
-Liste:: <hledger+subscribe@googlegroups.com>
+.Idées de scripts
+* Vérifier l’ordre des dates.
+* Chercher des écritures doublonnes.
 
+== Merci
 
+.Luca Pacioli
+image::data/Luca_Pacioli_(Gemaelde).jpeg[]
 
 ifdef::backend-slidy2[]
 [hledgersplash,position: absolute; left: 50%; top: 10%;]