---
suivi: 1049
date: 2026-07-29
sujet: Fix colonne etiquettes.libelle — consolidation Aktor SQL 1054
chantier: aktor
type: fix
statut: poussé
hash: 1f526f9a
fichiers:
  - app/Services/Assistant/AssistantConsolidationTools.php
  - docs/suivi/SUIVI_1049_fix_colonne_etiquettes_consolidation.md
---

## PROMPT ENVOYÉ

SUIVI #1049 — correctif minimal SQL bloquant sur « Générer une note de consolidation »
(`/aktor/consolidations`, #1046) :

SQLSTATE[42S22] Unknown column `etiquettes.nom` — la colonne réelle est `libelle`.

Corriger dans `AssistantConsolidationTools.php` (`nom` → `libelle`), auditer toutes les
colonnes du fichier contre le schéma prod, documenter, commit + push HECTAREG.
Ne pas toucher #1047/#1048, bilan, dépôt factures, journal (#412 N/A).

## SYNTHÈSE

### Cause

Eager load Eloquent : `etiquettes:id,nom,type,programme_id` — colonne inventée.
Schéma prod `etiquettes` : `id, type, programme_id, libelle, actif, created_at, updated_at`.
Même classe de piège que #988 (`programmes.nom` → `programmes.libelle`).

### Correctif

- Select : `libelle` à la place de `nom` (2 eager loads : `listerTachesOuvertes`, `lireTache`).
- Exposition LLM : clé JSON `nom` alimentée depuis `$e->libelle` (pas de rename massif).
- Audit manuel de toutes les tables interrogées par le fichier → seule `etiquettes.nom` était FAUX ;
  `projets.nom` est réel (≠ `programmes.libelle`).

### Hors périmètre (non touché)

Prompt consolidateur, `assistant_consolidations`, `AktorZonesCommunes`,
`AssistantConsolidationAgentService`, contrôleur #1044/#1046, MesTaches (#1047/#1048),
bilan (#1043), dépôt/compta, migrations, Vue/rebuild, journal #412.

### Signalement (hors lot)

Périmètre Robin = 37 tâches (ids 42–88) > borne 40 avec plafond web 4 tours → vérifier en
prod que la note se déclare PARTIELLE avec IDs non traités listés (lot ultérieur si besoin).

## DÉPLOIEMENT-TEST

```bash
git pull origin main
php artisan optimize:clear
php artisan view:clear
find app/ -name "*.php" -exec touch {} +
```

Pas de migration. Pas de npm/composer/optimize. Pas de `journal:sync`.

Test prod : clic « Générer une note de consolidation » sur `/aktor/consolidations` —
seul contexte où HTTPS sort (OVH CLI bloqué).

## LEÇON

`php -l` ne détecte pas un nom de colonne faux ; les tests SQLite sont skipped ; MySQL local
Cursor non conforme. Sans confrontation MANUELLE au schéma prod avant d’écrire une requête
Eloquent/SQL, le bug n’apparaît qu’en prod (vécu #988, #1049).
