---
suivi: 1315
date: 2026-08-13
sujet: marche_resume_editable_retrait_infos
chantier: marches_compta
type: feature
statut: poussé
hash: 28f6d592
fichiers:
  - resources/js/Pages/Marches/Show.vue
  - resources/js/Components/Marches/MarcheResumeWidgets.vue
  - app/Http/Controllers/MarcheController.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1315_resume_editable_retrait_infos.md
---

## PROMPT ENVOYÉ

Rendre le bloc « Informations du marché » modifiable dans RÉSUMÉ (même PATCH que
INFOS), ajouter les 3 dates, confirmation champs comptables si ≥1 facture payée,
défaut RÉSUMÉ (inversion explicite de la décision #1314 SYNTHÈSE), retrait onglet
INFOS sous clause d’arrêt inventaire. HEAD attendu #1314 (dd205076).

## SYNTHÈSE

### Fiches lues
- `#1314` LEÇON : défaut hash ≠ écraser lien profond ; triangle Documents / titre /
  retour sous onglets — **conservés** ; **seul** le défaut d’onglet change
  (Synthèse → Résumé, décision Robin).
- `#1313` LEÇON : `SHOW_MARCHE_KPI_COUVERTURE_HEADER = false` — laissé.
- `#1306` / `#1312` : Retenues / alertes CP — non touchés.

### Inventaire INFOS vs RÉSUMÉ (OBJET 1) — décision retrait INFOS = OUI

| Champ | Colonne DB | INFOS | RÉSUMÉ (avant) | Modifiable avant | Action #1315 |
|-------|------------|-------|----------------|------------------|--------------|
| Fournisseur | `fournisseur_id` / `fournisseurs.nom` | oui | oui (lecture) | INFOS seul | éditable dans RÉSUMÉ |
| Poste du bilan | `poste_budgetaire_type_id` | oui | oui (lecture) | INFOS | éditable RÉSUMÉ |
| Type | `type` | oui | oui (lecture) | INFOS | éditable RÉSUMÉ |
| Montant HT | `montant_marche_ht` | oui | oui | INFOS | éditable + confirm si facture payée |
| TVA | `taux_tva` | oui | oui | INFOS | idem |
| RG % | `retenue_garantie_pct` | oui | oui | INFOS | idem |
| Caution | `a_caution`, `montant_caution`, `rg_complementaire_pct` | oui | oui | INFOS | idem |
| Compte prorata % | `compte_prorata_pct` | oui | oui | INFOS | idem |
| OPC % | `taux_opc_pct` | oui | oui | INFOS | idem |
| Date signature | `date_signature` | oui | oui si renseignée | INFOS | toujours visible + éditable / NULL |
| Date démarrage | `date_debut` | oui | oui si renseignée | INFOS | idem |
| Date fin prévue | `date_fin_prevue` | oui | oui si renseignée | INFOS | idem |

Champs hors panneau INFOS (intitulé, référence, statut, SharePoint, programme…) :
affichés ailleurs (en-tête), **pas** d’orphelins dans INFOS → retrait OK.

### Chemin d’écriture (réutilisé, pas de second chemin)
- Route : `PATCH programmes/{programme}/marches/{marche}` → `marches.patch` /
  `MarcheController@update` → `updateMarchePartial`.
- **Pas de FormRequest** : validation inline (`$allowed` + `$rules`) déjà en place,
  dates déjà dans les règles. Flag `confirmation_impact_retenues` lu hors whitelist
  champs.
- Recalcul existant : `recalculer()` si `montant_marche_ht` ou `taux_tva` — **conservé
  à l’identique**, non étendu aux autres champs.

### Mapping UI ↔ back (composants de choix)
| Libellé affiché | Valeur postée | Colonne DB | Libellé back |
|-----------------|---------------|------------|--------------|
| Forfait | `forfait` | `marches.type` | forfait |
| Bordereau | `bordereau` | `marches.type` | bordereau |
| Caution Active (oui) | `a_caution=true` (+ montant / RG compl.) | `a_caution`, `montant_caution`, `rg_complementaire_pct` | boolean + montants |
| Caution Non | `a_caution=false` | idem | désactive |

### Onglets / liens profonds
1. Hash vide / inconnu → `resume` (**inversion #1314**).
2. Hash connu → cet onglet.
3. `#infos` (legacy) → `resume` + remap hash, sans erreur.

### Vérification écran / base
**NON** — MySQL local auth_gssapi / SSH OVH indisponibles depuis cet agent.
Tests 2–4 (avant/après base, RG% confirm + remise 5 %) **non exécutés ici** → lot
**non validé** côté écran réel ; à faire en prod marché 109.

## DÉPLOIEMENT-TEST

```bash
git pull origin main
php artisan optimize:clear
php artisan view:clear
php artisan journal:sync
```

## LEÇON

Inverser un défaut d’onglet décidé la veille (#1314) doit être **documenté** dans la
fiche suivante, sinon le prochain lot croit à une régression. Retirer un onglet exige
un inventaire champ à champ : un orphelin rend une donnée peuplée inéditable. Un
champ posté sans règle de validation disparaît (#1279) — les dates et le flag de
confirmation doivent être explicitement traités. Deux chemins d’écriture sur des
taux comptables divergent toujours : réutiliser le PATCH existant.
