---
suivi: 1843
date: 2026-10-09
sujet: Lecture des pièces jointes par identifiant Sage
chantier: factures-electroniques
type: correctif
statut: poussé
hash: 6a7db8f5c
fichiers:
  - app/Services/Intacct/SupdocPiecesLecture.php
  - app/Services/Intacct/ApbillInspectionService.php
  - resources/js/Pages/Admin/Intacct/InspectionBills.vue
  - tests/Unit/Intacct/InspectionPieces1843Test.php
  - tests/Unit/Intacct/InspectionPieces1841Test.php
  - tests/Unit/Intacct/IntacctLectureSeuleTest.php
  - public/build/manifest.json
  - public/build/assets/InspectionBills-DZH94V8E.js
  - public/build/assets/app-D6bH8r4P.js
  - docs/suivi/SUIVI_1843_get_supdoc_identifiant.md
---

# SUIVI #1843 — get object=supdoc par identifiant

Fiches lues avant le code : #1841 (deux voies, `read` SUPDOC puis `get` imbriqué ; leçon à corriger) et #1836 (lecture seule, droit `GS_DSI` via `m365GroupNames()`, aucun octet dans le JSON). La documentation XML Gateway « Get Attachment by ID (Legacy) » ne cite que `<get object="supdoc" key="…"/>`. Elle ne cite pas `read` sur l'objet SUPDOC. La voie numérique est retirée. Pas d'entrée de journal : écran réservé à la DSI.

## PROMPT ENVOYÉ

Correctif de #1841 après le test prod E-04 / 2660507 (SUPDOCID ATDOC_854648545, SUPDOCKEY 2631500). La clé numérique répond « Object definition SUPDOC not found ». L'identifiant répond « attribute object is required ». Envoyer exactement `<get object="supdoc" key="{SUPDOCID}"/>` dans la session de l'entité. Décoder les pièces en mémoire. Si `attachmentdata` est absent, l'afficher. Le garde-fou accepte ce `get` et refuse toujours create, update, delete et reverse.

## SYNTHÈSE

La fonction envoyée, dans la session ouverte pour l'entité (`locationid` E-04 via `getAPISession`), est :

```xml
<function controlid="insp_supdoc_get_ATDOC_854648545_…">
<get object="supdoc" key="ATDOC_854648545"/>
</function>
```

L'enveloppe porte le sessionid de cette session. Les mots de passe et le sessionid ne sont pas recopiés ici.

La réponse est lue en mémoire : `attachmentname`, `attachmenttype`, `attachmentdata` en base64, décodé sans écriture disque. Si une pièce est listée sans `attachmentdata`, l'écran affiche son nom, son type et « pièce listée, contenu non renvoyé ». Le téléchargement n'est pas proposé.

### Mapping

| Affiché | Valeur postée | Champ | Lecture |
|---|---|---|---|
| lue par identifiant | — | pieces_voie=get_supdoc | `<get object="supdoc" key="SUPDOCID"/>` |
| pièce listée, contenu non renvoyé | — | avertissement | nom et type, sans octets |
| Paiement 59 | — | mode_paiement | prélèvement SEPA |
| SIREN acheteur | — | siren_acheteur | schemeID 0002 |

## DÉPLOIEMENT-TEST

```
git pull origin main
php artisan optimize:clear
php artisan view:clear
```

Pas de migration. Pas de `journal:sync`. Pas de build sur le serveur.

Compte `GS_DSI`, entité E-04, RECORDNO 2660507. Les pièces de ATDOC_854648545 s'affichent, ou le message « pièce listée, contenu non renvoyé » si Sage ne renvoie pas le contenu.

## LEÇON

`read` sur SUPDOC n'existe pas dans la passerelle XML : l'objet n'a pas de définition. La clé texte SUPDOCID passe par `<get object="supdoc" key="…"/>`, attribut `object` obligatoire. SUPDOCKEY ne sert pas à cette lecture. `<get>` reste une lecture : le garde-fou refuse create, update, delete et reverse avant d'accepter get. Une pièce sans `attachmentdata` est listée, elle n'est pas un fichier vide téléchargeable. Aucun fichier n'est écrit.
