Passe Marché
Passe Marché est une application Rails 8 qui simplifie les candidatures aux marchés publics pour les petites et moyennes entreprises (PME). Le projet vise à transformer les procédures d'appel d'offres complexes en un processus rationalisé et convivial, intégré aux plateformes d'achat existantes.
🎯 Objectif
Faciliter l'accès des PME aux marchés publics français en :
Réduisant les formalités administratives
Automatisant l'identification des entreprises (SIRET)
Simplifiant la gestion documentaire
Fournissant des attestations officielles
✨ Fonctionnalités principales
🔐 Authentification OAuth
Intégration avec les plateformes de marchés publics
Flux d'autorisation sécurisé
Gestion des tokens et des scopes
🔗 Système de Webhooks
Notifications en temps réel vers les plateformes de marchés publics
Signatures HMAC pour la sécurité
Système de retry intelligent avec circuit breaker
Gestion centralisée des événements webhook
📋 Gestion documentaire
Documents requis par type de marché
Validation PDF uniquement (version MVP)
Génération automatique d'attestations
Téléchargement sécurisé
🏢 Identification SIRET
Validation automatique des numéros SIRET
Récupération des informations d'entreprise
🎨 Interface gouvernementale
Système de Design de l'État (DSFR)
Interface accessible et responsive
Thèmes clair/sombre/système
Conformité aux standards gouvernementaux
🌍 Internationalisation
Support multilingue (français/anglais)
Configuration i18n complète
Contenu externalisé dans des fichiers YAML
🛠 Technologies utilisées
Requirements
ruby 3.4.5
postrgresql >= 15
Backend
Rails 8.0.2 - Framework web
Solid Cable/Cache/Queue - Infrastructure Rails database-backed
Frontend
DSFR (Système de Design de l'État) v1.13.0 - Framework CSS gouvernemental
Turbo & Stimulus (Hotwire) - Interactivité frontend
Importmap - Gestion des modules JavaScript
Propshaft - Pipeline d'assets moderne
Tests et Qualité
RSpec - Tests unitaires et d'intégration
Cucumber - Tests comportementaux (BDD)
FactoryBot - Génération de données de test
Shoulda Matchers - Matchers de test avancés
RuboCop - Analyse statique du code
Capybara + Selenium - Tests système
📋 Prérequis
Ruby 3.4.5
PostgreSQL 12+
Git
🌐 Environnements
🧪 Sandbox (environnement de test)
Passe Marché : https://sandbox.voie-rapide.services.api.gouv.fr/
Éditeur de démonstration (Fake Editor) : https://sandbox.voie-rapide-edition.services.api.gouv.fr/
Ces environnements permettent de tester l'intégration complète sans affecter les données de production.
🚀 Installation et configuration
1. Cloner le projet
3. Installer/configurer
🔧 Commandes de développement
Serveur de développement
Application de démonstration (Fake Editor App)
Base de données
Tests
Qualité du code
Administration des plateformes de marchés publics et webhooks
Assets
Configuration des champs et traductions
Configuration des champs (field_configuration)
Ces tâches permettent de configurer les champs de formulaire à partir d'un fichier CSV :
field_configuration:import: Importe la configuration des champs depuis le fichier CSV par défaut (config/form_fields/fields.csv)Crée les
MarketAttributeet associations avec lesMarketTypeSupprime en mode soft-delete les champs non présents dans le CSV
Affiche des statistiques détaillées de l'import
field_configuration:import_from_file: Même fonctionnalité mais avec un fichier CSV personnaliséfield_configuration:validate: Valide la structure et le contenu du fichier CSV sans effectuer d'import
Structure du fichier CSV attendu
Le fichier CSV doit contenir les colonnes suivantes (ligne 4 = en-têtes) :
category_key,subcategory_key,key: Clés techniquescategory_acheteur,subcategory_acheteur: Traductions des catégories/sous-catégoriestitre_acheteur,description_acheteur: Traductions des champs côté acheteurimport:ouipour les lignes à traiterColonnes de types de marchés :
services,fournitures,travaux,défense
🏗 Architecture
Structure Rails
Modules principaux
Module:
VoieRapide- Module principal de l'applicationLocales: Français (défaut), Anglais
Base de données: PostgreSQL avec schémas multiples
🔐 Sécurité
Standards appliqués
Protection CSRF intégrée
Paramètres forts (Strong Parameters)
Validation côté serveur
Sanitisation des entrées utilisateur
Authentification OAuth2 sécurisée
Conformité
Respect du RGPD
Standards d'accessibilité gouvernementaux
Sécurité des données sensibles
Audit et logs de sécurité
🌐 Internationalisation
L'application supporte plusieurs langues via Rails i18n :
Langues disponibles
Français (défaut) -
frAnglais -
en
Structure des traductions
🎭 Application de Démonstration (Fake Editor App)
Une application Sinatra complète qui démontre l'intégration OAuth2 avec Passe Marché.
Fonctionnalités
Authentification OAuth2 : Client Credentials flow
Dashboard visuel : Statut et détails des tokens en temps réel
Gestion des tokens : Authentification, rafraîchissement, nettoyage
Base SQLite : Stockage local des tokens
Interface utilisateur : Design inspiré du DSFR
Démarrage rapide
Utilisation
Cliquer sur "S'authentifier" pour obtenir un token OAuth2
Visualiser les détails du token (expiration, scope, etc.)
Utiliser "Rafraîchir le Token" pour renouveler
Tester l'intégration complète avec l'API
Voir fake_editor_app/README.md pour plus de détails.
🧪 Tests
Types de tests
Tests unitaires (RSpec) - Modèles, contrôleurs, services
Tests d'intégration (RSpec) - Flux complets
Tests comportementaux (Cucumber) - Scénarios utilisateur
Tests système (Capybara) - Interface utilisateur
Couverture actuelle
✅ Page d'accueil avec DSFR
✅ Intégration i18n
✅ Configuration de base
✅ Authentification OAuth2
✅ Qualité de code (RuboCop)
Exécution des tests
Couverture de code (SimpleCov)
Le projet utilise SimpleCov pour mesurer la couverture de code.
Le rapport est généré dans le dossier coverage/ à la racine du projet. Il combine automatiquement la couverture de RSpec et Cucumber.
🚢 Déploiement
Configuration de production
Variables d'environnement pour les secrets
Configuration SSL/TLS
Optimisation des assets
Configuration de la base de données
Logs et monitoring
Outils de déploiement
Kamal - Déploiement Docker
Thruster - Mise en cache et accélération
Support des conteneurs Docker
🤝 Contribution
Standards de développement
Recherche → Planification → Implémentation
Tests obligatoires (RSpec + Cucumber)
Qualité code (RuboCop sans violation)
Convention Rails respectée
Documentation i18n en français
Workflow de contribution
Créer une branche feature
Développer avec tests
Vérifier la qualité (
bin/rubocop)Exécuter tous les tests
Créer une pull request
📚 Documentation
La documentation technique est publiée sur GitBook. Tout nouveau fichier doit être référencé dans SUMMARY.md pour y apparaître.
🚀 Pour les Équipes Techniques
📖 Guide de Démarrage - Navigation et glossaire de toute la documentation
🏃♂️ Démarrage Rapide - Intégration complète en 30 minutes
📋 Documentation Technique Détaillée
Authentification et Sécurité
🔐 Authentification OAuth2 - Flux Client Credentials, gestion tokens, sécurité
🔔 Webhooks - Notifications temps réel, signatures HMAC, retry intelligent
Flux Métier
🏢 Flux Acheteur - Création et configuration des marchés publics
👥 Flux Candidat - Soumission et finalisation des candidatures
Références Techniques
⚙️ Référence API - Spécifications complètes des endpoints
🏗️ Schémas d'Intégration - Architecture et diagrammes techniques
💡 Application de Démonstration
🎭 Fake Editor App - Exemple d'implémentation OAuth2
Ressources utiles
Conventions du projet
Code en anglais, interface en français
Messages de commit en français
Documentation technique en français
Tests comportementaux en français
📄 Licence
Ce projet est développé pour l'administration française dans le cadre de l'amélioration de l'accès aux marchés publics.
🙋♂️ Support
Pour toute question ou problème :
Consulter la documentation
Vérifier les issues existantes
Créer une nouvelle issue avec les détails
Passe Marché - Simplifiez vos candidatures aux marchés publics 🚀
Mis à jour
Ce contenu vous a-t-il été utile ?

