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.