OK Cuisine

Documentation Technique Complète

Version: 2.0 - Production Ready

Plateforme: Electron Desktop (Local)

Date de génération: Mars 2026

Destinataires: Collèges & Établissements Scolaires

🛡️ AES-256-GCM 📋 HACCP Complet 🎤 Assistant Vocal 📱 PWA Offline 🇫🇷 100% Français

📑 Table des Matières

1. Résumé Exécutif
2. Modules Principaux (HACCP)
3. Modules Spécialisés
4. Modules Complémentaires
5. Infrastructure Technique
6. Annexes

📊 1. Résumé Exécutif

Vue d'ensemble complète de l'application OK Cuisine

1.1 Présentation

OK Cuisine est une application de gestion HACCP complète destinée aux établissements de restauration collective scolaire. Développée en JavaScript vanilla, elle fonctionne en mode 100% local via Electron Desktop, garantissant la sécurité des données sensibles (PAI, données de santé) sans connexion internet.

52+
Fichiers JavaScript
850+
Fonctions documentées
50+
Modules HACCP
15k+
Lignes de code

1.2 Fonctionnalités Clés

🌡️ Contrôle Températures

  • 9 zones de stockage configurables
  • CCP (Points de Contrôle Critique)
  • Alertes automatiques hors limites
  • Historique avec graphiques

🧹 Plan de Nettoyage

  • 17 zones de nettoyage
  • Checklist quotidienne
  • Validation efficacité (ATP)
  • Produits & fréquences

📦 Réceptions & Stock

  • Contrôle à réception
  • Gestion des DLC/DDM
  • Alertes péremption
  • Intégration inventaire

🔍 Traçabilité

  • Étiquettes déconditionnement J+3
  • Plats témoins (5 jours)
  • Fournisseurs agréés
  • Conformité CE 178/2002

⚠️ Allergènes & PAI

  • Matrice allergènes INCO
  • Gestion PAI enfants
  • Alertes adrénaline
  • Cross-check menus/PAI

🎤 Assistant Vocal

  • Wake word "OK Cuisine"
  • 50+ commandes vocales
  • Flows conversationnels
  • Mains libres en cuisine

1.3 Conformité Réglementaire

Réglementation Description Module(s) concerné(s)
CE 852/2004 Hygiène des denrées alimentaires (Paquet Hygiène) temperatures.js, nettoyage.js, protocoles.js
CE 178/2002 Traçabilité des denrées alimentaires tracabilite.js, receptions.js, inventaire.js
INCO 1169/2011 Information des consommateurs (allergènes) allergenes.js, pai.js, menus.js
Loi AGEC 2020-105 Lutte contre le gaspillage alimentaire agec-avance.js, gaspillage.js
RGPD 2016/679 Protection des données personnelles rgpd.js, crypto.js, security.js
Arrêté du 21/12/2009 Températures de conservation temperatures.js, protocoles.js
GEMRCN Nutrition en restauration collective gemrcn-check.js, menus.js

⚙️ 2. Modules Principaux

Cœur de l'application et gestion HACCP

🚀 Application Core
js/app.js

Point d'entrée principal de l'application. Gère l'initialisation, l'authentification, la navigation et le cycle de vie.

