Ticket UUID: 5470b2e56b1726762db222d5a018ce2bddf39801
Title: Compta: ajout option "inaltérabilité" (signature de chaîne)
Status: Open Type: Feature_Request
Severity: Minor Priority: Immediate
Subsystem: Resolution: Open
Last Modified: 2017-07-14 03:29:55
Version Found In:
Target version:
User Comments:
bohwaz added on 2016-10-09 21:37:17:
En compta normalement on doit respecter le principe d'inaltérabilité des comptes, c'est à dire qu'on ne modifie ou ne supprime pas une opération existante mais on crée une nouvelle opération "corrective".

Ce principe est un peu ridicule à l'ère du logiciel, où on sait que tout est modifiable facilement par n'importe qui, mais la loi française l'exige désormais pour les logiciels de compta pro. Voir : https://listes.april.org/wws/arc/comptabilite/2016-08/msg00000.html

Et le BOI : http://bofip.impots.gouv.fr/bofip/10691-PGP.html

Par défaut Garradin permet de modifier et supprimer des écritures, car son fonctionnement est destiné aux petites assos qui travaillent souvent en recettes/dépenses, dans ce cas Garradin n'est pas très différent d'un simple tableau Excel, et empêcher la modification/suppression d'écritures est trop lourd pour les novices.

Mais pour les assos qui veulent suivre un modèle comptable plus "classique" il faut permettre de suivre le principe d'inaltérabilité. Pour cela il faudrait :

- Avoir un bouton "activer l'inaltérabilité" dans la configuration de l'exercice en cours
- Une fois le bouton activé (avec confirmation) il n'est plus possible de le désactiver
- A l'activation, une signature cryptographique (HMAC?) de chaque écriture est stockée dans dans la table compta_operations.
- A l'activation, ajout de triggers pour empêcher toute modification des données de la table operations (DELETE ou UPDATE): https://stackoverflow.com/questions/12911947/read-only-fields-in-sqlite3-database-table
- Après activation, chaque opération est signée
- Ajouter un bouton "Corriger" sur la page d'une opération, en plus de "Modifier" et "Supprimer" (ou à la place de, si "activer l'inaltérabilité" est coché) qui pré-remplirait un formulaire de saisie pour inverser l'opération.

bohwaz added on 2017-07-14 01:29:55:
Dépends de [c20546bb90] : stockage de monnaie en integer et de la possibilité de valider les écritures (par défaut non validées).

Voir aussi comme idées pour la signature de chaîne : Chronicle de ParagonIE [https://paragonie.com/blog/2017/07/chronicle-will-make-you-question-need-for-blockchain-technology]

Code : [https://github.com/paragonie/chronicle/blob/master/src/Chronicle/Chronicle.php]

Qui utilise Blakechain : [https://github.com/paragonie/blakechain/blob/master/src/Verifier.php]

L'idée intéressante est que chaque ligne de la base de données comprend :
- hash(row.join())
- hash(previous_line_hash . current_line_hash)
- summary hash (hash of all the previous lines)
- summary hash state (??)
- signature of the current line, using a public key
- public key