betagouv / aides-jeunes

Un simulateur global des prestations sociales françaises pour les jeunes.
https://mes-aides.1jeune1solution.beta.gouv.fr/
GNU Affero General Public License v3.0
80 stars 33 forks source link
mes-aides openfisca openfisca-server

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.

Setup

Stack

3rd parties

Front only install

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.

Full install

System dependencies

Make sure node 18.x is installed on your machine:

Ubuntu

And also build-essential, mongodb are installed on your machine:

sudo apt-get install build-essential
sudo apt-get install mongodb

MacOs

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 mongodb-community@7.0 # Install MongoDb

For all platforms

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.

Application

Run the following from the root of the project to install the dependencies

npm ci

Openfisca

There are 2 ways to run Openfisca:

Install Openfisca in a virtual environment

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.

Install and run Openfisca in a docker container

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

Development mode

If you are working on openfisca-france and want to use your local version:

cd (...)/openfisca-france
pip install --editable .

Test in production mode

If you want to test locally the app in production mode:

npm run build
npm run start

Usage

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

Testing

There are several levels of tests:

You can safely use npm test && npm run cypress to drive your developments.

Development Environment and Cypress

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).

Email

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.

Linting and format

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.

Continuous deployment

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:

ssh debian@equinoxe.mes-aides.1jeune1solution.beta.gouv.fr

Other tools scripts & tips

In order to use those tools you need to build the server at least once using the command npm run build:server.

Export simulations data from database

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:

Decap CMS development

It is possible to locally debug changes in Decap CMS configuration.

If you want changes to be made locally instead of generating pull requests in production:

Check Link Validity

Some parameters can be use to debug the command

Here is an example of how using this parameters npm run tools:check-links-validity -- --dry-run

Download carpooling incentives and generate missing ecpi

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

Here is an example of how using this parameters npm run tools:download-incitations-covoiturage-generate-missing-institutions -- --no-download