Un simulateur web pour calculer l'impact d'un revenu de base sur les revenus des ménages, inspiré par les propositions politiques actuelles. Le projet utilise FastAPI pour le backend, Streamlit pour le frontend, et pytest-bdd pour les tests.
- Calcul du revenu de base selon le statut (célibataire, en couple) et le nombre d'enfants.
- Visualisation interactive des résultats avec des graphiques comparatifs (barres, camembert).
- Base de données SQL pour stocker les simulations.
- Tests BDD avec
pytest-bddpour la validation des scénarios. - Déploiement automatisé via GitHub Actions et Docker.
- Un shell POSIX. N'importe lequel.
- GnuMake
- Docker
- Docker Compose
- Une instance de Traefik déjà configurée et fonctionnelle.
Il faudra en plus :
For debian like distribution do :
sudo apt install git reuse shellcheck bats tappy
sudo apt install build-essetial automake
sudo apt install libzip-dev libxml2-dev libpoppler-cpp-dev libpcre3-dev
git clone https://github.com/goeb/reqflow.git
cd reqflow
./configure
make
sudo make installFor debian like distribution do :
sudo apt install asciidoctor ruby-asciidoctor-pdf
sudo gem install asciidoctor-diagram asciidoctor-diagram-ditaaminigit clone https://github.com/ffurfaro/simulateur_revenu_de_base.git
cd simulateur_revenu_de_baseCréez le fichier de paramétrage par défaut :
make .envPuis éditez le fichier .env pour adapter a vos besoins.
Principalement le nom de domaine du projet.
Le nom du network docker externe sur lequel traefik écoute.
Et potentiellement le nom de l'instance pour éviter d'avoir plusieurs instance du même nom si vous en lancez en parallèle sur le même serveur.
Ensuite soit vous disposez d'un enregistrement DNS correspondant a votre config. Soit vous mettez un alias dans le fichier /etc/hosts de toutes le machine avec lesquels vous voulez accéder au site.
IP_DU_SERVEUR nom.de.domaine.du.service
make start- Le frontend Streamlit sera disponible sur http://nom.de.domaine.du.service
- La documentation FastAPI sera disponible sur http://backend.nom.de.domaine.du.service
En cas de problème de CacheConfigs :
docker-compose down --volumes --rmi all --remove-orphans
docker builder prune -f
docker system prune --volumes -fdocker network create traefik
make test_mode_startcd backend
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou `venv\Scripts\activate` sur Windows
pip install -r requirements.txt
uvicorn app.main:app --reloadcd frontend
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
streamlit run app.pycd backend
pytest- Les scénarios BDD sont définis dans
backend/tests/features/. - Les étapes de test sont implémentées dans
backend/tests/steps/.
docker-compose up --build- Configurer les variables d'environnement (par exemple,
DATABASE_URL). - Déployer avec Docker Compose sur ta VM :
scp docker-compose.yml user@ton-serveur:/chemin/vers/le/projet ssh user@ton-serveur cd /chemin/vers/le/projet docker-compose up -d - Configurer un reverse proxy (Nginx, Traefik) pour exposer les ports 80/443.
- Le workflow
.github/workflows/ci-cd.ymlest configuré pour :- Lancer les tests à chaque push/PR.
- Construire et pousser les images Docker sur Docker Hub.
- Variables secrètes :
DOCKER_USERNAME: Identifiant Docker Hub.DOCKER_PASSWORD: Mot de passe ou token Docker Hub.
simulateur_revenu_de_base/
│
├── backend/
│ ├── app/
│ │ ├── __init__.py
│ │ ├── main.py # FastAPI app
│ │ ├── models.py # Modèles SQLAlchemy
│ │ ├── schemas.py # Schémas Pydantic
│ │ ├── crud.py # Logique CRUD
│ │ └── database.py # Configuration de la base de données
│ ├── tests/
│ │ ├── features/ # Fichiers BDD (Gherkin)
│ │ └── steps/ # Étapes pytest-bdd
│ ├── requirements.txt
│ └── Dockerfile
│
├── frontend/
│ ├── app.py # Streamlit app
│ └── Dockerfile
|
├── tests/
│ ├── unit/ # Tests unitaires/BDD pour le backend
│ │ ├── features/
│ │ └── steps/
│ ├── e2e/ # Tests end-to-end (frontend + backend)
│ │ ├── test_simulation.py
│ │ └── conftest.py
│ └── requirements.txt # Dépendances spécifiques aux tests
|
├── .github/
│ └── workflows/
│ └── ci-cd.yml # GitHub Actions pour CI/CD
│
├── docker-compose.yml
|
└── README.md
| Variable | Description | Exemple de valeur |
|---|---|---|
DATABASE_URL |
URL de la base de données PostgreSQL | postgresql://user:pass@db:5432/db |
Les contributions sont les bienvenues ! Voici comment contribuer :
- Fork le dépôt.
- Crée une branche pour ta fonctionnalité (
git checkout -b ma-nouvelle-fonctionnalite). - Commit tes changements (
git commit -am 'Ajout d'une nouvelle fonctionnalité'). - Push la branche (
git push origin ma-nouvelle-fonctionnalite). - Ouvre une Pull Request.
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Pour toute question ou suggestion, contacte-moi à fabien.furfaro@gmail.com.
