# Moventra ERP — architecture Web & Mobile d’entreprise

## Vue d’ensemble

```text
Flutter mobile / PWA                     Web Moventra ERP (Next.js)
        │                                         │
        ├── JWT court + refresh token             ├── Session web + RBAC
        │                                         │
        └──────────── API REST /mobile/v1 ─────────┤
                                                  │
                                  Services Maintenance / Finance / AR
                                                  │
                                  SQLite + Drizzle + journal d’audit
```

La même base Moventra ERP alimente le bureau, l’application mobile et le portail client. Les écritures critiques restent soumises à une confirmation explicite. Les fournisseurs externes (SMS, WhatsApp, e-mail, paiement) sont appelés uniquement après configuration de leurs secrets côté serveur.

## Profils et parcours mobiles

| Profil | Écran initial | Capacités |
|---|---|---|
| Chauffeur | Grille de pictogrammes | Moteur, remorque, tracteur, pneu, freins, photo, note vocale, file hors connexion |
| Maintenance / Atelier | File des alertes | Qualifier, valider, refuser, convertir en OF/OT, suivre l’avancement |
| Commercial / Recouvrement | Créances clients | Factures échues, appel, note, préparation de relance confirmée |
| Finance / Direction | Cockpit KPI | Trésorerie, encours, échéances, coûts de flotte et synthèse opérationnelle |

Les droits sont calculés depuis **Administration > Utilisateurs et droits**. L’application ne se fie jamais au rôle affiché par le client : chaque endpoint revalide le JWT et les autorisations serveur.

## API REST mobile

| Méthode | Endpoint | Usage |
|---|---|---|
| POST | `/api/mobile/v1/auth/token` | Login ou rotation du refresh token |
| POST | `/api/mobile/v1/auth/revoke` | Révocation du terminal |
| GET | `/api/mobile/v1/bootstrap` | Profil, droits, référentiels utiles au rôle |
| GET | `/api/mobile/v1/dashboard` | KPI synthétiques autorisés |
| GET/POST | `/api/mobile/v1/intervention-requests` | Liste et création d’un signalement |
| POST | `/api/mobile/v1/intervention-requests/attachments` | Photo ou note vocale contrôlée |
| POST | `/api/mobile/v1/intervention-requests/actions` | Validation et conversion en OF/OT |
| GET/POST/PATCH | `/api/mobile/v1/collections` | Créances et actions de relance |
| POST | `/api/mobile/v1/sync/push` | Synchronisation idempotente de la file hors connexion |

## Recouvrement AR entreprise

La migration `treasury-drizzle/0026_enterprise_collections.sql` fournit :

- `collection_workflows` et `collection_workflow_steps` : scénarios J-7, J+1, J+7, J+15 et J+30 ;
- `collection_communications` : journal multicanal et approbation humaine ;
- `collection_disputes` : litiges typés avec suspension des relances ;
- `collection_promises` : promesses de paiement et détection des retards ;
- `collection_tasks` : file priorisée du chargé de recouvrement ;
- `collection_customer_profiles` : VIP, limite de crédit et canaux préférés ;
- `collection_portal_tokens` et `collection_payment_intents` : portail client à jeton haché et paiements ;
- `collection_metric_snapshots` : historique DSO, CEI et encours.

Le service `/api/treasury/collections/enterprise` calcule en temps réel : balance âgée courant/1–30/31–60/61–90/90+, score santé client, DSO, CEI, taux d’échu et prévision 30/60/90 jours. Son moteur exclut les clients VIP, les factures litigieuses, les automatisations suspendues et les promesses ouvertes. Il prépare les communications en statut `approval_required`; aucun envoi n’est automatique sans validation.

## Design system SAP web

La couche `app/sap-enterprise.css`, chargée après les styles historiques, constitue l’unique niveau de normalisation :

- fond `#F0F4F8`, en-têtes `#D9E5F3`, sélection `#EAEEF5` ;
- contrôles rectangulaires et boutons d’action jaune SAP ;
- navigation SAP Easy Access avec domaines, guides pointillés et sous-menus compacts ;
- DataGrid : en-tête 30 px, lignes 26 px, cellules `2px 6px`, zébrage, tri, recherche, pagination et sélection clavier ;
- Gantt à double panneau : table des OF à gauche, frise à droite, séparateur redimensionnable, échelles mois/CW/jour et barres à progression visible.

## Exploitation

```powershell
pnpm run build
pnpm test
pnpm start
```

Contrôles de disponibilité :

- Web : `http://127.0.0.1:3000/`
- Mobile/PWA : `http://127.0.0.1:3000/mobile-app/index.html`
- Santé : `http://127.0.0.1:3000/api/health`

En production : HTTPS obligatoire, secrets fournisseurs dans le coffre du serveur, sauvegarde quotidienne de la base, rotation des refresh tokens et journalisation centralisée des erreurs d’envoi.
