Limites & precision module charges sociales

détecté en version 3.8:
dans le module taxe et charges sociales les champs montants (amount) dans certaines tables comme llx_chargessociales, llx_paiementcharges sont typés en real dans postgresql hors ce type est sur 4 octets avec une précision de 6 digits
donc toute charge de plus de 9999.99 € se retrouve arrondie sur 6 digits
exemple: 11111.11 devient 11111.10, 111111.11 devient 111111.00, 1111111.11 devient 1111110.00, etc
est-il possible de les modifier en type double precision dans la base sans perturber le fonctionnement de dolibarr?
est-ce corrigé dans les versions supérieures?

interessant topic

Une réponse plus détailée nécessiterait plus de temps, mais a priori, dans PostgreSQL, les valeurs comptables doivent être de type « numeric »:

https://www.postgresql.org/docs/10/static/datatype-numeric.html#datatype-numeric-decimal

1 J'aime

MySQL est également impacté :
https://dev.mysql.com/doc/refman/5.7/en/floating-point-types.html

https://dev.mysql.com/doc/refman/5.7/en/fixed-point-types.html :

Une vérification rapide montre que pour stocker un montant monétaire, certains modules de Dolibarr utilisent un champ real alors que d’autres modules sont codée en numeric :

llx_paiement => numeric
llx_don = real

Le seul codage acceptable pour un montant monéraire est « numeric ».

Je vais proposer un correctif pour le core et en discuter avec les développeurs.
L’impact est important … et je ne pense pas qu’un correctif soit disponible avant une mise à jour majeure.

Par contre, si vous êtes très pressés et ne pouvez pas attendre, il est possible d’utiliser un éditeur SQL (tel que pgAdmin3), pour transtyper les valeur real en numeric à l’aide de la requête suivante :

ALTER TABLE nom_table
ALTER COLUMN nom_colonne TYPE numeric;

Par exemple :
ALTER TABLE public.llx_don
ALTER COLUMN amount TYPE numeric;

Attention qu’un transtypage pourrait résulter en un arrondi.
Il se peut donc que certaines opérations comptables auparavant soldées laissent apparaître un écart minime.

Avant de procéder, faire un backup sur disque et sur média inaltérable …

Comme je suis nouveau dans la communauté, je vais mener une investigation complète du code et proposer un correctif. Si vous ne connaissez pas SQL, ne faites rien et attendez le retour de la communauté.

1 J'aime

Je vais soumettre un patch :
https://github.com/Dolibarr/dolibarr/issues/7013

1 J'aime

Okay, j’ai compris. Les normes ne sont pas définies et certains développeurs ont utilisé real:
https://wiki.dolibarr.org/index.php/Langages_et_normes

Il faut ajouter
- numeric(24,8) pour une valeur monétaire