# Refonte ergonomique & correctifs — STE MOBDIE PRIVÉ (v1.1.0)

**Date : juillet 2026**
Ce document décrit, en langage simple, ce qui a changé dans l'application, écran par écran,
ce qui a été corrigé sur le fond, et ce qui n'a pas pu être fait (avec la raison).

Toute décision a été arbitrée par une seule question : *est-ce que cela rapproche Salima d'un
encaissement ou d'un dossier complété ?* La priorité a été mise sur la densité d'information utile,
la rapidité de saisie et le traitement en lot.

L'interface reste **entièrement en français**. Le modèle de données, les règles de gestion, les
permissions, les rôles, les gabarits de documents et les routes publiques
(`/demande-domiciliation`, `/mes-coordonnees/{token}`) **n'ont pas été modifiés**. Aucune migration
n'a été ajoutée. Le garde-fou de fond est préservé : **aucun e-mail client ne part sans validation
humaine, aucune résiliation n'est prononcée sans l'accord du gérant.**

---

## 1. Les trois défauts bloquants — corrigés

### 1.1 L'écran « Réglages » ne fonctionnait pas
**Avant :** tous les champs s'affichaient vides et rien ne s'enregistrait. En cause : les clés de
réglage contiennent un point (ex. `societe.raison_sociale`) que le moteur interprétait comme un
sous-dossier.
**Après :** les champs sont désormais pré-remplis avec les valeurs réelles, et l'enregistrement
fonctionne. L'écran, auparavant une page interminable de huit sections, est réorganisé en **huit
onglets** (Société, Gérant, TVA, Numérotation, Relances, Conformité, Intelligence artificielle,
Documents), chacun avec une phrase d'explication, et un **bouton d'enregistrement fixe en bas**.
*Vérifié par test automatisé : l'écran affiche les valeurs et les modifie réellement en base.*

### 1.2 Le compte de produits et charges (CPC) était inaccessible
**Avant :** l'application savait calculer le CPC mais aucun écran n'y menait.
**Après :** nouvel écran **« Rapports comptables »** (menu Comptabilité) qui présente :
- le **CPC à la marocaine** (produits d'exploitation, charges d'exploitation, résultat
  d'exploitation, charges financières, résultat courant, produits/charges non courants, résultat
  net), en **colonnes par exercice avec une colonne de total** ;
- la **balance par catégorie**, triée par montant décroissant ;
- un **rappel du hors-exploitation** (financement, investissement) qui n'entre pas dans le résultat ;
- des boutons d'**export Excel et CSV** pour le CPC et pour la balance.
L'**export du CPC** a aussi été ajouté en tête de l'écran **Journal**, à côté de l'export existant.
*Vérifié par test : le résultat net du CPC correspond exactement au calcul du service comptable.*

### 1.3 Deux écrans de gestion manquaient
- **« Catégories comptables »** (menu Comptabilité, réservé au super-administrateur) : nom, sens,
  groupe, poste CPC, avec le **nombre d'opérations** rattachées, et **interdiction de supprimer une
  catégorie utilisée** (double protection : bouton masqué + garde au niveau du modèle).
  *Vérifié par test.*
- **« Tiers »** (même menu) : nom, type, ICE, nombre d'opérations, montant cumulé, et un **lien vers
  le client domicilié** quand il existe (rapprochement par ICE puis par nom).

---

## 2. « Dossiers incomplets » — l'écran le plus important, refait à neuf

**Avant :** un bloc de texte brut, sans lien, sans action, sans pagination.
**Après :** une **table** avec une ligne par client : identifiant, raison sociale (cliquable),
statut, **barre de complétude en %**, nombre de champs manquants, et surtout **« ce qui manque »
présenté en badges lisibles et séparés**.

- **Filtres utiles :** clients actifs par défaut, et « il manque le téléphone / l'e-mail / les deux /
  une pièce obligatoire / une donnée d'identité ». Tri par complétude croissante (**les pires en
  premier**).
- **Trois actions par ligne :** ouvrir la fiche, **saisir le téléphone et l'e-mail dans une fenêtre
  légère sans quitter la liste**, envoyer le lien de mise à jour des coordonnées.
