---
suivi: 1335
date: 2026-08-13
sujet: reprise_siwi_hors_perimetre_actionnable
chantier: marches_reprise
type: fix
statut: poussé
hash: ba4043c2
fichiers:
  - app/Services/SiwiImportService.php
  - app/Services/SiwiImportPageService.php
  - app/Services/SiwiRepriseActionService.php
  - resources/js/Pages/SiwiImport/Index.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1335_reprise_siwi_hors_perimetre_actionnable.md
---

## PROMPT ENVOYÉ

SUIVI #1335 — reformuler motifs hors périmètre (recommandation ≠ refus),
groupe actionnable (Créer/Rattacher/…), sélecteur postes non vide pour
lettres A/B, avancement inchangé (option B). Pas de garde-fou
`applicable_marche`. Pas de migration / seed nomenclature.

## SYNTHÈSE

### Fiches lues
- `#1324` / `#1328` : qualification `hors_perimetre_lettre|poste`.
- `#1326` : `assertMarcheEligibleCreation` bloquait encore
  `qualification_motif` + `poste_fiable` ; `resoudrePoste…` filtrait
  `applicable_marche=true` — **contradictoire** avec le constat Robin
  (« appliqué nulle part » dans la modale ERP classique).
- `#1334` : HEAD `13271178` — non défait.

### OBJET 1 — Motifs
Avant → après :
- `Hors périmètre (lettre SIWI)` → `Proposition hors périmètre marché (lettre X) — poste prévu pour un suivi budgétaire ; création d’un marché possible si vous la jugez justifiée.`
- `Hors périmètre (poste non applicable)` → `Proposition hors périmètre marché ({code}) — poste prévu pour un suivi budgétaire plutôt qu’un marché ; création possible si vous la jugez justifiée.`
- G10 → motif anomalie M=0 B=0 (signalé, non corrigé).
- `poste_methode` : `hors perimetre — {code} applicable_marche=0` → `recommande budget — {code} (M=0)` (G10 : `G10 anomalie M=0 B=0 — creation possible`).

### OBJET 2 — Actionnable
- Groupe reste replié par défaut ; hint explicatif.
- Levée des blocages création (`qualification_motif` / `poste_fiable` /
  filtre `applicable_marche` à la résolution de poste).
- `loadPostesTypes` : **tous** les postes (plus seulement M=1) ; fallback
  toute nomenclature si lettre sans poste.

### OBJET 3 — Avancement
Inchangé : pré-qualification SOURCE conservée ; pas de bascule vers
« à trancher ».

### OBJET 4 — CDC / dette (consigné ici)
- **D5 CDC v2** : « le formulaire de création les refuse » est **FAUX**.
  La qualification hors périmètre = choix métier / recommandation, pas
  contrainte technique ERP.
- **D4 CDC v2** : les 38 « Avocat HT » sont **créables**.
- **DETTE documentée puis corrigée dans ce lot côté reprise SIWI** :
  `applicable_marche` **était** filtré dans `SiwiRepriseActionService` et
  `loadPostesTypes` — retiré. Il reste lu à l’import pour **proposer** le
  motif `hors_perimetre_poste` uniquement. Aucun garde-fou ajouté sur la
  modale marché ERP générique (hors périmètre de ce lot).
- **Anomalies signalées (non corrigées)** : `G10` M=0 B=0 ; `G11` M=1 B=1
  (seul double applicable).

### Vérification écran
**NON faite** (pas de session M365 / création marché TEST prod). Lot
**non validé écran**.

## DÉPLOIEMENT-TEST

```bash
git pull origin main
php artisan optimize:clear && php artisan view:clear
php artisan journal:sync
# optionnel : siwi:import --apply pour rafraîchir poste_methode / motifs SOURCE
```

Pas de migrate.

## LEÇON

Un drapeau nomenclature non branché sur la modale ERP peut quand même
bloquer un autre chemin (reprise SIWI). Auditer **tous** les
`where('applicable_marche'` avant d’affirmer « nulle part ».
