Skip to content

SocialGouv/egapro

Repository files navigation

EgaPro

URL

Prod : https://egapro.travail.gouv.fr/

Préprod : https://egapro-preprod.ovh.fabrique.social.gouv.fr/

Installation

Prérequis

  • Node.js >= 18
  • Yarn
  • Python (pour les scripts optionnels)

Installation des dépendances

# Installation des dépendances Node.js
yarn install

# Si développement Python en local (optionnel)
yarn setup-python

Variables d'environnement

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

Lancer l'application

  1. 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 :

  1. Mode développement complet
# Lance tous les services en parallèle
yarn dev
  1. Arrêter l'application
  • Utiliser Ctrl+C dans chaque terminal
  • Pour l'API et maildev : docker-compose down

Tests et vérifications

# Lancer tous les tests
yarn test

# Vérifier le code
yarn check-all

Configuration

Variables annuelles importantes

  • CURRENT_YEAR (définie dans packages/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 dans packages/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

Architecture

Structure des fichiers

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

Concepts clés

  1. 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)
    });
  2. 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);
    }
  3. 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
      ) {}
    }
  4. 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

FAQ

Comment lancer la compilation TS ?

cd packages/app
yarn workspace app run tsc

Comment ajouter une librairie dans un workspace ?

yarn workspace app add moment

Comment lancer un script dans un package ?

yarn workspace app run test

Comment lancer un script dans tous les workspaces ?

yarn workspaces run lint

Quel est le maildev pour un environnement de recette ?

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/

Fichiers

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

Commandes pour générer les fichiers manuellement

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

Helpers egapro

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.