# Fonction Description Retour
1 App.init() Initialise l'application : keyboard, modules Voice/Temperatures/Nettoyage, config, idle tracking, service worker void
2 App._ensureAdminExists() Vérifie qu'au moins un administrateur existe dans la configuration void
3 App._renderLoginUsers() Affiche la liste des utilisateurs disponibles avec avatars et rôles void
4 App.selectUser(userId) Sélectionne un utilisateur et affiche l'écran de saisie PIN void
5 App.backToUsers() Retour à la sélection d'utilisateurs depuis l'écran PIN void
6 App.pinInput(digit) Ajoute un chiffre au buffer PIN (max 4), auto-submit à 4 chiffres void
7 App.pinClear() Supprime le dernier chiffre du buffer PIN void
8 App.pinSubmit() Valide le PIN (hash + comparaison), verrouillage après 3 échecs (5min) boolean
9 App._registerFailedPin(userId) Enregistre un échec PIN, verrouille le compte si ≥3 tentatives void
10 App._login() Finalise la connexion : journal, dashboard, voice, briefing auto void
11 App.logout() Déconnexion : désactive voice, stop idle timer, efface crypto, backup void
12 App.navigate(page) Navigation vers une page : mise à jour sidebar, render module void
13 App._renderPage(page) Router central appelant le render() du module correspondant void
14 App.showSetup() Modal de configuration initiale (nom établissement, admin, PIN) void
15 App.saveSetup() Sauvegarde la configuration initiale avec validation boolean
16 App._roleLabel(role) Convertit le code rôle en libellé français string
17 App._startIdleTimer() Démarre le timer d'inactivité (déconnexion auto) void
18 App._resetIdleTimer() Réinitialise le timer d'inactivité sur action utilisateur void
💾 Stockage & Persistance
js/storage.js

Couche d'abstraction pour localStorage avec chiffrement transparent des données sensibles. 124 fonctions couvrant toutes les entités métier.

Note : Le module Storage gère automatiquement le chiffrement AES-256-GCM pour les données PAI et données de santé via intégration avec le module Crypto.

Fonctions Utilitaires

Fonction Paramètres Description
hashPin(pin) pin: string Hash irréversible du PIN avec salt constant (préfixe 'h')
save(name, data) name: string, data: any Sauvegarde avec chiffrement automatique si données sensibles
load(name, defaultValue) name: string, default: any Chargement avec déchiffrement automatique si nécessaire
today() - Retourne la date du jour au format YYYY-MM-DD
uid() - Génère un ID unique (timestamp base36 + random)
formatDate(dateStr) dateStr: string Formate en "Lundi 15 janvier 2026" (français)
formatTime(isoString) isoString: string Formate en "HH:MM"
addDays(dateString, days) dateString: string, days: number Ajoute N jours à une date

APIs par Entité

🌡️ Températures

  • getTemperatures(date)
  • addTemperature(entry)
  • getCCPRecords(date)
  • addCCPRecord(entry)

🧹 Nettoyage

  • getNettoyages(date)
  • addNettoyage(entry)
  • getValidationNettoyages()
  • saveValidationNettoyage(v)

📦 Réceptions & Stock

  • getReceptions(date)
  • addReception(entry)
  • getInventaire()
  • addInventaireItem(item)
  • updateInventaireItem(id, u)
  • removeInventaireItem(id)

🔍 Traçabilité

  • getEtiquettes()
  • addEtiquette(etiq)
  • getPlatsTemoins()
  • addPlatTemoin(temoin)
  • getControlesHuiles()
  • addControleHuile(ctrl)

⚠️ Alertes

  • getAlertes()
  • addAlerte(alerte)
  • resolveAlerte(id, comment)
  • checkDLCAlerts()

👤 PAI & Allergènes

  • getAllergenePlats()
  • addAllergenePlat(plat)
  • getPAIEnfants()
  • savePAIEnfant(enfant)
  • getPAIAlertes()
🌡️ Relevés Températures
js/temperatures.js

Gestion complète des relevés de températures : stockage froid, CCP cuisson/refroidissement, alertes automatiques, historiques graphiques.

Fonction Description
render() Affiche la page avec onglets Stockage/CCP, cartes de zones, tableau historique
switchTab(tab) Bascule entre onglets 'stockage' et 'ccp'
showAddModal(zoneId) Modal d'ajout de relevé avec pré-sélection de zone optionnelle
saveFromModal() Valide et sauvegarde le relevé, crée alerte si hors limites
showCCPModal(type) Modal CCP : cuisson (≥63°C), refroidissement (<10°C en 2h), remise (≥63°C en 1h)
saveCCP() Sauvegarde CCP avec création d'alerte critique si non-conforme
getZoneHistory(zoneId, days) Récupère l'historique d'une zone sur N jours
renderHistoryChart(records, zone) Génère un graphique SVG avec courbe, zone de conformité, points colorés
showHistoryModal(zoneId, period) Modal complet avec stats (moy/min/max), graphique, tableau détaillé
renderSparkline(zoneId) Mini-graphique SVG (200x50) pour les alertes et dashboard
Seuils réglementaires configurés :
• Chambre froide positive : 0°C à +3°C
• Chambre froide négative : -18°C à -22°C
• Cuisson : ≥63°C à cœur
• Refroidissement : <10°C en moins de 2h
🧹 Plan de Nettoyage
js/nettoyage.js

