📊
Résumé Exécutif
55K+
Lignes de code
50+
Modules JS
800+
Fonctions
500+
Interactions
250+
Commandes vocales
35
Pages
| Métrique | Valeur | Statut |
|---|---|---|
| Type d'application | Progressive Web App (PWA) — Single Page Application | ✓ Moderne |
| Technologies | HTML5, CSS3, JavaScript Vanilla, Web Speech API | Standard |
| Stockage | localStorage + IndexedDB + Chiffrement AES-256-GCM | ✓ Sécurisé |
| Conformité HACCP | 7 principes intégrés, CE 852/2004 | ✓ 100% |
| Conformité RGPD | Données sensibles chiffrées, droit à l'oubli | ✓ Conforme |
| Exports | 15+ rapports PDF (jsPDF) | Complet |
🏗️
Architecture Globale
COUCHE PRÉSENTATION
index.html — css/style.css — ui.js — keyboard.js
⬇️
COUCHE LOGIQUE MÉTIER
50+ modules JavaScript (températures, nettoyage, audit, formation, simulateur, etc.)
⬇️
COUCHE DONNÉES
storage.js — crypto.js — localStorage — IndexedDB
⬇️
COUCHE VOCALE
voice.js — voice-ai.js — Web Speech API (Google)
📁 Fichiers Principaux
| Fichier | Rôle | Lignes estimées |
|---|---|---|
index.html |
Structure SPA complète (35 pages) | ~850 |
css/style.css |
Styles complets responsive | ~3000+ |
js/app.js |
Noyau application, authentification | ~500 |
js/storage.js |
Persistance données (124 fonctions) | ~800 |
js/crypto.js |
Chiffrement AES-256-GCM | ~300 |
js/voice.js |
Reconnaissance vocale (69 fonctions) | ~1200 |
js/voice-ai.js |
IA vocale contextuelle (55 fonctions) | ~1000 |
js/ui.js |
Interface utilisateur | ~400 |
| Autres modules | Logique métier HACCP | ~45000+ |
🔐
Authentification & Sécurité
🔑 Écran de Connexion
| Élément | ID | Interaction | Fonction |
|---|---|---|---|
| Liste utilisateurs | #user-list |
Click sur utilisateur | App.selectUser(userId) |
| Clavier PIN | .pin-digit |
Click sur chiffres 0-9 | App.pinInput(digit) |
| Bouton Effacer | .pin-clear |
Efface dernier chiffre | App.pinClear() |
| PIN dots | .pin-dots .dot |
Indicateur visuel | App._updatePinDots() |
| Validation auto | — | Auto-submit après 4 chiffres | App.pinSubmit() |
Processus d'Authentification
1
Sélection utilisateur
Click sur un utilisateur dans la liste →
App.selectUser(userId)2
Saisie PIN (4 chiffres)
Click sur chiffres 0-9 →
App.pinInput(digit) × 43
Validation automatique
Auto-submit après 4ème chiffre →
App.pinSubmit()4
Résultat
✅ Hash match →
❌ Échec → shake animation + toast erreur (3 échecs → lockout 5min)
App._login()❌ Échec → shake animation + toast erreur (3 échecs → lockout 5min)
👥 Hiérarchie des Rôles (7 niveaux)
| Rôle | Permissions | Badge | Fonction Permissions.* |
|---|---|---|---|
| admin | Toutes les permissions | Admin | isManager() ✅ |
| gestionnaire | Gestion + Configuration | Gestionnaire | isManager() ✅ |
| directeur | Consultation + Export | Directeur | isManager() ✅ |
| chef | Opérations cuisine | Chef | isChef() ✅ |
| remplacant | Opérations standards | Remplaçant | isChefCuisine() ✅ |
| second | Opérations limitées | Second | isSecondOrAbove() ✅ |
| commis | Vue profil uniquement | Commis | Aucune permission spéciale |
🔒 Chiffrement des Données Sensibles
/* Architecture Cryptographique OK Cuisine */
┌───────────────────────────────────────────────────────────┐
│ PIN Utilisateur │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ PBKDF2 │ 100 000 iterations │
│ │ SHA-256 │ + Salt (16 bytes, unique) │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ KEK │ Key Encryption Key (256-bit) │
│ │ (par user) │ Dérivée du PIN │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ KEYRING │────▶│ DEK │ │
│ │ (localStorage) │ │ (mémoire) │ 256-bit │
│ └─────────────────┘ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ AES-256-GCM │ │
│ │ IV = 12 bytes │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Données Sensibles│ │
│ │ (PAI, TIAC, RGPD)│ │
│ └─────────────────┘ │
└───────────────────────────────────────────────────────────┘
Données Chiffrées (8 catégories)
| Clé Storage | Données | Justification RGPD |
|---|---|---|
okc_pai_enfants |
PAI avec noms enfants + pathologies | Art. 9 — Données de santé |
okc_pai_alertes |
Alertes allergies avec identités | Art. 9 — Données de santé |
okc_tiac |
Incidents intoxication + victimes | Art. 9 — Données de santé |
okc_rgpd_consentements |
Consentements nominatifs | Art. 7 — Preuves consentement |
okc_rgpd_registre |
Traitements personnels | Art. 30 — Registre DPO |
okc_rgpd_dpo |
Coordonnées DPO | Protection contact |
okc_rgpd_archived_users |
Anciens utilisateurs | Droit à l'oubli (5 ans) |
okc_allergene_plats |
Plats + allergènes déclarés | Traçabilité sanitaire |
📦
Modules Détaillés
1️⃣ Dashboard (Tableau de Bord)
Fichier : js/dashboard.js
| Élément | Interaction | Action |
|---|---|---|
| Score audit | Click | Navigation vers audit |
| Alerte DLC | Click | Navigation vers inventaire |
| Alerte nettoyage | Click | Navigation vers nettoyage |
| Alerte températures | Click | Navigation vers températures |
| Bouton "Voir alertes" | Click | Navigation vers alertes |
| Widget | Drag & Drop | Réorganisation layout |
Données Affichées :
Score conformité (/100), Alertes actives, Températures du jour, Nettoyage du jour, Réceptions du jour, DLC critiques, Prochaines formations
2️⃣ Températures
Fichier : js/temperatures.js
Onglets
❄️ Stockage
Relevés frigo/chambres froides avec limites configurables
🔥 CCP
Cuisson ≥63°C, Refroidissement <10°C, Remise temp >63°C
Interactions
| Élément | Interaction | Fonction |
|---|---|---|
| + Relevé stockage | Click | showAddModal() |
| 🔥 CCP Cuisson | Click | showCCPModal('cuisson') |
| ❄️ CCP Refroid. | Click | showCCPModal('refroidissement') |
| 🔄 Remise temp. | Click | showCCPModal('remise_temp') |
| Carte zone | Click | showAddModal(zoneId) |
| Bouton Historique | Click | showHistoryModal(zoneId, '7d') |
| Input date | Change | changeDate(value) |
| Export PDF zone | Click | PDF.exportHistoriqueZone() |
Formulaire Relevé Température
| Champ | Type | Obligatoire |
|---|---|---|
| Zone | Select | ✅ |
| Température (°C) | Number | ✅ |
Formulaire CCP
| Champ | Type | Options |
|---|---|---|
| Type CCP | Select | Cuisson / Refroid. / Remise temp |
| Produit | Text | ✅ Obligatoire |
| Température | Number | — |
| Limite critique | Select | 63°C / 70°C / 74°C / 10°C |
| Durée | Text | — |
| Conformité | Radio | Oui / Non |
| Action corrective | Textarea | Si non conforme |
3️⃣ Nettoyage
Fichier : js/nettoyage.js
Vues selon Rôle
| Rôle | Vue |
|---|---|
| Chef / Admin | Vue complète avec tableau détaillé |
| Commis | Checklist simplifiée (zones à cocher) |
Interactions
| Élément | Interaction | Fonction |
|---|---|---|
| + Enregistrer nettoyage | Click | showAddModal() |
| Zone checklist | Click | quickClean(zoneName) |
| Input date | Change | changeDate(value) |
| Bouton Valider | Click | saveQuickClean(zoneName) |
| Bouton Enregistrer | Click | saveFromModal() |
4️⃣ Réceptions Marchandises
Fichier : js/receptions.js
Formulaire Réception
| Champ | Type | Obligatoire |
|---|---|---|
| Fournisseur | Text | ✅ |
| Produit | Text | ✅ |
| Température (°C) | Number | — |
| Quantité | Text | — |
| DLC / DDM | Date | — |
| N° de lot | Text | — |
| Origine | Text | — |
| Emballage intact | Checkbox | Coché défaut |
| Étiquetage conforme | Checkbox | Coché défaut |
| Véhicule propre | Checkbox | Coché défaut |
| Aspect satisfaisant | Checkbox | Coché défaut |
| Conformité | Radio | Oui / Non |
| Commentaire | Textarea | — |
Automatisations :
✅ Mise à jour inventaire si conforme |
✅ Détection catégorie automatique |
✅ Marquage commande reçue
5️⃣ Inventaire
Fichier : js/inventaire.js
Interactions
| Élément | Interaction | Fonction |
|---|---|---|
| + Ajouter produit | Click | showAddModal() |
| 📄 Exporter PDF | Click | PDF.export('inventaire') |
| Filtre catégorie | Change | Filtrage dynamique |
| Recherche | Input | Filtrage dynamique |
| Bouton − | Click | adjustQty(id, -1) |
| Bouton + | Click | adjustQty(id, +1) |
| Modifier | Click | editItem(id) |
| Supprimer | Click | deleteItem(id) |
Indicateurs DLC
| Statut | Couleur | Condition |
|---|---|---|
| Dépassée | Rouge | < aujourd'hui |
| Aujourd'hui | Rouge | = aujourd'hui |
| Demain | Orange | J+1 |
| Proche | Jaune | ≤ J+3 |
| OK | Normal | > J+3 |
6️⃣ Agents (Personnel)
Fichier : js/agents.js
Interactions Admin
| Élément | Interaction | Fonction |
|---|---|---|
| + Ajouter agent | Click | showAddAgentModal() |
| 🏫 Gérer secteurs | Click | showGestionSecteursModal() |
| 📋 Secteurs prédéfinis | Click | showGestionGroupesModal() |
| Nom agent | Click | showFicheAgent(idx) |
| Modifier | Click | showEditModal(idx) |
| Archiver | Click | archiveAgent(idx) |
| Supprimer | Click | deleteAgent(idx) |
| Restaurer | Click | restoreAgent(idx) |
| Recherche | Input | performSearch(query) |
48 secteurs par défaut : Classes (7), Salles spéciales (4), Restauration (7), Zones communes (6), Administration (5), Sport (3), Extérieur (4), Technique (4), Stockage (2)
7️⃣ Stock Entretien
Fichier : js/stock-entretien.js
Onglets par Rôle
| Onglet | Rôles autorisés |
|---|---|
| 🛒 Commander | Tous |
| 📋 Mes commandes | Tous |
| 📥 Gestion commandes | Admin / Gestionnaire |
| 📦 Gérer le stock | Admin / Gestionnaire |
| 📊 Historique | Admin / Gestionnaire |
Workflow Commande
1
Agent remplit formulaire commande
envoyerCommande() → Statut: en_attente2
Admin traite la commande
validerCommande(id) → Décrémente stock, statut preterefuserCommande(id) → Motif obligatoire, statut refusee
8️⃣ Audit & Contrôle
Fichier : js/audit.js
Système de Scoring (/100 points)
| Catégorie | Points | Critères |
|---|---|---|
| Températures | 25 | 15 pts couverture + 10 pts conformité |
| Nettoyage | 25 | 15 pts couverture jours + 10 pts zones |
| Traçabilité | 25 | 10 pts réceptions + 10 pts conformité + 5 pts DLC |
| Alertes | 25 | -5 pts/critique, -2 pts/attention, -3 pts/CCP NC |
Labels Score
| Score | Label | Couleur |
|---|---|---|
| ≥90 | Excellent | Vert |
| ≥75 | Bon | Jaune |
| ≥50 | À améliorer | Orange |
| <50 | Critique | Rouge |
9️⃣ Simulateur DDPP
Fichier : js/simulateur.js
14 Sections d'Audit (87 questions)
| Section | Questions | Référence |
|---|---|---|
| 📋 Plan Maîtrise Sanitaire | 6 | CE 852/2004 Art.5 |
| 📑 Documentation | 7 | CE 852/2004 Annexe II |
| 🏗️ Locaux | 8 | CE 852/2004 Annexe II Chap.I&II |
| 🧑🍳 Hygiène personnel | 7 | CE 852/2004 Annexe II Chap.VIII |
| 🌡️ Températures | 8 | Arrêté 21/12/2009 |
| 🔥 Cuisson | 6 | Arrêté 21/12/2009 Art.37 |
| 📦 Stockage DLC | 7 | CE 853/2004, INCO 1169/2011 |
| 🚚 Réception | 6 | CE 178/2002 Art.18 |
| 🧹 Nettoyage | 7 | CE 852/2004 Annexe II Chap.V |
| 🪲 Nuisibles | 5 | CE 852/2004 Annexe II Chap.IX |
| 🗑️ Déchets | 5 | CE 852/2004 Annexe II Chap.VI |
| 🥜 Allergènes | 5 | INCO 1169/2011 Art.21 |
| 💧 Eau | 4 | CE 852/2004 Annexe II Chap.VII |
| 🔧 Matériel | 6 | CE 852/2004 Annexe II Chap.V |
Notation DDPP
| Note | Score | Majeures max | Conséquence |
|---|---|---|---|
| A | ≥90% | 0 | Très satisfaisant |
| B | ≥70% | ≤2 | Satisfaisant — corrections mineures |
| C | ≥50% | — | À améliorer — mise en demeure |
| D | <50% | — | Non satisfaisant — fermeture possible |
🔟 Formation
Fichiers : js/formation.js, js/formation-pro.js, js/centre-formation.js
Formation Pro (14H DREETS)
Parcours Utilisateur
1
Catalogue modules (grille)
2
Ouvrir module (si déverrouillé)
3
Lire leçons (timer actif)
4
Valider leçon (si temps minimum atteint)
5
Passer quiz (si toutes leçons validées)
6
≥75% → Quiz réussi → Attestation PDF
1️⃣1️⃣ Allergènes
Fichier : js/allergenes.js
Les 14 Allergènes Obligatoires (INCO 1169/2011)
🌾 Gluten
🦀 Crustacés
🥚 Œufs
🐟 Poissons
🥜 Arachides
🫘 Soja
🥛 Lait
🌰 Fruits à coque
🥬 Céleri
🟡 Moutarde
⚪ Sésame
🍷 Sulfites
🌸 Lupin
🦪 Mollusques
1️⃣2️⃣ PAI (Projet d'Accueil Individualisé)
Fichier : js/pai.js
Onglets
| Onglet | Contenu |
|---|---|
| 👶 Enfants | Liste complète des PAI |
| 🚨 Alertes critiques | Enfants à risque anaphylaxie |
| 📋 Protocoles urgence | Procédures + numéros (SAMU 15, Centre antipoison) |
⚠️ Conformité réglementaire : Code pénal art. 223-1 — Risque grave de mort par allergie non documentée
1️⃣3️⃣ TIAC (Toxi-Infections Alimentaires)
Fichier : js/tiac.js
Types d'Incidents
- 🔴 TIAC confirmée
- 🟠 Suspicion TIAC
- 🔴 Allergie grave
- 🟡 Contamination
- 🟡 Corps étrangers
- 🟠 Non-conformité température
📋 Obligation légale : Signalement DDPP sous 48h obligatoire (Règlement 178/2002, CE 852/2004)
1️⃣4️⃣ Protocoles HACCP
Fichier : js/protocoles.js
6 Sections
| Section | Contenu |
|---|---|
| Vue d'ensemble | 3 piliers PMS, 7 principes HACCP, références réglementaires |
| Températures | Tableaux réglementaires conservation, cuisson, refroidissement |
| PND | Plan de Nettoyage et Désinfection, cercle Sinner (TACT) |
| Huiles | Contrôle friture (seuil 25% composés polaires) |
| Lavage mains | 6 étapes obligatoires, 10 situations |
| Marche en avant | Flux et circuits, séparation |
1️⃣5️⃣ Fournisseurs
Fichier : js/fournisseurs.js
96
Départements
800+
Fournisseurs
11
Catégories
Catégories de Produits
🥗 Fruits & Légumes
🥩 Viandes
🐟 Poissons & Crustacés
🧀 Produits Laitiers
❄️ Surgelés & Conserves
🥤 Boissons
🧂 Condiments & Épices
🍳 Matériel de Cuisine
🧹 Nettoyage & Hygiène
📦 Emballage
🛠️ Services
1️⃣6️⃣ Recettes (Fiches Techniques)
Fichier : js/recettes.js
Fonctionnalités
- ✅ Calcul automatique pour X couverts
- ✅ Détection stock disponible
- ✅ Détection allergènes automatique
- ✅ Export PDF fiche technique
🎤
Assistant Vocal
🔊 Activation
| Méthode | Description |
|---|---|
| Wake Word | "OK Cuisine" (8 variantes reconnues) |
| Bouton FAB | Click sur micro flottant |
| Always-On | Automatique après login (écoute H24) |
🧭 Commandes de Navigation
"tableau de bord" / "accueil"
→ Page dashboard
"températures" / "frigos"
→ Page températures
"nettoyage" / "ménage"
→ Page nettoyage
"réceptions" / "livraisons"
→ Page réceptions
"inventaire" / "stock"
→ Page inventaire
"alertes" / "problèmes"
→ Page alertes
"audit"
→ Page audit
"formation"
→ Page formation
"allergènes"
→ Page allergènes
"configuration"
→ Page config
📝 Commandes d'Enregistrement (Flux HACCP)
"température" / "frigo"
→ Flux relevé température guidé
"nettoyage" / "propreté"
→ Flux enregistrement nettoyage
"réception" / "livraison"
→ Flux contrôle réception
"cuisson" / "ccp cuisson"
→ Flux CCP cuisson ≥63°C
"refroidissement"
→ Flux CCP refroid. <10°C en <2h
"remise en température"
→ Flux CCP remise temp >63°C
"alerte" / "problème"
→ Flux création alerte
"étiquette" / "j+3"
→ Flux étiquette déconditionnement
"plat témoin"
→ Flux enregistrement échantillon
"huile" / "friteuse"
→ Flux contrôle huile friture
📖 Commandes Lecture Menu
"menu du jour"
→ Lecture vocale menu aujourd'hui
"menu de demain"
→ Lecture vocale menu J+1
"menu de la semaine"
→ Affichage + proposition lecture
"génère un menu"
→ Flux génération menu
⏱️ Commandes Minuteur
"minuteur 45 minutes"
→ Crée minuteur 45 min
"minuteur 1 heure pour le rôti"
→ Timer avec label
"combien de temps"
→ Statut timer actuel
"annule le minuteur"
→ Annulation
📊 Commandes Analytiques (VoiceAI)
"combien d'alertes"
→ Nb alertes + critiques
"températures aujourd'hui"
→ Taux complétion + conformité
"dlc critiques"
→ Liste produits expirés/proches
"formations du personnel"
→ Statut formations
"gaspillage aujourd'hui"
→ g/couvert vs objectif
"fournisseurs du 13"
→ Liste par département
🌅 Commandes Résumé
"bonjour" / "bon matin"
→ Résumé du MATIN
"au revoir" / "bonne soirée"
→ Résumé SOIR + Déconnexion
"bilan" / "fin de journée"
→ Résumé + logout
🎨 Feedbacks Visuels
| État | Indicateur |
|---|---|
| OFF | Dot gris, texte "Vocal OFF" |
| ON (veille) | Dot vert, texte "Vocal ON" |
| Écoute active | Animation pulse |
| En train de parler | Animation speaking |
| Panneau ouvert | Slide-in latéral |
💾
Persistance des Données
🗄️ Clés localStorage Principales
| Clé | Module | Description | Chiffré |
|---|---|---|---|
okc_config | Storage | Configuration + utilisateurs | ❌ |
okc_inventaire | Storage | Stock produits | ❌ |
okc_alertes | Storage | Alertes actives | ❌ |
okc_fournisseurs | Storage | Carnet fournisseurs | ❌ |
okc_recettes | Storage | Fiches techniques | ❌ |
okc_formations | Storage | Formations personnel | ❌ |
okc_temp_{date} | Storage | Températures jour | ❌ |
okc_net_{date} | Storage | Nettoyages jour | ❌ |
okc_rec_{date} | Storage | Réceptions jour | ❌ |
okc_journal_{date} | Storage | Journal jour | ❌ |
okc_menus_{date} | Storage | Menus semaine | ❌ |
okc_keyring | Crypto | Clés chiffrées utilisateurs | ❌ (contient clés) |
okc_pai_enfants | Storage | PAI enfants | ✅ AES-256 |
okc_tiac | Storage | Incidents TIAC | ✅ AES-256 |
okc_rgpd_* | Storage | Données RGPD | ✅ AES-256 |
okc_allergene_plats | Storage | Plats allergènes | ✅ AES-256 |
📄 Exports PDF Disponibles
| Module | Fonction | Contenu |
|---|---|---|
| Températures | PDF.exportHistoriqueZone() | Historique zone/toutes |
| Inventaire | PDF.export('inventaire') | Liste stock |
| Audit | PDF.export('ddpp') | Rapport DDPP complet |
| Simulateur | PDF.export('simulateur') | Rapport simulation |
| Allergènes | PDF.export('allergenes') | Matrice allergènes |
| PAI | PDF.exportPAI() | PAI individuel |
| PAI | PDF.exportPAIRegistre() | Registre complet |
| Formation | PDF.exportFormationAttestation() | Attestation |
| Formation | PDF.exportFormationRegistre() | Registre |
| Recettes | PDF.export('recettes') | Fiches techniques |
| Protocoles | PDF.export('protocoles') | Documentation PMS |
| Stock entretien | exportPDF() | Liste produits |
| TIAC | PDF.exportTIACDDPP() | Notification DDPP |
✅
Conformité Réglementaire
📜 Règlements Couverts
| Règlement | Modules Concernés |
|---|---|
| CE 852/2004 | Tous modules HACCP |
| CE 853/2004 | Séparation cru/cuit |
| INCO 1169/2011 | Allergènes, Protocoles |
| Arrêté 21/12/2009 | Températures |
| ISO 22000 | Analyse risques |
| RGPD | Module RGPD, Crypto |
| CE 178/2002 | TIAC, Traçabilité |
🔬 7 Principes HACCP Intégrés
| Principe | Implémentation |
|---|---|
| 1. Analyse des dangers | Module analyse-risques |
| 2. Déterminer les CCP | Flux CCP (cuisson, refroid, remise) |
| 3. Établir limites critiques | Seuils configurables par zone |
| 4. Surveillance | Relevés température, nettoyage |
| 5. Actions correctives | Module actions-correctives |
| 6. Vérification | Audit, simulateur DDPP |
| 7. Documentation | Journal, traçabilité, exports PDF |
📊 Métriques Finales
50+
Modules JS
800+
Fonctions
35
Pages
50+
Formulaires
200+
Boutons action
250+
Commandes vocales
18
Flux conversation
15+
Exports PDF
14
Raccourcis clavier
10
Types alertes
7
Rôles utilisateur
45+
Clés storage