Chaque transaction du relevé devient une ligne « à trier » : type autre, répartition vide (liseré rouge existant via field_ecart), tag field_flag « IMP AAMMJJ » (liseré ambre + filtre existants), client rapproché par mots (ClientMatcher : séquence contiguë, sinon mot significatif unique -- jamais en sous-chaîne, jamais auto-créé). - src/Import/ : CsvReleveParser (ISO-8859-1 confirmé, en-tête strict, fgetcsv avec escape '' explicite -- dépréciation PHP 8.4, rejets propres avec n° de ligne), ReleveImportBatch (Batch API par lots de 25, dédoublonnage COMPTÉ par empreinte field_import_fitid -- max(0, k−m) importe les vrais doublons légitimes et dédoublonne à travers des fichiers qui se chevauchent --, totaux de contrôle au centime sur la page de résultat, résumé en tempstore privé). - ReleveUploadForm : upload private://releves (fichier conservé + usage, hors de portée du cron), parse en validateForm(), batch, redirection vers la page de résultat. - field_montant_releve : référence bancaire immuable, écrite une fois à l'import et jamais par presave ; affichée en TEXTE sous Montant TTC (widget remplacé par un #type item -- un item ne soumet rien et extractFormValues() saute le champ sans valeur soumise, la valeur survit donc à chaque save) ; masquée sur les lignes sans montant. - SkipValidationContext : contournement du contrôle de répartition requête-scopé (ferme le trou de concurrence de l'ancien state global, AUDIT-2026-09-09 §2.2) -- presave honore le service (state gardé pour compat), updateType/updateField basculent dessus. - Permissions (AUDIT §2.2 priorité 1) : access figli ledger sur toutes les routes du module + autocomplete (RouteSubscriber), import réservé Éditeur/Admin, access content retiré du rôle Authenticated (config/sync re-exportée pour les 4 rôles). - Gin : hook_gin_ignore_sticky_form_actions() -- sans ça, le bouton Importer partait dans la barre sticky du chrome masqué. - install : 8011 champs, 8012 index sur les empreintes, 8013/8014 montant_releve sur le formulaire sous le TTC (poids renumérotés). - /lignes : boutons + Ajouter / Importer / Historique dans le footer sticky (compacts), footer colspan dès la première colonne, badges de signalement qui reviennent à la ligne au lieu de déborder.
Drupal is an open source content management platform supporting a variety of websites ranging from personal weblogs to large community-driven websites. For more information, visit the Drupal website, Drupal.org, and join the Drupal community.
Contributing
Drupal is developed on Drupal.org, the home of the international Drupal community since 2001!
Drupal.org hosts Drupal's GitLab repository, its issue queue, and its documentation. Before you start working on code, be sure to search the issue queue and create an issue if your aren't able to find an existing issue.
Every issue on Drupal.org automatically creates a new community-accessible fork that you can contribute to. Learn more about the code contribution process on the Issue forks & merge requests page.
Usage
For a brief introduction, see USAGE.txt. You can also find guides, API references, and more by visiting Drupal's documentation page.
You can quickly extend Drupal's core feature set by installing any of its thousands of free and open source modules. With Drupal and its module ecosystem, you can often build most or all of what your project needs before writing a single line of code.
Changelog
Drupal keeps detailed change records. You can search Drupal's changes for a record of every notable breaking change and new feature since 2011.
Security
For a list of security announcements, see the Security advisories page (available as an RSS feed). This page also describes how to subscribe to these announcements via email.
For information about the Drupal security process, or to find out how to report a potential security issue to the Drupal security team, see the Security team page.
Need a helping hand?
Visit the Support page or browse over a thousand Drupal providers offering design, strategy, development, and hosting services.
Legal matters
Know your rights when using Drupal by reading Drupal core's license.
Learn about the Drupal trademark and logo policy here.