Suivi du plan de nettoyage conforme CE 852/2004 avec checklist quotidienne, produits utilisés et validation.

Fonction Description
render() Page complète avec stats, checklist zones, tableau historique
_renderCommis() Vue simplifiée pour les commis (uniquement checklist du jour)
quickClean(zoneName) Modal rapide pour marquer une zone comme nettoyée
saveQuickClean(zoneName) Enregistre le nettoyage d'une zone avec produit utilisé
showAddModal() Modal complet avec multi-sélection de zones et produit
saveFromModal() Sauvegarde le nettoyage de plusieurs zones simultanément
📦 Réceptions & Inventaire
📦 Réceptions & Livraisons
js/receptions.js

Contrôle à réception des marchandises avec vérification visuelle, température, conformité et intégration automatique à l'inventaire.

Fonction Description
render() Page avec stats conformité, rappel HACCP, tableau des réceptions du jour
showAddModal() Modal : fournisseur, produit, température, contrôles visuels, N° lot, DLC
saveFromModal() Sauvegarde réception, crée alerte si NC, met à jour inventaire automatiquement
_updateInventaireFromReception(...) Ajoute/met à jour le produit en stock, détecte catégorie auto, marque reçu dans commandes
_detectCategorie(produit) Détection automatique de catégorie par mots-clés (Fruits, Viandes, Poissons...)
showDetail(id) Modal détaillé d'une réception avec tous les contrôles
📋 Inventaire
js/inventaire.js
Fonction Description
render() Affiche inventaire groupé par catégorie avec alertes DLC, filtres
adjustQty(id, delta) Ajuste la quantité d'un produit (+1/-1)
showAddModal() Modal d'ajout produit avec toutes les métadonnées
editItem(id) Modal d'édition d'un produit existant
deleteItem(id) Suppression avec confirmation
_getDLCStats(items) Calcule les DLC critiques et proches
🔍 Traçabilité
🔍 Traçabilité Complète
js/tracabilite.js

Conformité CE 178/2002 avec étiquettes déconditionnement (J+3), plats témoins (5 jours), fournisseurs agréés.

Fonction Description
render() Page avec 3 onglets : Étiquettes J+3, Fournisseurs agréés, Plats témoins
showAddEtiquetteModal() Modal étiquette : produit, origine, lot, DLC secondaire (max J+3)
saveEtiquette() Sauvegarde avec avertissement si DLC > J+3
_renderPlatsTemoins() Affiche plats témoins actifs (< 5 jours) et archives
showAddFournisseurModal() Ajoute un fournisseur agréé avec N° agrément sanitaire
Règle J+3 automatisée : La DLC secondaire est pré-calculée à J+3 maximum lors de la création d'étiquettes de déconditionnement, conformément à la réglementation.
⚠️ PAI & Allergènes
⚠️ Gestion PAI
js/pai.js

Plan d'Accueil Individualisé pour les enfants allergiques. Données chiffrées AES-256-GCM (données de santé).

Fonction Description
render() Liste des enfants PAI, alertes adrénaline, statistiques allergènes
showAddEnfantModal() Modal enfant : nom, allergies, PAI numérisé, adrénaline (expiration)
_checkAdrenalineAlerts() Vérifie expiration adrénaline (alerte si < 30 jours)
showEnfantDetail(id) Fiche détaillée enfant avec protocole d'urgence
🥜 Allergènes & Cross-check
js/allergenes.js, js/menu-pai-crosscheck.js
Fonction Description
Allergenes.render() Matrice allergènes INCO 1169/2011 (14 allergènes)
MenuPAICrosscheck.check(date) Cross-référence menus/PAI, retourne les conflits détectés
MenuPAICrosscheck.renderDashboardAlert() Alerte dashboard si menu contient allergènes d'enfants PAI
🚨 TIAC - Gestion des Incidents
🚨 Toxi-Infection Alimentaire Collective
js/tiac.js