- **Action de lot :** envoyer le lien à tous les clients sélectionnés qui ont déjà un e-mail.
- **Trois compteurs en tête :** dossiers incomplets, clients sans aucun moyen de contact, et
  **complétude moyenne** (l'indicateur de progression du chantier).

*Vérifié par test : comptage correct, exclusion des dossiers résiliés, bon fonctionnement des filtres.*

---

## 3. Le Journal, enfin utilisable pour de la comptabilité

- **Pagination par défaut à 50** (choix 25 / 50 / 100 / tout).
- **Filtres de période :** exercice, mois, plage de dates libre ; plus un filtre par **groupe**
  (exploitation / financement / investissement) et **« avec TVA seulement »**.
- **Totaux en pied de colonne** sur le HT, la TVA et le montant, **recalculés selon les filtres**.
- **Actions :** Consulter (fenêtre modale), **Dupliquer** (pré-remplit une nouvelle opération —
  la saisie comptable est répétitive), et un lot **Recatégoriser / Supprimer**.
- **Regroupement optionnel** par mois, compte ou catégorie.

*Vérifié par test : les totaux suivent bien les lignes filtrées.*

---

## 4. La fiche client, remise en état

**Avant :** les informations s'affichaient dans des champs de saisie grisés (impression de formulaire
cassé), avec un grand vide à gauche, et un titre « Afficher BASTILYA ».
**Après :** une **vraie fiche de lecture**. La cause du problème était que la fiche de lecture n'était
pas branchée : l'application montrait le formulaire de saisie désactivé. C'est corrigé.

- **Bandeau de synthèse toujours visible :** statut, complétude, montant impayé, prochaine échéance.
- **Organisée en onglets :** Identité, Contrats et échéances, Pièces et conformité, Courrier,
  Historique — ce qui supprime le vide de la colonne de gauche.
