Outil d'aide à la décision pour les mouvements de viandes (abattoirs et établissements alimentaires) en contexte de Peste Porcine Africaine. Écosystème Beta.gouv.
ODICE remplace un formulaire Grist par une application web qui calcule, à partir de 5-6 inputs réglementaires (zone d'origine des suidés, statut sanitaire, agrément MCA, etc.), les autorisations applicables aux mouvements de viandes en contexte de Peste Porcine Africaine (PPA).
- Simulateur Abattoirs — pour les abattoirs qui expédient de la viande
- Simulateur Établissements — pour les établissements du secteur alimentaire (découpe, transformation, entrepôt) qui réexpédient de la viande déjà en circulation
- Résultats réglementaires calculés : marque sanitaire à apposer, territoire autorisé, LPS, certification zoosanitaire, traitement d'atténuation
| Outil | Version |
|---|---|
| React | 19 |
| Vite | 8 |
| TypeScript (strict) | 5.7+ |
DSFR (@gouvfr/dsfr) |
1.14 |
| Tailwind CSS | 4 |
react-router-dom |
7 |
zod |
3 |
| Vitest | 4 |
| Playwright | 1.x |
| ESLint + Prettier | 9 / 3 |
| pnpm | 10 |
- Node.js 24.x (voir
.node-version) - pnpm 10.x (déclaré via
packageManager)
pnpm install
pnpm devL'application est servie sur http://localhost:5173.
| Script | Description |
|---|---|
pnpm dev |
Démarre le serveur Vite en mode développement |
pnpm build |
Génère le build statique (dist/) |
pnpm start |
Sert le build (dist/) en SPA mode via serve (prod) |
pnpm preview |
Prévisualise le build généré (vite preview, dev) |
pnpm test |
Lance les tests unitaires Vitest |
pnpm test:watch |
Tests unitaires en mode watch |
pnpm test:e2e |
Lance les tests E2E Playwright (Chromium) |
pnpm test:e2e:ui |
Tests E2E en mode interactif |
pnpm lint |
Lint ESLint |
pnpm lint:fix |
Lint ESLint avec correction automatique |
pnpm format |
Formate avec Prettier |
pnpm format:check |
Vérifie le formatage sans modifier |
pnpm typecheck |
Vérifie le typage TypeScript |
pnpm validate |
Vérif rapide : format + lint:fix + typecheck + test |
pnpm validate:full |
Vérif complète : validate + tests E2E Playwright |
odice/
├── .claude/ # Hooks, skills et settings Claude Code
├── .github/ # CI et Dependabot
├── docs/
│ └── adr/ # Architecture Decision Records
├── public/ # Assets statiques
├── src/
│ ├── engine/ # Moteur de règles TypeScript pur (sans React)
│ │ ├── types.ts # Inputs / outputs des simulateurs
│ │ ├── rules.ts # Règles métier PPA
│ │ └── evaluate.ts # Point d'entrée du moteur
│ ├── features/ # Pages organisées par parcours utilisateur
│ │ ├── home/
│ │ └── simulateurs/ # Sous-domaine simulateurs (composants partagés possibles)
│ │ ├── abattoirs/
│ │ └── etablissements/
│ ├── shared/ # Composants, hooks, utilitaires partagés
│ │ ├── components/
│ │ ├── config/
│ │ ├── hooks/
│ │ └── utils/
│ ├── App.tsx
│ └── main.tsx
├── styles/ # Styles globaux (Tailwind)
├── tests/
│ ├── e2e/ # Tests Playwright
│ └── fixtures/ # Fixtures partagées
└── ...
Les règles PPA sont implémentées dans src/engine/rules.ts. Le moteur est volontairement isolé de React et testable en pur TypeScript.
Toute modification des règles DOIT être accompagnée :
- d'un test Vitest couvrant le cas (
src/engine/evaluate.spec.ts) - d'une référence à la source réglementaire (instruction technique, arrêté, etc.) dans un commentaire
Le workflow GitHub Actions .github/workflows/ci.yml s'exécute :
- À chaque push sur n'importe quelle branche
- À chaque pull request ciblant
mainoudev
Étapes exécutées (job ci, runner Ubuntu) :
- Setup pnpm + Node.js (version lue depuis
.node-version, cache pnpm activé) pnpm install --frozen-lockfile— installation reproductible depuis le lockfilepnpm format:check— vérification du formatage Prettier (sans modification)pnpm lint— ESLintpnpm typecheck— vérification TypeScript strictepnpm test— tests unitaires Vitestpnpm exec playwright install --with-deps chromium— installation du navigateur + libs systèmepnpm test:e2e— tests E2E Playwright (Chromium)- Artefact
playwright-report/uploadé en cas d'échec (conservé 7 jours) pnpm build— build statique de production
Mises à jour des dépendances : Dependabot (.github/dependabot.yml) regroupe les patches/minor en une PR hebdomadaire.
- Plateforme : Scalingo (buildpack Node.js)
- Build :
pnpm build→ application statique dansdist/ - Run :
pnpm start(déclaré dans le Procfile) →serve -s disten SPA mode, écoute sur$PORTfourni par Scalingo - Le flag
-s(single page application) renvoieindex.htmlpour toutes les routes inconnues — indispensable pourreact-router-dom(sinon un refresh sur/simulateurs/abattoirsdonnerait un 404) - CI/CD : GitHub Actions (voir section ci-dessus)
- Workflow Git : branches feature, PR vers
main - Vérification obligatoire avant merge :
pnpm validatedoit passer au vert - Choix architecturaux structurants : documentés par un ADR dans
docs/adr/(voir skill/adr) - Conventions de code : voir CLAUDE.md
Voir LICENSE.