# Rapport de version — v1.3.8

*STE MOBDIE PRIVÉ — application de gestion — 29 juillet 2026*

**L'échéancier global ne tombe plus au tri.** Le tri n'était pas la cause : il ne faisait que provoquer un nouveau rendu. La cause était l'action « Ouvrir la facture », qui se croyait pertinente parce qu'elle interrogeait `invoice_id` et non la facture — sur 206 échéances, 167 portaient une clé étrangère que ne suivait aucune facture, et l'URL se fabriquait depuis une relation nulle. `aUneFacture()` interroge désormais la relation, et les quatorze endroits du projet qui fabriquaient une adresse depuis une relation passent par `Filament\Support\Lien` : pas de relation, pas de lien, la cellule affiche son texte sans être cliquable et l'action se cache. Le test reproduit d'abord l'erreur de production à la ligne près, puis charge l'écran avec une échéance sans facture et le trie dans les deux sens sur chacune de ses colonnes triables.

**Le taux de complétude ne réclame plus l'impossible.** Deux causes se cumulaient. Le lieu d'exercice de l'activité et le lieu de conservation des documents comptables étaient vides pour la totalité des dossiers : pour un domicilié, ce sont l'un et l'autre l'adresse de domiciliation, et ils prennent désormais par défaut le siège attribué, lui-même pris du réglage de la société — posés dans le modèle, donc quel que soit le chemin de création, et pré-remplis modifiables dans l'assistant comme sur la fiche. Le registre du commerce, lui, ne se réclame plus le jour de la signature : le délai de l'article 544-2, porté par `conformite.rc_delai_mois`, est appliqué. Tant qu'il court, le RC et sa ville sont « à venir » — ni dans les manques, ni au dénominateur, et sans pastille rouge dans l'assistant. Une fois écoulé, ils manquent, et une alerte `rc_manquant` en gravité *danger* le signale sur l'écran de conformité, où se joue la responsabilité de l'article 544-4.

**L'indexeur lit les dossiers que l'application écrit.** `NommageArchive::dossier()` range sous `2026-96 - FAKHAR NAIMA/`, `deviserClient()` comparait le segment entier au code par égalité stricte : toutes les pièces déposées depuis la v1.3.7 revenaient « sans client identifiable ». Le code est maintenant reconnu aussi en tête de segment, devant le séparateur que pose le nommage — jamais en préfixe nu, sans quoi `2026-9` avalerait `2026-96`. Sur les données de développement : six fichiers orphelins avant, zéro après.

**Les anomalies de reprise quittent le menu sans quitter l'application.** L'entrée de navigation et l'indicateur du tableau de bord disparaissent ; l'écran répond toujours à son adresse et un bouton des Réglages y mène, badge compris. Quand rien n'attend une décision, il le dit — et distingue « toutes tranchées » de « aucune reprise n'en a jamais produit ».

**Le nom qui fait foi est celui du contrat.** La consigne d'extraction porte désormais la règle : une carte d'identité trouvée dans un dossier n'est pas nécessairement celle du représentant légal. Le nom de référence — celui du contrat ou du certificat négatif — est donné au modèle, qui rapproche et se prononce ; le rapprochement est refait côté application, sur les noms normalisés, car un dossier d'identité ne se remplit pas sur une bonne volonté. En cas de divergence, **rien** n'est pré-rempli — ni le nom, ni le numéro, ni la naissance, ni l'adresse : sur cette carte, tout appartient à quelqu'un d'autre. Il ne reste qu'un avertissement, « la pièce est au nom de X, le contrat au nom de Y », affiché sur l'écran de vérification et dans l'assistant, à l'utilisateur de trancher. Un type de pièce « CIN d'un tiers » permet enfin de classer la carte du contact sans polluer l'identité du représentant ; elle n'est pas analysée, précisément parce que son nom n'est pas celui du représentant.

## Mesure sur les données reprises

| | Avant | Après |
|---|---|---|
| Complétude moyenne | 52 % | **66 %** |
| Dossiers auxquels il manque un champ d'identité | 100 / 100 | **65 / 100** |
| « Lieu d'exercice » manquant | 100 | **0** |
| « Lieu de conservation » manquant | 100 | **0** |
| RC réclamé | 96 | **30** (51 dossiers en délai) |
| Fichiers « sans client identifiable » | 6 | **0** |

Les 65 dossiers qui restent incomplets côté champs le sont pour de vraies raisons : CIN du représentant (31), RC dont le délai est écoulé (30), adresse personnelle (28), activité (26), tribunal (26), ICE (9). Les manques de **pièces** (contrat signé, certificat négatif, copie de CIN) dominent encore le compte total : ils se résorberont au passage de `mobdie:indexer-archive`, que la correction du point 3 débloque.

Suite complète : **331 tests, 1 477 assertions**, au vert. `./vendor/bin/pint` : conforme. Aucune recompilation d'assets.

## Déploiement

```bash
git pull && composer install --no-dev -o
php artisan migrate --force
php artisan optimize:clear && php artisan optimize
php artisan mobdie:indexer-archive --simulation   # lire le compte
php artisan mobdie:indexer-archive                # puis indexer
```

Deux migrations. La première ajoute `ai_extractions.avertissement`. La seconde pose les deux lieux sur les dossiers existants depuis leur siège attribué : elle ne remplit que le vide, elle est donc sans effet en production où la correction a déjà été passée à la main, et elle remet d'aplomb les autres environnements. Elle n'a pas de retour arrière — on ne revide pas un dossier légal.

L'indexation de l'archive est la seule opération à lancer, et elle se relit à blanc avant d'être jouée.