Gestion des incidents alimentaires avec déclaration DDPP, enquête interne et mesures correctives.

Fonction Description
render() Liste incidents avec filtres (actifs/clos), badges gravité
showAddModal() Déclaration : type (TIAC, suspicion, allergie...), gravité, personnes atteintes
showEnquete(incidentId) Formulaire enquête : origine présumée, conclusions, actions correctives
saveEnquete(incidentId) Sauvegarde enquête avec notification DDPP optionnelle
closeIncident(incidentId) Clôture incident après confirmation
exportDDPP() Export PDF format déclaration DDPP
Rappel légal : Toute TIAC doit être déclarée à la DDPP dans les 48h (article L.1341-1 du Code de la Santé Publique).
🍽️ Menus & Recettes
🍽️ Génération de Menus
js/menus.js

Génération automatique ou manuelle de menus avec calcul allergènes, adaptation collectivités, et liste de commandes.

Fonction Paramètres Description
render() - Page menus avec historique, génération, édition
generateMenus() - Génère N semaines aléatoires depuis STOCK_MENUS (80+ menus)
_adaptForCollectivite(menu, type) menu, collectivite Adapte menus : crèche (sans noix/épices), EHPAD (textures)
_collectAllergenes(menu) menuData Scan tous plats contre ALLERGENES_MAP (500+ plats)
showCreateCustomMenuModal() - Création menu personnalisé avec sélection recettes
_showListeCommande(monday, weeks) date, nb_semaines Calcule ingrédients manquants, génère liste commandes
📖 Fiches Techniques Recettes
js/recettes.js
Fonction Description
render() Liste recettes avec catégories, filtres, allergènes
showAddModal() Modal création recette avec ingrédients dynamiques
showCalculModal(id) Calculateur : quantités pour X couverts, comparaison stock
_updateCalcul(id) Recalcule ingrédients en temps réel selon couverts
🎓 Formation du Personnel
🎓 Suivi Formation (formation.js)
js/formation.js
Fonction Description
render() Dashboard formations avec alertes expirations (< 30 jours)
showAddModal() Enregistrement : utilisateur, type (HACCP, Hygiène...), dates, attestation
_getStatus(dateExpiration) Retourne 'valide', 'expirant', 'expiré' selon date
📚 Formation Pro 14h (formation-pro.js)
js/formation-pro.js

Plateforme e-learning complète avec 13 modules, timer anti-triche, quiz validants et attestations.

Fonction Description
render() Catalogue 13 modules avec progression, badges, déblocage séquentiel
openModule(moduleId) Ouvre module avec liste leçons, objectifs, progression
openLesson(moduleId, lessonId) Affiche leçon avec timer pause réelle (ignore temps tab caché)
_startLessonTimer(minMs, done) Timer anti-triche : compte uniquement temps tab visible
validateLesson(moduleId, lessonId) Valide leçon après temps minimum, track switches tabs
openQuiz(moduleId) Quiz randomisé avec options mélangées
submitQuiz(e, moduleId) Corrige quiz (seuil 75%), affiche résultat/attestation
openAttestation(moduleId) Certificat imprimable avec N° unique, date, validité
renderSuperviseur() Dashboard superviseur : progression tous agents, validation
📋 Simulateur DDPP
📋 Simulateur Audit DDPP
js/simulateur.js

Préparation aux contrôles sanitaires avec ~90 questions réglementaires, 13 sections, notation A-D et plan d'action.

