# Reconnect Pro

Runbooks opérationnels concernant Reconnect Pro.

# RP - Déploiement en pré-production

**Runbook, Mai 2025. Workflow de déploiement en pré-production, de la PR validée jusqu'à l'exécution du script Deployer.**

<p class="callout warning"><span style="white-space: pre-wrap;">Certaines étapes de ce workflow sont </span>****temporaires****<span style="white-space: pre-wrap;"> et seront remplacées par un déclenchement à distance via </span>****workflow\_dispatch GitHub Actions****<span style="white-space: pre-wrap;"> (prévu dans un prochain sprint tech).</span></p>

---

#### <span style="white-space: pre-wrap;">Étape 1 - Merger la PR vers </span>`<span class="editor-theme-code">dev</span>`

<span style="white-space: pre-wrap;">Une fois la PR approuvée par les pairs, effectuer le merge dans </span>`<span class="editor-theme-code">dev</span>`<span style="white-space: pre-wrap;"> via GitHub.</span>

---

#### Étape 2 - Prévenir l'équipe sur Slack

<span style="white-space: pre-wrap;">Envoyer un message dans le salon </span>****\#équipe\_technico\_santé****<span style="white-space: pre-wrap;"> pour signaler le déploiement imminent :</span>

> ![:fusée:](https://a.slack-edge.com/production-standard-emoji-assets/15.0/apple-medium/1f680.png)<span style="white-space: pre-wrap;"> Déploiement de RP en PP en cours ...</span>

---

#### Étape 3 - Mettre à jour l'environnement local

<span style="white-space: pre-wrap;">Basculer sur la branche </span>`<span class="editor-theme-code">dev</span>`, la mettre à jour et synchroniser les dépendances :

```
git checkout dev
git pull
composer install
symfony console cache:clear
```

---

#### <span style="white-space: pre-wrap;">Étape 4 - Modifier temporairement </span>`<span class="editor-theme-code">deploy.php</span>`<span style="white-space: pre-wrap;"> </span>**(temporaire, uniquement pour Reconnect Pro)**

<p class="callout danger">****Ne pas committer cette modification.****<span style="white-space: pre-wrap;"> Cette étape est vouée à disparaître avec l'arrivée du workflow\_dispatch.</span></p>

<span style="white-space: pre-wrap;">Dans </span>`<span class="editor-theme-code">deploy.php</span>`<span style="white-space: pre-wrap;"> à la racine du projet, localiser la tâche </span>`<span class="editor-theme-code">deploy:restart_workers</span>`<span style="white-space: pre-wrap;"> et adapter les lignes commentées pour cibler la pré-production :</span>

- ****Commenter****<span style="white-space: pre-wrap;"> la ligne </span>`<span class="editor-theme-code">sudo systemctl restart messenger_worker@*.service</span>`
- ****Décommenter****<span style="white-space: pre-wrap;"> les 3 lignes suivantes :</span>
    - `<span class="editor-theme-code">sudo systemctl restart messenger_worker_async@*.service</span>`
    - `<span class="editor-theme-code">sudo systemctl restart messenger_worker_dmp@*.service</span>`
    - `<span class="editor-theme-code">sudo systemctl restart messenger_worker_export@*.service</span>`

<details id="bkmrk-deploy-restart-workers"><summary>****Voir l'état attendu du bloc dans deploy.php****</summary>

  
task('deploy:restart\_workers', function () {  
// run('sudo systemctl restart messenger\_worker@\*.service');  
<span style="white-space: pre-wrap;"> run('sudo systemctl restart messenger\_worker\_async@\*.service');</span>  
<span style="white-space: pre-wrap;"> run('sudo systemctl restart messenger\_worker\_dmp@\*.service');</span>  
<span style="white-space: pre-wrap;"> run('sudo systemctl restart messenger\_worker\_export@\*.service');</span>  
});

</details>---

#### Étape 5 - Lancer le déploiement

Exécuter le script de déploiement via :

```
make deploy-preprod
```

---

#### <span style="white-space: pre-wrap;">Étape 6 - Valider le déploiement et rétablir </span>`<span class="editor-theme-code">deploy.php</span>`

<span style="white-space: pre-wrap;">Poster un message de confirmation dans le salon </span>****\#équipe\_technico\_santé****<span style="white-space: pre-wrap;"> :</span>

> ![]()<span style="white-space: pre-wrap;">Déploiement de RP en PP </span>![:fusée:](https://a.slack-edge.com/production-standard-emoji-assets/15.0/apple-medium/1f680.png)

<span style="white-space: pre-wrap;">Puis </span>****rétablir**** <span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">deploy.php</span>`<span style="white-space: pre-wrap;"> dans son état d'origine :</span>

- ****Décommenter****<span style="white-space: pre-wrap;"> la ligne </span>`<span class="editor-theme-code">sudo systemctl restart messenger_worker@*.service</span>`
- ****Commenter****<span style="white-space: pre-wrap;"> les 3 lignes pré-production :</span>
    - `<span class="editor-theme-code">sudo systemctl restart messenger_worker_async@*.service</span>`
    - `<span class="editor-theme-code">sudo systemctl restart messenger_worker_dmp@*.service</span>`
    - `<span class="editor-theme-code">sudo systemctl restart messenger_worker_export@*.service</span>`

<p class="callout danger">****Ne pas committer cette modification.****<span style="white-space: pre-wrap;"> Le fichier doit rester dans son état production pour tout déploiement ultérieur.</span></p>

<details id="bkmrk-deploy-restore-prod"><summary>****Voir l'état attendu du bloc rétabli****</summary>

  
task('deploy:restart\_workers', function () {  
<span style="white-space: pre-wrap;"> run('sudo systemctl restart messenger\_worker@\*.service');</span>  
// run('sudo systemctl restart messenger\_worker\_async@\*.service');  
// run('sudo systemctl restart messenger\_worker\_dmp@\*.service');  
// run('sudo systemctl restart messenger\_worker\_export@\*.service');  
});

</details>

# RP - Correction des vulnérabilités

**Runbook, Mai 2026. Workflow de correction des vulnérabilités de dépendances détectées par Dependabot.**

## Contexte

<span style="white-space: pre-wrap;">Les vulnérabilités sont détectées automatiquement par </span>****Dependabot****<span style="white-space: pre-wrap;"> et remontent chaque matin sur Slack. Ce document décrit la procédure complète de triage et correction, de l'alerte au merge.</span>

<p class="callout info"><span style="white-space: pre-wrap;">Dependabot est configuré en </span>****alerts only,****<span style="white-space: pre-wrap;"> il ne crée pas de Pull Requests automatiques. Les corrections sont appliquées manuellement selon ce workflow.</span></p>

---

### Convention de nommage

#### Branche Git

```
Format : security/<package>-patch-dep<N>-<N>

Exemples :
  security/phpspreadsheet-patch-dep5-9
  security/axios-patch-dep10-22
```

---

#### <span style="white-space: pre-wrap;">Trello - Ticket de suivi </span>

---

---

****Etiquette****: &lt;projet&gt;(RP) &lt;prioritaire&gt; &lt;sécurité&gt; et potentiellement &lt;Non testable PO&gt;.

****Titre****<span style="white-space: pre-wrap;"> : </span>

```
Format : Sécurité - Patch <package> <v.actuelle> → <v.cible> (dep N-N)

Exemples: 
  Securité - Patch phpspreadsheet 3.10.0 → 3.10.5 (dep #5-9) [1]
  Securité - Patch axios 1.15.0 to 1.16.0 (dep 10-22) [1]
```

****Description****<span style="white-space: pre-wrap;"> : liens vers les alertes de sécurité Dependabot</span>

```
Exemple:

Fixes Dependabot alerts 19-22

19 - https://github.com/re-connect/pro/security/dependabot/19
20 - https://github.com/re-connect/pro/security/dependabot/20
21 - https://github.com/re-connect/pro/security/dependabot/21
22 - https://github.com/re-connect/pro/security/dependabot/22
```

Et bien sur, powers-up git pour les branches et les PRs.

---

#### Pull Request

<span style="white-space: pre-wrap;">Toujours 2 PRs, une vers </span>`<span class="editor-theme-code">main</span>`<span style="white-space: pre-wrap;"> et une vers </span>`<span class="editor-theme-code">dev</span>`<span style="white-space: pre-wrap;"> et attribuer au PRs le label &lt;security&gt; pour une meilleur lisibilité.</span>

****Titre :****

```
Format: security(deps-<écosystème>): upgrade <package> <v.actuelle> to <v.cible>

Exemples: 
  security(deps-composer): upgrade phpspreadsheet 3.10.0 to 3.10.5
  security(deps-yarn): upgrade axios 1.15.0 to 1.16.0
```

****Description****<span style="white-space: pre-wrap;"> :</span>

```
Exemple:

Fixes Dependabot alerts 10-22
  22 - https://github.com/re-connect/pro/security/dependabot/22
  21 - https://github.com/re-connect/pro/security/dependabot/21
  20 - https://github.com/re-connect/pro/security/dependabot/20
  19 - https://github.com/re-connect/pro/security/dependabot/19
  18 - https://github.com/re-connect/pro/security/dependabot/18
  17 - https://github.com/re-connect/pro/security/dependabot/17
  16 - https://github.com/re-connect/pro/security/dependabot/16
  15 - https://github.com/re-connect/pro/security/dependabot/15 
  14 - https://github.com/re-connect/pro/security/dependabot/14
  13 - https://github.com/re-connect/pro/security/dependabot/13
  12 - https://github.com/re-connect/pro/security/dependabot/12
  11 - https://github.com/re-connect/pro/security/dependabot/11
  10 - https://github.com/re-connect/pro/security/dependabot/10

  Preview:
```

[![Capture d’écran 2026-05-07 à 13.26.49.png](https://ambroise.reconnect.fr/uploads/images/gallery/2026-05/scaled-1680-/capture-decran-2026-05-07-a-13-26-49.png)](https://ambroise.reconnect.fr/uploads/images/gallery/2026-05/scaled-1680-/capture-decran-2026-05-07-a-13-26-49.png)

---

## Procédure de triage

#### 1. Évaluer le saut de version

<table id="bkmrk-sautrisqueactionpatc"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr><th>Saut

</th><th>Risque

</th><th>Action

</th></tr><tr><td><span style="white-space: pre-wrap;">patch </span>`<span class="editor-theme-code">x.y.Z</span>`

</td><td>Nul

</td><td>Update direct, pas de CHANGELOG à lire

</td></tr><tr><td><span style="white-space: pre-wrap;">minor </span>`<span class="editor-theme-code">x.Y.z</span>`

</td><td>Faible

</td><td>Lire le CHANGELOG, vérifier les releases notes

</td></tr><tr><td><span style="white-space: pre-wrap;">major </span>`<span class="editor-theme-code">X.y.z</span>`

</td><td>Élevé

</td><td>Lire le CHANGELOG, chercher une migration guide

</td></tr></tbody></table>

#### 2. Grouper les alertes

- <span style="white-space: pre-wrap;">Même package + même écosystème → </span>****un seul batch****
- <span style="white-space: pre-wrap;">Écosystèmes différents (npm / composer) → </span>****branches séparées****
- <span style="white-space: pre-wrap;">Breaking change dans le batch → </span>****commit séparé****<span style="white-space: pre-wrap;"> dans la même branche</span>

---

## Procédure de correction

### Composer

<details id="bkmrk-proc-composer"><summary>****Voir la procédure Composer****</summary>

  
1\. Vérifier la version installée :

`<span class="editor-theme-code">composer show phpoffice/phpspreadsheet | grep versions</span>`

<span style="white-space: pre-wrap;">2. S'assurer que </span>`<span class="editor-theme-code">composer.json</span>`<span style="white-space: pre-wrap;"> utilise </span>`<span class="editor-theme-code">^</span>`<span style="white-space: pre-wrap;"> et non une version exacte :</span>

`<span class="editor-theme-code">"phpoffice/phpspreadsheet": "^3.10"</span>`

3\. Mettre à jour le package :

`<span class="editor-theme-code">composer update phpoffice/phpspreadsheet</span>`

4\. Valider :

`<span class="editor-theme-code">composer validate</span>`

`<span class="editor-theme-code">composer audit</span>`

5\. Commiter :

`<span class="editor-theme-code">git add composer.json composer.lock</span>`

`<span class="editor-theme-code">git commit -m "🔒 security(deps-composer): upgrade <package> <v.actuelle> to <v.cible>"</span>`

</details>### npm / Yarn

<details id="bkmrk-proc-yarn"><summary>****Voir la procédure Yarn****</summary>

  
1\. Vérifier la version installée :

`<span class="editor-theme-code">yarn list axios</span>`

2\. Mettre à jour le package :

`<span class="editor-theme-code">yarn upgrade axios</span>`

3\. Valider :

`<span class="editor-theme-code">yarn audit</span>`

4\. Commiter :

`<span class="editor-theme-code">git add yarn.lock</span>`

`<span class="editor-theme-code">git commit -m "🔒 security(deps-npm): upgrade <package> <v.actuelle> to <v.cible>"</span>`

</details><p class="callout warning"><span style="white-space: pre-wrap;">Si </span>`<span class="editor-theme-code">yarn upgrade</span>`<span style="white-space: pre-wrap;"> monte en minor au lieu du patch indiqué par Dependabot, vérifier que la minor n'introduit pas de breaking change avant de commiter.</span></p>

---

## Checklist avant merge

- CI verte
- `<span class="editor-theme-code">composer audit</span>`<span style="white-space: pre-wrap;"> ou </span>`<span class="editor-theme-code">yarn audit</span>`<span style="white-space: pre-wrap;"> sans alerte bloquante</span>
- <span style="white-space: pre-wrap;">2 PRs ouvertes, </span>`<span class="editor-theme-code">main</span>`<span style="white-space: pre-wrap;"> + </span>`<span class="editor-theme-code">dev</span>`
- Alertes Dependabot fermées après merge

# RP - Migration des dossiers usagers

**Runbook, Juin 2025. Workflow complet de traitement des tickets de migration de dossiers usagers sur Reconnect Pro.**

<p class="callout info"><span style="white-space: pre-wrap;">Cette procédure s'applique à chaque ticket Trello de type </span>****« Migration des dossiers usagers »****. Suivre les étapes dans l'ordre.</p>

---

### La commande

La commande Symfony utilisée pour migrer les dossiers est :

`<span class="editor-theme-code">php bin/console app:migrate-individuals-to-other-organization -o {ORIGINE_ID} -d {DESTINATION_ID} -f {CHAMP_MIGRATION} -t "{VALEUR_CIBLE}"</span>`

#### Options disponibles

<table id="bkmrk-optionnom-longdescri"><colgroup><col></col><col></col><col></col><col></col></colgroup><tbody><tr><th>Option

</th><th>Nom long

</th><th>Description

</th><th>Exemple

</th></tr><tr><td>`<span class="editor-theme-code">-o</span>`

</td><td>`<span class="editor-theme-code">--originOrganization</span>`

</td><td>ID du centre d'origine (celui qui perd des suivis)

</td><td>`<span class="editor-theme-code">-o 4537</span>`

</td></tr><tr><td>`<span class="editor-theme-code">-d</span>`

</td><td>`<span class="editor-theme-code">--destinationOrganization</span>`

</td><td>ID du centre de destination (celui qui reçoit les suivis)

</td><td>`<span class="editor-theme-code">-d 5644</span>`

</td></tr><tr><td>`<span class="editor-theme-code">-f</span>`

</td><td>`<span class="editor-theme-code">--targetFieldSlug</span>`

</td><td>Slug du champ personnalisé utilisé comme critère de migration

</td><td>`<span class="editor-theme-code">-f migration-des-donnees</span>`

</td></tr><tr><td>`<span class="editor-theme-code">-t</span>`

</td><td>`<span class="editor-theme-code">--targetFieldValue</span>`

</td><td>Valeur du champ qui déclenche la migration (doit correspondre exactement à la valeur saisie dans le dossier)

</td><td>`<span class="editor-theme-code">-t "CHU 77"</span>`

</td></tr><tr><td>`<span class="editor-theme-code">--noField</span>`

</td><td>-

</td><td><span style="white-space: pre-wrap;">Migrer </span>

**tous**

<span style="white-space: pre-wrap;"> les individus du centre d'origine, sans condition sur un champ. Incompatible avec </span>

`<span class="editor-theme-code">-f</span>`

<span style="white-space: pre-wrap;"> / </span>

`<span class="editor-theme-code">-t</span>`

.

</td><td>`<span class="editor-theme-code">--noField</span>`

</td></tr><tr><td>`<span class="editor-theme-code">--withDeleted</span>`

</td><td>-

</td><td>Inclure les individus supprimés (soft-deleted) dans la migration

</td><td>`<span class="editor-theme-code">--withDeleted</span>`

</td></tr><tr><td>`<span class="editor-theme-code">--withAccommodations</span>`

</td><td>-

</td><td>Migrer également les hébergements liés aux individus migrés. Voir section dédiée ci-dessous.

</td><td>`<span class="editor-theme-code">--withAccommodations</span>`

</td></tr><tr><td>`<span class="editor-theme-code">--dry-run</span>`

</td><td>-

</td><td><span style="white-space: pre-wrap;">Mode simulation : aucune donnée modifiée. </span>

****Toujours lancer en premier.****

</td><td>`<span class="editor-theme-code">--dry-run</span>`

</td></tr></tbody></table>

<p class="callout warning">****Logique de ciblage :****<span style="white-space: pre-wrap;"> seuls les dossiers du centre d'origine dont le champ </span>`<span class="editor-theme-code">-f</span>`<span style="white-space: pre-wrap;"> contient exactement la valeur </span>`<span class="editor-theme-code">-t</span>`<span style="white-space: pre-wrap;"> sont migrés. Les dossiers avec le champ vide restent dans le centre initial. La valeur est recherchée d'abord sur le membre principal du foyer, puis sur les autres membres si non trouvée.</span></p>

---

### Migration avec hébergements (`<span class="editor-theme-code">--withAccommodations</span>`)

<span style="white-space: pre-wrap;">Lorsque l'option </span>`<span class="editor-theme-code">--withAccommodations</span>`<span style="white-space: pre-wrap;"> est activée, la commande migre également les hébergements (</span>`<span class="editor-theme-code">Accommodation</span>`) liés aux individus migrés : l'hébergement est réaffecté au centre de destination.

<p class="callout danger">****Cas problématique - hébergement partagé :****<span style="white-space: pre-wrap;"> si un hébergement contient à la fois des individus migrés et des individus </span>**non**<span style="white-space: pre-wrap;"> migrés (restant dans le centre d'origine), la commande le détecte et affiche un tableau d'alerte en dry-run. Ce cas nécessite une décision manuelle avant de lancer la migration réelle.</span></p>

### Output dry-run avec hébergements

Le dry-run affiche, en plus du tableau des suivis, un récapitulatif des hébergements :

- Le nombre total d'hébergements qui seraient migrés
- Si des hébergements problématiques existent : un tableau listant pour chaque hébergement les individus migrés et les individus non migrés encore rattachés

Exemple de sortie en cas de problème :

Hébergements à migrer: 3  
  
Problème: Hébergements avec individus non migrés rattachés  
  
<span style="white-space: pre-wrap;"> ------------ ---------------- ---------------------- ----------------- </span>  
<span style="white-space: pre-wrap;"> Centre ID Hébergement ID Individus non migrés Individus migrés </span>  
<span style="white-space: pre-wrap;"> ------------ ---------------- ---------------------- ----------------- </span>  
<span style="white-space: pre-wrap;"> 4537 892 1042, 1078 1035 </span>  
<span style="white-space: pre-wrap;"> ------------ ---------------- ---------------------- ----------------- </span>

<p class="callout warning"><span style="white-space: pre-wrap;">En présence d'hébergements problématiques, </span>****ne pas lancer la migration réelle****<span style="white-space: pre-wrap;"> sans avoir tranché : soit on accepte de migrer l'hébergement (les individus non migrés se retrouveront sans hébergement dans le centre d'origine), soit on exclut </span>`<span class="editor-theme-code">--withAccommodations</span>`<span style="white-space: pre-wrap;"> et on traite les hébergements manuellement.</span></p>

### <span style="white-space: pre-wrap;">Comportement sans </span>`<span class="editor-theme-code">--withAccommodations</span>`

<span style="white-space: pre-wrap;">Par défaut (sans l'option), les individus migrés sont </span>****décrochés de leur hébergement****<span style="white-space: pre-wrap;"> avant migration, leur spot d'hébergement est réinitialisé. L'hébergement lui-même reste dans le centre d'origine.</span>

---

### ****Procédure****<span style="white-space: pre-wrap;"> </span>  
  
Étape 1 - Lire le ticket et construire les commandes

Le ticket Trello contient la liste des centres d'origine et leurs règles de migration. Pour chaque règle, construire une commande dédiée.

#### Exemple de lecture d'un ticket

<span style="white-space: pre-wrap;">Ticket : </span>**« Centre initial = France Fraternités - CHU 75 (ID 4537) - lorsque le champ = CHU 77 → vers France Fraternités - CHU 77 (ID 5644) »**

→ Commande correspondante (sans hébergements) :

`<span class="editor-theme-code">php bin/console app:migrate-individuals-to-other-organization -o 4537 -d 5644 -f migration-des-donnees -t "CHU 77"</span>`

→ Commande correspondante (avec hébergements) :

`<span class="editor-theme-code">php bin/console app:migrate-individuals-to-other-organization -o 4537 -d 5644 -f migration-des-donnees -t "CHU 77" --withAccommodations</span>`

<p class="callout danger">****Cas de croisement :****<span style="white-space: pre-wrap;"> si deux centres d'origine s'échangent des suivis (ex : CHU 75 → CPH </span>**et**<span style="white-space: pre-wrap;"> CPH → CHU 75), traiter les deux groupes </span>****séparément et séquentiellement,****<span style="white-space: pre-wrap;"> terminer et vérifier le premier groupe avant de lancer le second. Ne jamais les lancer en parallèle.</span></p>

### Étape 2 - Lancer les simulations (dry-run)

<span style="white-space: pre-wrap;">Avant toute migration réelle, lancer </span>****toutes les commandes en mode** `<strong class="editor-theme-bold editor-theme-code">--dry-run</strong>`**<span style="white-space: pre-wrap;"> sur la preprod pour vérifier les volumes. Ajouter </span>`<span class="editor-theme-code">--withAccommodations</span>`<span style="white-space: pre-wrap;"> si le ticket concerne aussi les hébergements.</span>

Exemple :

`<span class="editor-theme-code">php bin/console app:migrate-individuals-to-other-organization -o 4537 -d 5644 -f migration-des-donnees -t "CHU 77" --dry-run</span>`

La commande affiche un tableau récapitulatif des suivis :

<table id="bkmrk-r%C3%B4lecentre-idcentre-"><colgroup><col></col><col></col><col></col><col></col><col></col></colgroup><tbody><tr><th>Rôle

</th><th>Centre ID

</th><th>Centre Nom

</th><th>Nb. suivis

</th><th>Après migration

</th></tr><tr><td>Origine

</td><td>4537

</td><td>France Fraternités - CHU 75

</td><td>160

</td><td>119 (- 41 migrés)

</td></tr><tr><td>Destination

</td><td>5644

</td><td>France Fraternités - CHU 77

</td><td>0

</td><td>41 (+ 41 entrants)

</td></tr></tbody></table>

<span style="white-space: pre-wrap;">Si </span>`<span class="editor-theme-code">--withAccommodations</span>`<span style="white-space: pre-wrap;"> est passé, un second bloc s'affiche avec le nombre d'hébergements impactés et les éventuels conflits. </span>****Résoudre tous les conflits d'hébergement avant de continuer.****

Répéter pour chaque commande du ticket. Copier tous les outputs console.

### Étape 3 - Synthèse et validation PO

Une fois toutes les simulations effectuées (et les éventuels conflits d'hébergement résolus), transmettre les résultats au PO pour validation avant migration réelle. Deux formats possibles :

<details id="bkmrk-synthese-slack"><summary>****Option A — Message Slack directe au PO****</summary>

  
Rédiger un message structuré avec les volumes par migration.  
  
Centre d'origine : France Fraternités - CHU 75 (ID 4537) - 160 suivis au total  
  
→ vers CHU 77 (ID 5644) : 41 migrés | reste 119  
→ vers CPH (ID 4960) : 10 migrés | reste 150  
→ vers DAHAR (ID 5634) : 19 migrés | reste 141  
→ vers TEH (ID 5645) : 7 migrés | reste 153  
  
Centre d'origine : France Fraternités - CPH (ID 4960) - 180 suivis au total  
  
→ vers CHU 75 (ID 4537) : 21 migrés | reste 159  
→ vers CHU 77 (ID 5644) : 37 migrés | reste 143  
→ vers DAHAR (ID 5634) : 35 migrés | reste 145  
→ vers TEH (ID 5645) : 17 migrés | reste 163  
  
Hébergements : \[X hébergements migrés — aucun conflit détecté / ou décrire les conflits et la décision prise\]

</details><details id="bkmrk-synthese-excel"><summary>****Option B - Excel de simulation****</summary>

  
<span style="white-space: pre-wrap;">Générer le fichier Excel de simulation nommé </span>`<span class="editor-theme-code">simulation_migration_{NOM_CENTRE}.xlsx</span>`<span style="white-space: pre-wrap;"> et contient un tableau par centre d'origine avec décompte progressif.</span>

Déposer le fichier dans le Drive à l'emplacement :

****Z-NEW RECONNECT &gt; 4- Technique &gt; Reconnect Pro &gt; Migration des dossiers usagers****

Partager le lien Drive sur le ticket Trello et ping PO.

</details>### Étape 4 - Mise à jour du ticket Trello

<span style="white-space: pre-wrap;">Une fois la validation PO reçue, coller dans le ticket Trello les commandes finales à exécuter </span>****sans****<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">--dry-run</span>`<span style="white-space: pre-wrap;"> pour la preprod et la prod.</span>

Format à utiliser dans le ticket :  
  
Centre initial = \[Nom centre\] (ID XXXX)  
  
Commande 1 :  
php bin/console app:migrate-individuals-to-other-organization -o XXXX -d YYYY -f migration-des-donnees -t "VALEUR"  
  
Commande 2 :  
...

<p class="callout warning"><span style="white-space: pre-wrap;">Toujours exécuter et vérifier sur la </span>****preprod en premier****, puis reproduire sur la prod. Ne jamais lancer directement en prod sans validation preprod.</p>

<p class="callout danger">En cas de croisement entre deux centres, respecter l'ordre défini dans le ticket et attendre la fin du premier groupe avant de lancer le second, même en prod.</p>