🔍 AUDIT PROFESSIONNEL COMPLET

OK Cuisine Pro — PWA Gestion HACCP & Traçabilité

📅 9 mars 2026 📄 Version 1.0 🔧 GitHub Copilot (Claude Opus 4.5)
📊

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) × 4
3
Validation automatique
Auto-submit après 4ème chiffre → App.pinSubmit()
4
Résultat
✅ Hash match → 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 auditClickNavigation vers audit
Alerte DLCClickNavigation vers inventaire
Alerte nettoyageClickNavigation vers nettoyage
Alerte températuresClickNavigation vers températures
Bouton "Voir alertes"ClickNavigation vers alertes
WidgetDrag & DropRé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émentInteractionFonction
+ Relevé stockageClickshowAddModal()
🔥 CCP CuissonClickshowCCPModal('cuisson')
❄️ CCP Refroid.ClickshowCCPModal('refroidissement')
🔄 Remise temp.ClickshowCCPModal('remise_temp')
Carte zoneClickshowAddModal(zoneId)
Bouton HistoriqueClickshowHistoryModal(zoneId, '7d')
Input dateChangechangeDate(value)
Export PDF zoneClickPDF.exportHistoriqueZone()

Formulaire Relevé Température

ChampTypeObligatoire
ZoneSelect
Température (°C)Number

Formulaire CCP

ChampTypeOptions
Type CCPSelectCuisson / Refroid. / Remise temp
ProduitText✅ Obligatoire
TempératureNumber
Limite critiqueSelect63°C / 70°C / 74°C / 10°C
DuréeText
ConformitéRadioOui / Non
Action correctiveTextareaSi non conforme

3️⃣ Nettoyage

Fichier : js/nettoyage.js

Vues selon Rôle

RôleVue
Chef / AdminVue complète avec tableau détaillé
CommisChecklist simplifiée (zones à cocher)

Interactions

ÉlémentInteractionFonction
+ Enregistrer nettoyageClickshowAddModal()
Zone checklistClickquickClean(zoneName)
Input dateChangechangeDate(value)
Bouton ValiderClicksaveQuickClean(zoneName)
Bouton EnregistrerClicksaveFromModal()

4️⃣ Réceptions Marchandises

Fichier : js/receptions.js

Formulaire Réception

ChampTypeObligatoire
FournisseurText
ProduitText
Température (°C)Number
QuantitéText
DLC / DDMDate
N° de lotText
OrigineText
Emballage intactCheckboxCoché défaut
Étiquetage conformeCheckboxCoché défaut
Véhicule propreCheckboxCoché défaut
Aspect satisfaisantCheckboxCoché défaut
ConformitéRadioOui / Non
CommentaireTextarea
Automatisations : ✅ Mise à jour inventaire si conforme | ✅ Détection catégorie automatique | ✅ Marquage commande reçue

5️⃣ Inventaire

Fichier : js/inventaire.js

Interactions

ÉlémentInteractionFonction
+ Ajouter produitClickshowAddModal()
📄 Exporter PDFClickPDF.export('inventaire')
Filtre catégorieChangeFiltrage dynamique
RechercheInputFiltrage dynamique
Bouton −ClickadjustQty(id, -1)
Bouton +ClickadjustQty(id, +1)
ModifierClickeditItem(id)
SupprimerClickdeleteItem(id)

Indicateurs DLC

StatutCouleurCondition
DépasséeRouge< aujourd'hui
Aujourd'huiRouge= aujourd'hui
DemainOrangeJ+1
ProcheJaune≤ J+3
OKNormal> J+3

6️⃣ Agents (Personnel)

Fichier : js/agents.js

Interactions Admin

