Skip to content

betagouv/mon-devis-sans-oublis-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mon Devis Sans Oublis

Capture d’écran 2024-07-09 à 12 02 42

Introduction

Ce repo est le code source pour faire tourner la plateforme Mon Devis Sans Oublis (MDSO) basé sur certains services et outils choisis :

Le projet est encore en tout début de phase de construction et donc sujet à évolutions à travers des cyclse courts.

  • Ruby on Rails version 7 comme boîte à outil et socle technique applicatif ;
  • le DSFR pour réutiliser les éléments graphiques officiels via la librairie de composants DSFR
  • PostgreSQL comme base de données pour stocker les données ;
  • des solutions de LLM pour interroger les devis, via la boîte à outils LangChain *** Albert API d'Etalab *** Mistral.ai : données publiques et/ou anonymisées *** Ollama : un modèle Llama local
  • l'API Data de l'ADEME pour croiser les données d'entreprises qualifiées ;
  • des annuaires officiels de professionnels pour croiser des données ;
  • Publi.codes pour un moteur de validation basé sur des règles (plus utilisé pour le moment) ;
  • Sentry pour monitorer et être alerté en cas d'erreur ;
  • Matomo pour mesurer et comprendre l'usage via des analytics ;
  • RSpec comme framework de tests ;
  • Rswag comme outil de documentation au format Swagger/ OpenAPI de l'API à travers des tests ;
  • Cucumber et Capybara pour les tests BDD ;
  • Rubocop (RSpec et Rails) pour le linting ;
  • Docker pour avoir un environnement de développement.

Moteur et fonctionnement interne / Architecture

Les fichiers devis sont traités par le QuoteChecksController qui les envoient aux services:

  • QuoteReader lisant le devis brut puis extractant les information du devis de manière naïve en se basant sur le texte du PDF et via solutions LLM avec croisement de données d'annuaires publiques de la rénovation
  • puis ces attributs de devis sont vérifier par le QuoteValdiator qui controlle un ensemble de règles et renvoit les erreurs correspondantes

Tester un devis en local

docker compose exec web rake 'quote_checks:create[tmp/devis_tests/DC004200PAC-Aireau+Chauffe eau thermo.pdf]' | less

API

  • au format REST JSON
  • protéger via authentification HTTP Basic avec Bearer hashé
  • voir fichier de documentation de l'API au format OpenAPI Swagger et interface bac à sable interractif sur /api-docs
  • regénération et mise à jour de la documentation à partir des spécifications tests via make doc

Démarrage

docker-compose up

ou si vous l'installez directement (non recommandé)

DATABASE_URL='postgresql://postgres:dummy@localhost:5433' bin/rails server -b 0.0.0.0

Environnement

Tout l'environnement est configuré pour et depuis Docker. Des commandes utiles sont fournies dans le Makefile.

Back office

Un tableau de suivis des devis soumis est disponible sur /mdso/admin sous mot de passe hors développement.

Tâches asynchrones

Elles sont listées dans la base de données PostgreSQL via le librairie good_job.

Un panneau de suivis est disponible sur /mdso_good_job/ sous mot de passe hors développement.

Mails

Ils sont envoyés en asynchrones via le service Brevo.

Intégration continue

Une cinématique GitHub Action est founie qui lance :

  • le linting via Rubocop ;
  • les tests unitaires ia RSpec ;
  • les tests d'intégration.

Cette cinématique commence d'abord par construire l'image Docker qu'elle transmet ensuite aux trois étapes ci-dessus, ce qui évite de répéter trois fois l'installation et la configuration du projet sans sacrifier le parallèlisme de ces étapes.