ERP Souverain — Garage Automobile

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.

V4.6 Stable Sans BDD Portable PHP + JSON
01 — Introduction

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.

4 types de documents
Facture, Avoir, Proforma et Devis — chacun avec sa propre numérotation séquentielle légale.
🚗
Gestion du parc
Véhicules liés aux clients, historique des interventions par véhicule, sélecteur intelligent.
Catalogue intégré
Services & main d'œuvre, pièces détachées avec stock et alertes de seuil bas.
Import / Export
ODS (LibreOffice), JSON backup, CSV comptabilité. Flux bidirectionnel avec la matrice.
Envoi mail automatique
Facture envoyée au client par email à la validation, avec copie au garage. Template HTML premium.
Mode Démo
Panneau architecte accessible par sentinelle — invisible de l'opérateur en production.

02 — Structure

Architecture fichiers

tmpl_gmk/
├── 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
Principe clé Toutes les données sensibles sont dans 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.

03 — Installation

Déploiement d'une instance

1

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.

2

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 {} \;
3

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":"..."}
4

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.


04 — 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é.

1

Saisir les identifiants

Identifiant opérateur + code d'accès. La barre de progression indique la force du mot de passe saisi.

2

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.

3

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.


05 — Permissions

Rôles & accès

RôleCapacité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.
Identifiant architecte Le rôle architecte est défini dans operateurs.json. Le mot de passe est hashé en bcrypt. Ne jamais partager l'accès architecte avec un opérateur du quotidien.

06 — Module

Tableau de bord

Vue d'ensemble en temps réel calculée depuis les données serveur à chaque ouverture de session.

Factures ce mois
Nombre de factures émises sur le mois en cours. Ne compte pas les avoirs.
CA HT ce mois
Chiffre d'affaires hors taxe du mois courant, toutes prestations confondues.
Devis en attente
Devis à l'état EN_ATTENTE — à convertir en facture.
Clients actifs
Nombre de clients enregistrés dans la base.
Alertes stock
Pièces dont le stock est inférieur au seuil d'alerte défini (par défaut : 5 unités).
Bonus 200€
Dossiers pare-brise avec bonus assureur non encore encaissé.

Le tableau de bord affiche également les 5 dernières factures avec accès direct à l'historique complet via "Voir tout →".


07 — Module

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.

F- Facture Standard

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.

FA- Facture d'Avoir

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.

Accès rapide Dans l'historique, cocher une seule facture F- fait apparaître le bouton "↺ Émettre un avoir" qui pré-remplit automatiquement le formulaire.
FP- Facture Proforma

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

1

Sélectionner le type

Par défaut : Facture Standard. Triple clic pour révéler Avoir ou Proforma si nécessaire.

2

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.

3

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.

4

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.

5

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-textCherche dans tous les champs : numéro, client, véhicule, immat, prestation, sinistre, assureur.
FiltresPar statut (EN_ATTENTE, PAYÉE, SINISTRE_DÉCLARÉ, AVOIR_ÉMIS, ANNULÉE) et par type de document.
Changement de statutBouton ✎ → modal avec les 4 statuts, date et mode de paiement pour PAYÉE.
Export ZIPCocher plusieurs factures → "⬇ Export sélection" télécharge un ZIP des PDFs.
Émettre un avoirCocher exactement une facture F- → bouton "↺ Émettre un avoir" apparaît.

08 — Module

Devis & Proforma

D-
Devis
Document de proposition commerciale. Modifiable après émission. Convertible en facture d'un clic. Validité configurable (30, 60, 90 jours).
FP-
Proforma
Facture estimative sans valeur comptable. Accessible par triple clic sur "DEVIS". Numérotation FP- indépendante.

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.


09 — Module

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.

ChampDescription
IDIdentifiant unique — format C001, C002... Attribué automatiquement.
Nom / PrénomAffiché en majuscules dans les documents.
TéléphoneApparaît dans l'autocomplete de recherche.
EmailUtilisé pour l'envoi automatique des factures.
AdressePré-remplie dans le formulaire facture.
VéhiculesTableau de véhicules liés au client. Voir module Véhicules.
Autocomplete universel Dans les formulaires facture et devis, la recherche client fonctionne par nom, prénom, téléphone, email et ville. La sélection d'un client pré-remplit immédiatement tous les champs.

10 — Module

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.

Sélecteur intelligent Dans les formulaires, quand un client ayant plusieurs véhicules est sélectionné, le système affiche automatiquement une liste déroulante. Le véhicule pré-sélectionné est celui de la dernière facture émise pour ce client.
Véhicule inconnu Si une immatriculation saisie manuellement ne correspond à aucun véhicule enregistré pour le client, une alerte orange apparaît avec un bouton "Enregistrer" — un clic ajoute le véhicule dans le profil client.

