---
suivi: 1845
date: 2026-10-09
sujet: Import des factures électroniques dans le dépôt
chantier: factures-electroniques
type: évolution
statut: poussé
hash: 2fa049b61
fichiers:
  - app/Services/FactureElectronique/FactureElectroniqueImport.php
  - app/Services/FactureElectronique/FactureElectroniqueSage.php
  - app/Services/FactureElectronique/FactureElectroniqueSource.php
  - app/Services/FactureElectronique/FactureElectroniqueAcces.php
  - app/Services/FactureElectronique/ConnexionBase.php
  - app/Services/FactureElectronique/Horloge.php
  - app/Http/Controllers/FactureElectroniqueController.php
  - app/Http/Middleware/DeclencheFactureElectronique.php
  - app/Http/Controllers/DepotFactureController.php
  - app/Http/Controllers/ComptabilisationController.php
  - app/Models/DepotFacture.php
  - database/migrations/2026_10_09_191000_factures_electroniques_depot.php
  - resources/js/Pages/DepotFactures/Index.vue
  - resources/js/Pages/DepotFactures/DepotFactureSaisieForm.vue
  - resources/js/Pages/FacturesElectroniques/Imports.vue
  - tests/Feature/FactureElectronique/FactureElectroniqueImport1845Test.php
  - public/build/manifest.json
  - public/build/assets/DepotFactureSaisieForm-CGwvS_Rj.js
  - public/build/assets/Index-qa63Ge44.js
  - public/build/assets/Imports--kXnQ4oa.js
  - public/build/assets/app-Dl81iA7E.js
  - docs/suivi/SUIVI_1845_import_factures_electroniques.md
---

# SUIVI #1845 — import des factures électroniques

Fiches lues : #1836 (une clé par lecture, une erreur Sage n'arrête pas les autres, `lireXmlSeule`, droit via `m365GroupNames()`), #1841 (`10/08/2026` est le 8 octobre, ne pas lire tous les brouillons d'un coup, `get` pour un SUPDOCID texte), #1843 (`<get object="supdoc" key="…"/>`, une pièce sans contenu n'est pas un fichier vide). Pas de fiche #1833.

## PROMPT ENVOYÉ

Importer dans la boîte de dépôt les brouillons Sage STATE Draft, INVOICETYPE E-Invoice, hors Refused, Disputed et Rejected by the platform. Créneaux 9 h, 13 h, 18 h, plus un bouton Synchroniser. Lots de 20 et budget de 240 s. Lecture seule. Pas d'OCR. Pas de comptabilisation : message « Comptabilisation des factures électroniques : disponible au prochain lot ».

## SYNTHÈSE

Le passage lit les brouillons par entité, récupère le XML et le PDF, crée un dépôt au statut analysé, déposant « Dépôt automatique », origine « Facture électronique ». La clé d'unicité est l'entité Sage et le RECORDNO. `intacct_bill_id` reste vide. Les montants viennent du XML ; sans XML, seul le TTC Sage est repris et les montants sont signalés. HT, TVA et TTC postés ensuite sont ignorés. Un dépôt classique non comptabilisé du même fournisseur et du même numéro est marqué doublon. Si la facture est déjà comptabilisée, le dépôt électronique est créé et bloqué. Chaque passage relit le statut des dépôts électroniques non comptabilisés.

### Champ Sage / XML | Champ Hectarion | Règle

| Champ Sage / XML | Champ Hectarion | Règle |
|---|---|---|
| STATE, INVOICETYPE, EINVOICESTATUS | éligibilité | Draft, E-Invoice, hors Refused, Disputed, Rejected by the platform |
| MEGAENTITYID | entite_id | `entites.intacct_id`, contrôlé avec le SIREN acheteur |
| VENDORID | fournisseur_id | `fournisseurs.intacct_id`, sinon SIRET / SIREN, sinon « fournisseur à identifier » |
| numéro XML | numero_facture | comparé à RECORDID, écart signalé |
| date, échéance, WHENCREATED, WHENDUE | date_facture, échéance | IntacctDate ; AAAAMMJJ converti en mois/jour/année avant |
| HT, TVA, TTC | montant_ht, montant_tva, montant_ttc | XML ; sans XML, TTC = TOTALENTERED |
| PaymentMeansCode 59 | mode de paiement | « Prélèvement SEPA » |
| RECORDNO + entité | intacct_brouillon_recordno, intacct_brouillon_entite | unicité ; distinct de intacct_bill_id |
| pièce XML | chemin_xml | stockée |
| pièce PDF | chemin_stockage | stockée |
| EINVOICESTATUS | einvoice_status | dernier statut lu |

### Bouton / picto / bandeau | Route / valeur | Droit | Effet

| Bouton / picto / bandeau | Route / valeur | Droit | Effet |
|---|---|---|---|
| Synchroniser | POST /depot-factures/factures-electroniques/synchroniser | GS_COMPTABILITE, GS_ADMIN_ERP, groupes bruts | lance un passage, verrou 300 s |
| Imports | GET /depot-factures/factures-electroniques/imports | GS_COMPTABILITE, GS_ADMIN_ERP, GS_DSI | derniers passages et erreurs |
| picto e | facture_electronique | aucun | liste du dépôt et fiche |
| bandeau rouge | signal statut_bloque | aucun | Refused, Disputed ou Rejected |
| bandeau brouillon | signal brouillon_introuvable | aucun | absent ou plus Draft |
| comptabilisation | envoi Sage | comptabilité | refusée, message du lot suivant |

## DÉPLOIEMENT-TEST

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

Aucun appel Sage depuis SSH. Pas de build sur le serveur.

## LEÇON

Sage est en lecture seule : `IntacctLectureSeule` refuse create, update, delete et reverse. `DB::disconnect` avant chaque appel, reconnexion après. 20 brouillons et 240 s par passage, le curseur reprend au suivant. `intacct_brouillon_recordno` n'est pas `intacct_bill_id`. La comptabilisation d'un dépôt électronique est bloquée jusqu'au lot suivant. `cie_effacement_confirme` doit rester dans le bundle DepotFactureSaisieForm. Les dates passent par IntacctDate. Pas d'OCR.