Fonction Description
render() Écran démarrage ou audit en cours selon état
startAudit(mode) Démarre audit 'manuel' ou 'simulation' (pré-rempli auto)
_autoCheckQuestion(type) Vérifie données Storage pour pré-répondre (temp, nettoyage...)
_calculateScores() Calcule score pondéré, compte NC par criticité, note A-D
_renderSection(sec) Section collapsible avec icône, score, questions
finalizeAudit() Valide (min 50% réponses), sauvegarde historique, génère actions
exportPDF() Export rapport audit PDF complet
13 Sections d'audit : PMS, Documentation, Locaux, Hygiène Personnel, Températures, Cuisson, Stockage, Réception, Nettoyage, Nuisibles, Déchets, Allergènes, Eau/Matériel

🛡️ 5. Infrastructure Technique

Sécurité, chiffrement, sauvegarde et interface

🔐 Sécurité & Chiffrement
🔐 Module Crypto (AES-256-GCM)
js/crypto.js

Chiffrement bout-en-bout des données sensibles via Web Crypto API. PBKDF2 (100k itérations) pour dérivation de clé.

Fonction Description
isAvailable() Vérifie disponibilité Web Crypto API
init(pin, userId) Initialise : dérive KEK du PIN, charge/crée DEK, déchiffre cache
isSensitive(name) Identifie clés sensibles (PAI, données santé)
getCached(name, default) Récupère données déchiffrées du cache mémoire
updateAndEncrypt(name, data) Met à jour cache et chiffre vers localStorage (async)
addUserToKeyring(pin, userId) Ajoute utilisateur au keyring avec sa KEK dérivée
_deriveKEK(pin, salt) PBKDF2 : 100k itérations, SHA-256 → AES-256-GCM
🛡️ Permissions & Rôles
js/permissions.js
Fonction Description
canAccess(role, page) Vérifie accès page selon rôle (matrice permissions)
filterNav() Filtre navigation sidebar selon rôle et mode essentiel
isManager(role) admin, gestionnaire, directeur
isChef(role) chef, remplaçant + managers
canManageUsers(role) Création/modification utilisateurs (managers)
canBackupRestore(role) Sauvegarde/restauration (managers + chefs)
7 rôles définis : admin, gestionnaire, directeur, chef, remplaçant, second, commis
🎤 Assistant Vocal
🎤 Moteur Vocal
js/voice.js

Reconnaissance vocale avec wake word "OK Cuisine", 50+ commandes, flows conversationnels temps réel.

Fonction Description
init() Initialise WebSpeech API, charge voix française, configure events
activate() Active reconnaissance, affiche panel, démarre écoute
_matchWakeWord(text) Détecte variations : "ok cuisine", "okay cuisine", "o cuisine"...
_parseCommand(text) Router ~50 patterns vers flows ou navigation
speak(text) Synthèse vocale française, reprend écoute après
_flowTemperature() Flow : zone → température → validation/alerte
_flowNettoyage() Flow : zones → produit → confirmation
_flowReception() Flow : fournisseur → produit → temp → conformité
🤖 Voice AI (Analyses)
js/voice-ai.js
Fonction Description
canHandle(text) Détecte intent (action, navigation, analyse, aide)
_analyzeAlertes() "Combien d'alertes ?" → compte et résume
_analyzeTemperatures() "État des températures ?" → zones couvertes, NC
_analyzeDLC() "DLC critiques ?" → liste produits à surveiller
_handleDailySummary() "Bonjour" → briefing matin complet
💾 Sauvegarde & Restauration
💾 Module Backup
js/backup.js

Sauvegarde fichier JSON via File System API, support USB, auto-save périodique, détection changements.

Fonction Description
chooseFile() Sélectionne fichier/dossier, propose restauration si existant
saveNow(options) Sauvegarde immédiate vers fichier + USB optionnel
restoreNow() Restaure depuis dernière sauvegarde
toggleAuto() Active/désactive sauvegarde auto (interval configurable)
chooseUsbFolder() Configure sauvegarde USB secondaire
_autoLoadIfNewer() Auto-charge si fichier plus récent que dernière lecture
checkAndProposeRestore() Au démarrage, propose restauration si app vide
📄 Exports PDF
📄 Module PDF (jsPDF)
js/pdf.js

