# PDF pesées V2 (calcul basé sur ImpPesee.cls)

## Contexte

Le PDF des pesées existant (bouton "Pdf" sur `resources/views/pesee/index.blade.php`) est généré par
`pesee_pdf_service::construireHtml2Pdf()` + `resources/views/pesee/pdf.blade.php`.

Un nouveau bouton "PdfV2" a été ajouté pour reproduire fidèlement la logique de calcul de l'ancienne
classe VB6 `ImpPesee.cls` (module d'impression des pesées d'un autre programme), fournie en référence
(`ClassPusImpPesee.cls` / fonction `PUFimppes`). Les champs de la base de l'ancien programme
(`Tconsommations`, recordset VB6) ne correspondent pas un à un aux colonnes actuelles de `t_pesee` ; le
mapping a été déduit du code existant de `pdf.blade.php` (déjà une adaptation partielle de cette
logique) et de la lecture du VB6.

## Fichiers ajoutés / modifiés

- `app/Services/pesee_pdf_service_v2.php` (nouveau) — mêmes requêtes que `pesee_pdf_service`, plus le
  calcul du volume réel total des gâchées (`totalGacheeVolumeReelle`).
- `resources/views/pesee/pdf_v2.blade.php` (nouveau) — copie de `pesee/pdf.blade.php` avec les 3
  corrections ci-dessous.
- `app/Http/Controllers/pesee_controller.php` — méthode `imprimer_pdf_v2()`.
- `routes/web.php` — route `pesee.imprimer_pdf_v2` (`/pesee/imprimer_pdf_v2/{bl_id}`).
- `resources/views/pesee/index.blade.php` — bouton "PdfV2" à côté du bouton "Pdf" existant.

## Écarts de calcul corrigés par rapport à `pdf.blade.php` (v1)

1. **Consigne formule / masse volumique théorique** : v1 récupère la première ligne `t_pesee` (type
   0 ou 1, sans tri) pour la consigne d'un produit, et ne la compte que si elle est de type 0 — sinon
   0. Dans `ImpPesee.cls` (`initcolonne`), la consigne théorique d'une colonne n'est **jamais** initialisée
   depuis une ligne `type_donnee=1` (ajout manuel) ; seules les lignes `type_donnee=0` en portent une.
   V2 filtre donc explicitement `pesee_type_donnee = 0` pour cette valeur.
2. **Diviseur des lignes "Totaux" et "moyenne"** : v1 divise par `bl_qte_livraison` (volume **prévu**
   du BL). `PUFimppes` divise par `TotalGachee`, le volume **réellement exécuté**, cumulé gâchée par
   gâchée (avec priorité à la donnée de fin anormale `type_donnee` 6/7 sur la donnée normale
   `type_donnee` 4 pour une même gâchée). V2 calcule ce volume réel (`totalGacheeVolumeReelle`) et
   l'utilise comme diviseur. Sur une production normale sans écart, ce chiffre est identique à
   `bl_qte_livraison` ; il diverge en cas de fin anormale de production ou d'écarts de gâchées.
3. **Intitulé de colonne** : la colonne imprimée "HYGR" pour le produit eau correspond en réalité au
   champ "Correction" (`DT1` côté VB6, `pesee_data_1` côté `t_pesee`), imprimé "COMP." dans
   `ImpPesee.cls` — à ne pas confondre avec l'hygrométrie des granulats (déjà correcte par ailleurs,
   colonnes séparées). V2 renomme l'en-tête en "COMP.", la donnée source reste inchangée.

Le reste de la logique (hygrométrie par granulat, écarts par produit, siccité, marqueur hors-tolérance
`#`) était déjà conforme à `ImpPesee.cls` et n'a pas été modifié.

## Vérifications effectuées

- Lint PHP (`php -l`) sur le service et le contrôleur : OK.
- Compilation Blade (`Blade::compileString`) + `php -l` sur `pdf_v2.blade.php` et `index.blade.php` :
  OK (un commentaire Blade `{{-- --}}` placé par erreur dans un bloc `@php` a été corrigé en
  commentaire PHP).
- Génération réelle du PDF via `pesee_pdf_service_v2::construireHtml2Pdf()` sur un BL existant
  (`bl_id=154022`) : OK, aucune erreur à l'exécution.

## Point à valider avec l'utilisateur

Le mapping champs VB6 → `t_pesee` n'a pas pu être confirmé contre une sortie réelle de l'ancien
programme (pas d'accès à `Tconsommations` ni à une impression de référence). À comparer avec un
tirage papier issu de `ImpPesee.cls` si possible, notamment sur un BL avec fin anormale de production
(pour valider le point 2 ci-dessus).
