---
suivi: 1858
date: 2026-10-12
sujet: Relève monprojet depuis le site
chantier: monprojet
type: évolution
statut: poussé
hash: d708c4faa
fichiers:
  - app/Http/Middleware/DeclencheMonprojetReleve.php
  - app/Services/Monprojet/MonprojetReleveService.php
  - app/Console/Commands/MonprojetReleverCommand.php
  - app/Http/Controllers/MonprojetFicheController.php
  - app/Services/GraphApiService.php
  - bootstrap/app.php
  - routes/console.php
  - database/migrations/2026_10_12_183000_create_monprojet_releves.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - resources/js/Pages/Monprojet/Index.vue
  - ops/cron/monprojet_purger.php
  - docs/suivi/SUIVI_1809_monprojet_reception_fiches.md
  - docs/suivi/SUIVI_1814_monprojet_tableau_de_bord_purge.md
  - tests/Unit/MonprojetReleveWeb1858Test.php
  - public/build/manifest.json
  - public/build/assets/Index-tqfU2Gxs2.js
  - public/build/assets/app-DnQXh0gM.js
---

# SUIVI #1858 — relève monprojet depuis le site

## PROMPT ENVOYÉ

La ligne de commande OVH ne joint pas Microsoft. La relève de la boîte monprojet doit partir du site, sur le modèle du déclencheur des factures électroniques : premier GET authentifié de chaque heure, exécution après la réponse, un seul passage par créneau, verrou commun avec Synchroniser, budget 60 s, connexion base libérée avant chaque appel Microsoft. La commande reste et refuse le CLI. L’écran affiche la dernière relève.

## Fiches lues

- #1845 LEÇON : `DB::disconnect` avant l’appel réseau, reconnexion après. Le déclencheur réserve le créneau dans `handle` et travaille dans `terminate`. Ce lot ne modifie pas ce déclencheur.
- #1809 LEÇON : ne pas passer par le dépôt SIWI, ne pas y ajouter d’exception. La signature et la quarantaine restent le pipeline existant.
- #1814 LEÇON : la purge quotidienne garde son lanceur. Le lanceur de relève n’est plus une référence.

## SYNTHÈSE

Le premier GET authentifié de l’heure (Europe/Paris) réserve le créneau. Après la réponse, la relève lit la boîte, au plus 60 s. Un second GET de la même heure ne relance rien. Synchroniser maintenant utilise le même verrou : pendant une relève, il n’y a pas de second passage.

`php artisan monprojet:relever` en CLI s’arrête avec « Microsoft n'est pas joignable en ligne de commande sur cet hébergement : la relève part du site ». Aucun appel Microsoft. Plus de tâche planifiée pour cette commande. Le fichier `monprojet_relever.php`, s’il est encore sur le serveur, est obsolète : ne pas le planifier. Il n’est pas dans le dépôt. La purge quotidienne ne change pas.

Sur Projets prospects, à côté de Synchroniser : « Dernière relève : {date heure} — {n} message(s) », que le passage ait réussi ou échoué.

La future relève de comptabilite@hectare.fr (#1851) suit la même règle : pas de cron, déclenchement depuis le site.

## Mapping

| Libellé | Valeur | Règle |
|---|---|---|
| Dernière relève : date heure — n message(s) | dernière ligne affichable | date et heure Europe/Paris, n = messages lus, succès ou erreur |
| Synchroniser maintenant | POST /monprojet/synchroniser | même verrou que la relève horaire |
| Créneau horaire | date + heure | une réservation, puis plus rien jusqu’à l’heure suivante |

## DÉPLOIEMENT-TEST

Migration `monprojet_releves`. `down` supprime la table.

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

Pas de tâche OVH pour la relève. Ne pas lancer `php artisan monprojet:relever` sur le serveur.

## LEÇON

Microsoft (login.microsoftonline.com, donc le jeton d’application) n’est pas joignable en CLI sur cet hébergement. Toute relève de boîte part du site, après la réponse, avec la base libérée avant l’appel. #1851 (comptabilite@hectare.fr) : pas de cron.