11 — Module

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èceDescription
RéférenceCode unique — format REF001, REF002...
DésignationLibellé affiché dans les documents.
PA HTPrix d'achat hors taxe (interne — n'apparaît pas sur les documents).
PV HTPrix de vente hors taxe — affiché sur les factures.
StockQuantité en stock. Décrémenté manuellement ou via import.
Seuil alerteDéclenche une alerte dans le tableau de bord si stock ≤ seuil.
FournisseurNom du fournisseur — information interne.
Autocomplete catalogue Dans les formulaires facture et devis, taper le code ou la désignation dans une ligne de prestation affiche les suggestions du catalogue. La sélection pré-remplit code, désignation et prix unitaire.

12 — Architecte

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

1

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.

2

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.

3

Saisir le code d'accès

Code par défaut : KP2026!EDITION. À modifier lors du déploiement en production.

Fonctions disponibles

FonctionDescription
↺ Réinitialiser la numérotationRemet 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èmeExport de la configuration complète pour déployer une nouvelle instance identique.
🗑 Réinitialiser les facturesSupprime tous les dossiers factures + devis. Remet les compteurs à 1. Irréversible.
💣 Reset totalSupprime factures, devis, remet tous les compteurs à 1. Irréversible.

13 — Données

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

FormatContenuUsage
ODS Complet4 feuilles : Factures, Clients, Services, PiècesRapport comptable, archivage, modification en masse
JSON BackupSnapshot complet : clients, catalogue, params, facturesSauvegarde machine, migration d'instance, clone
CSV FacturesFactures du mois ou toutesImport comptabilité externe
ZIP PDFsPDFs des factures sélectionnéesArchivage, envoi groupé

Import

Le bouton "⬆ Importer données" accepte un fichier .ods ou .json. Deux modes :

Fusion (merge)
Les données existantes sont conservées. Les entrées identifiées par ID sont mises à jour. Nouvelles entrées ajoutées. Mode recommandé.
Remplacement complet
Les données existantes sont entièrement remplacées par celles du fichier importé. Irréversible — utiliser après une sauvegarde.
Important Le fichier importé n'est jamais conservé sur le serveur — il est lu, transformé, puis les données écrasent ou fusionnent avec les fichiers JSON. La source de vérité reste toujours le JSON côté serveur.

14 — Référence

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éfixeTypeFormatExemple
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
Règle légale Chaque séquence est strictement croissante, sans saut, sans doublon. Le numéro est généré côté serveur (gmk_num.php) avec verrouillage de fichier (flock) pour garantir l'atomicité même en accès concurrent.

15 — Référence

Fichiers & données

FichierRôle
gmk_config.phpConfiguration centrale. Tous les chemins calculés via __DIR__. Zéro hardcode. À inclure dans tous les PHP.
gmk_init.phpPoint d'entrée unique. Retourne en une requête : session, clients, catalogue, numéros, stats.
gmk_num.phpIncrémentation atomique des 4 compteurs avec verrouillage fichier.
gmk_data.phpCRUD clients, catalogue, params. Les 4 clés de numérotation ne sont jamais écrasées.
gmk_reset.phpOpérations de reset — accessible architecte uniquement.
save_facture_portail.phpSauvegarde F, FA, FP. Gère le marquage AVOIR_ÉMIS sur la facture référencée.
scan_factures_portail.phpListe et détail des factures depuis factures_gmk/.
gmk_export.phpExport CSV, ODS complet multi-feuilles, JSON backup, ZIP PDFs, recherche full-text.
gmk_import.phpImport ODS ou JSON — merge ou replace — architecte uniquement.
auth.phpAuthentification bcrypt. Logs locaux. Sans télémétrie externe.

16 — Référence

Sécurité & protection

Sessions PHP
Session avec timeout glissant de 60 minutes. Chaque requête PHP vérifie $_SESSION['gmk_auth']. Expiration → redirection portail.
Mots de passe bcrypt
Stockés hashés dans operateurs.json. Jamais en clair. Changeable via l'interface.
.htaccess data/
Require all denied sur le dossier data/ — aucun fichier JSON accessible directement depuis le web.
.htaccess factures/
Même protection sur factures_gmk/ et devis_gmk/ — les données clients ne sont accessibles qu'aux PHP authentifiés.
CORS dynamique
Les origines autorisées sont lues depuis gmk_params.json. Zéro hardcode de domaine dans les PHP.
Logs d'accès
Chaque connexion, chaque facture émise, chaque import est tracé dans logs/ avec IP et horodatage.
GMK.
ERP SOUVERAIN · V4.6 · GARAGE AUTOMOBILE