Concepts & socle
Les notions transverses à connaître une fois : modules, sécurité, thème, langue. Utile aux administrateurs et aux utilisateurs avancés.
Système de modules : trois états
L'offre « à la carte » repose sur un catalogue de 28 modules livrés avec le code. Pour votre entreprise, chacun est dans l'un de trois états, réglés depuis Paramètres → Modules :
livré, aucune donnée → Installé
tables créées ⇄ Activé
navigation + routes
| État | Tables en base | Navigation / routes | Pour y arriver |
|---|---|---|---|
| Disponible | Non | Non | État de départ de tout module (ou après une purge). |
| Installé | Oui | Non | Désactiver un module activé (ses données restent). |
| Activé | Oui | Oui | Installer depuis Paramètres → Modules (crée les tables, installe les prérequis et active), ou réactiver un module installé. |
Un module désactivé est totalement inerte : ni route, ni entrée de navigation, jamais instancié. Ses données restent intactes et il se réactive d'un clic. La purge (module installé et désactivé seulement) supprime ses tables et le ramène à disponible ; elle est refusée pour les modules à conservation légale. Les modules core (Tableau de bord, Paramètres) sont toujours activés.
Certains modules en requièrent d'autres (ex. Production requiert Stock) : installer l'un installe ses prérequis, et un prérequis ne peut pas être purgé tant qu'un module installé en dépend. Une nouvelle version de l'ERP qui apporte un module le présente simplement comme disponible : rien ne change pour vous tant que vous ne l'installez pas.
Architecture en bref
Monolithe modulaire en PHP 8.1+, sans framework et sans dépendance runtime. Chaque module est un dossier autonome et débranchable :
app/Modules/Invoices/
├── InvoicesModule.php ← routes + navigation + permissions
├── Http/ ← contrôleurs (permissions, validation, I/O)
├── Domain/ ← logique métier : tout le SQL et les règles
└── Views/ ← gabarits de page
Une requête web suit toujours le même fil :
Le contrôleur ne fait que permissions + validation + entrée/sortie. Tout le SQL et les règles métier vivent dans Domain/. C'est ce qui rend chaque module testable et isolé.
Sécurité intégrée
Le socle applique des garde-fous sur chaque requête, sans configuration :
| Mécanisme | Rôle |
|---|---|
| Sessions durcies | Cookies HttpOnly / SameSite, régénération, expiration. |
| CSRF | Jeton exigé sur toute écriture (formulaire & API). Le front l'envoie automatiquement. |
| Anti-bruteforce | Blocage temporaire des connexions après échecs répétés. |
| Requêtes préparées | 100 % du SQL via PDO préparé — pas d'injection. |
| En-têtes & CSP | Politique de sécurité du contenu, anti-clickjacking, MIME-sniffing off. |
| 2FA (TOTP) | Double authentification optionnelle par compte. |
| Journal d'audit | Actions sensibles tracées (acteur, action, entité), IP pseudonymisée. |
Rôles & permissions
L'accès aux modules est gouverné par des permissions (ex. invoices.view, invoices.manage) regroupées en rôles. Un utilisateur hérite de l'union des permissions de ses rôles. La clé spéciale * accorde tout (administrateur). Détail complet : Rôles & permissions.
Thème clair / sombre
L'interface bascule entre un thème clair (« papier chaud ») et sombre (« encre »). Le choix est mémorisé par navigateur (clé erp-theme) et appliqué dès le chargement, sans clignotement. Cette documentation utilise le même mécanisme — testez l'icône lune / soleil en haut à droite.
Langue (i18n)
La langue de l'organisation se règle à l'installation ou dans Paramètres → Style (fr ou en). Le français est la langue pivot : les chaînes françaises sont les clés, l'anglais ne surcharge que les différences. La navigation, la connexion et les écrans système sont traduits ; les corps de page métier restent en français.
Conformité & données
- Facture électronique — génération Factur-X et transmission via PDP (plateforme de dématérialisation), conforme à la réforme française.
- Export FEC — fichier des écritures comptables exigé par l'administration fiscale, exportable depuis Import / Export.
- Partie double — toute écriture comptable est équilibrée (débit = crédit), avec grand livre et balance.
- Sauvegarde — la donnée vit dans votre base MySQL et dans les fichiers téléversés ; une archive complète est faite chaque nuit et avant chaque mise à jour.
Maintenance & journaux techniques
Pendant une mise à jour, l'application passe en maintenance : les pages répondent « service indisponible » (503) et les tâches planifiées sont suspendues, le temps de la sauvegarde et des migrations. Toutes les erreurs techniques sont écrites jour par jour sur le serveur, et se lisent dans le module Journaux techniques.