Architecture : Montant HT reste saisi à la main, un nouveau champ TVA (%) le complète, et Montant TTC = round(HT * (1 + TVA/100), 2) devient une valeur calculée plutôt que saisie -- champ readonly dans le formulaire (aperçu live en JS), calcul faisant foi côté serveur dans figli_compta_ledger_node_presave(). Migration (update hooks 8004/8005) : Montant TTC n'est **jamais** modifié pour les données historiques -- seul un TVA effectif est rétro-calculé depuis HT/TTC existants et ajouté en tant que nouvelle métadonnée (1498 lignes renseignées, 58 laissées vides faute de TTC source). Précision du champ TVA fixée à 4 décimales après vérification empirique sur les 1556 lignes existantes : reconstruire TTC = HT * (1 + TVA/100) avec un taux arrondi à 4 décimales ne s'écarte du TTC réel que pour 9 lignes (probables factures multi-taux), contre 74 à 2 décimales. Garde-fou supplémentaire dans le presave : le recalcul du TTC ne se déclenche que si HT ou TVA ont réellement changé par rapport à la révision précédente (comparaison à $node->original) -- sans ça, rouvrir une ancienne ligne migrée pour corriger un simple libellé aurait silencieusement dérivé son TTC historique de ±0,01€ à cause de l'arrondi du taux rétro-calculé, ce qu'interdit la règle du projet de ne jamais corriger les données historiques. Réorganisation du formulaire : N° Facture rejoint Client sur une même ligne, Montant HT/TVA/Montant TTC forment la ligne suivante -- les poids de champs doivent rester des entiers (Drupal tronque silencieusement tout poids fractionnaire lors de la sauvegarde de l'affichage).
21 lines
340 B
YAML
21 lines
340 B
YAML
uuid: 92ad1651-ab19-4c60-ad8c-4824fd97ecc3
|
|
langcode: en
|
|
status: true
|
|
dependencies:
|
|
module:
|
|
- node
|
|
id: node.field_tva
|
|
field_name: field_tva
|
|
entity_type: node
|
|
type: decimal
|
|
settings:
|
|
precision: 8
|
|
scale: 4
|
|
module: core
|
|
locked: false
|
|
cardinality: 1
|
|
translatable: true
|
|
indexes: { }
|
|
persist_with_no_fields: false
|
|
custom_storage: false
|