# BEK’S TACHY Simulator — version 0.1

Prototype interactif Next.js/TypeScript indépendant de BEK'S apps.

## Démarrage local
`npm install && npm run dev`

## Fonctionnel dans cette version
- Cabine virtuelle : vitesse réglable, freinage, distance, temps ×1/×10/×60.
- Carte conducteur virtuelle, activités au repos, journal local et ticket imprimable.
- Choix visuel VDO / Stoneridge (commandes simplifiées), trois missions d'initiation.
- Indicateurs pédagogiques de conduite depuis pause et conduite du jour.
- Page santé `/api/health`.
- Schéma Prisma **préparatoire**, non connecté au prototype local.

## Non réalisé / non certifié
- Émulation fidèle des menus VDO DTCO 4.1b et SE5000 Smart 2 ; entrées manuelles, pays, défauts et impression constructeur.
- Moteur OTR1 exhaustif sur 56 jours (repos journaliers/hebdomadaires, compensations, dérogations).
- Amendes suisses, examens OACP certifiés, sept langues.
- Authentification, codes élèves de 30 jours, tableau formateur et stockage serveur.
- Tests navigateur de bout en bout, tests de charge, audit sécurité, déploiement public.

Ne pas utiliser cette version pour contrôler la conformité réglementaire réelle ou former à des commandes fabricant sans vérification.

## Architecture cible
Next.js TypeScript + PostgreSQL + Prisma, sessions authentifiées côté serveur, séparation des rôles, moteur d'événements horodatés et deux adaptateurs fabricants, tests unitaires et E2E avant mise en ligne.

## Évolution 0.2 — indicateurs pédagogiques
- Analyse de la journée UTC courante et des 56 journées UTC précédentes, avec répartition des activités aux frontières de jour.
- Indicateurs partiels 4h30, 9h/10h, 56h/semaine et 90h sur deux semaines ; prise en compte de la pause fractionnée 15+30 min.
- Affichage du récapitulatif dans Historique et avertissements dans le ticket.
- **Limites importantes** : journées UTC plutôt que fuseau local du conducteur, absence de contrôle des repos journaliers et hebdomadaires, des compensations, des dérogations, des entrées manuelles et des cas particuliers. Ne pas interpréter l'absence d'alerte comme une conformité légale.

## Évolution 0.3 — transfert de l'historique
- Export JSON de l'historique de démonstration et import validé (taille, structure, activités, durées, vitesses).
- Confirmation avant remplacement et remise à zéro de la vitesse après import/réinitialisation.
- Ces exports ne sont **pas** des données tachygraphiques officielles ni un système de sauvegarde serveur.

## Version 0.4 — contrôles automatisés

`npm test` exécute 7 tests des indicateurs pédagogiques (pauses 45 min, 15+30 min, interruption de pause, découpage des 57 journées UTC). Les contrôles ne constituent **pas** une validation réglementaire OTR1. Le service web Railway n’est **pas déployé** et la base n’est **pas encore exploitée** par les comptes élèves.

## Version 0.5 — quiz pédagogique
- Cinq questions interactives de sensibilisation OTR1, corrections immédiates et score.
- Réponses conservées dans le navigateur, bouton de remise à zéro.
- Le quiz est **non officiel** et ne vaut pas validation d'examen OACP.

## Version 0.6 — backend d'accès élèves (préparatoire)
- Prisma PostgreSQL : comptes élèves, codes hachés SHA-256, sessions de connexion avec jetons hachés, révocation.
- `POST /api/access/issue` : création d'un élève et d'un code unique avec en-tête `x-tachy-admin-key` (secret `TACHY_ADMIN_KEY` à définir dans Railway, **ne jamais publier côté navigateur**).
- `POST /api/access/activate` : première activation valable 30 jours, cookie HttpOnly Secure en production ; `GET /api/access/me` et `POST /api/access/logout`.
- Avant utilisation : `npm install`, `npx prisma generate`, `npx prisma migrate dev --name access_sessions` en développement, puis `npx prisma migrate deploy` en production, avec `DATABASE_URL` configuré.
- **Attention :** routes non encore intégrées à l'interface, aucun contrôle d'accès sur la page simulateur, pas de limitation de tentatives / rate limiting, pas de journal d'audit ni de tableau administrateur. Ne pas déployer publiquement en l'état. Le code d'administration en en-tête est un mécanisme transitoire, pas un tableau administrateur sécurisé.


## Version 0.7 — Interface d'accès (développement)
- `/access` : formulaire d'activation des codes, session et tableau de bord formateur protégé par `TACHY_ADMIN_KEY`.
- `/api/admin/students` : liste élèves sans divulguer les codes.
- `/api/admin/revoke` : révocation de tous les codes et sessions d'un élève.
- Correction de la course lors de l'activation simultanée d'un code.
- **Important** : la page principale du simulateur n'est pas encore protégée par authentification, et l'historique reste dans localStorage. Le panneau formateur utilise une clé partagée et ne constitue pas encore une authentification multi-formateurs complète. Ne pas publier pour des élèves.
- Déploiement requis : définir `TACHY_ADMIN_KEY` via les secrets Railway et exécuter `npx prisma db push` dans un environnement sécurisé avant utilisation.

## Version 0.8 — résultats des élèves (développement)
- Contrôle d'accès de l'interface simulateur via `/api/access/me` (affichage client uniquement; ne constitue pas une protection serveur des ressources statiques).
- Enregistrement côté serveur des réponses complètes du quiz OTR1, score recalculé sur le serveur, lié à la session élève et persisté dans `TrainingResult`.
- Consultation des 50 derniers résultats personnels et des 250 derniers résultats via endpoint administrateur.
- Affichage des résultats récents dans l'espace formateur.
- Après déploiement, exécuter `npx prisma migrate dev --name training_results` en développement, puis `npx prisma migrate deploy` en production avec une migration validée. La migration n'a pas été appliquée à Railway.
- Le code source reste un prototype : compilation Next.js, intégration PostgreSQL, sécurité complète et comportement navigateur non validés.

## Version 0.9 — préparation de vérification et déploiement (9 octobre 2026)
- 14 tests unitaires exécutés avec succès (`npm test`).
- Contrôle renforcé de la clé administrateur : minimum 32 caractères, comparaison à temps constant.
- Taille déclarée limitée pour la soumission des résultats (8 Kio). Attention : la taille réelle des requêtes doit également être limitée au niveau du reverse proxy.
- Workflow GitHub Actions ajouté pour exécuter les tests, la vérification TypeScript et la compilation une fois le code publié dans un dépôt GitHub.
- **Blocage vérifié** : `npm install` échoue dans cet environnement (`EAI_AGAIN` vers registry.npmjs.org). Les vérifications TypeScript et la compilation Next.js n'ont pas pu être exécutées ici.
- **Non effectué** : dépôt GitHub, migrations appliquées à PostgreSQL, connexion du code à Railway et tests end-to-end. Le service Railway web n'a pas de source associée.
- Avant production : générer une clé administrateur aléatoire de 32 caractères ou plus et la définir en secret Railway `TACHY_ADMIN_KEY`, créer un dépôt privé, y pousser les sources, relier `tachy-web` au dépôt, puis appliquer les migrations Prisma après revue. Ne pas publier en l'état.


## Version 1.0.0-rc.1 — préparation de déploiement
Migration PostgreSQL initiale, configuration Railway et procédure dans `DEPLOIEMENT.md`. **Le dépôt GitHub, la compilation intégrale et la mise en ligne ne sont pas réalisés.**
