GMK.
Mode d'emploi
Documentation complète du système de gestion intégré pour garage automobile. Facturation, devis, catalogue, clients et parc automobile — sans base de données, sans dépendance externe.
Aperçu du système
GMK est un ERP souverain conçu pour les garages automobiles. Il fonctionne sans base de données — toutes les données sont stockées dans des fichiers JSON sur le serveur. Il se déploie en uploadant un dossier, sans installation, sans configuration complexe.
Architecture fichiers
├── data/ ← protégé .htaccess — inaccessible depuis le web
│ ├── gmk_clients.json ← clients + véhicules
│ ├── gmk_catalogue.json ← services + pièces
│ ├── gmk_params.json ← numérotation + config garage
│ └── .gmk_smtp ← credentials SMTP (optionnel)
├── factures_gmk/ ← un dossier par facture F- / FA- / FP-
│ └── F-2026-0315-001/
│ ├── facture.json
│ └── .conf ← statut, index rapide
├── devis_gmk/ ← un dossier par devis D-
├── logs/ ← access.log + factures.log
├── gmk_config.php ← configuration centrale — tous les chemins
├── portail_gmk.html ← portail de connexion
├── espace_admin.html ← interface principale
└── operateurs.json ← comptes opérateurs hashés
data/, protégé par .htaccess. Les dossiers factures_gmk/ et devis_gmk/ sont également protégés — aucun fichier JSON n'est accessible directement depuis un navigateur.
Déploiement d'une instance
Uploader l'archive
Uploader le dossier tmpl_gmk/ complet sur l'hébergeur via FTP ou gestionnaire de fichiers. Placer dans public_html/ ou un sous-répertoire.
Appliquer les droits
Depuis le terminal SSH, dans le répertoire tmpl_gmk/ :
find . -type f -exec chmod 644 {} \; && find . -type d -exec chmod 755 {} \;
Configurer le SMTP (optionnel)
Pour l'envoi d'emails, créer data/.gmk_smtp avec le contenu :
{"host":"smtp.domaine.com","port":587,"username":"email@domaine.com","password":"..."}
Importer les données
Se connecter en tant qu'architecte → activer le Mode Démo → bouton "Importer données" → charger le fichier ODS ou JSON de la matrice. Clients, catalogue et paramètres sont immédiatement disponibles.
Le système est opérationnel
Aucune configuration supplémentaire. Les répertoires data/, factures_gmk/, devis_gmk/ et logs/ sont créés automatiquement au premier accès.
Portail opérateur
L'accès se fait via portail_gmk.html — ou directement via l'URL racine du répertoire. Le portail vérifie la session et redirige automatiquement si déjà connecté.
Saisir les identifiants
Identifiant opérateur + code d'accès. La barre de progression indique la force du mot de passe saisi.
Choisir un espace
Après connexion, le hub affiche les modules disponibles selon le rôle. Clic sur "Administration" pour accéder au centre de gestion.
Session active — 60 minutes
Le timer en haut à droite décompte le temps restant. La session se renouvelle automatiquement à chaque action. À expiration, redirection vers le portail.
Rôles & accès
| Rôle | Capacités |
|---|---|
| Opérateur | Émettre des factures et devis, gérer les clients, consulter l'historique, utiliser le catalogue. |
| Architecte | Tout ce que l'opérateur peut faire, plus : Mode Démo, import/export, reset, modification catalogue complète, gestion des paramètres. |
operateurs.json. Le mot de passe est hashé en bcrypt. Ne jamais partager l'accès architecte avec un opérateur du quotidien.
Tableau de bord
Vue d'ensemble en temps réel calculée depuis les données serveur à chaque ouverture de session.
Le tableau de bord affiche également les 5 dernières factures avec accès direct à l'historique complet via "Voir tout →".
Facturation — 4 types
L'onglet Facturation gère trois types de documents. Chaque type possède sa propre numérotation séquentielle indépendante et ses propres règles.
Facture commerciale définitive. S'affiche par défaut à l'ouverture du formulaire. À la validation en mode PROD, le numéro est incrémenté, le document est verrouillé, et un email est envoyé au client si son adresse est renseignée.
Annule totalement ou partiellement une facture existante. Accès : triple clic sur le bouton "FACTURE STANDARD" révèle le bouton "FACTURE D'AVOIR". Un champ de référence apparaît — saisir le numéro de la facture à annuler. À la validation, la facture d'origine est automatiquement marquée AVOIR_ÉMIS. Affiché en rouge dans l'historique.
Facture estimative avant accord client. Accessible depuis l'onglet Devis — triple clic sur "DEVIS" révèle le bouton "PROFORMA". N'a pas de valeur comptable. Affiché en bleu. Le compteur FP- est indépendant.
Créer une facture — étapes
Sélectionner le type
Par défaut : Facture Standard. Triple clic pour révéler Avoir ou Proforma si nécessaire.
Renseigner le client
Taper les premières lettres du nom dans "Rechercher client". L'autocomplete affiche les résultats depuis la base. Clic sur un résultat remplit tous les champs client et le véhicule par défaut.
Choisir le véhicule
Si le client a plusieurs véhicules, un sélecteur apparaît automatiquement — le dernier véhicule réparé est pré-sélectionné. Changer de véhicule via la liste déroulante met à jour tous les champs.
Ajouter les prestations
Chaque ligne : saisir le code ou la désignation dans le champ autocomplete → le système propose les services et pièces du catalogue avec les prix. Modifier la quantité et le prix unitaire au besoin. Bouton "+" pour ajouter une ligne.
Valider
Bouton "▶ Générer & Envoyer". En mode PROD : le document est verrouillé, le compteur s'incrémente, l'email part au client. L'historique se met à jour immédiatement.
Historique des factures
Accessible via le bouton "HISTORIQUE" dans l'onglet Facturation.
| Fonctionnalité | Description |
|---|---|
| Recherche full-text | Cherche dans tous les champs : numéro, client, véhicule, immat, prestation, sinistre, assureur. |
| Filtres | Par statut (EN_ATTENTE, PAYÉE, SINISTRE_DÉCLARÉ, AVOIR_ÉMIS, ANNULÉE) et par type de document. |
| Changement de statut | Bouton ✎ → modal avec les 4 statuts, date et mode de paiement pour PAYÉE. |
| Export ZIP | Cocher plusieurs factures → "⬇ Export sélection" télécharge un ZIP des PDFs. |
| Émettre un avoir | Cocher exactement une facture F- → bouton "↺ Émettre un avoir" apparaît. |
Devis & Proforma
Le formulaire devis est identique au formulaire facture — même autocomplete client, même sélecteur véhicule, même catalogue. Le bouton "⇄ Convertir en Facture" transfère les données dans l'onglet Facturation.
Gestion clients
La base clients est stockée dans data/gmk_clients.json. Chaque client porte ses véhicules avec lui — pas de table séparée.
| Champ | Description |
|---|---|
| ID | Identifiant unique — format C001, C002... Attribué automatiquement. |
| Nom / Prénom | Affiché en majuscules dans les documents. |
| Téléphone | Apparaît dans l'autocomplete de recherche. |
| Utilisé pour l'envoi automatique des factures. | |
| Adresse | Pré-remplie dans le formulaire facture. |
| Véhicules | Tableau de véhicules liés au client. Voir module Véhicules. |
Parc automobile
L'onglet Véhicules centralise tout le parc automobile. Source de vérité unique : data/gmk_clients.json. Un véhicule est toujours lié à un client.
Vue liste du parc
Tous les véhicules de tous les clients, filtrables par immatriculation, modèle ou client. La colonne "Dernière intervention" affiche la date de la dernière facture pour ce véhicule.
Fiche véhicule
Clic sur une ligne → fiche complète : immat, modèle, année, km, couleur, VIN, client propriétaire. Bouton "✎ Modifier" pour corriger les données. Historique complet des interventions en bas de fiche.
Actions rapides depuis la fiche
"+ Nouvelle facture" et "+ Nouveau devis" pré-remplissent directement les formulaires avec ce véhicule et son client. Aucune saisie manuelle nécessaire.
Ajouter un véhicule
Bouton "+ Nouveau véhicule" → modal avec autocomplete client. Saisir modèle, immatriculation et données complémentaires. Sauvegarde directe dans le profil client.
Catalogue services & pièces
Deux sous-onglets : Services & Main d'œuvre (codes SRV-) et Pièces détachées (codes REF-). Chaque entrée dispose d'un prix HT, TVA, prix TTC, et pour les pièces : stock et seuil d'alerte.
| Champ pièce | Description |
|---|---|
| Référence | Code unique — format REF001, REF002... |
| Désignation | Libellé affiché dans les documents. |
| PA HT | Prix d'achat hors taxe (interne — n'apparaît pas sur les documents). |
| PV HT | Prix de vente hors taxe — affiché sur les factures. |
| Stock | Quantité en stock. Décrémenté manuellement ou via import. |
| Seuil alerte | Déclenche une alerte dans le tableau de bord si stock ≤ seuil. |
| Fournisseur | Nom du fournisseur — information interne. |
Mode Démo
Le Mode Démo est le panneau de contrôle de l'architecte. Il est totalement invisible de l'opérateur en production. Accès par sentinelle à deux étapes.
Activation de la sentinelle
Appui long sur le timer de session
Maintenir appuyé sur le compteur de session (en haut à droite) pendant 1,5 secondes. Le timer devient doré — la sentinelle est armée pour 4 secondes.
Appui long sur le badge PRODUCTION
Dans les 4 secondes suivantes, maintenir appuyé sur le badge vert "PRODUCTION" pendant 1,5 secondes. Le panneau Mode Démo s'ouvre.
Saisir le code d'accès
Code par défaut : KP2026!EDITION. À modifier lors du déploiement en production.
Fonctions disponibles
| Fonction | Description |
|---|---|
| ↺ Réinitialiser la numérotation | Remet les 4 compteurs (F, FA, FP, D) à 1. Irréversible. |
| ✎ Modifier une facture verrouillée | ⏪ Charge une facture existante dans le formulaire pour la réécrire sans incrémenter le compteur. |
| ⊕ Cloner le système | Export de la configuration complète pour déployer une nouvelle instance identique. |
| 🗑 Réinitialiser les factures | Supprime tous les dossiers factures + devis. Remet les compteurs à 1. Irréversible. |
| 💣 Reset total | Supprime factures, devis, remet tous les compteurs à 1. Irréversible. |
Import & Export
Accessible depuis le Mode Démo. Le système utilise le format ODS (LibreOffice) et JSON comme formats d'échange. Flux bidirectionnel.
Exports disponibles
| Format | Contenu | Usage |
|---|---|---|
| ODS Complet | 4 feuilles : Factures, Clients, Services, Pièces | Rapport comptable, archivage, modification en masse |
| JSON Backup | Snapshot complet : clients, catalogue, params, factures | Sauvegarde machine, migration d'instance, clone |
| CSV Factures | Factures du mois ou toutes | Import comptabilité externe |
| ZIP PDFs | PDFs des factures sélectionnées | Archivage, envoi groupé |
Import
Le bouton "⬆ Importer données" accepte un fichier .ods ou .json. Deux modes :
Numérotation légale
Quatre séquences indépendantes, chacune commence à 1 et ne souffre aucun manque — conformément aux obligations comptables françaises.
| Préfixe | Type | Format | Exemple |
|---|---|---|---|
| F- | Facture standard | F-AAAA-MMJJ-NNN |
F-2026-0315-001 |
| FA- | Facture d'avoir | FA-AAAA-MMJJ-NNN |
FA-2026-0315-001 |
| FP- | Proforma | FP-AAAA-MMJJ-NNN |
FP-2026-0315-001 |
| D- | Devis | D-AAAA-MMJJ-NNN |
D-2026-0315-001 |
gmk_num.php) avec verrouillage de fichier (flock) pour garantir l'atomicité même en accès concurrent.
Fichiers & données
| Fichier | Rôle |
|---|---|
| gmk_config.php | Configuration centrale. Tous les chemins calculés via __DIR__. Zéro hardcode. À inclure dans tous les PHP. |
| gmk_init.php | Point d'entrée unique. Retourne en une requête : session, clients, catalogue, numéros, stats. |
| gmk_num.php | Incrémentation atomique des 4 compteurs avec verrouillage fichier. |
| gmk_data.php | CRUD clients, catalogue, params. Les 4 clés de numérotation ne sont jamais écrasées. |
| gmk_reset.php | Opérations de reset — accessible architecte uniquement. |
| save_facture_portail.php | Sauvegarde F, FA, FP. Gère le marquage AVOIR_ÉMIS sur la facture référencée. |
| scan_factures_portail.php | Liste et détail des factures depuis factures_gmk/. |
| gmk_export.php | Export CSV, ODS complet multi-feuilles, JSON backup, ZIP PDFs, recherche full-text. |
| gmk_import.php | Import ODS ou JSON — merge ou replace — architecte uniquement. |
| auth.php | Authentification bcrypt. Logs locaux. Sans télémétrie externe. |
Sécurité & protection
$_SESSION['gmk_auth']. Expiration → redirection portail.operateurs.json. Jamais en clair. Changeable via l'interface.Require all denied sur le dossier data/ — aucun fichier JSON accessible directement depuis le web.factures_gmk/ et devis_gmk/ — les données clients ne sont accessibles qu'aux PHP authentifiés.gmk_params.json. Zéro hardcode de domaine dans les PHP.logs/ avec IP et horodatage.