ÉlémentInteractionFonction
+ Ajouter agentClickshowAddAgentModal()
🏫 Gérer secteursClickshowGestionSecteursModal()
📋 Secteurs prédéfinisClickshowGestionGroupesModal()
Nom agentClickshowFicheAgent(idx)
ModifierClickshowEditModal(idx)
ArchiverClickarchiveAgent(idx)
SupprimerClickdeleteAgent(idx)
RestaurerClickrestoreAgent(idx)
RechercheInputperformSearch(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

OngletRôles autorisés
🛒 CommanderTous
📋 Mes commandesTous
📥 Gestion commandesAdmin / Gestionnaire
📦 Gérer le stockAdmin / Gestionnaire
📊 HistoriqueAdmin / Gestionnaire

Workflow Commande

1
Agent remplit formulaire commande
envoyerCommande() → Statut: en_attente
2
Admin traite la commande
validerCommande(id) → Décrémente stock, statut prete
refuserCommande(id) → Motif obligatoire, statut refusee

8️⃣ Audit & Contrôle

Fichier : js/audit.js

Système de Scoring (/100 points)

CatégoriePointsCritères
Températures2515 pts couverture + 10 pts conformité
Nettoyage2515 pts couverture jours + 10 pts zones
Traçabilité2510 pts réceptions + 10 pts conformité + 5 pts DLC
Alertes25-5 pts/critique, -2 pts/attention, -3 pts/CCP NC

Labels Score

ScoreLabelCouleur
≥90ExcellentVert
≥75BonJaune
≥50À améliorerOrange
<50CritiqueRouge

9️⃣ Simulateur DDPP

Fichier : js/simulateur.js

14 Sections d'Audit (87 questions)

SectionQuestionsRéférence
📋 Plan Maîtrise Sanitaire6CE 852/2004 Art.5
📑 Documentation7CE 852/2004 Annexe II
🏗️ Locaux8CE 852/2004 Annexe II Chap.I&II
🧑‍🍳 Hygiène personnel7CE 852/2004 Annexe II Chap.VIII
🌡️ Températures8Arrêté 21/12/2009
🔥 Cuisson6Arrêté 21/12/2009 Art.37
📦 Stockage DLC7CE 853/2004, INCO 1169/2011
🚚 Réception6CE 178/2002 Art.18
🧹 Nettoyage7CE 852/2004 Annexe II Chap.V
🪲 Nuisibles5CE 852/2004 Annexe II Chap.IX
🗑️ Déchets5CE 852/2004 Annexe II Chap.VI
🥜 Allergènes5INCO 1169/2011 Art.21
💧 Eau4CE 852/2004 Annexe II Chap.VII
🔧 Matériel6CE 852/2004 Annexe II Chap.V

Notation DDPP

NoteScoreMajeures maxConséquence
A≥90%0Très satisfaisant
B≥70%≤2Satisfaisant — 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)

  • Déverrouillage progressif — Module N+1 accessible si quiz N réussi
  • Timer intelligent — Pause si changement d'onglet
  • Score requis — 75% minimum
  • Traçabilité — Timestamp chaque action
  • Attestation — Numéro unique généré
  • 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

    OngletContenu
    👶 EnfantsListe complète des PAI
    🚨 Alertes critiquesEnfants à risque anaphylaxie
    📋 Protocoles urgenceProcé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

    SectionContenu
    Vue d'ensemble3 piliers PMS, 7 principes HACCP, références réglementaires
    TempératuresTableaux réglementaires conservation, cuisson, refroidissement
    PNDPlan de Nettoyage et Désinfection, cercle Sinner (TACT)
    HuilesContrôle friture (seuil 25% composés polaires)
    Lavage mains6 étapes obligatoires, 10 situations
    Marche en avantFlux 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éthodeDescription
    Wake Word"OK Cuisine" (8 variantes reconnues)
    Bouton FABClick sur micro flottant
    Always-OnAutomatique 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

    ÉtatIndicateur
    OFFDot gris, texte "Vocal OFF"
    ON (veille)Dot vert, texte "Vocal ON"
    Écoute activeAnimation pulse
    En train de parlerAnimation speaking
    Panneau ouvertSlide-in latéral
    💾

    Persistance des Données

    🗄️ Clés localStorage Principales

    CléModuleDescriptionChiffré
    okc_configStorageConfiguration + utilisateurs
    okc_inventaireStorageStock produits
    okc_alertesStorageAlertes actives
    okc_fournisseursStorageCarnet fournisseurs
    okc_recettesStorageFiches techniques
    okc_formationsStorageFormations personnel
    okc_temp_{date}StorageTempératures jour
    okc_net_{date}StorageNettoyages jour
    okc_rec_{date}StorageRéceptions jour
    okc_journal_{date}StorageJournal jour
    okc_menus_{date}StorageMenus semaine
    okc_keyringCryptoClés chiffrées utilisateurs❌ (contient clés)
    okc_pai_enfantsStoragePAI enfants✅ AES-256
    okc_tiacStorageIncidents TIAC✅ AES-256
    okc_rgpd_*StorageDonnées RGPD✅ AES-256
    okc_allergene_platsStoragePlats allergènes✅ AES-256

    📄 Exports PDF Disponibles

    ModuleFonctionContenu
    TempératuresPDF.exportHistoriqueZone()Historique zone/toutes
    InventairePDF.export('inventaire')Liste stock
    AuditPDF.export('ddpp')Rapport DDPP complet
    SimulateurPDF.export('simulateur')Rapport simulation
    AllergènesPDF.export('allergenes')Matrice allergènes
    PAIPDF.exportPAI()PAI individuel
    PAIPDF.exportPAIRegistre()Registre complet
    FormationPDF.exportFormationAttestation()Attestation
    FormationPDF.exportFormationRegistre()Registre
    RecettesPDF.export('recettes')Fiches techniques
    ProtocolesPDF.export('protocoles')Documentation PMS
    Stock entretienexportPDF()Liste produits
    TIACPDF.exportTIACDDPP()Notification DDPP

    Conformité Réglementaire

    📜 Règlements Couverts

    RèglementModules Concernés
    CE 852/2004Tous modules HACCP
    CE 853/2004Séparation cru/cuit
    INCO 1169/2011Allergènes, Protocoles
    Arrêté 21/12/2009Températures
    ISO 22000Analyse risques
    RGPDModule RGPD, Crypto
    CE 178/2002TIAC, Traçabilité

    🔬 7 Principes HACCP Intégrés

    PrincipeImplémentation
    1. Analyse des dangersModule analyse-risques
    2. Déterminer les CCPFlux CCP (cuisson, refroid, remise)
    3. Établir limites critiquesSeuils configurables par zone
    4. SurveillanceRelevés température, nettoyage
    5. Actions correctivesModule actions-correctives
    6. VérificationAudit, simulateur DDPP
    7. DocumentationJournal, 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