# Migration locale Laravel 13

Upimo est verrouillé sur Laravel 13.39.0 et PHP 8.4.27. Cette migration ne lance pas de migration de base et ne déploie rien. Le sous-module lncshared n'a pas été modifié.

## Vérifications locales

- `php artisan --version`, `php artisan list lnc`, `php artisan view:cache` et `php artisan route:cache`.
- `npm run production`.
- Tests fonctionnels isolés sur SQLite : connexion, déconnexion, ancien client Passport, émission et renouvellement de jetons, et protocole Excel.

Sur la machine utilisée pour la migration, `pdo_sqlite` est présent mais n'est pas activé par défaut. Lancer les tests depuis PowerShell avec :

```powershell
$env:OPENSSL_CONF = 'C:\Program Files\php\PHP 8.4.27\extras\ssl\openssl.cnf'
$env:DB_CONNECTION = 'sqlite'
$env:DB_DATABASE = ':memory:'
php -d "extension=C:\Program Files\php\PHP 8.4.27\ext\php_pdo_sqlite.dll" vendor\phpunit\phpunit\phpunit --testsuite Feature
```

Le `extension_dir` actuel du PHP CLI pointe vers PHP 8.4.22 et les extensions SQLite et GD ne sont pas activées. L'activation permanente dépend de la configuration PHP locale. Les tests de traitement d'image restent à effectuer avec GD activé.

## Points à vérifier avant toute utilisation avec des données réelles

- Effectuer une recette fonctionnelle sur une copie isolée et représentative de la base PostgreSQL, des fichiers et de la configuration réelle. Aucune migration de schéma ou écriture sur la base existante n'a été effectuée.
- La compatibilité Passport porte sur les clients historiques à identifiant numérique et secret en clair. `LegacyClientRepository` conserve leur authentification ; le secret de ces clients reste donc stocké en clair tant qu'une rotation et une migration dédiées ne sont pas réalisées. Les nouveaux clients Passport 13 et leur schéma ne sont pas couverts par cette compatibilité, et le protocole Excel partagé dépend encore du secret historique en clair. Ne pas remplacer ou supprimer ces clients sans projet de migration et tests complémentaires.
- Le SAML non utilisé est désactivé ; la connexion utilise le formulaire local. Toute éventuelle remise en service SAML nécessite une intégration compatible distincte.
- Deux tests unitaires échouaient déjà avant la migration : `LeaseEtatLocatifTest::testNextExitNeverMovesPastTheLeaseEnd` et `PartyBillingTabsTest::test_billing_tabs_are_disabled_when_the_party_is_not_an_owner`.
- Les tests unitaires et fonctionnels ne sont pas tous isolés les uns des autres lorsqu'ils sont exécutés ensemble avec SQLite : exécuter les suites séparément et corriger leur isolation avant d'utiliser la suite complète comme critère de validation.
