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).
26 lines
468 B
YAML
26 lines
468 B
YAML
uuid: 9e9fc15c-9f7b-466a-bab0-fc6fe802a22f
|
|
langcode: en
|
|
status: true
|
|
dependencies:
|
|
config:
|
|
- field.storage.node.field_tva
|
|
- node.type.ligne_comptable
|
|
id: node.ligne_comptable.field_tva
|
|
field_name: field_tva
|
|
entity_type: node
|
|
bundle: ligne_comptable
|
|
label: 'TVA (%)'
|
|
description: ''
|
|
required: false
|
|
translatable: true
|
|
default_value:
|
|
-
|
|
value: 0.0
|
|
default_value_callback: ''
|
|
settings:
|
|
min: null
|
|
max: null
|
|
prefix: ''
|
|
suffix: ''
|
|
field_type: decimal
|