Cette documentation est technique. Pour plus d'informations sur le simulateur d'aides pour les jeunes, regardez notre wiki.
L'interface utilisateur (et le serveur principal) du simulateur d'aides et de prestations sociales pour les jeunes. Il est basé sur simulateur socio-fiscal libre Openfisca.
- Github Actions (config)
- Continuous integration and deployment
- Netlify
- Deloy previews
- SMTP server
- Matomo (stats.beta.gouv.fr)
- Sentry
If you want to play with the UI, you can be set up very quickly:
npm ci
npm run front
Cf. package.json
for more on the underlying commands.
The application should be accessible at localhost:8080
.
Make sure node
18.x is installed on your machine:
And also build-essential
, mongodb
are installed on your machine:
sudo apt-get install build-essential
sudo apt-get install mongodb
And also brew
is installed on your machine:
brew tap mongodb/brew # Download official homebrew formula for MongoDb
brew update # Update Homebrew and all existing formulae
brew install [email protected] # Install MongoDb
The runtime is Node 18.x for the web application, and Python >= 3.9 for Openfisca.
You can for example use nvm
to install this specific version.
You will need pip
to install Openfisca.
Run the following from the root of the project to install the dependencies
npm ci
There are 2 ways to run Openfisca:
- either by installing its dependencies in a Python virual environment locally on your machine
- or by using Docker to pull and build an image with the required dependencies
You should install Python 3 in a virtual environment to prevent yourself from messing with your main python installation. The instructions below rely on the built-in venv
module so that there are no additional external dependencies:
python3 -m venv .venv # create the virtual environment in the .venv folder
source .venv/bin/activate # activate the virtual environment
pip install pip --upgrade # make sure we're using the latest pip version
npm run install-openfisca # install dependencies
Then, to start the OpenFisca server, simply run source .venv/bin/activate
followed by npm run openfisca
.
OpenFisca dependencies are specified in openfisca/requirements.txt, a basic Python requirements file. It is possible to refer to non-production commit hashs but is prefered to use main-merged commits.
If you want to run Openfisca without having to install a specific version of Python or create a virtual environment you can use the docker file provided to run Openfisca in a container. From the root of the project run the following command to build the docker image:
docker build -f openfisca/Dockerfile ./openfisca -t openfisca
If you are working on openfisca-france
and want to use your local version:
cd (...)/openfisca-france
pip install --editable .
If you want to test locally the app in production mode:
npm run build
npm run start
First, start a Mongo server:
npm run db
Then, in another shell you will need to start openfisca. If you installed it locally activate the virtual environment (run source .venv/bin/activate
) and start the Openfisca server:
OPENFISCA_WORKERS=1 npm run openfisca
If instead you want to run Openfisca in a docker container run:
docker run -d -p 2000:2000 openfisca
(note that in that case Openfisca will run in the background and you will have to run docker ps
and docker stop XXXXX
where XXXXX is the container ID to stop Openfisca)
Finally, in a third shell, start the server:
npm run serve
There are several levels of tests:
- Unit tests are executed by Jest and run with
npm test
. - End-to-end test are executed with Cypress with
npm run cypress
You can safely use npm test && npm run cypress
to drive your developments.
In Cypress tests, we verify that email functionality works. To check this locally, you need to copy and paste the environmental variables from .env.e2e to your .env file (and create the .env file if you don't already have one).
We use the framework MJML to design and integrate the templates. Tipimail is our service to send emails.
The development server for emails can be easily start with: npm run tools:serve-mail
If you want to verify the email sending process, you can generate a set of the required SMTP_*
environment variables by running ts-node tools/create-temp-smtp-server.ts
to generate a test account on https://ethereal.email
.
We use ESLint as a linter and Prettier to format the codebase. We also utilize some ESLint plugins, such as vue-eslint and eslint-plugin-cypress, to provide a support for tests and framework.
SSHs keys were generated to run scripts on the production server.
The main
and dev
branches are automatically deployed on the production server when they are updated using a continuous deployment script.
Note that it is also possible to re-trigger a deployment manually by clicking on Run workflow
button on the continuous deployment's page and selecting either the main
or dev
branch.
To access the applications server it is possible to connect to it with a registered public key using ssh:
In order to use those tools you need to build the server at least once using the command npm run build:server
.
-
npm run husky
installs git hooks used to facilitate development and reduce the CI running time. We use Talisman to to ensure that potential secrets or sensitive information do not leave the developer's workstation. You need to install Talisman before : https://github.com/thoughtworks/talisman/releases orbrew install talisman
. To skip talisman, you can use -n when you commit. -
npm run tools:check-links-validity
validates links to 3rd parties in benefits files. -
npm run tools:cleaner
cleans simulations data older than 31 days. -
npm run tools:evaluate-benefits <simulationId>
evaluates benefits linked to a simulation id. -
npm run tools:generate-missing-institutions-aides-velo
generates missing institutions for the packageaides-velo
. -
npm run tools:download-incitations-covoiturage-generate-missing-institutions
download new carpooling incentives and generates missing epci for the Open DataRegistre de Preuve de Covoiturage
. -
npm run tools:geographical-benefits-details
gets the relevant benefits for each commune. -
npm run tools:get-all-steps
gets all the steps and substeps of a simulation. -
npm run tools:serve-mail
generates emails which contain the result of a simulation or a survey. -
npm run tools:test-benefits-geographical-constraint-consistency
validates geographical constraint consistency of benefits. -
npm run tools:test-definition-periods
validates the periods of openfisca requested variables. -
Locally or on production, it is possible to visualize all the available benefits of the simulator. It is done by adding
debug
as a parameter. It is also possible to setdebug=ppa,rsa
to choose which benefits are listed. -
Adding
debug=parcours
as a parameter, show a debug version of all the steps in the simulator, locally and production. -
OpenFisca tracer allows you to debug OpenFisca computations. (source)
It is possible to generate simulation statistics from the database running the commande npm run tools:generate-mongo-stats
.
This will generate 3 csv files in the dist/documents
folder:
monthly_activite.csv
that lists the number of simulations per activity for each monthmonthly_age.csv
that lists the number of simulations per age for each monthmonthly_geo.csv
that lists the number of simulations per epci, departement and regions for each month
It is possible to locally debug changes in Decap CMS configuration.
npm ci
andnpm run dev
should be ran fromcontribuer
.- Decap CMS should now be accessible at
http://localhost:3000/admin/index.html
If you want changes to be made locally instead of generating pull requests in production:
- First, contribuer/public/admin/config.yml#L19 (
local_backend: true
) must be uncommented; npx netlify-cms-proxy-server
should be ran from.
and
Some parameters can be use to debug the command
--dry-run
: this command is useful to not send update/new row to Grist--no-priority
: without getting priority from analytic data--only [slug benefit]
: work on specific benefit
Here is an example of how using this parameters
npm run tools:check-links-validity -- --dry-run
The data source comes from this : https://www.data.gouv.fr/fr/datasets/conditions-des-campagnes-dincitation-financiere-au-covoiturage/ We use Grist to add custom informations like, if a benefit is link to an institution or epci, ... One parameter can be use to debug the command
--no-download
: avoid download new data from Grist
Here is an example of how using this parameters
npm run tools:download-incitations-covoiturage-generate-missing-institutions -- --no-download