⚠ WIP — EN COURS MIGRATION DB SAAS MARIADB NODE.JS REACT

CBus — Gestion de flotte autocar

Migration d'une base de données Access legacy vers MariaDB et conception d'une application SaaS de gestion opérationnelle pour une entreprise de transport.
Projet en cours · Démarré en 2025

[!]

Note : Par respect de la confidentialité du client, le nom de l'entreprise et les données métier spécifiques ne sont pas divulgués. Les éléments présentés ici sont généralisés ou anonymisés. Le projet est réel et actif.

01. Contexte & problématique

L'entreprise cliente gère une flotte de véhicules de transport avec un logiciel Access développé en interne depuis plusieurs années. Cette base de données — environ 233 Mo, ~60 tables — centralise l'ensemble du cycle de vie opérationnel : offres de prix, ordres de course, décomptes chauffeurs et véhicules, facturation.

Le problème principal : Access atteint ses limites de scalabilité, bloque le travail multi-utilisateurs simultané, et rend impossible toute évolution vers une interface web moderne. L'objectif est de migrer vers une stack ouverte, pérenne, et d'y greffer une application web accessible depuis n'importe quel poste.

Contraintes héritées

  • Export CSV Access : délimiteur ;, encodage Windows-1252
  • ~25 tables avec données métier réelles
  • ~25 000 enregistrements à migrer
  • Noms de champs en français, parfois avec accents
  • Types de données Access non standards (Yes/No, Memo)

Objectifs techniques

  • Zéro perte de données lors de la migration
  • Schéma normalisé et typé proprement
  • Base hébergée sur infra auto-gérée (NAS Synology)
  • API REST consommable par un frontend React
  • Compatibilité Swiss/Swissdec pour la facturation

02. Stratégie de migration

La migration est découpée en deux bases MariaDB distinctes, avec une philosophie progressive : d'abord tout faire rentrer, ensuite tout nettoyer.

cbus_staging

Base intermédiaire "fourre-tout". Tous les champs en TEXT large pour absorber les incohérences des exports Access sans erreur d'insertion. Sert de filet de sécurité.

cbus_app

Base de production avec schéma tightened : types précis (DATE, DECIMAL, TINYINT(1)), clés étrangères, contraintes NOT NULL là où applicable.

Leçons apprises

  • Toujours utiliser le sélecteur graphique de base dans DBeaver plutôt que USE db; dans les scripts — les scripts multi-fichiers perdent le contexte de base facilement.
  • Les exports Access en CSV nécessitent un recodage UTF-8 explicite avant import (iconv ou pandas).
  • Les champs booléens Access (Yes/No) exportent en -1 / 0, pas 1 / 0 — gérer la transformation avant l'insert.

Exemple — transformation d'un enregistrement

# Recodage + nettoyage avant import MariaDB
import pandas as pd

df = pd.read_csv('export_access.csv',
    sep=';',
    encoding='windows-1252',
    quotechar='"'
)

# Normaliser les booléens Access (-1/0 → 1/0)
for col in df.select_dtypes(include='object').columns:
    df[col] = df[col].replace({'-1': '1', '-1.0': '1'})

# Sauvegarder en UTF-8 pour l'import MariaDB
df.to_csv('clean_export.csv',
    sep=';',
    encoding='utf-8',
    index=False
)

État d'avancement — tables migrées

Table Enregistrements Staging Production
Clients~800✔ DONE✔ DONE
Véhicules~120✔ DONE✔ DONE
Chauffeurs~80✔ DONE✔ DONE
Offres~3 500✔ DONE✔ DONE
Ordres de course~8 000✔ DONE⟳ EN COURS
Décomptes~6 000✔ DONE⟳ EN COURS
Factures~4 500✔ DONE— À FAIRE
Contacts / Prestataires~2 000✔ DONE— À FAIRE

03. Architecture technique

L'application est découpée en trois couches distinctes, hébergées sur l'infrastructure privée du client (NAS Synology + Proxmox).

Base de données — MariaDB DONE

Deux bases (cbus_staging + cbus_app), 15 tables, 3 vues SQL. Hébergée sur conteneur Docker sur NAS Synology. Administration via DBeaver.

API Backend — Node.js + Express WIP

API REST exposant les entités métier (Offres, Ordres, Chauffeurs, Véhicules, Factures). Authentification JWT. Déployée via Docker Compose.

Frontend — React + Vite + Tailwind WIP

Interface web couvrant : dashboard opérationnel, pipeline Kanban des offres, gestion des décomptes, suivi de facturation.

Mise en production & formation À VENIR

Déploiement final sur infra client, documentation utilisateur, formation des opérateurs.

Stack résumée

Infrastructure

  • Proxmox VE — hyperviseur
  • Docker / Compose — conteneurisation
  • Synology NAS — stockage & DB host
  • Nginx — reverse proxy

Applicatif

  • MariaDB — base de données
  • Node.js + Express — API REST
  • React + Vite — frontend
  • Tailwind CSS — styling

04. Objectif à terme — SaaS multi-entreprises

Au-delà de la migration, l'ambition est de transformer cette application en un produit SaaS générique, déployable pour n'importe quelle petite ou moyenne entreprise de transport par autocar en Suisse.

Le marché cible : les PME de transport qui s'appuient encore sur Excel, Access ou des solutions papier, et qui n'ont pas les moyens d'investir dans un ERP lourd. L'outil couvre l'intégralité du flux métier, de la demande client à la facturation.

Flux complet Offre → validation → ordre de course → décomptes → facturation
Décomptes automatisés Calcul mensuel par contrat, chauffeur et véhicule
Conformité suisse Compatibilité LDT/OTR (temps de conduite), export Swissdec
Gestion de flotte Suivi kilométrage, consommation, entretien véhicules
Groupes & hôtels Allocation de places et prestataires sur les voyages groupes
Multi-tenant Isolation des données par entreprise, déploiement mutualisé

Ce projet est en cours de développement et n'est pas encore disponible publiquement. Aucune donnée client réelle n'est exposée dans cette documentation.