---
suivi: 1888
date: 2026-10-14
sujet: Demande fournisseur depuis une facture électronique
chantier: factures-electroniques
type: evolution
statut: poussé
hash: cac7d30e5
fichiers:
  - app/Services/FactureElectronique/CorrespondanceFournisseurElectronique.php
  - app/Services/FactureElectronique/FactureElectroniqueRattachement.php
  - app/Services/FactureElectronique/FactureElectroniqueComptabilisation.php
  - app/Services/DemandesFournisseurs/RattachementFactureDecision.php
  - app/Services/DemandesFournisseurs/DemandeFournisseurFactureRattachement.php
  - app/Services/DemandesFournisseurs/FournisseurApresValidation.php
  - app/Notifications/FactureElectroniqueRattachementNonApplique.php
  - app/Http/Controllers/DemandeFournisseurController.php
  - app/Http/Controllers/Admin/DemandeFournisseurAdminController.php
  - app/Http/Controllers/DepotFactureController.php
  - app/Http/Controllers/ComptabilisationController.php
  - app/Models/DemandeFournisseur.php
  - database/migrations/2026_10_14_163000_demandes_fournisseurs_lien_facture_electronique.php
  - resources/js/Components/DemandeFournisseurDialog.vue
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Unit/DemandeFournisseurFactureElectronique1888Test.php
  - tests/Unit/FournisseurMiroirApresValidation1756SourceTest.php
  - public/build/
  - docs/suivi/SUIVI_1888_demande_fournisseur_facture_electronique.md
---

# SUIVI #1888 — demande fournisseur depuis la facture électronique

## PROMPT ENVOYÉ

Sur une facture électronique sans fournisseur valable, la comptable associe une fiche existante ou crée une demande fournisseur préremplie. Rien n’est créé dans Sage sans « Valider et créer dans Intacct ». La validation rattache la facture à la fiche qui porte le code, sans écrasement silencieux. Une demande partie d’une fiche locale sans code complète cette fiche.

## FICHES LUES

- #1756 LEÇON : une seule écriture, `FournisseurMiroir::ecrire`, clé `intacct_id`. Pas de `fournisseur_id` à l’époque : le lien était `intacct_vendor_id`. Relecture en échec : la validation reste réussie.
- #1847 LEÇON : « Créer depuis la facture » créait une fiche locale sans appel Sage. Le formulaire de demande ne reliait pas le dépôt. La comptabilisation restait bloquée sans code Sage.

## SYNTHÈSE

Le bouton « Créer depuis la facture » est remplacé par « Créer la demande fournisseur ». La demande enregistre le dépôt et, si elle part d’une fiche sans code, l’identifiant de cette fiche. À la validation, l’appel Sage reste `IntacctService::creerFournisseur`. Avant `FournisseurMiroir::ecrire`, le code est posé sur cette seule fiche : `updateOrCreate` par `intacct_id` la retrouve ensuite. La synchro complète n’adopte aucune fiche sans code. Si la facture est déjà comptabilisée, payée, ou liée à une autre fiche qui a un code, elle n’est pas modifiée et la demandeuse est notifiée.

### Mapping

| Affiché | Action postée | Effet en base | Libellé relu |
| --- | --- | --- | --- |
| Dans Sage | aucun | `fournisseurs.intacct_id` renseigné | Dans Sage |
| Pas dans Sage | aucun | `intacct_id` vide | Pas dans Sage |
| Associer | POST /depot-factures/{uuid}/associer-fournisseur-electronique | `depot_factures.fournisseur_id` | Fournisseur choisi |
| Créer la demande fournisseur | POST /demandes-fournisseurs | demande, `depot_facture_id`, pas d’appel Sage | Demande envoyée |
| Créer la demande pour ce fournisseur | POST /demandes-fournisseurs | demande, `depot_facture_id` et `fournisseur_id` | Demande envoyée |
| Valider et créer dans Intacct | POST de validation existant | création Sage, fiche complétée ou créée, facture rattachée si les gardes passent | Fournisseur créé dans Sage et disponible dans l’ERP |

## DÉPLOIEMENT-TEST

git pull origin main
php artisan migrate --force
php artisan optimize:clear
php artisan view:clear
php artisan route:clear
php artisan journal:sync

## LEÇON

`FournisseurMiroir::ecrire` ne cherche que par `intacct_id`. Compléter une fiche locale se fait avant cet appel, uniquement si la demande porte `fournisseur_id` et que cette fiche n’a pas déjà un code. Ne pas parcourir les fiches sans code.
