# Émile 3D — guide pour les assistants automatisés et les testeurs > Site d'impression 3D et de conception sur mesure (emile3d.fr). Application d'une seule page (index.html + JavaScript), données servies par data.php, actions par api.php. Ce fichier décrit comment naviguer, créer un compte, se connecter et où se trouvent les choses. Version des fichiers : voir versions.json. ## Règles - Un compte de test (adresse se terminant par @acces-test.invalid) est temporaire : il expire de lui-même et est ensuite supprimé. N'y saisissez jamais de données personnelles réelles. - Une demande envoyée depuis le panier reste une demande : l'atelier confirme le prix avant toute fabrication ; rien n'est facturé automatiquement. - Respectez robots.txt : ne sollicitez pas api.php en boucle ; le serveur verrouille une adresse quinze minutes après cinq mots de passe faux. ## Navigation (ancres, sans rechargement) - #accueil · #catalogue · #catalogue/ (une catégorie principale montre aussi ses sous-catégories) · #catalogue/prive (collection privée, compte autorisé) · #produit/ (2.34.0 : « Ajouter une couleur qui n'est pas en stock » — couleur du nuancier sans bobine, la commande est alors facturée au minimum 30 € ; un produit offert peut limiter les exemplaires par commande et masquer prix, détail du prix, caractéristiques et liste d'envies ; 2.40.0 : quand la fiche ou sa catégorie autorise plusieurs matières, un groupe « Matière » (id fiche-matieres, boutons .choix[data-materiau]) permet de changer de matière — PLA → PETG… — : le prix et les couleurs en stock suivent, et un comparatif des deux matières (div id fiche-comparatif : solidité, tenue à la chaleur, extérieur, finesse des détails, souplesse de 1 à 3, aspect, conseillé pour, à éviter pour, prix de l'exemplaire) s'affiche ; l'article du panier porte alors « Matière : X (au lieu de Y) » et la fiche atelier la matière choisie) · #categories · #services · #filaments (2.40.0 : chaque offre de bobine liste les couleurs réellement disponibles — bobines neuves à vendre — avec leur nombre, select .bobine-couleur « noir (4 disponibles) » ; une offre sans bobine neuve est « Épuisé ») · #promotions · #cartes-cadeaux · #livraison · #fidelite · #support · #contact · #legal · #plan · #versions - #panier : récapitulatif, formulaire de demande (form name="demande" : name, email, tel, street-address, message). 2.36.0 : un seul champ « Un code ? » (input id dem-bon, bouton id dem-bon-appliquer) accepte un code de réduction, un code d'adhésion d'entreprise (connexion nécessaire : il rattache le compte à l'entreprise) ou un bon / une carte cadeau ; les codes posés sont des puces .code-chip (retrait par [data-code-retirer]) ; le ticket détaille « Sous-total », « Avantage entreprise — … », « Code … », « Vous économisez » et le total ; le serveur recalcule tout à la création de la commande. - Page d'accueil (#accueil), 2.36.0 : un membre connecté dont l'entreprise a un avantage configuré voit en tête de page un bandeau temporaire aux couleurs de l'entreprise (div id accueil-avantage, bouton de fermeture pour la session) ; le catalogue et les fiches affichent alors « votre prix » (.prix-collegue). Un visiteur ou un compte sans entreprise ne voit rien de tout cela. - #compte : connexion ou création de compte · #compte/creation ouvre directement la création. - Espace client (connecté) : #compte/commandes (suivi : frise avec camion qui avance jusqu'à l'étape courante, imprimante animée pendant l'impression, galerie des photos des pièces avec visionneuse, messages avec images et mise en forme légère **gras** _italique_ « - liste ») · #compte/rapide · #compte/anouveau · #compte/envies · #compte/stock · #compte/modeles (Mes modèles : modèles créés pour la personne — réservés ou partagés — et modèles déjà commandés, « Commander à nouveau » ; 2.33.0) · #compte/proposer (Proposer une pièce, 2.34.0 : nom et lien du fichier d'origine obligatoires, description, couleurs, photos ; fiche complète facultative — catégorie, matériau, dimensions, origine, auteur, licence, usage — récompensée d'un bon de 5 € réservé à la pièce une fois validée ; suivi des propositions et réponses de l'atelier) · #compte/premium (Membre Premium : création et personnalisation de la carte de membre — visible dès que le compte est éligible), #compte/catalogue-prive (catalogue privé, contextualisé selon le métier) et #compte/connexion-directe (message direct à l'atelier avec catégorie et images ; échanges classés « réponses à lire / en cours / terminés », réponse sur place) — visibles seulement une fois la carte créée · #compte/professeur, #compte/medical, #compte/nucleaire, #compte/sciences, #compte/public (espaces thématiques selon le secteur ou la profession) · #compte/infos · #compte/idees · #compte/fidelite · #compte/avantages (Codes et avantages, 2.36.0 : avantage entreprise du compte — ou formulaire id form-adhesion / input id adh-code pour saisir un code d'adhésion —, codes de réduction réservés au compte avec bouton copier [data-copier], portefeuille des bons et cartes cadeaux, missions et récompenses .mission / .mission-faite) · #compte/support - Administration : admin.php (réservée à l'atelier ; un compte de test n'y a pas accès). 2.40.0 : Atelier → Bobines et filaments (#admin/filaments, volets #admin/filaments/apercu — vue d'ensemble dessinée bobine par bobine —, toutes, vente, production ; fiche de chaque bobine : couleur et code couleur, neuve ou entamée et masse restante, poids, nombre, affectation automatique (neuve → à vendre, entamée → production) ou forcée, visible ou masquée au catalogue, marque, fournisseur et lien, prix et date d'achat, dépense liée ou créée, prix de vente propre, emplacement, notes ; actions ouvrir, vendue, masse, retirer ; « Offre commerciale → Bobines et filaments à vendre » (#admin/bobines) et l'ancien « Stock atelier » (#admin/stock) ouvrent cet écran ; les couleurs en stock du site se recalculent depuis les bobines) ; Production → fiche atelier : bloc « Bobine utilisée » (select id at-bobine, matière prélevée id at-bobine-g, bouton id at-bobine-ok) ; Catalogue → Matériaux : section « Comparatif pour le client » ; éditeur de produit : « Autres matières au choix du client » (#pr-materiaux) ; Pilotage → Feuille de route (#admin/feuille : quatre sections — dysfonctionnements repérés, améliorations suggérées, modifications demandées, nouvelles fonctionnalités —, entrées avec statut, priorité, version, source ; « Générer le document récapitulatif » : Markdown ne gardant que ce qui reste à faire, copie et téléchargement api.php?action=feuille_document_md). 2.39.0 : Site web → Ma Petite Impression : volet Courriels (les e-mails de la page : interrupteur général, photos jointes ou non, puis pour chacune des onze étapes — confirmée, détails demandés, impression, finition, prête, expédiée, remise, annulée, refusée, photos, message — activée ou non, objet et texte avec les repères {prenom} {nom} {reference} {pieces} {note} {date} {nom_page} {site} {signature} {url}, retour au texte d'origine) ; suivi d'une commande en main propre dessiné avec un petit personnage qui marche (aussi dans l'espace client et sur la page). 2.38.0 : Site web → Ma Petite Impression : volet Modèles listant tous les produits actifs (publics et privés) avec la case « Proposé » (case « Proposé sur Ma Petite Impression » aussi dans l'éditeur de chaque produit, étiquette « partage » dans la liste des produits), réglages « apparition animée » et « largeur de la page », nouveaux textes (carnet, favoris, espace). 2.37.0 : Offre commerciale → Promotions et codes (#admin/promotions, trois volets : #admin/promotions/classiques, #admin/promotions/entreprises — codes entreprise, avantages collègues, événements, création d'un code entreprise en un geste, envoi du code aux fiches —, #admin/promotions/coupons — l'ancien « Codes et coupons », #admin/codes y mène encore ; option « s'applique tout seul » d'un coupon) ; Relation client → Entreprises : fiche entreprise avec « Envoyer le code aux collègues » et la section « Coupons événementiels » (Noël, Halloween, Pâques, fêtes des mères et des pères, Black Friday, rentrée, anniversaire, période libre : coupon généré chaque année, annoncé par e-mail, appliqué tout seul si on le souhaite) ; Comptes → fiche d'un compte et Fiches clients → éditeur : bloc « Codes et avantages » (résumé chiffré et détail). 2.36.0 : Offre commerciale → Codes et coupons (liste centrale des codes de réduction : pourcentage ou montant, minimum, validité, usages, cible — tous, comptes, entreprise, secteur, membres —, produits ou catégories, cumulable, visible, test ; générateur de code avec préfixe ; envoi par e-mail ; usages récents ; avantages entreprise) ; Relation client → Entreprises : section « Avantage collègues » (réduction, libellé, minimum, dates, code d'adhésion, message d'accueil, comptes membres) ; Relation client → Fidélité : missions et récompenses. 2.35.0 : Site web → Ma Petite Impression (neuf volets : réglages, textes, modèles, mises en avant, photos, demandes, jetons, lien et QR, aperçu). 2.34.0 : Catalogue → Propositions des clients (créer la fiche depuis une proposition, statut, réponse, réduction) ; éditeur de produit : options d'un produit offert (exemplaires au plus par commande, description technique masquée, liste d'envies bloquée, prix indicatif et détail du prix masqués) ; Site web → Pages, médias et contenus → Catalogues (produits privés mêlés ou non au catalogue public, désactivé par défaut) ; Tarifs : seuil de facturation d'une couleur hors stock, réduction d'une fiche complète. 2.33.0 : Catalogue réorganisé (Produits, Produits publics, Produits privés, Produits des clients, Catégories, Matériaux, Assistant IA) ; Produits des clients : un modèle créé depuis la demande d'un client lui reste rattaché et peut être réservé à lui seul (même sans carte de membre), ouvert à des catégories de métiers ou à tous les membres, avec date de désactivation automatique (cron.php) ; demande de service liée à une fiche produit existante ; catégories et sous-catégories (un niveau : listes déroulantes groupées, page Catégories, filtres, fil d'Ariane) ; éditeur de produit n'affichant que les options du mode choisi (public / privé). 2.32.0 : Ventes → Nouvelle commande (ex-Commande rapide : mode rapide ou classique au prix du catalogue, origine e-mail / téléphone / sur place, client, entreprise, projet, programme, e-mail et suivi client au choix, pièces déjà imprimées ou en cours, produit ou pièce par ligne, fiche atelier et besoin depuis le même onglet) ; Atelier → « Nouvelle fiche atelier » partout (nom libre + image, pièce, assemblage ou produit, rattachements facultatifs) et onglet File d'attente (désactivable) ; fiche atelier : bouton Enregistrer, image, liens produit / pièce, 17 motifs d'échec + précision, photos des défauts ; Site web → Médiathèque : filtres et corbeille 30 jours (archives/corbeille, jamais servi ni indexé) ; Site web → Pages (une section par page, masquage, titre, introduction, photos avec aperçu) ; icône du site (favicon) personnalisable. 2.31.0 : Site web → Médiathèque (toutes les images du serveur avec aperçu, utilisations, fichiers non utilisés, doublons de contenu à fusionner, références cassées) et sélecteur dans l'éditeur de produit ; import du catalogue et assistant IA sans doublon d'images (fiche existante mise à jour champ par champ, modes conserver / compléter / remplacer, aperçu détaillé, export horodaté) ; instantanés automatiques du catalogue restaurables (Site web → Sauvegardes) ; Pilotage → Site architecture (EN) : vue d'ensemble en anglais copiable en Markdown (aussi ARCHITECTURE.md). 2.30.0 : utilisable sur téléphone et tablette (menu en tiroir, tableaux en cartes, fenêtres plein écran, bouton « Prendre une photo » sur écran tactile) ; Administratif → Encaissement express (rentrée d'argent sans commande en cinq champs, nombre de pièces, totaux du mois) et Comptabilité → Rentrées libres ; QR codes (qr.js, généré dans le navigateur) sur les commandes, produits, lots et fiches atelier, planche d'étiquettes des produits, Pilotage → Scanner un QR code (caméra sur Chrome/Android, saisie sinon ; l'appareil photo du téléphone ouvre aussi les liens admin.php#scan/…). 2.29.0 : Relation client → Boîte d'envoi (tout e-mail client attend 10 min, annulable ; les notifications de l'atelier, le mot de passe oublié et les tests partent tout de suite), « 📨 E-mails envoyés » sur une commande, photos des pièces par lot avec ou sans e-mail, images et mise en forme légère dans les messages, statut « En attente de détails », rentrées libres et paiements en nature (Comptabilité → Livre de recettes). 2.28.0 : tableau de bord en deux blocs (commandes et clients / stock et atelier), « ✉ Personnaliser l'e-mail » (éditeur par blocs avec aperçu) sur une commande, filtre « En cours » par défaut, « Fausse demande / test » et « Compte fictif », « Créer la fiche produit » sur une demande de service. 2.27.0 : Production → « Mise à jour manuelle » (recherche → objet, éléments liés, actions avec conséquences) et « Retirer de la production » (archivage, rattachement, création de commande) ; « ✎ Corriger » sur une commande (deux colonnes, motif) ; besoins et fiches modifiables ; catégories d'accessoires en arbre. ## Créer un compte (#compte/creation) Formulaire form name="creation" (id form-creation) : - input name="name" (id cre-nom, autocomplete name, obligatoire, 2 caractères min.) - input name="email" (id cre-email, autocomplete username email, obligatoire) - input name="new-password" (id cre-mdp, autocomplete new-password, 8 caractères min.) - input name="confirm-password" (id cre-mdp2, même valeur) - bouton id cre-valider « Créer mon compte » → le compte est créé et connecté ; message d'erreur éventuel dans #cre-erreur (role alert). ## Se connecter (#compte) Formulaire form name="connexion" (id form-connexion) : input name="email" (id cnx-email), input name="password" (id cnx-mdp), bouton id cnx-valider « Se connecter » ; erreur dans #cnx-erreur. Lien « Mot de passe oublié ? » (id cnx-oublie) envoie un e-mail. Déconnexion : bouton id compte-deconnexion dans l'espace client. ## Secteur, métier et catalogue privé (parcours) 1. Tant que le secteur n'est pas renseigné, un panneau « Une question pour commencer » (section id compte-parcours, form name="parcours") s'affiche en tête de l'espace client : des tuiles radio name="parc-secteur" (valeurs : enseignement, sante, public, nucleaire, sciences, entreprise, proches, autre), puis le métier (input id parc-profession, boutons .secteur-metier) et l'employeur (id parc-employeur). 2. Si le secteur est concerné par le catalogue privé (par défaut sante, nucleaire, enseignement ; réglable par l'atelier), une case id parc-souhaite « Je souhaite accéder au catalogue privé » apparaît. Bouton id parc-confirmer « Confirmer ». Le même composant existe dans #compte/infos avec le préfixe cpt- (cpt-secteur, cpt-profession, cpt-employeur, cpt-souhaite). 3. Un compte éligible (secteur concerné + case cochée, ou accès confirmé par l'atelier) voit la rubrique #compte/premium avec le bouton id cercle-creer « Créer ma carte ». La carte se forge en plein écran (dialogue .cercle-scene ; bouton id cercle-scene-passer « Passer l'animation » ou touche Échap pour abréger ; bouton id cercle-scene-fermer « Découvrir le catalogue privé »). 4. La carte ouvre #compte/catalogue-prive (message d'ouverture aside id cercle-ouverture) et #compte/connexion-directe. Le catalogue privé est gratuit : la quasi-totalité des modèles y est offerte (prix zéro au panier). Personnalisation de la carte dans #compte/premium : form id form-carte-style (radios carte-finition : nuit-or, noir-argent, marine-cuivre, ivoire-or, emeraude-or, bordeaux-or ; radios carte-motif : cube, hexagone, bobine, aucun). Un compte d'un secteur non concerné ne voit aucune de ces rubriques et rien ne les lui annonce. 5. « Ma Petite Impression » (2.35, refondue en 2.38, « Mon compte » en 2.39) : page à part prive.php (adresse courte /prive), un espace de partage — aucun prix, aucune référence à un achat, jamais un panier. Les modèles proposés sont choisis un par un par l'atelier sur tout le catalogue (public ou privé : drapeau mpiPropose de la fiche produit ; un produit privé reste soumis à sa visibilité). Visiteur : formulaire d'entrée (form id mpi-form-connexion, inputs id mpi-email / mpi-mdp) et rien d'autre ; compte sans carte : encart vers #compte/premium ; membre : tuiles de catégories (boutons [data-mpi-cat]), cartes .mpi-carte[data-mpi-produit] avec un favori ♡ ([data-mpi-favori] → liste d'envies « Mes favoris ») et un bouton [data-mpi-ouvrir] → panneau #mpi-panneau (radios name="mpi-couleur" dont la valeur __autre ouvre le champ id mpi-couleur-libre, quantité [data-mpi-q], note id mpi-note, form id mpi-p-form « Je le veux »), carnet de souhaits « Mes souhaits » dans le tiroir #mpi-tiroir.mpi-carnet (bouton [data-mpi="tiroir"] ; lignes .mpi-carnet-ligne, [data-mpi-tq] ± 1, [data-mpi-retirer] ; form id mpi-t-form, message id mpi-t-message, bouton « Envoyer mes souhaits » → commande à 0 € d'origine « Libre-service »), section « Déjà imprimé, à prendre » ([data-mpi-prendre] : pièce du stock fini réservée), photos de membres (form id mpi-photo-form, modérées par l'atelier), résumé « Mes demandes » (#mpi-demandes-resume), « Il manque quelque chose ? » (form id mpi-form-proposer → proposition). Les éléments [data-anim] apparaissent un par un (classe .mpi-vu ; rien si prefers-reduced-motion) ; pleine largeur (body.mpi-largeur-pleine) ; sur téléphone, le menu #mpi-nav est une barre fixée en bas. 2.38 : espace membre dans la page, bouton [data-mpi="espace"] → #espace/ (demandes, favoris, photos, stock, proposer, connexion-directe, support, carte, infos, idees), bâti sur les mêmes formulaires que l'espace client du site (ids identiques : form-infos, form-ticket, form-ligne-directe, form-proposition, stock-zone, carte-membre…) mais sans catalogue privé, remboursement, code de réduction ni montant ; cartes de demandes « Demande DEM-… » (.commande-sans-prix, [data-mpi-redemander] remet les pièces dans le carnet). 2.39 : « Mon compte » (bouton [data-mpi="espace"], menu #mpi-compte-nav en trois groupes .mpi-compte-groupe — Mes impressions, Mon coin, Avec l'atelier — treize rubriques .mpi-espace-onglet) à l'adresse #compte/ : tableau (tableau de bord : chiffres, « À suivre » avec [data-mpi-voir=référence] qui ouvre la demande dans En cours, dernières photos, « Reçu récemment », favoris), demandes (En cours : toutes les demandes en cours, celles de la page et les commandes passées sur le site — étiquette « sur le site », sans montant, lien vers le site pour le prix et le règlement), historique (par année, filtres [data-mpi-histo-filtre] vide|encours|recues|arretees|page|site, recherche id mpi-histo-q, lignes dépliables details.mpi-histo-ligne#histo-REF), deja (Déjà demandé : chaque modèle déjà demandé avec le nombre de fois, reçu ou non, filtres [data-mpi-deja-filtre] et boutons « Je le veux » / « redemander tel quel »), puis favoris, photos, stock, proposer, idees, connexion-directe, support, carte, infos ; #compte seul → tableau ; les anciennes adresses #espace/ et celles du site sont reconduites (#compte/commandes → demandes, anouveau et modeles → deja, envies → favoris, premium → carte, catalogue-prive → modèles ; le reste renvoie vers index.html) ; #produit/ ouvre le panneau du modèle s'il est proposé. Suivi d'une demande (toujours en main propre sur la page) : la frise .suivi-route.suivi-a-pied montre un petit personnage qui marche (.suivi-pieton, svg .svg-marcheur) à la place du camion ; sur le site, le personnage remplace le camion pour une commande remise en main propre, retirée sur place ou à l'atelier. E-mails de la page : à chaque étape d'une demande, un e-mail chaleureux au nom de la page (jamais un montant ; remerciement quand les pièces sont prêtes ou remises, avec les photos de l'atelier ; bouton « Suivre ma demande » → #compte/demandes), textes réglés par l'atelier et jamais envoyés à la page. Le nom, le slogan et chaque texte sont réglés par l'atelier ; la page peut être fermée (message). Le lien vers la page est dans le groupe Espace privé de l'espace client (a.compte-lien-externe), pour les membres seulement. ## Mes informations (#compte/infos) Formulaire form name="informations" (id form-infos) : name (cpt-nom), tel (cpt-telephone), le composant secteur et métier décrit ci-dessus (préfixe cpt-), presentation, preferences, street-address (cpt-adresse), case emails-suivi (cpt-emails). Bouton « Enregistrer ». Changement de mot de passe : form name="mot-de-passe" (current-password, new-password, confirm-password). ## Première connexion À la connexion : un détenteur de la carte est conduit sur #compte/catalogue-prive ; un compte éligible sans carte, sur #compte/premium ; les autres sur #compte (parcours secteur → métier si le secteur manque). Un message de bienvenue discret (aside id compte-bienvenue) s'affiche en haut de l'espace client jusqu'à ce que le bouton id bienvenue-fermer « J'ai compris » soit pressé ; il contient un guide replié pour les assistants automatisés. ## Panier et demande Sur une fiche produit : couleur, options, quantité, bouton « Ajouter au panier ». Sur certains produits (« couleurs personnalisées »), un membre voit sous les couleurs un bouton id zone-ajouter « + Ajouter une zone de couleur » : cliquer ensuite sur le visuel (id fiche-visuel) pose un repère numéroté ; chaque zone (liste id zones-liste) a sa couleur (select .zone-couleur) et un libellé (.zone-libelle) ; les zones sont transmises dans la demande. Dans #panier : le formulaire de demande (voir ci-dessus), une case d'acceptation des conditions, bouton d'envoi. La demande apparaît ensuite dans #compte/commandes avec son statut (En attente de validation → Confirmée → En cours d'impression → Prête → Expédiée / Remise). ## API (api.php?action=…) GET session (jeton anti-CSRF « csrf » à renvoyer dans l'en-tête X-CSRF de chaque POST, corps JSON) · POST inscription {nom, email, mdp} · POST connexion {email, mdp} · POST deconnexion · GET commandes · POST profil {nom, telephone, adresse, emailsSuivi, secteur (identifiant de catégorie), profession, employeur, presentation, preferences, interets[], souhaitePrive oui|non} · POST carte_creer (compte éligible) · POST carte_style {finition, motif} · POST commande_creer (envoi du panier, utilisé par la page #panier) · GET tickets, POST support_envoyer {type, sujet, message} · 2.35 : GET mpi (état de « Ma Petite Impression » pour la personne connectée : acces, reglages — jamais le réglage courriels —, produits sans prix, disponibles, photos, demandes, points ; 2.38 : mesPhotos — ses photos avec leur statut — et favoris — identifiants des produits en liste d'envies ; 2.39 : « Mon compte » se construit avec GET commandes, sans montant) · POST mpi_demander {articles: [{produitId, quantite, couleur, note, stockFiniId}], message} · POST mpi_photo (multipart : produitId, legende, images[]) · 2.38 : POST mpi_photo_retirer {id} (sa propre photo seulement) ; administration : POST mpi_proposer {produits: {id: bool}} (produits proposés sur la page, sur tout le catalogue) · 2.40 (administration) : GET filaments_bobines (vue d'ensemble, chiffres, nuancier, stock à la vente) · GET bobines_liste {vue: toutes|vente|production|vides, materiau, couleur, etat, q, visible} · POST bobine_enregistrer {id?, materiau, couleur, hex, etatBobine, masseRestanteG, poidsInitialG, quantite, affectation: auto|vente|interne, visible, marque, fournisseur, fournisseurUrl, prixAchat, dateAchat, expenseId, creerDepense, prixVente, locationId, notes} · POST bobine_supprimer {id, motif} · POST bobine_consommer {id, grammes, motif} · POST atelier_bobine {id, itemId, grammes} (bobine utilisée par une fiche, 0 = aucune) · GET feuille · POST feuille_enregistrer {id?, titre, type, detail, statut, priorite, version, source} · POST feuille_statut {id, statut} · POST feuille_supprimer {id} · POST feuille_deplacer {id, sens} · POST feuille_document (génère le récapitulatif) · GET feuille_document_md (fichier Markdown) ; un article « produit » du panier peut porter materiauId (matière choisie), un article « filament » porte bobineId et couleur (sortie du stock à la remise) · 2.36 : POST code_verifier {code, email, articles, base} (réponse {type: coupon|entreprise|bon|cadeau, …} ou {erreur}, 401 pour un code d'adhésion sans connexion ; limité à 40 essais par quart d'heure) · GET avantages (connecté : entreprise, codes, portefeuille, missions) · POST entreprise_rattacher {code} · POST commande_creer accepte coupon et sousTotal / remiseEntreprise dans totaux (recalculés côté serveur) · 2.37 : la session d'une personne connectée porte utilisateur.codesAuto (coupons qui s'appliquent d'eux-mêmes dans le panier : code, libellé, remise, fin, picto) ; le panier les pose par code_verifier sans saisie, « retirer » les met de côté pour le navigateur. Une réponse {erreur} décrit le problème en français ; 401 = connexion nécessaire ; 503 = site en maintenance ou en cours de mise à jour. ## Compte de démonstration (#compte/demo) Sur la page #compte (visiteur), la tuile dorée id demo-ouvrir « Compte de démonstration » ouvre une session guidée entièrement fictive (aucun compte créé, aucun appel au serveur) : scène plein écran id demo-scene, sept étapes (commande, suivi, e-mails, espace client, support, ticket SAV, remboursement) jouées automatiquement en une minute environ. Commandes : boutons data-demo="pause|suivant|precedent|recommencer|quitter" dans l'en-tête, pastilles d'étapes data-etape="0…6", touches Échap (quitter), espace (pause), flèches (étapes). L'adresse #compte/demo ouvre directement la démonstration. Fichiers isolés demo.js et demo.css, chargés au premier clic ; API JavaScript window.DemoEmile3D.demarrer() / quitter() / recommencer() / etat(). ## Diagnostic (2.26) Chaque appel à l'API et chaque erreur JavaScript de la page sont consignés dans un journal de session (window.Diagnostic.journal ; Diagnostic.rapport() donne le rapport complet en texte). Le bandeau id bandeau-panne contient un rapport détaillé (heure, action, code, type, durée, taille, page, versions, navigateur, réponse brute) avec les boutons data-panne="copier|console|journal|mode|serveur". Le mode diagnostic (bouton, ou ?diagnostic=1 dans l'adresse, mémorisé dans localStorage e3d-diagnostic) affiche la pastille id diagnostic-pastille qui ouvre le panneau id diagnostic-panneau. Un administrateur reçoit dans les réponses d'erreur 500 le champ detail (fichier, ligne, pile) et peut lire GET journal_erreurs {ref, n} (journal du serveur archives/erreurs.log, POST journal_erreurs_vider pour l'effacer). ## Mention « Modèle non vérifié » Un produit dont la fiche porte nonVerifie = true affiche sur sa vignette une étiquette .etiquette-non-verifie et, sur sa fiche, le paragraphe .non-verifie « Modèle non vérifié — Ce modèle n'a pas encore été imprimé et sa qualité n'a pas été vérifiée. » Simple information : la commande reste possible. ## Installation et mises à jour (install.php) install.php?cle= installe la base, applique les migrations manquantes et — 2.26.1 — fait un autodiagnostic : état de la base avant/après (tables, colonnes clés, cohérence version du site / fichiers), conflits détectés avec solution, réparation automatique de SITE.version si une mise à jour s'était interrompue (le site ne reste plus bloqué en « mise à jour à terminer »), rapport de diagnostic en cas d'échec (aussi au journal des erreurs), et journal des ouvertures réussies avec la clé (nombre + date, visible aussi dans Auto-contrôle). Le marqueur d'une version n'est enregistré qu'après son succès complet : une migration interrompue se rejoue proprement. ## Signaler un problème Bandeau rouge en haut de page en cas de panne du serveur (id bandeau-panne) avec le détail technique complet (voir Diagnostic) ; sinon la page #support permet d'écrire à l'atelier.