Prod : https://egapro.travail.gouv.fr/
Préprod : https://egapro-preprod.ovh.fabrique.social.gouv.fr/
- Node.js >= 18
- Yarn
- Python (pour les scripts optionnels)
# Installation des dépendances Node.js
yarn install
# Si développement Python en local (optionnel)
yarn setup-python
Créer un fichier .env
à la racine du projet :
# Configuration de la base de données
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/egapro
# Configuration de l'API
NEXT_PUBLIC_API_URL=http://localhost:3000
- Mode développement par composant
# API
yarn dev:api
# Application Next.js
yarn dev:app
# Serveur de mail de développement
yarn dev:maildev
Accès aux services :
- Application : http://localhost:3000
- API : http://localhost:2626
- MailDev : http://localhost:1080
- Mode développement complet
# Lance tous les services en parallèle
yarn dev
- Arrêter l'application
- Utiliser
Ctrl+C
dans chaque terminal - Pour l'API et maildev :
docker-compose down
# Lancer tous les tests
yarn test
# Vérifier le code
yarn check-all
-
CURRENT_YEAR
(définie danspackages/app/src/common/dict.ts
) :- Année de déclaration courante ouverte
- Détermine les années disponibles pour les déclarations
-
PUBLIC_CURRENT_YEAR
(définie danspackages/app/src/common/dict.ts
) :- Année de référence pour les calculs de statistiques publiques
- Utilisée pour l'affichage des données publiques et des indicateurs
packages/app/src/
├── app/ # Routes et UI Next.js
│ ├── (default)/ # Layout principal
│ │ ├── index-egapro/
│ │ │ ├── declaration/
│ │ │ │ └── actions.ts # Server actions
├── api/
│ └── core-domain/ # Logique métier
│ ├── useCases/ # Cas d'utilisation
│ │ └── SaveDeclaration.ts
│ └── infra/ # Infrastructure
├── common/
└── core-domain/ # Domain partagé
└── computers/ # Calculs d'index
-
Forms et Validation :
- React Hook Form pour la gestion des formulaires
- Zod pour la validation des données côté client
- Exemple :
const schema = z.object({ email: z.string().email(), password: z.string().min(8) });
-
Server Actions :
- Actions serveur dans
app/(default)/*/actions.ts
- Utilisation des use cases du domaine
- Exemple :
// app/(default)/index-egapro/declaration/actions.ts export async function saveDeclaration(declaration: CreateDeclarationDTO) { const useCase = new SaveDeclaration(declarationRepo, entrepriseService); return useCase.execute(declaration); }
- Actions serveur dans
-
Use Cases :
- Implémentation des cas d'utilisation métier
- Validation des règles de gestion
- Exemple :
// api/core-domain/useCases/SaveDeclaration.ts export class SaveDeclaration implements UseCase { constructor( private readonly declarationRepo: IDeclarationRepo, private readonly entrepriseService: IEntrepriseService ) {} }
-
Domain et Calculs :
- Logique métier dans
core-domain
- Calculs d'index dans
computers/
- Indicateurs spécifiques :
- IndicateurUnComputer : Calcul écart rémunération
- IndicateurDeuxComputer : Calcul écart augmentations
- IndicateurTroisComputer : Calcul écart promotions
- Logique métier dans
cd packages/app
yarn workspace app run tsc
yarn workspace app add moment
yarn workspace app run test
yarn workspaces run lint
Ajouter le préfixe maildev-
devant l'URL.
Si l'environnement est https://egapro-feat-limit-char-11oson.ovh.fabrique.social.gouv.fr/
.
Le maildev se trouvera alors à https://maildev-egapro-feat-limit-char-11oson.ovh.fabrique.social.gouv.fr/
Certains fichiers sont exposés par le serveur web pour différents acteurs.
Le fichier index-egalite-fh.csv est généré tous les jours et accessible sans restriction.
Les fichiers suivants, sont accessibles uniquement si authentifié ou pour certaines adresses IP (voir la liste blanche dans .kontinuous/values.yaml
).
- dgt.xlsx
- dgt-representation.xlsx
- full.ndjson
- indexes.csv
egapro export-public-data /mnt/files/index-egalite-fh.xlsx
egapro dump-dgt /mnt/files/dgt.xlsx
egapro dump-dgt-representation /mnt/files/dgt-representation.xlsx
egapro full /mnt/files/full.ndjson
egapro export-indexes /mnt/files/indexes.csv
egapro export-representation /mnt/files/dgt-export-representation.xlsx
L'API contient un CLI avec certaines commandes utiles :
Pour les lancer :
yarn egapro --help
Les commandes vont se lancer dans l'environnement local.
Si l'on veut lancer ces commandes dans un container (ex: en prod, en préprod ou dans un environnement lié à une PR), il faut se connecter au container et lancer la commande egapro.
Chaque année une campagne de déclaration a lieu durant laquelle les entreprises de France de plus de 50 employés doivent effectuer une déclaration permettant de calculer leur index d'égalité femme-homme. La campage de déclaration se déroule entre Février et Mars et pendant cette période la fréquentation du site Egapro augmente fortement.
Nous constatons également que lors de la dernière semaine de la campage, la fréquentation double en comparaison de la semaine précédente.
Il est donc recommandé d'augmenter les ressources allouées à l'application Egapro en production avant le pic de la dernière semaine de la campagne de déclaration de l'index.
Période | Nombre de réplicas Min | Nombre de réplicas Max |
---|---|---|
hors campagne | 2 | 6 |
début de campagne | 4 | 8 |
fin de campagne | 6 | 12 |
⚠️ Il est préférable de tester le mécanisme de scale-up de l'application en production avant le commencement de la campagne. Il faut s'assurer qu'au moment du scale-up l'application pourra continuer à répondre aux requêtes des clients le temps que les nouveaux pods soient disponibles.