- **Titre = la raison sociale** (le statut passe en sous-titre), fini « Afficher … ».
- Les sections vides affichent une **invite explicite** au lieu d'un bloc replié.
- **Trois boutons d'action en tête :** générer un document, **enregistrer un paiement** (sur la
  prochaine échéance), **relancer** (mise en file d'envoi, validation humaine requise).
- Le **formulaire d'édition** passe en onglets, les champs du quotidien d'abord, avec une **aide
  contextuelle** (format de la CIN, provenance de l'ICE, sens de la date du certificat négatif).

*Vérifié par test : la fiche montre la raison sociale (plus « Afficher »), le formulaire est en onglets.*

---

## 5. La liste des clients, enrichie

- **Nouvelles colonnes métier :** impayé (visible), périodicité, montant par période, prochaine
  échéance, téléphone, commercial — **masquables**, celles peu utiles masquées par défaut.
- **Nouveau tri par défaut :** montant impayé décroissant, puis prochaine échéance (au lieu des
  sociétés gratuites en tête).
- **Onglets de liste avec compteur :** Tous, Actifs, En retard, En préparation, Prospects, Gratuits,
  Résiliés.
- **Actions de lot :** assigner un commercial, changer de statut, envoyer le lien de coordonnées,
  exporter la sélection en CSV.

*Vérifié par test : classement par impayé décroissant, présence des onglets.*

---

## 6. Le tableau de bord, réorganisé

Chaque carte porte désormais **le montant en valeur principale** et le nombre en secondaire.
Trois bandeaux :
- **Recouvrement :** montant impayé, ancienneté moyenne de la créance, encaissé ce mois-ci, taux de
  recouvrement — chaque carte **mène à la liste filtrée**.
- **À traiter :** relances à valider, résiliations à prononcer, alertes de conformité, anomalies de
  reprise, dossiers incomplets — chaque carte **mène à son écran**.
- **Situation financière :** trésorerie par compte, résultat de l'exercice, position nette.

Le **graphique d'évolution mensuelle** occupe toute la largeur, en **format français** (« 40 000 DH »,
mois en toutes lettres). Un **second graphique** montre la répartition du chiffre d'affaires par
activité.

---

## 7. Cohérence, français et finition

- **Devise :** un format unique partout — **56 400,00 DH** (espace insécable, virgule décimale, deux
  décimales, « DH » après le nombre). **« MAD » a disparu.** *Vérifié par test unitaire.*
- **Titres :** correction du « Title Case » anglais (fini « Anomalies De Reprise » et « File
  D'envoi »). L'entrée d'audit ne s'appelle plus « entrée du journal » (ambiguë avec le journal
  comptable) mais « entrée d'audit ».
- **États vides utiles** (icône, titre, phrase, action) ajoutés sur les écrans refaits et les plus
  utilisés.
- **Persistance en session** de la recherche, des filtres, du tri et de la pagination sur **toutes**
  les tables : les filtres de Salima survivent à un aller-retour.
- **Actions de lot** ajoutées là où le traitement en série a du sens : échéances, dossiers
  incomplets, anomalies, alertes, courrier, opérations du journal.
- **Logo :** remplacé par le sigle vectoriel sur fond transparent (plus de cadre blanc sur fond
  sombre), hauteur ~34 px.
- **Densité :** lignes de table plus compactes pour afficher plus de dossiers sans défiler.
- **Raccourcis clavier :** ⌘/Ctrl + K (recherche), ⌘/Ctrl + M (créer), ⌘/Ctrl + S (enregistrer),
  documentés dans une page **« Aide & raccourcis clavier »** accessible depuis le menu utilisateur.

### Un bug corrigé au passage
Cinq écrans (anomalies, file d'envoi, alertes, résiliations, analyses IA) contenaient une erreur
latente (`default => $s`, variable indéfinie) qui aurait fait planter l'affichage sur un statut non
prévu. Corrigé.

---

## 8. Ce qui n'a pas pu être fait (et pourquoi)

- **Colonne « activité » sur les Catégories comptables** et **« coordonnées » sur les Tiers :** ces
  champs n'existent pas dans la base. Les ajouter aurait exigé une modification du modèle de données,
  explicitement exclue du cahier des charges. Les écrans affichent donc les champs existants.
- **« Montant cumulé » des Tiers affiché à 0 :** dans les données actuelles, les opérations du journal
  désignent le tiers par un libellé texte libre, sans lien vers la fiche Tiers (la table des tiers est
  vide). Le calcul est correct ; il se remplira dès que des opérations seront rattachées à un tiers.
- **Aide « sens de la date limite de paiement » :** il n'existe pas de champ « date limite de
  paiement » sur la fiche client (les échéances sont gérées à part). L'aide contextuelle a été placée
  sur la date du certificat négatif, qui en avait besoin.
- **Raccourcis clavier :** implémentés en « meilleur effort » côté navigateur (⌘K/⌘M/⌘S). La
  navigation au clavier *entre les onglets* n'a pas été liée à une combinaison dédiée.
- **Mobile :** les écrans reposent sur la mise en page responsive native et sur les colonnes
  masquables (les colonnes secondaires sont masquées par défaut). La lecture reste correcte, mais une
  campagne de tests sur téléphone réel n'a pas été menée.
- **États vides sur mesure :** ajoutés sur les écrans refaits et les plus utilisés ; les autres tables
  conservent l'état vide français par défaut du moteur.

---

## 9. Contenu de l'archive de mise à jour

Fichier : **`~/Desktop/mobdie-maj-v1.1.0.tar.gz`** — **62 fichiers**, chemins relatifs à la racine de
l'application, **sans** `.env`, `vendor`, `node_modules`, `.git` ni tests.

### Nouveaux fichiers (10)
```
app/Filament/Pages/AideRaccourcis.php
app/Filament/Pages/RapportsComptables.php
app/Filament/Resources/Tiers/Pages/ManageTiers.php
app/Filament/Resources/Tiers/TierResource.php
app/Filament/Resources/TransactionCategories/Pages/ManageTransactionCategories.php
app/Filament/Resources/TransactionCategories/TransactionCategoryResource.php
app/Filament/Widgets/CaParActiviteWidget.php
app/Filament/Widgets/RecouvrementWidget.php
resources/views/filament/pages/aide-raccourcis.blade.php
resources/views/filament/pages/rapports-comptables.blade.php
```

### Fichiers modifiés (52)
```
app/Filament/Pages/DossiersIncomplets.php
app/Filament/Pages/Reglages.php
app/Filament/Resources/Accounts/AccountResource.php
app/Filament/Resources/AiAnalyses/AiAnalysisResource.php
app/Filament/Resources/AuditLogs/AuditLogResource.php
app/Filament/Resources/CommissionSchemes/CommissionSchemeResource.php
app/Filament/Resources/Commissions/CommissionResource.php
app/Filament/Resources/Commissions/Tables/CommissionsTable.php
app/Filament/Resources/ConformityAlerts/ConformityAlertResource.php
app/Filament/Resources/Courriers/CourrierResource.php
app/Filament/Resources/DocumentTemplates/DocumentTemplateResource.php
app/Filament/Resources/DomiciliationClients/DomiciliationClientResource.php
app/Filament/Resources/DomiciliationClients/Pages/ListDomiciliationClients.php
app/Filament/Resources/DomiciliationClients/Pages/ViewDomiciliationClient.php
app/Filament/Resources/DomiciliationClients/RelationManagers/ContractsRelationManager.php
app/Filament/Resources/DomiciliationClients/RelationManagers/DocumentsRelationManager.php
app/Filament/Resources/DomiciliationClients/RelationManagers/InstallmentsRelationManager.php
app/Filament/Resources/DomiciliationClients/Schemas/DomiciliationClientForm.php
app/Filament/Resources/DomiciliationClients/Schemas/DomiciliationClientInfolist.php
app/Filament/Resources/DomiciliationClients/Tables/DomiciliationClientsTable.php
app/Filament/Resources/Invoices/InvoiceResource.php
app/Filament/Resources/Invoices/Tables/InvoicesTable.php
app/Filament/Resources/Lenders/LenderResource.php
app/Filament/Resources/Quotes/QuoteResource.php
app/Filament/Resources/Quotes/Tables/QuotesTable.php
app/Filament/Resources/RawArchiveLines/RawArchiveLineResource.php
app/Filament/Resources/RecurringCharges/RecurringChargeResource.php
app/Filament/Resources/RelanceQueues/RelanceQueueResource.php
app/Filament/Resources/RepriseAnomalies/RepriseAnomalyResource.php
app/Filament/Resources/RepriseAnomalies/Tables/RepriseAnomaliesTable.php
app/Filament/Resources/Resiliations/ResiliationResource.php
app/Filament/Resources/Transactions/Pages/ManageTransactions.php
app/Filament/Resources/Transactions/TransactionResource.php
app/Filament/Resources/Users/Schemas/UserForm.php
app/Filament/Resources/Users/UserResource.php
app/Filament/Widgets/AlertesDomiciliationWidget.php
app/Filament/Widgets/EvolutionMensuelleWidget.php
app/Filament/Widgets/TresorerieWidget.php
app/Http/Controllers/ExportController.php
app/Models/DomiciliationClient.php
app/Models/DomiciliationPayment.php
app/Models/Tier.php
app/Models/Transaction.php
app/Models/TransactionCategory.php
app/Providers/AppServiceProvider.php
app/Providers/Filament/AdminPanelProvider.php
app/Services/ComptaReport.php
app/Services/JournalExport.php
app/Services/RelanceService.php
app/Support/helpers.php
resources/views/filament/pages/dossiers-incomplets.blade.php
resources/views/filament/pages/reglages.blade.php
```

---

## 10. Commandes à lancer après extraction sur le serveur

L'archive s'extrait depuis la racine de l'application (là où se trouvent `artisan` et `composer.json`) :

```bash
# 1. Sauvegarde préalable (recommandé)
cp -r app app.backup-$(date +%F)

# 2. Extraction (écrase uniquement les 62 fichiers concernés)
tar -xzf mobdie-maj-v1.1.0.tar.gz

# 3. Vider les caches (aucune migration à jouer, le schéma est inchangé)
php artisan optimize:clear
php artisan filament:cache-components
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

Aucune commande `migrate` n'est nécessaire : **aucune migration n'a été ajoutée** et la base n'est pas
modifiée. Si le cache d'icônes Filament est utilisé, un `php artisan icons:cache` peut être ajouté.

---

*Livré avec 65 tests automatisés au vert (233 assertions), incluant les tests demandés : Réglages,
Rapports comptables (CPC = calcul du service), Dossiers incomplets (comptage et filtres), totaux du
journal, format monétaire uniforme.*
