init
authorJulien Moutinho <julm+tool+hledger@autogeree.net>
Tue, 22 Jul 2014 17:48:57 +0000 (19:48 +0200)
committerJulien Moutinho <julm+tool+hledger@autogeree.net>
Wed, 23 Jul 2014 00:00:52 +0000 (02:00 +0200)
.gitignore [new file with mode: 0644]
Makefile [new file with mode: 0644]
chart/Association_1901/... [new symlink]
chart/Association_1901/Cyclofficine.Plan_comptable.hledger [new file with mode: 0644]
hledger-equity.hs [new file with mode: 0755]
hledger-of-oxygen-csv.pl [new file with mode: 0755]
hledger-print-csv.hs [new file with mode: 0755]
hledger-range-voting.hs [new file with mode: 0755]
timelog [new file with mode: 0755]
vim/syntax/hledger.vim [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..52b380e
--- /dev/null
@@ -0,0 +1,6 @@
+*.csv
+*.o
+*.hi
+hledger-equity
+hledger-print-csv
+hledger-range-voting
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..ebeb609
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,20 @@
+hs=$(wildcard *.hs)
+chart=$(wildcard chart/*/*.hledger)
+
+all: $(hs:.hs=) $(chart:.hledger=.csv)
+
+c clean: \
+ $(hs:.hs=.o/clean) \
+ $(hs:.hs=.hi/clean) \
+ $(hs:.hs=/clean) \
+ $(chart:.hledger=.csv/clean)
+%/clean:
+       $(if $(wildcard $*),rm -f "$*")
+
+%: %.hs
+       ghc $<
+
+chart/%.csv: chart/%.hledger ./hledger-print-csv.hs
+       ./hledger-print-csv \
+        -f $< \
+          >$@
diff --git a/chart/Association_1901/... b/chart/Association_1901/...
new file mode 120000 (symlink)
index 0000000..c25bddb
--- /dev/null
@@ -0,0 +1 @@
+../..
\ No newline at end of file
diff --git a/chart/Association_1901/Cyclofficine.Plan_comptable.hledger b/chart/Association_1901/Cyclofficine.Plan_comptable.hledger
new file mode 100644 (file)
index 0000000..a0998f5
--- /dev/null
@@ -0,0 +1,404 @@
+; Plan comptable d’une Cyclofficine
+; =================================
+;
+; == Utilisation
+; Doit être inclus ainsi dans un FICHIER.hledger l’utilisant :
+; ----
+; !include Plan_comptable.hledger
+; ----
+; ATTENTION: rien n’empêche techniquement un FICHIER.hledger
+;            de rajouter des comptes après cette inclusion.
+
+; Définir un Plan comptable dans hledger
+; consiste à faire une écriture dont tous les montants sont nuls
+; et qui recense tous les comptes qui vont à priori être utilisés.
+
+; ATTENTION: par convention ici chaque compte doit respecter la syntaxe :
+; ----
+; A.ZZZ:B.YYY:C.XXX  0 ; ABC. INTITULÉ OFFICIEL DU COMPTE
+; ----
+
+D 1,000.00€ ; NOTE: précise le format de la devise.
+
+01/01 Initialisation des comptes
+       1.Capital                                                                                  0  ; 1. COMPTES DE CAPITAUX
+       1.Capital:0.Fonds                                                                          0  ; 10. Fonds associatifs et reserves
+       1.Capital:0.Fonds:2.SDR                                                                    0  ; 102. Fonds associatifs sans droit de reprise (SDR)
+       1.Capital:0.Fonds:2.SDR:4.Apport                                                           0  ; 1024. Apports SDR
+       1.Capital:0.Fonds:2.SDR:6.Sub_invest_BR                                                    0  ; 1026. Subventions d’investissement (biens renouvelables) SDR
+       1.Capital:0.Fonds:3.ADR                                                                    0  ; 103. Fonds associatifs avec droit de reprise (ADR)
+       1.Capital:0.Fonds:3.ADR:4.Apport                                                           0  ; 1034. Apports ADR
+       1.Capital:0.Fonds:3.ADR:6.Sub_invest_BR                                                    0  ; 1036. Subventions d’investissement (biens renouvelables) ADR
+       1.Capital:0.Fonds:6.Réserve                                                                0  ; 106. Réserves
+       1.Capital:0.Fonds:6.Réserve:3.Statutaire                                                   0  ; 1063. Réserves statutaires ou contractuelles
+       1.Capital:0.Fonds:6.Réserve:8.Autre                                                        0  ; 1068. Autres réserves (dont réserves pour projet associatif)
+       1.Capital:1.Report                                                                         0  ; 11. Report à nouveau
+       1.Capital:1.Report:0.Bénéfice                                                              0  ; 110. Report à nouveau (solde créditeur/bénéfice)
+       1.Capital:1.Report:5.Financeur                                                             0  ; 115. Résultats sous contrôle de tiers financeurs
+       1.Capital:1.Report:9.Déficit                                                               0  ; 119. Report à nouveau (solde débiteur/perte)
+       1.Capital:2.Résultat                                                                       0  ; 12. Résultat net de l’exercice
+       1.Capital:2.Résultat:0.Bénéfice                                                            0  ; 120. Résultat de l’exercice (excédent/bénéfice)
+       1.Capital:2.Résultat:9.Déficit                                                             0  ; 129. Résultat de l’exercice (déficit/perte)
+       1.Capital:3.Sub_invest_BNR                                                                 0  ; 13. Subventions d’investissements (biens non renouvelables) ADR
+       1.Capital:3.Sub_invest_BNR:1.Equipement                                                    0  ; 131. Subventions d’équipement
+       1.Capital:3.Sub_invest_BNR:1.Equipement:1.État                                             0  ; 1311. État
+       1.Capital:3.Sub_invest_BNR:1.Equipement:2.Région                                           0  ; 1312. Région
+       1.Capital:3.Sub_invest_BNR:1.Equipement:3.Département                                      0  ; 1313. Département
+       1.Capital:3.Sub_invest_BNR:1.Equipement:4.Commune                                          0  ; 1314. Commune
+       1.Capital:3.Sub_invest_BNR:1.Equipement:5.Collectivité_publique                            0  ; 1315. Collectivités publiques
+       1.Capital:3.Sub_invest_BNR:1.Equipement:6.Entreprise_publique                              0  ; 1316. Entreprises publiques
+       1.Capital:3.Sub_invest_BNR:1.Equipement:7.Organisme_privé                                  0  ; 1317. Entreprises et organismes privés
+       1.Capital:3.Sub_invest_BNR:1.Equipement:8.Autre                                            0  ; 1318. Autres
+       1.Capital:3.Sub_invest_BNR:8.Autre                                                         0  ; 138. Autres subventions d’investissement
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat                                               0  ; 139. Subventions d’investissements inscrites au compte de résultat
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement                                  0  ; 1391. Subvention d'équipement
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:1.État                           0  ; 13911. État
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:2.Région                         0  ; 13912. Région
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:3.Département                    0  ; 13913. Département
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:4.Commune                        0  ; 13914. Commune
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:5.Collectivité_publique          0  ; 13915. Collectivités publiques
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:6.Entreprise_publique            0  ; 13916. Entreprises publiques
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:7.Organisme_privé                0  ; 13917. Entreprises et organismes privés
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat:1.Equipement:8.Autre                          0  ; 13918. Autres
+       1.Capital:3.Sub_invest_BNR:9.Compte_résultat:2.Autre                                       0  ; 1392. Autres subventions d'investissement
+       1.Capital:5.Provision_risque&charge                                                        0  ; 15. Provisions pour risques et charges
+       1.Capital:5.Provision_risque&charge:1.Risque                                               0  ; 151. Provisions pour risques
+       1.Capital:5.Provision_risque&charge:5.Impôt                                                0  ; 155. Provisions pour impôts
+       1.Capital:5.Provision_risque&charge:8.Autre                                                0  ; 158. Autres provisions pour charges
+       1.Capital:5.Provision_risque&charge:8.Autre:2.Congés_à_payer                               0  ; 1582. Provisions pour congés à payer
+       1.Capital:6.Emprunt,Dette                                                                  0  ; 16. Emprunts et dettes assimilees
+       1.Capital:6.Emprunt,Dette:4.Etablissement_crédit                                           0  ; 164. Emprunts auprès des établissements de crédit
+       1.Capital:6.Emprunt,Dette:5.Dépôt,Caution                                                  0  ; 165. Dépôts et cautionnements reçus
+       1.Capital:6.Emprunt,Dette:8.Autre                                                          0  ; 168. Autres emprunts et dettes assimilées
+       1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt                                                0  ; 1681. Autres emprunts
+       1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:1.Bénévole                                     0  ; 16811. Bénévoles
+       1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:2.Salarié-e                                    0  ; 16812. Salarié-e-s
+       1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:3.Cyclofficine                                 0  ; 16813. Cyclofficine
+       1.Capital:6.Emprunt,Dette:8.Autre:1.Emprunt:4.Autre                                        0  ; 16814. Autre
+       1.Capital:6.Emprunt,Dette:8.Autre:7.Dette                                                  0  ; 1687. Autres dettes
+       1.Capital:9.Fonds_dédiés                                                                   0  ; 19. Fonds dédiés
+       1.Capital:9.Fonds_dédiés:4.Sub_exploit                                                     0  ; 194. Fonds dédiés sur subventions de fonctionnement
+       1.Capital:9.Fonds_dédiés:5.Don_affecté                                                     0  ; 195. Fonds dédiés sur dons manuels affectés
+       2.Immobilisation                                                                           0  ; 2. COMPTES D'IMMOBILISATIONS
+       2.Immobilisation:1.Corporelle                                                              0  ; 21. Immobilisations corporelles
+       2.Immobilisation:1.Corporelle:5.Equipement                                                 0  ; 215. Installations techniques, matériel et outillage industriels
+       2.Immobilisation:1.Corporelle:8.Autre                                                      0  ; 218. Autres immobilisations corporelles
+       2.Immobilisation:1.Corporelle:8.Autre:1.Travaux                                            0  ; 2181. Installation générale, agencement, aménagement divers
+       2.Immobilisation:1.Corporelle:8.Autre:2.Transport                                          0  ; 2182. Matériel de transport
+       2.Immobilisation:1.Corporelle:8.Autre:3.Matériel_bureau&info                               0  ; 2183. Matériel de bureau et matériel informatique
+       2.Immobilisation:1.Corporelle:8.Autre:4.Mobilier                                           0  ; 2184. Mobilier
+       2.Immobilisation:2.Concession                                                              0  ; 22. Immobilisations mises en concession
+       2.Immobilisation:2.Concession:8.Immo_grévées_droits                                        0  ; 228. Immobilisations grevées de droits
+       2.Immobilisation:2.Concession:9.Droits_propriétaire                                        0  ; 229. Droits des propriétaires
+       2.Immobilisation:6.Participation                                                           0  ; 26.Participations et créances rattachées à des participations
+       2.Immobilisation:6.Participation:1.Titre                                                   0  ; 261. Titres de participation
+       2.Immobilisation:6.Participation:1.Titre:8.Autre                                           0  ; 2618. Autres titres
+       2.Immobilisation:7.Financière                                                              0  ; 27. Autres immobilisations financières
+       2.Immobilisation:7.Financière:4.Prêt                                                       0  ; 274. Prêts
+       2.Immobilisation:7.Financière:4.Prêt:3.Au_personnel                                        0  ; 2743. Prêts au personnel
+       2.Immobilisation:7.Financière:4.Prêt:8.Autre                                               0  ; 2748. Autres prêts
+       2.Immobilisation:7.Financière:5.Dépôt,Caution                                              0  ; 275. Dépôts et cautionnements versés
+       2.Immobilisation:8.Amortissement                                                           0  ; 28. Amortissements des immobilisations
+       2.Immobilisation:8.Amortissement:1.Immo_corp                                               0  ; 281. Amortissements des immobilisations corporelles
+       2.Immobilisation:8.Amortissement:1.Immo_corp:5.Equipement                                  0  ; 2815. Installations techniques, matériel et outillage industriels (même ventilation que celle du_compte_215)
+       2.Immobilisation:8.Amortissement:1.Immo_corp:8.Autre                                       0  ; 2818. Autres immobilisations corporelles
+       4.Tiers                                                                                    0  ; 4. COMPTES TIERS
+       4.Tiers:0.Fournisseur                                                                      0  ; 40. Fournisseurs et comptes rattachés
+       4.Tiers:0.Fournisseur:1.Fournisseur                                                        0  ; 401. Fournisseurs
+       4.Tiers:0.Fournisseur:1.Fournisseur:1.Bien,Prestation                                      0  ; 4011. Fournisseurs - achats de biens ou de prestations de services
+       4.Tiers:0.Fournisseur:1.Fournisseur:7.Retenue_garantie                                     0  ; 4017. Fournisseurs - Retenue de garantie
+       4.Tiers:0.Fournisseur:3.Effets_à_payer                                                     0  ; 403. Fournisseurs - effets à payer
+       4.Tiers:0.Fournisseur:4.Immobilisation                                                     0  ; 404. Fournisseurs d’immobilisations
+       4.Tiers:0.Fournisseur:4.Immobilisation:1.Achat                                             0  ; 4041. Fournisseurs - Achats d'immobilisations
+       4.Tiers:0.Fournisseur:4.Immobilisation:7.Retenue_garantie                                  0  ; 4047. Fournisseurs d'immobilisations - Retenue de garantie
+       4.Tiers:0.Fournisseur:5.Immo_effets_à_payer                                                0  ; 405. Fournisseurs d’immobilisations - Effets à payer
+       4.Tiers:0.Fournisseur:8.Facture_non_parvenue                                               0  ; 408. Fournisseurs - Factures non parvenues
+       4.Tiers:0.Fournisseur:8.Facture_non_parvenue:1.Bien,Prestation                             0  ; 4081. Fournisseurs - Achats de biens ou prestations de service
+       4.Tiers:0.Fournisseur:8.Facture_non_parvenue:4.Immobilisation                              0  ; 4084. Fournisseurs - Achats d'immobilisations
+       4.Tiers:0.Fournisseur:9.Débiteur                                                           0  ; 409. Fournisseurs débiteurs
+       4.Tiers:0.Fournisseur:9.Débiteur:1.Accompte                                                0  ; 4091. Fournisseurs - Avances et accomptes versés sur commandes
+       4.Tiers:0.Fournisseur:9.Débiteur:7.Autre_avoir                                             0  ; 4097. Autres avoirs
+       4.Tiers:1.Client                                                                           0  ; 41. Usagers et comptes rattachés
+       4.Tiers:1.Client:1.Client                                                                  0  ; 411. Clients
+       4.Tiers:1.Client:1.Client:1.Bien,Prestation                                                0  ; 4111. Clients - Vente de biens et prestations de service
+       4.Tiers:1.Client:1.Client:7.Retenue_garantie                                               0  ; 4117. Clients - Retenue de garantie
+       4.Tiers:1.Client:3.Effets_à_recevoir                                                       0  ; 413. Clients - Effets à recevoir
+       4.Tiers:1.Client:8.Produit_non_facturé                                                     0  ; 418. Clients - Produits non encore facturés
+       4.Tiers:1.Client:9.Créditeur                                                               0  ; 419. Clients créditeurs
+       4.Tiers:1.Client:9.Créditeur:1.Accompte                                                    0  ; 4191. Clients - Avances et accomptes versés sur commandes
+       4.Tiers:1.Client:9.Créditeur:7.Autre_avoir                                                 0  ; 4197. Clients - Autres avoirs
+       4.Tiers:2.Personnel                                                                        0  ; 42. Personnel et comptes rattachés
+       4.Tiers:2.Personnel:1.Rémunération                                                         0  ; 421. Rémunérations dues
+       4.Tiers:2.Personnel:1.Rémunération:011801.S_Arca                                           0  ; 421011801. S. Arca
+       4.Tiers:2.Personnel:1.Rémunération:030101.G_Caprarelli                                     0  ; 421030101. G. Caprarelli
+       4.Tiers:2.Personnel:1.Rémunération:060101.T_Favier                                         0  ; 421060101. T.Favier
+       4.Tiers:2.Personnel:1.Rémunération:131501.A_Morin                                          0  ; 421131501. A. Morin
+       4.Tiers:2.Personnel:1.Rémunération:161501.S_Popek                                          0  ; 421161501. S. Popek
+       4.Tiers:2.Personnel:5.Avances                                                              0  ; 425. Personnel - Avances et accomptes
+       4.Tiers:2.Personnel:8.CP&PR                                                                0  ; 428. Personnel - Charges à payer et produits à recevoir
+       4.Tiers:2.Personnel:8.CP&PR:2.Congés_à_payer                                               0  ; 4282. Dettes provisionnées pour congés à payer
+       4.Tiers:2.Personnel:8.CP&PR:6.Autre_charge_à_payer                                         0  ; 4286. Autres charges à payer
+       4.Tiers:2.Personnel:8.CP&PR:7.Produit_à_recevoir                                           0  ; 4287. Produits à recevoir
+       4.Tiers:3.Caisse_sociale                                                                   0  ; 43. Securite sociale et autres organismes sociaux
+       4.Tiers:3.Caisse_sociale:1.URSSAF                                                          0  ; 431. URSSAF
+       4.Tiers:3.Caisse_sociale:7.Autre                                                           0  ; 437. Autres organismes sociaux
+       4.Tiers:3.Caisse_sociale:7.Autre:3.B2V                                                     0  ; 4373. Caisse de retraite
+       4.Tiers:3.Caisse_sociale:7.Autre:8.Autre                                                   0  ; 4378. Autres organismes sociaux
+       4.Tiers:3.Caisse_sociale:7.Autre:8.Autre:1.AG2R                                            0  ; 43781. Prévoyance
+       4.Tiers:3.Caisse_sociale:8.CP&PR                                                           0  ; 438. Charges à payer et produits à recevoir
+       4.Tiers:3.Caisse_sociale:8.CP&PR:2.Cotisation_congé_à_payer                                0  ; 4382. Cotisations sociales sur congés à payer
+       4.Tiers:3.Caisse_sociale:8.CP&PR:6.Autre_charge_à_payer                                    0  ; 4386. Autres charges à payer
+       4.Tiers:3.Caisse_sociale:8.CP&PR:7.Produit_à_recevoir                                      0  ; 4387. Produits à recevoir
+       4.Tiers:4.État,collectivité                                                                0  ; 44. État et autres collectivites publiques
+       4.Tiers:4.État,collectivité:1.Sub_à_recevoir                                               0  ; 441. Subventions à recevoir
+       4.Tiers:4.État,collectivité:1.Sub_à_recevoir:1.Investissement                              0  ; 4411. Subventions d'investissement
+       4.Tiers:4.État,collectivité:1.Sub_à_recevoir:7.Exploitation                                0  ; 4417. Subventions d'exploitation
+       4.Tiers:4.État,collectivité:1.Sub_à_recevoir:8.Equilibre                                   0  ; 4418. Subvention d'équilibre
+       4.Tiers:4.État,collectivité:1.Sub_à_recevoir:9.Avance_sur_sub                              0  ; 4419. Avances sur subventions
+       4.Tiers:4.État,collectivité:3.Opération_particulière                                       0  ; 443. Opérations particulières avec l’État, les collectivités publiques, les organismes internationaux
+       4.Tiers:4.État,collectivité:4.Impôt_sur_bénéfice                                           0  ; 444. État- Impôts sur les bénéfices
+       4.Tiers:4.État,collectivité:4.Impôt_sur_bénéfice:5.Sur_société                             0  ; 4445. État - Impôt sur les sociétés
+       4.Tiers:4.État,collectivité:7.Autre_impôt                                                  0  ; 447.Autres impôts, taxes et versements assimilés
+       4.Tiers:4.État,collectivité:7.Autre_impôt:1.Sur_rémunération_(État)                        0  ; 4471. Impôts, taxes et versements assimilés sur rémunérations (administration des impôts)
+       4.Tiers:4.État,collectivité:7.Autre_impôt:1.Sur_rémunération_(État):1.Taxe_salaire         0  ; 44711. Taxe sur les salaires
+       4.Tiers:4.État,collectivité:7.Autre_impôt:1.Sur_rémunération_(État):2.Formation_pro        0  ; 44712. Participation des employeurs à la formation professionnelle continue
+       4.Tiers:4.État,collectivité:7.Autre_impôt:1.Sur_rémunération_(État):8.Autre                0  ; 44718. Autres impôts, taxes et versements assimilés
+       4.Tiers:4.État,collectivité:7.Autre_impôt:3.Sur_rémunération_(Organisme)                   0  ; 4473. Impôts, taxes et versements sur rémunérations (autres organismes)
+       4.Tiers:4.État,collectivité:7.Autre_impôt:3.Sur_rémunération_(Organisme):3.Formation_pro   0  ; 44733. Participation des employeurs à la formation professionnelle continue
+       4.Tiers:4.État,collectivité:7.Autre_impôt:5.Autre_(État)                                   0  ; 4475. Autres impôts, taxes et versements assimilés (administration des impôts)
+       4.Tiers:4.État,collectivité:7.Autre_impôt:7.Autre_(Organisme)                              0  ; 4477. Autres impôts, taxes et versements assimilés (autres organismes)
+       4.Tiers:4.État,collectivité:8.CP&PR                                                        0  ; 448. État - Charges à payer et produits à recevoir
+       4.Tiers:4.État,collectivité:8.CP&PR:2.Charge_fiscale_sur_congés_à_payer                    0  ; 4482. Charges fiscales sur congés à payer
+       4.Tiers:4.État,collectivité:8.CP&PR:6.Charge_à_payer                                       0  ; 4486. Autres charges à payer
+       4.Tiers:4.État,collectivité:8.CP&PR:7.Produit_à_recevoir                                   0  ; 4487. Produits à recevoir
+       4.Tiers:6.Divers_créditeur_débiteur                                                        0  ; 46. Débiteurs divers et créditeurs divers
+       4.Tiers:6.Divers_créditeur_débiteur:7.Autre                                                0  ; 467. Autres comptes débiteurs ou créditeurs
+       4.Tiers:6.Divers_créditeur_débiteur:7.Autre:001.Bénévole                                   0  ; 467001. Bénévoles
+       4.Tiers:6.Divers_créditeur_débiteur:7.Autre:002.Salarié-e                                  0  ; 647002. Salariés
+       4.Tiers:6.Divers_créditeur_débiteur:8.CP&PR                                                0  ; 468. Divers - Charges à payer et produits à recevoir
+       4.Tiers:6.Divers_créditeur_débiteur:8.CP&PR:6.Charge_à_payer                               0  ; 4686.Charges à payer
+       4.Tiers:6.Divers_créditeur_débiteur:8.CP&PR:7.Produit_à_recevoir                           0  ; 4687. Produits à recevoir
+       4.Tiers:8.Régularisation                                                                   0  ; 48. Comptes de régularisation
+       4.Tiers:8.Régularisation:6.Charge_constatée_d'avance                                       0  ; 486. Charges constatées d’avance
+       4.Tiers:8.Régularisation:7.Produit_constaté_d'avance                                       0  ; 487. Produits constatés d’avance
+       5.Finance                                                                                  0  ; 5. COMPTES FINANCIERS
+       5.Finance:1.Etablissement                                                                  0  ; 51. Banques, établissements financiers et assimilés
+       5.Finance:1.Etablissement:1.Valeur                                                         0  ; 511. Valeurs à l’encaissement
+       5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser                                    0  ; 5112. Chèques à encaisser
+       5.Finance:1.Etablissement:2.Banque:001.Courant                                             0  ; 512001. Crédit Coopératif - Compte courant
+       5.Finance:1.Etablissement:2.Banque:002.Livret                                              0  ; 512002. Crédit coopératif - Livret
+       5.Finance:3.Caisse                                                                         0  ; 53. Caisse
+       5.Finance:3.Caisse:1.Siège                                                                 0  ; 531. Caisse du siège
+       5.Finance:3.Caisse:2.Atelier                                                               0  ; 532. Caisse des lieux d’activités
+       5.Finance:8.Virement                                                                       0  ; 58. Virements internes
+       5.Finance:8.Virement:0.Interne                                                             0  ; 580. Virements internes
+       5.Finance:8.Virement:1.Fonds                                                               0  ; 581. Virements de fonds
+       6.Charge                                                                                   0  ; 6. COMPTES D'ACHATS
+       6.Charge:0.Achat                                                                           0  ; 60. Achats (sauf 603)
+       6.Charge:0.Achat:1.Stocké-Matière_Prem,Fourniture                                          0  ; 601. Achats stockés - Matières premières et fournitures
+       6.Charge:0.Achat:1.Stocké-Matière_Prem,Fourniture:1.Matière                                0  ; 6011. Matières
+       6.Charge:0.Achat:1.Stocké-Matière_Prem,Fourniture:2.Fourniture                             0  ; 6012. Fournitures
+       6.Charge:0.Achat:2.Stocké-Autre                                                            0  ; 602. Achats stockés - Autres approvisionnements
+       6.Charge:0.Achat:2.Stocké-Autre:1.Matière_consommable                                      0  ; 6021. Matières consommables
+       6.Charge:0.Achat:2.Stocké-Autre:2.Fourniture_consommable                                   0  ; 6022. Fournitures consommables
+       6.Charge:0.Achat:2.Stocké-Autre:2.Fourniture_consommable:1.Combustible                     0  ; 60221. Combustibles
+       6.Charge:0.Achat:2.Stocké-Autre:2.Fourniture_consommable:2.Nettoyage                       0  ; 60222. Produits d’entretien
+       6.Charge:0.Achat:2.Stocké-Autre:2.Fourniture_consommable:3.Atelier                         0  ; 60223. Fournitures d’atelier
+       6.Charge:0.Achat:2.Stocké-Autre:2.Fourniture_consommable:5.Bureau                          0  ; 60225. Fournitures de bureau
+       6.Charge:0.Achat:3.Variation_stocks                                                        0  ; 603. Variation des stocks (approvisionnements et marchandises)
+       6.Charge:0.Achat:4.Etude,Prestation                                                        0  ; 604. Achats d’études et prestations de services
+       6.Charge:0.Achat:5.Matériel,Equipement,Travaux                                             0  ; 605. Achats de matériels, équipements et travaux
+       6.Charge:0.Achat:6.Non_stocké                                                              0  ; 606. Achats non stockés de matières et fournitures
+       6.Charge:0.Achat:6.Non_stocké:1.Non_stockable                                              0  ; 6061. Fournitures non stockables (eau, énergie..)
+       6.Charge:0.Achat:6.Non_stocké:3.Fourniture                                                 0  ; 6063. Fournitures d’entretien et de petit équipement
+       6.Charge:0.Achat:6.Non_stocké:3.Fourniture:1.Produit_entretien                             0  ; 60631. Produits d'entretien
+       6.Charge:0.Achat:6.Non_stocké:3.Fourniture:2.Travaux                                       0  ; 60632. Fournitures pour travaux
+       6.Charge:0.Achat:6.Non_stocké:3.Fourniture:3.Equipement_atelier                            0  ; 60633. Equipement d'atelier
+       6.Charge:0.Achat:6.Non_stocké:3.Fourniture:4.Outillage                                     0  ; 60634. Outillage
+       6.Charge:0.Achat:6.Non_stocké:3.Fourniture:5.Mobilier                                      0  ; 60635. Mobilier
+       6.Charge:0.Achat:6.Non_stocké:3.Fourniture:6.Matériel_informatique                         0  ; 60636. Matériel informatique
+       6.Charge:0.Achat:6.Non_stocké:4.Consommable_bureau                                         0  ; 6064. Fournitures de bureau
+       6.Charge:0.Achat:6.Non_stocké:8.Autre_Matière,Fourniture                                   0  ; 6068. Autres matières et fournitures
+       6.Charge:0.Achat:6.Non_stocké:8.Autre_Matière,Fourniture:1.Atelier                         0  ; 60681. Consommables, fournitures atelier et vélos
+       6.Charge:0.Achat:6.Non_stocké:8.Autre_Matière,Fourniture:8.Autre                           0  ; 60688. Autre matières et fournitures
+       6.Charge:0.Achat:7.Marchandise                                                             0  ; 607. Achats de marchandises
+       6.Charge:0.Achat:8.Frais_accessoire                                                        0  ; 608. Frais accessoires d’achats
+       6.Charge:0.Achat:9.Remise                                                                  0  ; 609. Rabais, remises et ristournes obtenus sur achats
+       6.Charge:1.Service                                                                         0  ; 61. Services extérieurs
+       6.Charge:1.Service:1.Sous-traitance                                                        0  ; 611. Sous-traitance générale
+       6.Charge:1.Service:3.Location                                                              0  ; 613. Locations
+       6.Charge:1.Service:3.Location:2.Immobilière                                                0  ; 6132. Locations immobilières
+       6.Charge:1.Service:3.Location:5.Mobilière                                                  0  ; 6135. Locations mobilières
+       6.Charge:1.Service:4.Charge_locative                                                       0  ; 614. Charges locatives et de copropriété
+       6.Charge:1.Service:5.Entretien_Réparation                                                  0  ; 615. Entretien et réparations
+       6.Charge:1.Service:5.Entretien_Réparation:2.Bien_immobilier                                0  ; 6152. Sur biens immobiliers
+       6.Charge:1.Service:5.Entretien_Réparation:5.Bien_mobilier                                  0  ; 6155. Sur biens mobiliers
+       6.Charge:1.Service:5.Entretien_Réparation:6.Maintenance                                    0  ; 6156. Maintenance
+       6.Charge:1.Service:6.Assurance                                                             0  ; 616. Primes d’assurance
+       6.Charge:1.Service:8.Divers                                                                0  ; 618. Divers
+       6.Charge:1.Service:9:Remise                                                                0  ; 619. Rabais, remises et ristournes obtenus sur services extérieurs
+       6.Charge:2.Autre_service                                                                   0  ; 62. Autres services extérieurs
+       6.Charge:2.Autre_service:1.Personnel_extérieur                                             0  ; 621. Personnel extérieur à l’association
+       6.Charge:2.Autre_service:1.Personnel_extérieur:4.Mise_à_dispo                              0  ; 6214. Personnel détaché ou prêté à l’association
+       6.Charge:2.Autre_service:2.Intermédiaire                                                   0  ; 622. Rémunérations d’intermédiaires et honoraires
+       6.Charge:2.Autre_service:2.Intermédiaire:6.Honoraire                                       0  ; 6226. Honoraires
+       6.Charge:2.Autre_service:2.Intermédiaire:7.Frais_d'acte                                    0  ; 6227. Frais d’actes et de contentieux
+       6.Charge:2.Autre_service:2.Intermédiaire:8.Divers                                          0  ; 6228. Divers
+       6.Charge:2.Autre_service:3.Communication                                                   0  ; 623. Publicité, publications, relations publiques
+       6.Charge:2.Autre_service:3.Communication:1.Annonce                                         0  ; 6231. Annonces et insertions
+       6.Charge:2.Autre_service:3.Communication:3.Foire,Expo                                      0  ; 6233. Foires et expositions
+       6.Charge:2.Autre_service:3.Communication:4:Cadeau                                          0  ; 6234. Cadeaux
+       6.Charge:2.Autre_service:3.Communication:6.Catalogue,Imprimé                               0  ; 6236. Catalogues et imprimés
+       6.Charge:2.Autre_service:3.Communication:7.Publication                                     0  ; 6237. Publications
+       6.Charge:2.Autre_service:3.Communication:8.Divers(pourboire,dons_courants)                 0  ; 6238. Divers (pourboires, dons courants..)
+       6.Charge:2.Autre_service:5.Frais                                                           0  ; 625. Déplacements, missions et réceptions
+       6.Charge:2.Autre_service:5.Frais:1.Déplacement                                             0  ; 6251. Voyages et déplacements
+       6.Charge:2.Autre_service:5.Frais:6.Mission                                                 0  ; 6256. Missions
+       6.Charge:2.Autre_service:5.Frais:7.Réception                                               0  ; 6257. Réceptions
+       6.Charge:2.Autre_service:6.Poste,Télécommunication                                         0  ; 626. Frais postaux et frais de télécommunications
+       6.Charge:2.Autre_service:6.Poste,Télécommunication:1.Internet                              0  ; 6261. Liaisons informatiques ou spécialisées
+       6.Charge:2.Autre_service:6.Poste,Télécommunication:3.Timbre                                0  ; 6263. Affranchissements
+       6.Charge:2.Autre_service:7.Service_bancaire                                                0  ; 627. Services bancaires et assimilés
+       6.Charge:2.Autre_service:8.Divers                                                          0  ; 628. Divers
+       6.Charge:2.Autre_service:8.Divers:1.Cotisation_(activité_économique)                       0  ; 6281. Cotisations (liées à l’activité économique)
+       6.Charge:2.Autre_service:8.Divers:4.Frais_recrutement_personnel                            0  ; 6284. Frais de recrutement du personnel
+       6.Charge:2.Autre_service:9.Remise                                                          0  ; 629. Rabais, remises et ristournes obtenus sur autres services extérieurs
+       6.Charge:3.Impôt                                                                           0  ; 63. Impôts, taxes et versements assimilés
+       6.Charge:3.Impôt:1.Sur_rémunération_(État)                                                 0  ; 631. Impôts, taxes et versements assimilés sur rémunérations (administration des impôts)
+       6.Charge:3.Impôt:1.Sur_rémunération_(État):1.Taxe_salaire                                  0  ; 6311. Taxe sur les salaires
+       6.Charge:3.Impôt:1.Sur_rémunération_(État):3.Formation_pro                                 0  ; 6313. Participation des employeurs à la formation professionnelle continue
+       6.Charge:3.Impôt:1.Sur_rémunération_(État):8.Autre                                         0  ; 6318. Autres
+       6.Charge:3.Impôt:3.Sur_rémunération_(Organisme)                                            0  ; 633. Impôts, taxes et versements assimilés sur rémunérations (autres organismes)
+       6.Charge:3.Impôt:3.Sur_rémunération_(Organisme):3.Formation                                0  ; 6333. Participation des employeurs à la formation professionnelle continue
+       6.Charge:3.Impôt:3.Sur_rémunération_(Organisme):8.Autre                                    0  ; 6338. Autres
+       6.Charge:3.Impôt:5.Autre_(État)                                                            0  ; 635. Autres impôts, taxes et versements assimilés (administration des impôts)
+       6.Charge:3.Impôt:5.Autre_(État):1.Direct_(sauf_bénéfice)                                   0  ; 6351. Impôts directs (sauf impôts sur les bénéfices)
+       6.Charge:3.Impôt:5.Autre_(État):1.Direct_(sauf_bénéfice):2.Taxe_foncière                   0  ; 63512. Taxes foncières
+       6.Charge:3.Impôt:5.Autre_(État):1.Direct_(sauf_bénéfice):3.Autre_impôts_locaux             0  ; 63513. Autres impôts locaux
+       6.Charge:3.Impôt:5.Autre_(État):1.Direct_(sauf_bénéfice):8.Autre                           0  ; 63518. Autres impôts directs
+       6.Charge:3.Impôt:5.Autre_(État):3.Indirect                                                 0  ; 6353. Impôts indirects
+       6.Charge:3.Impôt:7.Autre_(Organisme)                                                       0  ; 637. Autres impôts, taxes et versements assimilés (autres organismes)
+       6.Charge:4.Personnel                                                                       0  ; 64. Charges de personnel
+       6.Charge:4.Personnel:1.Rémunération                                                        0  ; 641. Rémunérations du personnel
+       6.Charge:4.Personnel:1.Rémunération:1.Salaire                                              0  ; 6411. Salaires, appointements
+       6.Charge:4.Personnel:1.Rémunération:2.Congés                                               0  ; 6412. Congés payés
+       6.Charge:4.Personnel:1.Rémunération:3.Prime                                                0  ; 6413. Primes et gratifications
+       6.Charge:4.Personnel:1.Rémunération:4.Indémnité                                            0  ; 6414. Indemnités et avantages divers
+       6.Charge:4.Personnel:1.Rémunération:6.Remb_transport                                       0  ; 6416. Remboursement transport
+       6.Charge:4.Personnel:5.Cotisation                                                          0  ; 645. Cotisations de sécurité sociale et de prévoyance
+       6.Charge:4.Personnel:5.Cotisation:1.URSSAF                                                 0  ; 6451. Cotisations à l’URSSAF
+       6.Charge:4.Personnel:5.Cotisation:2.Mutuelle                                               0  ; 6452. Cotisations aux mutuelles
+       6.Charge:4.Personnel:5.Cotisation:3.Retraite                                               0  ; 6453. Cotisations aux caisses de retraite
+       6.Charge:4.Personnel:5.Cotisation:4.Pôle_emploi                                            0  ; 6454. Cotisations aux ASSEDIC
+       6.Charge:4.Personnel:5.Cotisation:8.Autre_organisme                                        0  ; 6458. Cotisations aux autres organismes sociaux
+       6.Charge:4.Personnel:5.Cotisation:8.Autre_organisme:1.Prévoyance                           0  ; 64581. Caisse de Prévoyance
+       6.Charge:4.Personnel:7.Autre_cotisation                                                    0  ; 647. Autres charges sociales
+       6.Charge:4.Personnel:7.Autre_cotisation:5.Médecine_travail                                 0  ; 6475. Médecine de travail, pharmacie
+       6.Charge:4.Personnel:8.Autre_charge_personnel                                              0  ; 648. Autres charges de personnel
+       6.Charge:4.Personnel:8.Autre_charge_personnel:8.Cotisation_sur_rémunération_à_payer        0  ; 6488. Cotisations sur rémunérations à payer
+       6.Charge:5.Gestion                                                                         0  ; 65. Autres charges de gestion courantes
+       6.Charge:5.Gestion:1.Redevance_pour_concession,brevet,licence,procédé,droit                0  ; 651. Redevances pour concessions, brevets, licences, procédés, logiciels, droits et valeurs similaires
+       6.Charge:5.Gestion:7.Subvention_versée                                                     0  ; 657. Subventions versées par l’organisme
+       6.Charge:5.Gestion:8.Divers                                                                0  ; 658. Charges diverses de gestion courante
+       6.Charge:5.Gestion:8.Divers:6.Cotisation_(vie_statutaire)                                  0  ; 6586. Cotisations (liées à la vie statutaire)
+       6.Charge:6.Financière                                                                      0  ; 66. Charges financières
+       6.Charge:6.Financière:1.Intérêt                                                            0  ; 661. Charges d’intérêts
+       6.Charge:6.Financière:1.Intérêt:1.Emprunt,Dette                                            0  ; 6611. Intérêts des emprunts et dettes
+       6.Charge:6.Financière:1.Intérêt:6.Bancaire                                                 0  ; 6616. Intérêts bancaires
+       6.Charge:6.Financière:1.Intérêt:8.Autre_dette                                              0  ; 6618. Intérêts des autres dettes
+       6.Charge:6.Financière:8.Autre                                                              0  ; 668. Autres charges financières
+       6.Charge:7.Exceptionnelle                                                                  0  ; 67. Charges exceptionnelles
+       6.Charge:7.Exceptionnelle:1.Sur_gestion                                                    0  ; 671. Charges exceptionnelles sur opérations de gestion
+       6.Charge:7.Exceptionnelle:1.Sur_gestion:1.Pénalité_sur_marché                              0  ; 6711. Pénalités sur marchés (et dédits payés sur achats et ventes)
+       6.Charge:7.Exceptionnelle:1.Sur_gestion:2.Pénalité,Amende                                  0  ; 6712. Pénalités, amendes fiscales ou pénales
+       6.Charge:7.Exceptionnelle:1.Sur_gestion:3.Don,Libéralité                                   0  ; 6713. Dons, libéralités
+       6.Charge:7.Exceptionnelle:1.Sur_gestion:7.Rappel_impôt_(sauf_bénéfice)                     0  ; 6717. Rappels d’impôts (autres qu’impôts sur les bénéfices)
+       6.Charge:7.Exceptionnelle:1.Sur_gestion:8.Autre                                            0  ; 6718. Autres charges exceptionnelles sur opérations de gestion
+       6.Charge:7.Exceptionnelle:8.Autre                                                          0  ; 678. Autres charges exceptionnelles
+       6.Charge:7.Exceptionnelle:8.Autre:8.Diverse                                                0  ; 6788. Charges exceptionnelles diverses
+       6.Charge:8.Dotation                                                                        0  ; 68. Dotations aux amortissements, dépréciations, provisions et engagements
+       6.Charge:8.Dotation:1.Charge_d'exploitation                                                0  ; 681. Dotations aux amortissements et aux provisions - Charges d'exploitation
+       6.Charge:8.Dotation:1.Charge_d'exploitation:1.Amortissement_immobilisation                 0  ; 6811. Dotations aux amortissements des immobilisations incorporelles et corporelles
+       6.Charge:8.Dotation:1.Charge_d'exploitation:1.Amortissement_immobilisation:1.Incorporelle  0  ; 68111. Immobilisations incorporelles
+       6.Charge:8.Dotation:1.Charge_d'exploitation:1.Amortissement_immobilisation:2.Corporelle    0  ; 68112. Immobilisations corporelles
+       6.Charge:8.Dotation:1.Charge_d'exploitation:5.Provision_d'exploitation                     0  ; 6815. Dotations aux provisions pour risques et charges d’exploitation
+       6.Charge:8.Dotation:1.Charge_d'exploitation:7.Dépréciation_actif                           0  ; 6817. Dotations aux provisions pour dépréciation des actifs circulants
+       6.Charge:8.Dotation:1.Charge_d'exploitation:7.Dépréciation_actif:3.Stocks,En-cours         0  ; 68173. Stocks et en-cours
+       6.Charge:8.Dotation:1.Charge_d'exploitation:7.Dépréciation_actif:4.Créance                 0  ; 68174. Créances
+       6.Charge:8.Dotation:6.Charge_financière                                                    0  ; 686. Dotations aux amortissements et aux provisions - Charges financières
+       6.Charge:8.Dotation:6.Charge_financière:5.Provision_financière                             0  ; 6865. Dotations aux provisions pour risques et charges financiers
+       6.Charge:8.Dotation:6.Charge_financière:6.Dépréciation_élément_financier                   0  ; 6866. Dotations aux provisions pour dépréciation des éléments financiers
+       6.Charge:8.Dotation:6.Charge_financière:8.Autre                                            0  ; 6868. Autres dotations
+       6.Charge:8.Dotation:7.Charge_exceptionnelle                                                0  ; 687. Dotations aux amortissements et aux provisions - Charges exceptionnelles
+       6.Charge:8.Dotation:9.Engagement_à_réaliser                                                0  ; 689. Engagements à réaliser sur ressources affectées
+       6.Charge:8.Dotation:9.Engagement_à_réaliser:4.Sur_subvention_attribuée                     0  ; 6894. Engagements à réaliser sur subventions attribuées
+       6.Charge:8.Dotation:9.Engagement_à_réaliser:5.Sur_don_affecté                              0  ; 6895. Engagements à réaliser sur dons manuels affectés
+       6.Charge:9.Impôt_sur_bénéfice                                                              0  ; 69. Impôts sur les bénéfices
+       6.Charge:9.Impôt_sur_bénéfice:5.Impôt_sur_société                                          0  ; 695.Impôts sur les sociétés
+       7.Produit                                                                                  0  ; 7. COMPTES DE PRODUITS
+       7.Produit:0.Vente                                                                          0  ; 70. ventes de produits finis, prestations de services, marchandises
+       7.Produit:0.Vente:1.Produit_fini                                                           0  ; 701. Ventes de produits finis
+       7.Produit:0.Vente:1.Produit_fini:1.Vélo                                                    0  ; 7011. Vélos
+       7.Produit:0.Vente:1.Produit_fini:2.Autre                                                   0  ; 7012. Autres
+       7.Produit:0.Vente:6.Prest'action                                                           0  ; 706. Prestations de services
+       7.Produit:0.Vente:7.Marchandise                                                            0  ; 707. Ventes de marchandises
+       7.Produit:0.Vente:8.Activité_annexe                                                        0  ; 708. Produits des activités annexes
+       7.Produit:0.Vente:8.Activité_annexe:3.Location                                             0  ; 7083. Locations diverses
+       7.Produit:0.Vente:8.Activité_annexe:4.Mise_à_dispo                                         0  ; 7084. Mise à disposition de personnel facturée
+       7.Produit:0.Vente:8.Activité_annexe:8.Autre                                                0  ; 7088. Autres produits d’activités annexes
+       7.Produit:1.Production_stockée                                                             0  ; 71. Production stockée (ou déstockage)
+       7.Produit:2.Production_immobilisée                                                         0  ; 72. Production immobilisée
+       7.Produit:4.Subvention_d'exploitation                                                      0  ; 74. Subventions d’exploitation
+       7.Produit:4.Subvention_d'exploitation:1.État                                               0  ; 741. État
+       7.Produit:4.Subvention_d'exploitation:2.Région                                             0  ; 742. Région
+       7.Produit:4.Subvention_d'exploitation:3.Département                                        0  ; 743. Département
+       7.Produit:4.Subvention_d'exploitation:4.Commune                                            0  ; 744. Commune
+       7.Produit:4.Subvention_d'exploitation:5.Collectivité_publique                              0  ; 745. Collectivités publiques
+       7.Produit:4.Subvention_d'exploitation:6.Entreprise_publique                                0  ; 746. Entreprises publiques
+       7.Produit:4.Subvention_d'exploitation:7.Organisme_privé                                    0  ; 747. Entreprises et organismes privés
+       7.Produit:4.Subvention_d'exploitation:8.Autre                                              0  ; 748. Autres
+       7.Produit:5.Autre_gestion_courante                                                         0  ; 75. Autres produits de gestion courante
+       7.Produit:5.Autre_gestion_courante:4.Collecte                                              0  ; 754. Collectes
+       7.Produit:5.Autre_gestion_courante:6.Cotisation                                            0  ; 756. Cotisations
+       7.Produit:5.Autre_gestion_courante:8.Divers                                                0  ; 758. Produits divers de gestion courante
+       7.Produit:5.Autre_gestion_courante:8.Divers:1.Don                                          0  ; 7581. Dons manuels
+       7.Produit.6.Financier                                                                      0  ; 76. Produits financiers
+       7.Produit.6.Financier:1.Participation                                                      0  ; 761. Produits des participations
+       7.Produit.6.Financier:1.Participation:1.Titre                                              0  ; 7611. Revenus des titres de participations
+       7.Produit.6.Financier:2.Autre_immobilisation_financière                                    0  ; 762. Produits des autres immobilisations financières
+       7.Produit.6.Financier:2.Autre_immobilisation_financière:4.Prêt                             0  ; 7624. Revenus des prêts
+       7.Produit.6.Financier:3.Autre_créance                                                      0  ; 763. Revenus des autres créances
+       7.Produit.6.Financier:8.Autre                                                              0  ; 768. Autres produits financiers
+       7.Produit.7.Exceptionnel                                                                   0  ; 77. Produits exceptionnels
+       7.Produit.7.Exceptionnel:1.Sur_gestion                                                     0  ; 771. Produits exceptionnels sur opérations de gestion
+       7.Produit.7.Exceptionnel:1.Sur_gestion:3.Libéralité_reçue                                  0  ; 7713. Libéralités perçues
+       7.Produit.7.Exceptionnel:1.Sur_gestion:5.Subvention_d'équilibre                            0  ; 7715. Subvention d’équilibre
+       7.Produit.7.Exceptionnel:1.Sur_gestion:8.Autre                                             0  ; 7718. Autres produits exceptionnels sur opérations de gestion
+       7.Produit.7.Exceptionnel:2.Sur_exercice_antérieur                                          0  ; 772. Produits sur exercices antérieurs (à reclasser)
+       7.Produit.7.Exceptionnel:7.Quote-part_subvention_investissement_virée_au_résultat          0  ; 777. Quote-part des subventions d’investissement virée au résultat de l’exercice
+       7.Produit.7.Exceptionnel:8.Autre                                                           0  ; 778. Autres produits exceptionnels
+       7.Produit:8.Reprise                                                                        0  ; 78. Reprises sur amortissements et provisions
+       7.Produit:8.Reprise:1.Amortissement,Provision_(exploitation)                               0  ; 781. Reprises sur amortissements et provisions (à inscrire dans les produits d’exploitation)
+       7.Produit:8.Reprise:1.Amortissement,Provision_(exploitation):1.Amort_immo_incorp&corpl     0  ; 7811. Reprises sur amortissements des immobilisations incorporelles et corporelles
+       7.Produit:8.Reprise:1.Amortissement,Provision_(exploitation):5.Provision_risque&charge     0  ; 7815. Reprises sur provisions pour risques et charges d’exploitation
+       7.Produit:8.Reprise:6.Provision_(financier)                                                0  ; 786. Reprises sur provisions (à inscrire dans les produits financiers)
+       7.Produit:8.Reprise:7.Provision_(exceptionnel)                                             0  ; 787. Reprises sur provisions (à inscrire dans les produits exceptionnels)
+       7.Produit:8.Reprise:9.Report_ressource_N-1                                                 0  ; 789. Report des ressources non utilisées des exercices antérieurs
+       7.Produit:8.Reprise:9.Report_ressource_N-1:4.Sur_subvention_attribuée                      0  ; 7894. Sur subventions attribués
+       7.Produit:8.Reprise:9.Report_ressource_N-1:5.Sur_don_reçus                                 0  ; 7895. Sur dons manuels reçus
+       7.Produit:9.Transfert_charge                                                               0  ; 79. Transferts de charges
+       7.Produit:9.Transfert_charge:1.Exploitation                                                0  ; 791. Transferts de charges d’exploitation
+       7.Produit:9.Transfert_charge:6.Financière                                                  0  ; 796. Transferts de charges financières
+       7.Produit:9.Transfert_charge:7.Exceptionnelle                                              0  ; 797. Transferts de charges exceptionnelles
+       8.Spécial                                                                                  0  ; 8. COMPTES SPÉCIAUX
+       8.Spécial:6.Emploi_contribution_volontaire                                                 0  ; 86. Emplois des contributions volontaires en nature
+       8.Spécial:6.Emploi_contribution_volontaire:1.Mise_à_dispo_bien                             0  ; 861. Mise à disposition gratuite de biens
+       8.Spécial:6.Emploi_contribution_volontaire:2.Prestation                                    0  ; 862. Prestations
+       8.Spécial:6.Emploi_contribution_volontaire:4.Bénévolat                                     0  ; 864. Personnel bénévole
+       8.Spécial:7.Contribution_volontaire                                                        0  ; 87. Contributions volontaires en nature
+       8.Spécial:7.Contribution_volontaire:0.Bénévolat                                            0  ; 870. Bénévolat
+       8.Spécial:7.Contribution_volontaire:1.Prestation_en_nature                                 0  ; 871. Prestations en nature
+       8.Spécial:7.Contribution_volontaire:5.Don_en_nature                                        0  ; 875. Dons en nature
+
+; NOTE: pour le complètement, possibilité d’utiliser :
+; vim: iskeyword+=.,38,39,40,41,44,45,58
diff --git a/hledger-equity.hs b/hledger-equity.hs
new file mode 100755 (executable)
index 0000000..43ca0ff
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/env runhaskell
+{-
+
+Like ledger's equity command, print a journal entry posting the total
+balance of all accounts (or the specified account and its subaccounts)
+in the default journal.
+
+An entry like this is useful in the transition to a new journal file,
+to zero out asset/liability balances in the old file and initialise
+them in the new one. This way you get correct balances when reporting
+on either file, and when including both files at once.
+
+Usage: hledger-equity [ACCTPAT]
+-}
+
+import Data.Maybe (fromMaybe)
+import Hledger.Cli
+
+argsmode :: Mode RawOpts
+argsmode = (defCommandMode ["equity"])
+  { modeHelp = "print a journal entry posting the total balance of all accounts"
+    ++ " (or the specified account and its subaccounts)"
+    , modeGroupFlags = Group
+      { groupNamed =
+         [ ("Input",inputflags)
+         , ("Reporting",reportflags)
+         , ("Misc",helpflags)
+         ]
+      , groupUnnamed = []
+      , groupHidden = []
+      }
+    }
+
+main :: IO ()
+main = do
+  opts <- getCliOpts argsmode
+  withJournalDo opts $
+   \CliOpts{reportopts_=ropts} j -> do
+        today <- getCurrentDay
+        let ropts_ = ropts{flat_=True}
+            q = queryFromOpts today ropts_
+            (acctbals,_) = balanceReport ropts_ q j
+            balancingamt = negate $ sum $ map (\((_,_,_),b) -> b) acctbals
+            ps = [posting{paccount=a, pamount=b} | ((a,_,_),b) <- acctbals]
+                 ++ [posting{paccount="equity:opening balances", pamount=balancingamt}]
+            enddate = fromMaybe today $ queryEndDate (date2_ ropts_) q
+            nps = [posting{paccount=a, pamount=negate b} | ((a,_,_),b) <- acctbals]
+                 ++ [posting{paccount="equity:closing balances", pamount=negate balancingamt}]
+        putStr $ showTransactionUnelided (nulltransaction{tdate=enddate, tpostings=nps})
+        putStr $ showTransactionUnelided (nulltransaction{tdate=enddate, tpostings=ps})
diff --git a/hledger-of-oxygen-csv.pl b/hledger-of-oxygen-csv.pl
new file mode 100755 (executable)
index 0000000..194a612
--- /dev/null
@@ -0,0 +1,223 @@
+#!/usr/bin/perl
+# DESCRIPTION: import from [Oxygène](http://www.memsoft.fr) to [hledger](http://hledger.org)
+# AUTHOR: Julien Moutinho <julm+hledger@autogeree.net>
+# LICENSE: [GPLv3+](https://www.gnu.org/licenses/gpl-3.0.html)
+# NOTE: should be easily hackable to import from other .csv
+# USAGE:
+#   % hledger-print-csv -f Chart_of_accounts.hledger >Chart_of_accounts.csv
+#   % iconv -f latin1 -t utf8 <EXPORT.oxygen.csv |
+#     perl hledger-of-oxygen-csv.pl \
+#       Chart_of_accounts.csv \
+#       >EXPORT.oxygen.hledger
+#
+# FORMAT of EXPORT.oxygen.csv:
+# ----
+# NUMJL;LIBJL;DTOPE;NPIEC;NUMCP;LIBCP;CODCP;LIBEC;MTDEB;MTCRE;COTVA;TXTVA
+# 60;Achats;01/01/2012;ACH01/76;401REGIEQUART;REGIE DE QUARTIER;REGIE DE QUARTI;LOYER LOCAL DEC. 2011+1T 2012 REGIE QUAR;0,00;1410,91;;0,00
+# 60;Achats;01/01/2012;ACH01/76;6132000;LOYER LOCAL 15 rue P. BONNARD;LOYER BONNARD;LOYER LOCAL DEC. 2011+1T 2012 REGIE QUAR;1076,25;0,00;;0,00
+# 60;Achats;01/01/2012;ACH01/76;6165000;Responsabilité civile;;ASSURANCE LOCAL 2012 VIA REGIEQUARTIER;86,47;0,00;;0,00
+# 60;Achats;01/01/2012;ACH01/76;6140000;Charges locatives et de copropriété;;CHARGES LOCAL 1T 2012;248,19;0,00;;0,00
+# ; ... And so on.. and so forth..
+# ----
+#
+# FORMAT of Chart_of_accounts.hledger:
+#
+# Pattern:
+# ----
+# 01/01
+#   0.ZZZ:1.YYY:2.XXX        0; 012.  Description
+#   0.ZZZ:1.YYY:3.WWW        0; 013.  Description
+#   0.ZZZ:1.YYY:3.WWW.4.VVV  0; 0134. Description
+# ; ... And so on.. and so forth..
+# ----
+# 
+# For exemple:
+# ----
+# 01/01 Plan comptable des associations
+#      1.Capital                                                0 ; 1. COMPTES DE CCOAITAUX
+#      1.Capital:0.Fonds                                        0 ; 10. Fonds associatifs et reserves
+#      2.Immobilisation                                         0 ; 2. COMPTES D'IMMOBILISATIONS
+#      2.Immobilisation:1.Corporelle                            0 ; 21. Immobilisations corporelles
+#      4.Tiers                                                  0 ; 4. COMPTES TIERS
+#      4.Tiers:0.Fournisseur                                    0 ; 40. Fournisseurs et comptes rattachés
+#      5.Finance                                                0 ; 5. COMPTES FINANCIERS
+#      5.Finance:1.Etablissement                                0 ; 51. Banques, établissements financiers et assimilés
+#      5.Finance:1.Etablissement:1.Valeur                       0 ; 511. Valeurs à l’encaissement
+#      5.Finance:1.Etablissement:1.Valeur:2.Chèque_à_encaisser  0 ; 5112. Chèques à encaisser
+#      5.Finance:1.Etablissement:2.Banque:001.Courant           0 ; 512001. Crédit Coopératif - Compte courant
+#      5.Finance:1.Etablissement:2.Banque:002.Livret            0 ; 512002. Crédit coopératif - Livret
+#      6.Charge                                                 0 ; 6. COMPTES D'ACHATS
+#      6.Charge:1.Service                                       0 ; 61. Services extérieurs
+#      6.Charge:2.Autre_service                                 0 ; 62. Autres services extérieurs
+#      6.Charge:3.Impôt                                         0 ; 63. Impôts, taxes et versements assimilés
+#      6.Charge:4.Personnel                                     0 ; 64. Charges de personnel
+#      6.Charge:5.Gestion                                       0 ; 65. Autres charges de gestion courantes
+#      6.Charge:8.Dotation                                      0 ; 68. Dotations aux amortissements, dépréciations, provisions et engagements
+#      7.Produit                                                0 ; 7. COMPTES DE PRODUITS
+#      7.Produit:0.Vente                                        0 ; 70. ventes de produits finis, prestations de services, marchandises
+# ; ... And so on.. and so forth..
+# ----
+
+our $VERSION = '2014.07.22';
+use strict;
+use warnings FATAL => qw(all);
+use utf8;
+use open qw/:std :utf8/;
+require Data::Dumper;
+require Encode;
+require IO::Wrap;
+require Text::CSV;
+#require Text::CSV::Encoded;
+require Text::Trim;
+
+sub parse_date (@) {
+       ($_) = @_;
+       my ($jj,$mm,undef,$yy) = ($_ =~ m{^\s*([0-3]?[0-9])\s*/\s*([0-1]?[0-9])\s*/\s*(20)?([0-9][0-9])\s*$});
+       return "20$yy/$mm/$jj";
+ }
+sub parse_code (@) {
+       ($_) = @_;
+       my ($code) = ($_ =~ m{^([0-9]*?)0*$});
+       return (defined $code ? $code : $_);
+ }
+sub parse_journal (@) {
+       ($_) = @_;
+       $_ = Text::Trim::trim($_);
+       s/\s/_/g;
+       return $_;
+ }
+
+sub parse_csv_line (@) {
+       my ($nth, $h, $c) = @_;
+       #print STDERR ("parse_csv_line: csv_line($nth)=".Data::Dumper::Dumper($c));
+       my $date = parse_date($c->{date});
+       $h->{$date} = {}
+               unless defined $h->{$date};
+       my $t;
+       if (exists $h->{$date}->{$c->{transaction}}) {
+               $t = $h->{$date}->{$c->{transaction}};
+        }
+       else {
+               $t =
+                { journal      => parse_journal($c->{journal})
+                , journal_code => $c->{journal_code}
+                , postings     => []
+                };
+               $h->{$date}->{$c->{transaction}} = $t;
+        }
+       
+       my $amount;
+       if (defined $c->{debit} and $c->{debit} eq '0,00') {
+               $amount = "-$c->{credit}";
+        }
+       elsif (defined $c->{credit} and $c->{credit} eq '0,00') {
+               $amount = "$c->{debit}";
+        }
+       else { die "ERROR: wrong credit/debit: CSV#$nth: ".Data::Dumper::Dumper($c); }
+       
+       push $t->{postings},
+        { account => parse_code($c->{account})
+        , amount  => $amount
+        , comment => $c->{account_name}
+        , csv_nth => $nth+2
+        }
+ }
+sub print_hledger (@) {
+       my ($h, $ap) = @_;
+       foreach my $date (sort {$a cmp $b} (keys %$h)) {
+               my $transactions = $h->{$date};
+               while (my ($transaction, $t) = each %$transactions) {
+                       print STDOUT "$date $transaction ; Journal:$t->{journal}\n";
+                       my $wmax = 0;
+                       foreach my $a (@{$t->{postings}}) {
+                               if (not defined $a->{account}) {
+                                       print STDERR Data::Dumper::Dumper($t);
+                                       die "ERROR: wrong account in t=$transaction";
+                                }
+                               if (defined $ap->{$a->{account}}) {
+                                       $a->{account} = $ap->{$a->{account}}->{account}
+                                }
+                               my $w = 0 + length ($a->{account});
+                               $wmax = $w
+                                       if $wmax < $w;
+                        }
+                       my $p = $t->{postings};
+                       foreach my $a (sort {$a->{account} cmp $b->{account}} @$p) {
+                               print STDOUT "\t$a->{account}  $a->{amount} ; $a->{comment}  CSV#.$a->{csv_nth}\n";
+                        }
+                }
+        }
+ }
+sub parse_chart_of_accounts (@) {
+       my ($coa_file) = @_;
+       my %ap = ();
+       my $csv = Text::CSV->new
+        ({binary => 1
+        , eol => $/
+        , sep_char => ','
+        });
+       print STDERR ("Chart_of_accounts: ", $coa_file, "\n");
+       open (my $COA, "<:encoding(utf8)", $coa_file)
+               or die "ERROR: opening accounting plan given as first argument";
+       #my $coa_in = IO::Wrap::wraphandle($COA);
+       my $coa_head = $csv->getline($COA);
+       print STDERR ("coa_head: ", join("|", @$coa_head), "\n");
+       $csv->column_names(@$coa_head);
+       my $nth = 1;
+       while (my $csv_line = $csv->getline_hr($COA)) {
+               $nth++;
+               my $post_cmt = $csv_line->{'posting-comment'};
+               die "ERROR: no posting-comment COA#$nth: ".Data::Dumper::Dumper($csv_line)
+                       if not defined $post_cmt;
+               my ($code, $description) = ($post_cmt =~ m{^([0-9]+)\.\s*(.*)$});
+               die "ERROR: cannot extract code in accounting plan: posting-comment COA#$nth: $csv_line->{'posting-comment'}"
+                       if not defined $code;
+               $ap{$code} =
+                { account => $csv_line->{account}
+                , description => $description
+                };
+        }
+       print STDERR "Chart_of_accounts: ".Data::Dumper::Dumper(\%ap);
+       return \%ap;
+ }
+
+sub main () {
+       my $ap = parse_chart_of_accounts($ARGV[0]);
+       my $csv = Text::CSV->new
+        ({binary => 1
+        , eol => $/
+        , sep_char => ';'
+        });
+       my $in = IO::Wrap::wraphandle(\*STDIN);
+       binmode STDOUT, ':utf8';
+       my $csv_head = $csv->getline($in);
+       #print STDERR ("head: ", join("|", @$csv_head), "\n");
+       #$csv->column_names(@$csv_head);
+       $csv->column_names (qw (
+               journal_code
+               journal
+               date
+               transaction
+               account
+               account_name
+               account_code
+               description
+               debit
+               credit
+               COTVA
+               TXTVA
+        ));
+       my $hledger_data = {};
+       
+       my $members = {};
+       my $nth = 0;
+       while (my $csv_line = $csv->getline_hr($in)) {
+               #print STDERR ("csv_line: ", join("|", @$csv_line), "\n");
+               parse_csv_line(2 + $nth++, $hledger_data, $csv_line);
+        }
+       #print STDERR "hledger_data=".Data::Dumper::Dumper($hledger_data);
+       print_hledger($hledger_data, $ap);
+       #my $out = IO::Wrap::wraphandle(\*STDERR);
+ }
+
+main;
diff --git a/hledger-print-csv.hs b/hledger-print-csv.hs
new file mode 100755 (executable)
index 0000000..efb7a6e
--- /dev/null
@@ -0,0 +1,73 @@
+#!/usr/bin/env runhaskell
+{-|
+hledger-print-csv [-f JOURNALFILE]
+
+Print matched journal entries as CSV
+Reads the default or specified journal.
+|-}
+
+import Hledger.Cli
+import Text.CSV
+import Data.Char (isSpace)
+import Data.List (mapAccumL)
+
+argsmode :: Mode RawOpts
+argsmode = (defCommandMode ["print-csv"])
+       { modeHelp = "print matched journal entries as CSV"
+       , modeGroupFlags = Group
+               { groupNamed =
+                       [ ("Input",inputflags)
+                       , ("Reporting",reportflags)
+                       , ("Misc",helpflags)
+                       ]
+               , groupUnnamed = []
+               , groupHidden = []
+               }
+       }
+
+chomp :: String -> String
+chomp = reverse . dropWhile isSpace . reverse . dropWhile isSpace
+
+postingToCSV :: Posting -> CSV
+postingToCSV p =
+       map (\((Amount {aquantity=q,acommodity=c})) ->
+               let amount = show q in
+               let commodity = c in
+               let credit = if q < 0 then show $ negate q else "" in
+               let debit  = if q > 0 then show q else "" in
+               account:amount:commodity:credit:debit:status:comment:[])
+        amounts
+       where
+               Mixed amounts = pamount p
+               status = if pstatus p then "*" else ""
+               account = showAccountName Nothing (ptype p) (paccount p)
+               comment = chomp $ pcomment p
+
+postingsToCSV :: [Posting] -> CSV
+postingsToCSV ps =
+       concatMap postingToCSV ps
+
+transactionToCSV :: Integer -> Transaction -> CSV
+transactionToCSV n t =
+       map (\p -> show n:date:date2:status:code:description:comment:p)
+        (postingsToCSV (tpostings t))
+       where
+               description = tdescription t
+               date = showDate (tdate t)
+               date2 = maybe "" showDate (tdate2 t)
+               status = if tstatus t then "*" else ""
+               code = tcode t
+               comment = chomp $ tcomment t
+
+main :: IO ()
+main = do
+       opts <- getCliOpts argsmode
+       withJournalDo opts $
+        \CliOpts{reportopts_=ropts} j -> do
+               d <- getCurrentDay
+               let ropts_ = ropts{flat_=True}
+               let q = queryFromOpts d ropts_
+               putStrLn $ printCSV $ concat $
+                       ([["nth","date","date2","status","code","description","comment","account","amount","commodity","credit","debit","status","posting-comment"]]:).snd $
+                               mapAccumL (\n e -> (n + 1, transactionToCSV n e)) 0 $
+                                       entriesReport ropts_ q j
diff --git a/hledger-range-voting.hs b/hledger-range-voting.hs
new file mode 100755 (executable)
index 0000000..2bcc330
--- /dev/null
@@ -0,0 +1,201 @@
+#!/usr/bin/env runhaskell
+{-|
+hledger-range-voting [-f JOURNALFILE]
+
+Perform range voting calculus
+on the default or specified journal.
+|-}
+
+import Data.List
+--import Data.List (mapAccumL)
+import Data.Maybe
+import Data.Ord
+import Data.Time.Calendar
+import System.Console.CmdArgs.Explicit
+import Text.Printf
+import qualified Data.Map as Map
+
+import Hledger
+import Hledger.Cli
+import Hledger.Cli.Options
+-- import Prelude hiding (putStr)
+import Hledger.Utils.UTF8IOCompat (putStr)
+
+
+argsmode :: Mode RawOpts
+argsmode = (defCommandMode ["range-voting"])
+       { modeHelp = "perform range voting"
+       , modeGroupFlags = Group
+               { groupNamed =
+                       [ ("Input",inputflags)
+                       , ("Reporting",reportflags)
+                       , ("Misc",helpflags)
+                       ]
+               , groupUnnamed = []
+               , groupHidden = []
+               }
+       }
+
+
+-- like Register.summarisePostings
+-- | Print various statistics for the journal.
+main :: IO ()
+main = do
+       opts <- getCliOpts argsmode
+       withJournalDo opts $
+        \CliOpts{reportopts_=reportopts_} j -> do
+               d <- getCurrentDay
+               let q = queryFromOpts d reportopts_
+               let l = ledgerFromJournal q j
+               let reportspan = (ledgerDateSpan l) `spanDefaultsFrom` (queryDateSpan False q)
+               let intervalspans = splitSpan (intervalFromOpts reportopts_) reportspan
+               let s = intercalate "\n" $ map (showRangeVoting reportopts_{empty_=True} l d) intervalspans
+               putStr s
+
+data Stats =
+       Stats
+        { stats_choice      :: String
+        , stats_sum         :: Double
+        , stats_blank_count :: Int
+        , stats_null_count  :: Int
+        , stats_null_value  :: Double
+        , stats_values      :: [(Int,Int)]
+        }
+stats :: Stats
+stats = Stats
+ { stats_choice      = ""
+ , stats_sum         = 0.0
+ , stats_blank_count = 0
+ , stats_null_count  = 0
+ , stats_null_value  = 0.0
+ , stats_values      = []
+ }
+
+
+showRangeVoting :: ReportOpts -> Ledger -> Day -> DateSpan -> String
+showRangeVoting ropts l today span =
+       unlines $ map (\(label,value) -> concatBottomPadded [printf fmt1 label, value]) main
+        where
+               fmt1 = "%-" ++ show w1 ++ "s: "
+               -- fmt2 = "%-" ++ show w2 ++ "s"
+               w1 = maximum $ map (length . fst) main
+               -- w2 = maximum $ map (length . show . snd) main
+               main =
+                concat $
+                [ [("Span vote (official)", printf "%s to %s (%d days)" (show $ (tdate opening)) (show $ (tdate2 opening)) votedays)
+                        ,("Span vote (actual)", printf "%s to %s (%d days)" (start span) (end span) days)
+                        ,("Cardinal", printf "%d" cardinal)
+                        ,("Values", "{"++(intercalate "," $ map (printf "%d") values)++"}")
+                        ,("Quorum", printf "%d/%d (%f%%)" votesnum votersnum (fromIntegral votesnum*100.0/fromIntegral votersnum::Double))
+                        ,("Blanks", printf "%d" $ foldl (\acc t -> acc + stats_blank_count t) 0 stats)
+                        ,("Nulls", printf "%d" $ foldl (\acc t -> acc + stats_null_count t) 0 stats)
+                        ,("Medians", "")
+                        ]
+                , map (\t ->
+                       ( printf "  - %s" (stats_choice t)
+                       , printf "sum: %+.f" (stats_sum t)
+                       ) ) medians
+                , [("Choices", printf "%d" nchoices)
+                        ]
+                , map
+                        (\t ->
+                               ( printf "  - %s" (stats_choice t)
+                               , printf "sum: %+f = %d*(0:blank) + %d*(%+.2f:null) + %s"
+                                        (stats_sum t)
+                                        (stats_blank_count t)
+                                        (stats_null_count t)
+                                        (stats_null_value t)
+                                        (intercalate " + " $ map (\(value,sum) -> printf "%d*(%+d)" sum value) (stats_values t))
+                               )
+                        ) stats
+                --,("Commodities", printf "%s (%s)" (show $ length cs) (intercalate ", " cs))
+                ]
+                where
+                       j = ljournal l
+                       ts = sortBy (comparing tdate) $ filter (spanContainsDate span . tdate) $ jtxns j
+                       as = nub $ map paccount $ concatMap tpostings ts
+                       cs = Map.keys $ canonicalStyles $ concatMap amounts $ map pamount $ concatMap tpostings ts
+                       showelapsed Nothing = ""
+                       showelapsed (Just days) = printf " (%d %s)" days' direction
+                               where days' = abs days
+                                     direction | days >= 0 = "days ago" :: String
+                                               | otherwise = "days from now"
+                       start (DateSpan (Just d) _) = show d
+                       start _ = ""
+                       end (DateSpan _ (Just d)) = show d
+                       end _ = ""
+                       days = fromMaybe 0 $ daysInSpan span
+                       votedays = fromMaybe 0 $ daysInSpan
+                        (DateSpan
+                                (Just (tdate opening))
+                                (maybe Nothing Just (tdate2 opening)))
+                       acctnum = length as
+                       openings = filter ((== "Opening") . tdescription) $ ts
+                       opening | null openings = error' "\"Opening\" transaction is missing"
+                               | otherwise     = head $ openings
+                       cardinals = filter ((== "Cardinal") . fst) $ ttags opening
+                       cardinal | null cardinals = error' "\"Cardinal\" tag is missing on \"Opening\" transaction"
+                                | otherwise      = read $ snd $ head $ cardinals :: Int
+                       values | (cardinal `mod` 2 == 0) = delete 0 [-cardinal`div`2..cardinal`div`2]
+                              | otherwise               = [-(cardinal-1)`div`2..(cardinal-1)`div`2]
+                       choices =
+                               map paccount $
+                               filter (isPrefixOf "Choice:" . paccount) $
+                               tpostings opening
+                       
+                       votes = filter ((== "Vote") . tdescription) $ ts
+                       stats =
+                               sortBy (\a b -> (stats_sum b) `compare` (stats_sum a)) $
+                               map (\s ->
+                                       let mean = fromIntegral (foldl (\acc (v,c) -> acc + (v * c)) 0 (stats_values s)) / fromIntegral (length (stats_values s)) in
+                                       s
+                                        { stats_null_value = mean
+                                        , stats_sum        = (stats_sum s) + (mean * fromIntegral (stats_null_count s))
+                                        }) $
+                               foldl (\s vote ->
+                                       map (\s ->
+                                               case filter ((== stats_choice s) . paccount) (tpostings vote) of
+                                                [] -> s { stats_blank_count = stats_blank_count s + 1 }
+                                                [choice_posting] ->
+                                                       case pamount choice_posting of
+                                                        Mixed [Amount{acommodity="", aquantity=q, aprice=NoPrice}] ->
+                                                               let i = floor q in
+                                                               if snd (properFraction q) == 0.0 && i `elem` values
+                                                               then s
+                                                                        { stats_sum    = stats_sum s + fromIntegral i
+                                                                        , stats_values = map (\(v,c) -> if v == i then (v,c+1) else (v,c)) (stats_values s)
+                                                                        }
+                                                               else s { stats_null_count = stats_null_count s + 1 } -- error' $ printf "TODO: null vote: invalid value: %f" q
+                                                        _ ->  s { stats_null_count = stats_null_count s + 1 } -- error' "TODO: null vote: too much informations"
+                                                _ ->    s { stats_null_count = stats_null_count s + 1 }
+                                        )
+                                        s
+                                )
+                                [ Stats
+                                       { stats_choice      = choice
+                                       , stats_sum         = 0.0
+                                       , stats_blank_count = 0
+                                       , stats_null_count  = 0
+                                       , stats_null_value  = 0.0
+                                       , stats_values      = [(value,0) | value<-values]
+                                       }
+                                | choice<-choices ]
+                                votes
+                       
+                       medians =
+                               filter (\c -> stats_sum c `elem` medians) stats
+                                where medians =
+                                       if length choices `mod` 2 == 0
+                                       then map (stats_sum . (!!) stats) [nchoices `div` 2 - 1, nchoices `div` 2 + 1]
+                                       else map (stats_sum . (!!) stats) [(nchoices - 1) `div` 2]
+                               
+                       nchoices = length choices
+                       
+                       -- choicesbalancesropts = ropts{query_="Choice:"}
+                       -- choicesbalances = tail $ fst $ balanceReport ropts (queryFromOpts today choicesbalancesropts) j
+                       
+                       voteras = filter (isPrefixOf "Voter:" . paccount) $ tpostings opening
+                       votests = filter ((== "Vote") . tdescription) $ ts
+                       votesnum = length votests
+                       votersnum = length voteras
+                       votechoicesps = filter (isPrefixOf "Choice:" . paccount) $ tpostings opening
diff --git a/timelog b/timelog
new file mode 100755 (executable)
index 0000000..58e519b
--- /dev/null
+++ b/timelog
@@ -0,0 +1,64 @@
+#!/bin/sh -eu
+
+# ACTION: initialize from ./
+       test -L "$0" && tool="$(readlink -e "$0")" || tool=$0
+       tool=$(readlink -e "${tool%/*}"/.)
+       root=$(readlink -e "${root:-"${0%/*}"/.}")
+
+TIMELOG=${TIMELOG:-"$root"/time.log}
+
+rule_edit () {
+       touch "$TIMELOG"
+       ${EDITOR:-vim} "$@" "$TIMELOG"
+ }
+rule_in () {
+       date=$(date '+%Y-%m-%d %H:%M:%S')
+       touch "$TIMELOG"
+       {
+               last=$(tail -n 1 "$TIMELOG")
+               if test ! "$last" = "${last#i}"
+                then printf 'o %s %s\n' "$date"
+                fi
+               printf 'i %s %s\n' "$date" "$*"
+       } | tee /dev/stderr >>"$TIMELOG"
+ }
+rule_help () {
+       cat >&2 <<-EOF
+               Syntax:
+                 ${0##*/} [e|edit]
+                 ${0##*/} [i|in] Path:To:Task Comment
+                 ${0##*/} [s|server]
+                 ${0##*/} [o|out]
+                 ${0##*/} \$hledger_command
+               EOF
+ }
+rule_hledger () {
+       set -x
+       hledger ${HLEDGER_FLAGS-} -f "$TIMELOG" "$@"
+ }
+rule_server () {
+       cd "$root"
+       set -x
+       hledger-web --server ${HLEDGER_WEB_FLAGS-} -f "$TIMELOG" "$@"
+ }
+rule_out () {
+       last=$(tail -n 1 "$TIMELOG")
+       if test "$last" = "${last#o}"
+        then
+               date=$(date '+%Y-%m-%d %H:%M:%S')
+               {
+                       printf 'o %s %s\n' "$date" "$*"
+               } | tee /dev/stderr >>"$TIMELOG"
+        fi
+ }
+
+rule=${1:-help}
+test $# = 0 || shift
+case $rule in
+ (i|'in') rule_in "$@";;
+ (o|out) rule_out "$@";;
+ (e|edit) rule_edit "$@";;
+ (s|server) rule_server "$@";;
+ (h|help|-h|--help|'') rule_help $rule "$@";;
+ (*) rule_hledger $rule "$@";;
+ esac
diff --git a/vim/syntax/hledger.vim b/vim/syntax/hledger.vim
new file mode 100644 (file)
index 0000000..e58e7cc
--- /dev/null
@@ -0,0 +1,62 @@
+" Language:    hledger
+" Maintainer:  Julien Moutinho <julm+vim@autogeree.net>
+" URL:         http://autogeree.net/~julm/src/vim/syntax/hledger.vim
+" Last Change: Mon, 21 Jul 2014 00:00:00 +0200 - initial version
+" Usage:       autocmd BufNewFile,BufRead *.hledger,*.journal,*.ledger setfiletype hledger
+
+if exists("b:current_syntax")
+       finish
+ endif
+
+
+syn clear
+syn sync fromstart
+syn sync linebreaks=1
+
+syn match  hledgerComment              ";.*"
+syn match  hledgerNumberOdd            /[0-9][0-9]*/ contained
+syn match  hledgerNumber               /[0-9][0-9]*/ contained
+syn match  hledgerAccountSeparatorOdd  ":" contained
+syn match  hledgerAccountSeparator     ":" contained
+
+syn region hledgerInclude   start=/^!include/ end=/^/
+syn region hledgerDirective start=/^[A-Z]/    end=/^/ contains=hledgerComment
+
+syn region hledgerTransaction        start=/^\d[^      ]\+ / end=/^\s*$/
+syn match  hledgerTransactionHead    "^[0-9/]\+\(=[0-9/]\+\)\?\(\s\+[!*]\)\?" contained containedin=hledgerTransaction
+syn match  hledgerTransactionDate    "[0-9/]\+" contained containedin=hledgerTransactionHead
+syn match  hledgerTransactionComment ";.*" contained containedin=hledgerTransaction,hledgerPosting,hledgerPostingOdd
+
+syn region hledgerPostingOdd         start=/^\s\+[^;   ]/ end=/^/ contained containedin=hledgerTransaction nextgroup=hledgerPosting
+syn region hledgerPosting            start=/^\s\+[^;   ]/ end=/^/ contained containedin=hledgerTransaction nextgroup=hledgerPostingOdd
+syn match  hledgerPostingAccountOdd  "^\s\+[^;         ][^;    ]*" contained containedin=hledgerPostingOdd  nextgroup=hledgerPostingAmountOdd  contains=hledgerNumberOdd,hledgerAccountSeparatorOdd
+syn match  hledgerPostingAccount     "^\s\+[^;         ][^;    ]*" contained containedin=hledgerPosting nextgroup=hledgerPostingAmount contains=hledgerNumber,hledgerAccountSeparator
+syn match  hledgerPostingAmountOdd   "   *\([^;]*\|$\)" contained containedin=hledgerPostingOdd  contains=hledgerNumberOdd
+syn match  hledgerPostingAmount      "   *\([^;]*\|$\)" contained containedin=hledgerPosting contains=hledgerNumber
+
+syn match  hledgerTag      /[^:, ]\+:[^,]*/ contained containedin=hledgerTransactionComment nextgroup=hledgerTagValue
+syn match  hledgerTagValue /:[^,]*/ms=s+1  contained containedin=hledgerTag
+
+if version >= 508 || !exists("did_hledger_syntax_inits")
+       hi hledgerComment              term=bold      cterm=bold ctermfg=6 ctermbg=0    gui=bold guifg=#4169E1
+       hi hledgerInclude              term=bold      cterm=bold                        gui=bold
+       hi hledgerDirective            term=bold      cterm=bold                        gui=bold
+       hi hledgerAccountSeparatorOdd  term=bold      cterm=bold ctermfg=3 ctermbg=0    gui=bold guifg=black   guibg=gray90
+       hi hledgerAccountSeparator     term=bold      cterm=bold ctermfg=3 ctermbg=0    gui=bold guifg=black   guibg=lightgreen
+       hi hledgerNumberOdd            term=bold      cterm=bold ctermfg=4 ctermbg=0    gui=bold guifg=blue    guibg=gray90
+       hi hledgerNumber               term=bold      cterm=bold ctermfg=4 ctermbg=0    gui=bold guifg=blue    guibg=lightgreen
+       hi hledgerPostingOdd                          cterm=bold           ctermbg=0                           guibg=gray90
+       hi hledgerPosting                             cterm=bold           ctermbg=0                           guibg=lightgreen
+       hi hledgerPostingAccountOdd    term=underline cterm=bold ctermfg=0 ctermbg=0             guifg=gray30  guibg=gray90
+       hi hledgerPostingAccount       term=underline cterm=bold ctermfg=0 ctermbg=0             guifg=gray30  guibg=lightgreen
+       hi hledgerPostingAmountOdd                    cterm=bold ctermfg=3 ctermbg=0    gui=bold               guibg=gray90
+       hi hledgerPostingAmount                       cterm=bold ctermfg=3 ctermbg=0    gui=bold               guibg=lightgreen
+       hi hledgerTag                  term=bold      cterm=bold ctermfg=3 ctermbg=none gui=bold guifg=orange
+       hi hledgerTagValue             term=bold      cterm=bold ctermfg=1 ctermbg=none gui=NONE guifg=red
+       hi hledgerTransaction                         cterm=bold           ctermbg=0    gui=bold
+       hi hledgerTransactionComment   term=bold      cterm=bold ctermfg=6 ctermbg=0    gui=bold guifg=#4169E1
+       hi hledgerTransactionDate                     cterm=bold ctermfg=5 ctermbg=none gui=bold               guibg=lightgoldenrod
+       hi hledgerTransactionHead      term=bold      cterm=bold ctermfg=3 ctermbg=0    gui=bold guifg=black   guibg=lightgreen
+ endif
+
+let b:current_syntax = "hledger"