Génération de rapports PDF professionnels pour tous les modules. Export DDPP complet (2000+ lignes).

Fonction Type Export
_exportTemperatures() Relevés du jour avec statuts conformité
_exportNettoyage() Plan de nettoyage du jour
_exportReceptions() Contrôles réception avec NC highlight
_exportInventaire() Inventaire groupé par catégorie
_exportJournal() Journal des actions (date ou plage)
_exportAllergenes() Matrice INCO 1169/2011
_exportMenus() Menus hebdomadaires avec allergènes
_exportRecettes() Fiches techniques recettes
_exportDDPP() Rapport complet 20 sections (audit DDPP)

📊 6. Statistiques Complètes

Inventaire exhaustif de toutes les fonctions

Récapitulatif par Module

Module Fichier Fonctions Catégorie
🚀 Application Coreapp.js26Core
💾 Storagestorage.js124Core
🎨 UIui.js16Core
📊 Dashboarddashboard.js16Core
🌡️ Températurestemperatures.js20HACCP
🧹 Nettoyagenettoyage.js9HACCP
📦 Réceptionsreceptions.js13HACCP
📋 Inventaireinventaire.js12HACCP
🔍 Traçabilitétracabilite.js15HACCP
🥜 Allergènesallergenes.js8HACCP
👤 PAIpai.js10HACCP
⚠️ Alertesalertes.js6HACCP
📓 Journaljournal.js5HACCP
🍽️ Menusmenus.js62Gestion
📖 Recettesrecettes.js18Gestion
🏢 Fournisseursfournisseurs.js13Gestion
🎓 Formationformation.js12RH
📚 Formation Proformation-pro.js32RH
📋 Auditaudit.js13Conformité
🎯 Simulateursimulateur.js30Conformité
🚨 TIACtiac.js11Incidents
🔒 RGPDrgpd.js22Conformité
♻️ AGECagec-avance.js15Conformité
🔧 Maintenancemaintenance.js8Équipement
📜 Protocolesprotocoles.js11Documentation
🔀 Séparation Cru/Cuitseparation-cru-cuit.js10HACCP
⚡ Analyse Risquesanalyse-risques.js7HACCP
✅ Validation Nettoyagevalidation-nettoyage.js7HACCP
🎤 Voicevoice.js55Interface
🤖 Voice AIvoice-ai.js40Interface
💾 Backupbackup.js38Infrastructure
⚙️ Configconfig.js19Infrastructure
📄 PDFpdf.js16Export
📅 Calendriercalendrier.js21Gestion
👥 Agentsagents.js16RH
⌨️ Keyboardkeyboard.js6Interface
🔐 Securitysecurity.js13Sécurité
🔑 Cryptocrypto.js20Sécurité
🛂 Permissionspermissions.js19Sécurité
🚿 Douches/Vestiairesdouches-vestiaires.js8Conformité
⚠️ Rappels Produitsrappels-produits.js11Sécurité
📢 Rappel Consorappel-conso.js5Sécurité
🔗 Menu-PAI Crosscheckmenu-pai-crosscheck.js5HACCP
🥗 GEMRCNgemrcn-check.js10Nutrition
💰 Coût Matièrecout-matiere.js9Gestion
🧹 Stock Entretienstock-entretien.js21Gestion
🍽️ Couvertscouverts.js13Gestion
♻️ Gaspillagegaspillage.js14AGEC
🔄 Actions Correctivesactions-correctives.js8HACCP
📦 Archivage DLCarchivage-dlc.js5HACCP
52
Fichiers JavaScript
850+
Fonctions Total
15k+
Lignes de Code
100%
Couverture HACCP

📋 OK Cuisine - Documentation Technique Complète

Version 2.0 | Mars 2026 | Application Electron Desktop
Conforme CE 852/2004, CE 178/2002, INCO 1169/2011, Loi AGEC 2020-105, RGPD 2016/679

AES-256-GCM HACCP Complet Assistant Vocal 50+ Modules