← Retour à la connexion

Mode d'emploi — QUOTELUI (ARTISAN ENGINE)

Guide utilisateur de l'application web. Cette plateforme gère toute l'activité d'une entreprise artisanale : clients, chantiers, catalogue, devis (avec PDF et envoi par email), relevés de terrain, et administration. Les données sont isolées par entreprise.


1. Se connecter

  1. Ouvrez l'adresse de l'application dans un navigateur (ex. http://localhost:8000/).
  2. Saisissez votre adresse email et votre mot de passe, puis Se connecter.

Sur cette page de connexion : liens publics « Confidentialité » (politique RGPD) et « Mentions légales » — accessibles sans compte.

Les comptes sont créés par l'administrateur de l'entreprise (voir §14) ou via la commande de démonstration seed_demo. Les identifiants des comptes de démonstration partagés sont communiqués par l'éditeur sur demande — ils ne figurent ni dans cette documentation, ni dans sa version en ligne (enregistrez-les dans votre gestionnaire de mots de passe).

Comptes de démonstration verrouillés : le mot de passe de ces comptes reste fixe et ne peut pas être réinitialisé (ni depuis Administration → Membres, ni depuis l'espace éditeur). Le verrou est porté par le champ User.is_demo (posé par seed_demo) et appliqué par set_user_password, unique point de réinitialisation de l'application. Ainsi la démo reste utilisable par les futurs testeurs.

Démo isolée pour un prospect : au lieu du compte partagé ci-dessus, créez une entreprise dédiée (métier activé, scénario de projection — chantier daté et adressé, donc navigation Waze/Google Maps au planning, relevé guidé, devis à relancer, admin au vrai email du prospect, mot de passe de première connexion) : manage.py seed_prospect --company "Dupont Menuiserie" --trade menuiserie --email j.dupont@dupont.fr --pdf — 1 prospect = 1 commande (entreprise isolée) ; l'option --pdf génère en plus le document de prise en main personnalisé (docs/QUOTELUI-demo-<entreprise>.pdf : accès, parcours de découverte, métier) à joindre au message d'envoi. Avec --send-email, le PDF est généré et l'email d'accès part immédiatement au prospect (pièce jointe), envoyé depuis la boîte configurée dans Réglages → Envoi (option --smtp-from "Nom entreprise" pour choisir la boîte, sinon la première active) — journalisé dans le journal des emails. Ajoutez --reset pour repartir d'un scénario neuf sans changer les identifiants ; manage.py demo_brief --company … [--password …] régénère le PDF à tout moment. La boîte d'envoi est choisie dans cet ordre : --smtp-from "Nom entreprise", sinon la boîte éditeur (Éditeur → Réglages, si active), sinon la première boîte d'entreprise active. Si le verrou de licences est actif (LICENSE_SECRET), le seed génère automatiquement la clé du métier (valable 1 an) — le module reste actif dans l'administration sans saisie manuelle. Voir docs/deployment.md §3 ter (livraison / SaaS multi-client).

Installer QUOTELUI sur un smartphone (PWA, V2.15)

QUOTELUI est une application web installable (Progressive Web App) :


2. Choisir son entreprise

Un même compte peut appartenir à plusieurs entreprises.

Le rôle affiché dans le menu correspond à celui que vous avez dans l'entreprise sélectionnée (le rôle global ne s'applique que si aucun rôle d'entreprise n'est défini).


3. Rôles et droits

Les actions sont contrôlées côté serveur (masquer un bouton ne suffit jamais). La hiérarchie des rôles est cumulative.

RôlePeut faire
LECTEURConsulter le catalogue, les clients, les chantiers, les relevés et les devis.
TECHNICIENTout « LECTEUR » + saisir les relevés de terrain (mesures, champs spécifiques, photos, observations) et les valider.
COMMERCIALTout « TECHNICIEN » + créer / modifier / gérer les clients, créer, éditer, envoyer et réviser les devis, créer/envoyer les factures (V2.1), les bons de livraison (V2.10) et le pipeline d'affaires / relances (V2.11).
MANAGERTout « COMMERCIAL » + gérer le catalogue (types de produits, attributs), les prix/TVA, le stock, les fournisseurs et les commandes fournisseurs, et consulter l'audit.
ADMINTout « MANAGER » + gérer les membres, les modules métiers et les réglages de l'entreprise.

Le menu s'adapte à votre rôle : un Technicien ne voit pas « Clients » ni « Devis », mais voit « Relevés », « Catalogue » et ses alertes.


4. Le menu (colonne de gauche)

EntréeRôlesDescription
Tableau de bordTousVue adaptée au rôle (voir §5).
Devis≠ TechnicienListe et création des devis (§10).
Factures≠ TechnicienDevis acceptés → factures, états, PDF/email (§10 bis).
Clients≠ TechnicienListe et gestion des clients (§7).
Chantiers≠ TechnicienListe et gestion des chantiers/projets (§8).
RelevésTousRelevés de chantier, workflow terrain → bureau (§11).
CatalogueTousProduits et types de produits (§9).
StockTous (mouvements : Manager+)Suivi des quantités, seuils, mouvements (§13 quater).
FournisseursTous (gestion : Manager+)Fiches fournisseurs et tarifs d'achat (§13 quinquies).
CommandesTous (gestion : Manager+)Commandes fournisseurs, réception → stock (§13 quinquies).
LivraisonsTous (gestion : Commercial+)Bons de livraison client, sortie de stock (§13 sexies).
AffairesTous (gestion : Commercial+)Pipeline commercial, relances CRM (§13 septies).
PlanningTousCalendrier semaine des chantiers, relevés, RDV et livraisons, avec conflits par technicien (§13 quattuordecies).
RechercheTousRecherche globale multi-objets (§6).
Alertes (+ badge)TousRappels automatiques (§6 bis).
StatistiquesManager+Pilotage commercial (§5 bis).
HistoriqueManager+Journal d'audit (§15).
RéglagesAdminParamètres de l'entreprise (§13).
Administration → MembresAdminComptes et rôles de l'entreprise (§14).
Administration → ModulesAdminActivation des modules métiers (§14 bis).

En bas du menu : la liste des entreprises, votre nom et votre rôle, et le bouton de déconnexion (↪).

Sur mobile, le menu se replie ; le bouton ☰ en haut à droite l'ouvre.


5. Tableau de bord

Vue d'accueil adaptée au rôle :

Chaque bloc renvoie vers la liste filtrée qu'il annonce (§23) : « CA devis » ouvre les devis envoyés + acceptés avec le Total TTC du filtre affiché, « Montant en attente » les seuls devis envoyés, « Brouillons » tous les états de travail (brouillon, à compléter, en révision, prêt), « Expirent sous 7 j » les devis dont la validité se termine dans la semaine, « À relancer » vos devis envoyés depuis plus de 30 jours, « Relevés incomplets » les relevés sans aucun élément et « Photos manquantes » ceux sans photo — les compteurs affichés sont donc toujours les mêmes d'un côté comme de l'autre. La liste des devis affiche, quand un filtre est actif, son Total TTC ; les puces de statut se combinent avec « Mes devis » (portée commerciale).


5 bis. Statistiques — pilotage commercial (V2.7)

Statistiques dans le menu (Manager+) agrège l'activité commerciale de l'entreprise sur les 12 derniers mois :

Détails techniques : les brouillons, modes intermédiaires et devis annulés / expirés sont exclus des CA et des ratios ; les devis refusés sont comptés dans la transformation mais jamais dans le CA.


6. Recherche globale

Une seule zone de recherche interroge tous les objets : clients, contacts, chantiers, devis, produits, documents et relevés.


6 bis. Alertes (automatiques)

L'application surveille en continu et affiche un badge orange avec le nombre de rappels. Rien à configurer : les règles sont celles du cahier des charges.

Type d'alerteRègle
Devis à relancerDevis envoyé depuis plus de 30 jours sans réponse.
Devis expirantValidité qui arrive à échéance (< 7 jours).
Devis expiréDevis envoyé dont la date de validité est dépassée (ou déjà passé à EXPIRE). Un brouillon n'expire jamais.
Factures non régléesFacture dont l'échéance est dépassée (montant affiché).
Stock bas / ruptureProduit suivi dont le solde est ≤ seuil (rouge si rupture, ≤ 0).
Relances en retardActivité commerciale (appel, email…) à faire dont l'échéance est dépassée.
Conflit de planningUn technicien a 2+ interventions le même jour sur les 14 prochains jours (chantier + relevé + RDV…).
Relevé incompletRelevé en TERRAIN sans éléments.
Photos manquantesRelevé en TERRAIN/VALIDE sans photo.

Ouvrez Alertes : chaque ligne mène à la liste filtrée correspondante (devis expirés, factures en retard, factures en attente d'acquittement ou rejetées par la plateforme, stock à réapprovisionner, relevés sans photos…), qui affiche exactement le nombre annoncé — le compteur de l'alerte, le KPI du tableau de bord et la liste ont la même définition.

Un devis envoyé dont la validité est dépassée apparaît en rouge dans la liste (badge « expiré ») et sur sa fiche (bandeau « Validité dépassée ») : pour prolonger la validité, remettez-le en révision (nouvelle version) ou relancez-le tel quel (même PDF figé). La commande périodique manage.py expire_quotes (facultative, §48) aligne le statut sur EXPIRE — l'affichage est identique avant et après.


7. Clients

  1. Clients → Nouveau client : type (Particulier / Professionnel / Entreprise), coordonnées, adresse de facturation (modèle Address lié en billing_address), n° TVA intracommunautaire (normalisé en majuscules) et SIRET optionnel (Customer.siret, migration customers/0002 — validé : exactement 14 chiffres).
  2. Le formulaire s'adapte au type (Alpine) : raison sociale + TVA + SIRET visibles pour Professionnel/Entreprise, prénom/nom pour Particulier (les champs masqués restent dans le DOM et sont donc soumis — aucune perte de données à l'édition).
  3. set_billing_address(customer, …) crée l'adresse à la demande, la met à jour sur place (pas de doublon) et la retire si tous les champs sont vides.
  4. Le snapshot figé du destinataire (_snapshot_customer) emporte address / vat_number / siret : les PDF de devis et de facture affichent « TVA : … » / « SIRET : … » quand renseignés — figés à l'envoi, jamais rétro-impactés sur les versions antérieures.
  5. La fiche client résume ses coordonnées et liste ses chantiers et devis.

La gestion des clients est réservée au Commercial et au-dessus.


8. Chantiers (projets)

Un chantier est un projet rattaché à un client : lieu d'intervention, dates.

  1. Chantiers → Nouveau chantier : client, nom, adresse du site.
  2. La fiche chantier liste les devis et les relevés associés.

9. Catalogue

Le catalogue est entièrement dynamique : chaque type de produit (fenêtre, chaudière, radiateur…) possède ses propres attributs (largeur, débit, puissance, matériau, énergie…).

Catalogue ≠ stock : le catalogue est un référentiel d'offre (ce que vous pouvez proposer, y compris des produits fournisseurs, avec leurs prix). Il ne représente pas votre inventaire : pour suivre ce que vous détenez réellement, utilisez le Stock (§13 quater), qui ne suit que les produits que vous choisissez de suivre.

Les données de base (types, attributs, champs de relevé) sont injectées automatiquement à l'activation d'un module métier (§14 bis). Vous pouvez aussi créer vos propres types de produits sans aucune programmation.


10. Devis

10.1 Création

  1. Devis → Nouveau devis. Le numéro est attribué automatiquement (DEV-2026-0001, séquence propre à l'entreprise).
  2. Renseignez l'état brouillon : client, chantier éventuel, date de validité (proposée automatiquement d'après les réglages).
  3. Ajoutez des lignes : soit depuis un produit du catalogue (attributs et prix repris), soit en saisie libre (libellé, prix unitaire HT).
  4. chaque ligne porte sa quantité, son prix unitaire HT et son taux de TVA (choisi ligne par ligne — il est figé à l'envoi). 3 bis. Ajout guidé par métier, façon relevé : sous le bouton « Ajouter une ligne »,
  5. 1. Métier : chips des modules activés (Menuiserie, Plomberie…) ;
  6. 2. Type : chips des types de ce métier (Fenêtre, Parpaing…) puis, si des produits existent, chips des produits (ou « Pas au catalogue ») ;
  7. 3. Caractéristiques du type : dès qu'un type est choisi, ses schémas s'affichent comme au relevé guidé (§11.2) — dimensions (H, L, Ø avec l'unité du schéma) et sous-choix (matériau, vitrage, ouverture, coloris…), pilotés par les données du catalogue ;
  8. les caractéristiques du type sont repliées par défaut (bloc « Caractéristiques du type (optionnel) ») : le formulaire reste court, on les ouvre seulement si l'on veut préciser le chiffrage ;
  9. les valeurs saisies sont validées par le schéma du type (choix autorisés, bornes min/max de dimensions, type de valeur) : une dimension hors limites catalogue ou un choix invalide est refusé avec un message précis — le moteur n'accepte aucune donnée invalide ;
  10. bouton « Proposer un prix » : le prix, la quantité et l'unité sont recalculés côté serveur, dans cet ordre : moteur tarifaire (grille fabricant — première taille ≥ —, simulation ou API) pour les menuiseries, puis règle de pose du type (quantité déduite de la surface/dimension saisie), puis prix catalogue du produit choisi. Aucun tarif connu : message explicite, le prix reste à saisir (jamais un montant inventé). Les montants saisis ou pré-remplis acceptent la virgule française et les séparateurs de milliers (« 1 234,56 »). Chaque ligne reste modifiable ensuite (libellé, prix, quantité, remise).
  11. Remises :
  12. par ligne : un pourcentage ou un montant fixe (jamais les deux) ;
  13. globale : pourcentage ou fixe, appliquée sur l'ensemble du devis. Les totaux (HT, TVA par taux, TTC) se recalculent en continu (arrondis à 2 décimales).
  14. Actions par ligne (tableau des lignes, tant que le devis est modifiable) : Modifier (libellé, description, quantité, prix unitaire HT — saisie en place), Remise (% ou € fixe sur la ligne) et Supprimer (confirmation). Le service update_line recalcule les totaux ; la TVA figée et le produit lié restent intacts. Les mêmes opérations existent côté API (set_line_discount, remove_line).
  15. Main-d'œuvre (au temps) : bloc dédié sous le tableau des lignes :
  16. taux horaire (pré-rempli par Réglages → Entreprise →« taux horaire main-d'œuvre », modifiable ligne par ligne) ;
  17. durée totaleoudurée par unité × nombre d'unités ;
  18. majoration éventuelle (nuit, dimanche, urgence) appliquée au prix unitaire (jamais un coefficient caché dans le total) ;
  19. durée minimale facturée appliquée à la quantité. La ligne produite est une ligne de devis ordinaire (prix unitaire × quantité = total HT), donc traitée comme les autres par la TVA, les remises, la facturation et l'export comptable.
  20. Alerte « le tarif a changé » : tant que le devis est modifiable, si le prix d'une ligne ne correspond plus au tarif actuel (règle de pose du type, sinon prix catalogue du produit), la ligne affiche une note « Tarif actuel : 60,00 € (règle « … ») — la ligne est à 50,00 € ». C'est purement informatif : aucun montant n'est modifié automatiquement.

10.2 États et cycle de vie

Le devis suit une machine d'état stricte :

BROUILLON → A_COMPLETER → EN_REVISION → PRET → ENVOYE → ACCEPTE / REFUSE / EXPIRE
                                              ↘ (révision) → nouvelle version
ÉtatSignification
BROUILLONCréé, en cours de saisie.
A_COMPLETERVous signalez qu'il manque des informations.
EN_REVISIONCorrection en cours.
PRETComplet, prêt à l'envoi.
ENVOYEEnvoyé au client : le contenu est figé.
ACCEPTE / REFUSE / EXPIREIssue finale du devis.
ANNULEDevis abandonné.

Règle d'or : les états modifiables sont BROUILLON, A_COMPLETER, EN_REVISION, PRET. Dès l'envoi, le contenu est gelé (aucune modification silencieuse) ; pour le changer, repassez en EN_REVISION : une nouvelle version est créée (v1 → v2 → …), les versions précédentes restent consultables.

À l'envoi, remarque : l'email du destinataire et les coordonnées de l'entreprise sont pris dans la version figée, jamais dans les données vivantes — c'est une garantie de traçabilité.

10.3 PDF et email

Après envoi (contenu figé) :

Tant que le devis est en brouillon ou en état intermédiaire, le bouton PDF n'apparaît pas : son contenu n'est pas encore figé (§10.4). Une fois envoyé, le bouton devient disponible. Si l'URL du PDF est saisie directement sur un devis non envoyé, un message l'indique (aucune erreur serveur).

10.4 Versions

Sur la fiche du devis, l'historique des versions (v1, v2…) est consultable : chaque version montre le contenu exact envoyé à ce moment-là.

10.5 Quantitatif / liste d'achat

Bouton « Quantitatif / achat » sur la fiche du devis : le détail des quantités d'achat pour préparer les commandes fournisseurs — distinct du prix de vente.

Pour chaque ligne liée à un produit :

  1. quantité théorique : la quantité de la ligne, convertie si le métier fournit une règle — aujourd'hui :
  2. peinture : surface × couches ÷ rendement (m²/L) → litres ;
  3. carrelage : pièces × surface de la pièce (attribut « format », ex. 60x120 → 0,72 m²/pièce) → m² ;
  4. maçonnerie : surface de mur (m²) × éléments au m² (attribut nombre_au_m2, joints compris) → nombre de blocs ; ou surface × épaisseur (mm) → volume de béton (m³) pour une dalle ;
  5. couverture : surface de toiture × recouvrement (attribut recouvrement, éléments/m² posés) → nombre de tuiles / ardoises. Sans la donnée métier (rendement, format, éléments/m², épaisseur, recouvrement), la quantité du devis est conservée et la raison s'affiche : aucune conversion inventée ;
  6. perte / chute du produit (%) appliquée à la quantité d'achat — jamais à la quantité facturée au client ;
  7. conditionnement (contenu d'un conditionnement, ex. 1,44 m² par carton, 2,5 L par pot) : le nombre de conditionnements est arrondi au supérieur (un conditionnement partiel n'est pas vendu) ;
  8. minimum de facturation du produit : la ligne est facturée au minimum si la quantité est inférieure.

Kits / ensembles : un produit composé (voir fiche produit → « Composition (kit) ») est éclaté dans la liste d'achat — chaque composant apparaît avec sa quantité (× quantité du kit), ses propres pertes et conditionnements, et le kit lui-même n'est pas commandé. Une fourniture présente à la fois dans un kit et sur une ligne séparée est signalée « déjà dans un kit » pour éviter la double commande (spec §5.2). Idéal pour une salle de bain complète, un tableau électrique ou un ensemble de chauffage.

Le tableau affiche théorique / perte / avec perte / conditionnements / à acheter / facturé, puis la liste des commandes à prévoir, agrégée par produit. Les lignes sans produit (prestations libres) sont listées mais n'entraînent aucune commande. Aucun montant ni quantité n'est inventé : sans rendement renseigné, la quantité de la ligne est conservée et la raison s'affiche.

Conformité comptable : les pertes, conditionnements, kits et conversions métier ne concernent que les quantités d'achat. La quantité facturée reste celle des lignes du devis (prix unitaire × quantité), et les exports comptables (export factures, synoptique annuel, déclaration de TVA, bilan recettes/dépenses) ne contiennent que des montants facturés, ventilés par taux de TVA — jamais une quantité d'achat. Modifier un tarif produit ou un conditionnement après l'établissement d'un devis/facture ne change aucun montant déjà établi.

Ces paramètres se renseignent sur la fiche produit (formulaire de création) ou à l'import catalogue (colonnes conditionnement, unite_achat, perte, minimum). La composition d'un kit se gère sur la fiche du produit : section « Composition (kit) » → choisir un composant + sa quantité (le produit devient alors de nature composé).


10 bis. Factures (V2.1)

La facturation est le prolongement naturel d'un devis accepté.

10 bis.1 Création

Menu Factures → + Nouvelle facture :

10 bis.2 États et cycle de vie

BROUILLON → PRETE → ENVOYEE → EN_RETARD → PAYEE
              ↘ (retour)              ↘
BROUILLON ⇄ PRETE                     ANNULEE (à tout moment)
ÉtatSignification
BROUILLONEn cours de fabrication, modifiable.
PRETEPrête à envoyer, modifiable.
ENVOYEEEnvoyée au client : le contenu est figé.
EN_RETARDÉchéance dépassée (passage automatique).
PAYEERèglement reçu.
ANNULEEAnnulée.

Règle d'or : identique au devis. Editable uniquement en BROUILLON/PRETE. Dès ENVOYEE, le contenu est figé (PDF, totaux, TVA, destinataire). Pour la modifier, annulez et créez une nouvelle facture — c'est la garantie de traçabilité d'un document financier.

10 bis.3 PDF, email et relances

Après envoi : boutons PDF (téléchargement du document figé, mention d'échéance, numéro du devis d'origine) et Envoyer par email (PDF en pièce jointe, destinataire = la version figée, jamais le client vivant). Chaque envoi est journalisé (Emails) et tracé dans l'historique.

Le bouton PDF n'apparaît que lorsque le contenu est figé (dès ENVOYEE) : tant que la facture est en brouillon ou prête, elle n'a pas de PDF associé (même règle que le devis, §10.3).

Une facture EN_RETARD est mise en évidence (bandeau « RAPPEL » sur le PDF). La bascule ENVOYEE → EN_RETARD est automatique lorsque la date d'échéance est dépassée (commande/boucle de maintenance).

10 bis.4 Relance de paiement (V2.2.1)

Pour une facture Envoyée ou En retard, le bouton Relancer (fiche ou liste de factures) envoie au client le même PDF figé avec l'objet « Relance de paiement : FAC-… ». La date de dernière relance est affichée sur la fiche, et l'envoi est journalisé dans Emails (historique de relances).

Si la facture n'est pas EN_RETARD alors que l'échéance est passée, la commande périodique s'en charge :

À planifier quotidiennement côté serveur (cron / systemd timer). Seules les entreprises actives sont affectées ; aucun ré-envoi intempestif grâce au délai.

10 bis.5 Export comptable (V2.3)

Un point d'export réunit les documents destinés au comptable, accessible depuis Factures → Export comptable :

ÉlémentOùContenu
Synoptique annuel (PDF)bouton « Synoptique PDF »Total HT/TVA/TTC par mois, ventilation par taux de TVA (base + TVA), encaissement (payées / en attente / en retard, montant TTC). Choisir l'année en haut de page.
Export CSVbouton « CSV des factures »Une ligne par facture : numéro, date émission, échéance, client, statut, HT, TVA, TTC, devis d'origine, devise. Séparateur ;, UTF-8 (compatible tableur).

Règles : les factures annulées sont comptées mais exclues des montants (coches * dans le PDF) ; les montants sont en Decimal arrondis à deux décimales ; chaque ligne figeant sa TVA, une modification ultérieure d'un taux ne change pas l'historique.

Périmètre : cet écran ne montre que le chiffre d'affaires émis par l'application (factures QuoteliL). Un bandeau le rappelle et renvoie vers le bilan complet (Documents tiers → Bilan, §18 quater) qui ajoute les pièces importées et les factures fournisseurs — le calcul des factures est partagé (annual_data) : sans pièce importée, le total TTC de l'export est égal au sous-total « factures » des recettes du bilan. Sélecteurs d'année alignés sur les deux écrans (helper _export_years()), liens croisés dans les deux sens.

10 bis.6 Déclaration TVA (V2.16)

Depuis Factures → Déclaration TVA, sélectionnez une période (mois ou trimestre) pour afficher la synthèse :

Les factures annulées et les commandes annulées / brouillon sont exclues. Les taux sont ceux figés sur chaque ligne au moment de l'émission (§9) — la modification ultérieure d'un taux ne change pas cet historique.

Exports : - CSV : bouton « CSV » — format comptable (;, UTF-8 avec BOM). - PDF : bouton « PDF » — document A4 synthétique avec les deux tableaux et la TVA nette en encadré.

10 bis.7 Facture électronique — plateforme de dématérialisation (V3.1)

Réglages → Facture électronique connecte QUOTELUI à la plateforme de dématérialisation (PDP) choisie par l'entreprise :

Qui pilote la connexion ? Deux options :

Passer du bac à sable à la production

Le mode bac à sable et le mode production utilisent la même adresse d'API : c'est la clé (ou le couple client_id/client_secret) qui détermine l'environnement (doc SUPER PDP — « La clé API utilisée détermine si l'API est utilisée en mode production ou bac à sable »). Aucun changement d'URL, aucun redéploiement.

Avant de basculer, côté SUPER PDP (console) :

  1. créer une application de production et noter ses identifiants ;
  2. inscrire l'entreprise par son SIREN (vérification d'identité du représentant légal et de l'entreprise) ;
  3. renseigner le régime de TVA de l'entreprise (nécessaire au calendrier de déclaration de l'e-reporting) ;
  4. s'assurer que les SIREN de vos clients professionnels existent dans l'annuaire réel (un client non inscrit est refusé « destinataire inconnu de la plateforme » — il doit s'inscrire auprès du SIE, cf. FAQ SUPER PDP).

Dans l'application (Réglages → Facture électronique) : saisir les identifiants de production, décocher « Mode bac à sable », activer la connexion, puis cliquer Tester la connexion (la dénomination affichée doit être la vôtre en production). Les adresses d'annuaire deviennent alors les adresses réelles : l'adresse du destinataire est son SIREN (0225:SIREN) et l'application n'inscrit jamais de ligne d'annuaire pour un client. Les factures déjà transmises en bac à sable restent tracées comme telles (badge « bac à sable »).

Sur la fiche d'une facture (figée / envoyée) : un bloc « Facture électronique (PDP) » liste les soumissions avec le retour de la plateforme : SOUMISE / EN_ATTENTE / ACCEPTEE / MISE_A_DISPOSITION (mise à disposition chez le destinataire) / REJETEE / ECHEC, plus l'identifiant message PDP, la date de soumission, un badge « bac à sable » si la transmission a eu lieu en environnement de tests, et le détail (couleur : vert = accepté, violet = remis au destinataire, rouge = rejet/échec, ambre = en attente) avec :

Lire un refus de la plateforme — le message affiché indique la conduite à tenir :

La colonne « retour » affiche, sous le message, la réponse telle quelle de la plateforme (plateforme : …) : c'est l'état déclaré par la plateforme, même si notre vocabulaire ne le connaît pas encore (codes métier propres au fournisseur).

API : POST /api/invoices/{pk}/electronic/ et POST /api/invoices/{pk}/electronic-status/.

10 bis.8 Factures aux particuliers (B2C) — e-reporting

La réforme 2026 n'impose la facture électronique (échange via une plateforme agréée) qu'aux opérations B2B domestiques. Les ventes à des particuliers (ou à des clients étrangers) relèvent de l'e-reporting : les données de transaction et de paiement sont transmises à l'administration.

Ce que fait la plateforme agréée pour vous (contrat SUPER PDP, article « E-reporting ») : les factures B2C sont déposées comme les factures B2B ; la plateforme ne les achemine à personne (un particulier n'a pas de plateforme) et en extrait automatiquement l'e-reporting. Deux conditions :

  1. le document porte la note BAR = B2C — l'application l'ajoute automatiquement dès que le client figé n'a pas d'identifiant fiscal français exploitable (SIREN/SIRET) ;
  2. les données de paiement viennent du message de cycle de vie « Encaissée » (fr:212), que l'application envoie au passage de la facture en « payée » (aucune action de votre part).

Ce que fait l'application :

bash python manage.py e_report --company 1 # mois courant python manage.py e_report --company 1 --from 2026-10-01 --to 2026-10-31 python manage.py e_report --company 1 --out /tmp/ereporting.json

Sortie JSON : transactions (jour d'émission × taux de TVA → HT, TVA, nombre de factures) + payments (jour de paiement × taux → TTC) pour les seules factures B2C émises (Envoyée / En retard / Payée — hors Annulée et hors brouillons). Montants en texte à 2 décimales (jamais de flottants), période par défaut = mois en cours, entreprises actives uniquement. - Ne pas déclarer deux fois : pour les factures B2C émises dans QUOTELUI, l'e-reporting est fait par la plateforme — n'envoyez pas en plus les données de e_report pour ces mêmes ventes (réservé aux ventes sans facture).

11. Relevés de chantier

Le relevé (métier) est le document de terrain réalisé par le technicien avant élaboration du devis. Il est cloisonné par métier : Survey.module_key (choisi à la création, parmi les modules activés) impose côté serveur les types/produits acceptés — un relevé menuiserie refuse un produit plomberie, web comme API. Les champs proposés dépendent du métier car ils viennent des schémas d'attributs du catalogue (ProductType → AttributeSchema) :

11.1 Cycle de vie

TERRAIN → VALIDE → BUREAU → EN_VERIFICATION → CLOTURE
   ↕          ↕         ↕
 retours possibles (VALIDE → TERRAIN, BUREAU → VALIDE)
ÉtatQuiRôle
TERRAINTechnicienSaisie autorisée : éléments, mesures, champs, photos, observations.
VALIDETechnicienRelevé relu et validé par le technicien.
BUREAUCommercial/ManagerTraitement au bureau (élaboration du devis).
EN_VERIFICATIONBureauVérification finale.
CLOTURETout le fluxTerminé — plus aucune modification.
ANNULE—Relevé abandonné.

Règle : seul un relevé au TERRAIN est modifiable. Les retours permettent de renvoyer un relevé en arrière sans jamais perdre son historique.

11.2 Composer un relevé (saisie guidée)

  1. Relevés → Nouveau relevé : chantier, date prévue, métier du relevé (module activé ; obligatoire dès qu'un module l'est). Un relevé déjà rempli ne peut plus changer de métier.
  2. Ajouter un élément, au choix :
  3. Ajout rapide d'un produit du catalogue (le plus courant au terrain) : sélectionnez le produit dans « Ajouter un produit du catalogue » puis « + Ajouter le produit ». Le type est déduit du produit, les caractéristiques connues du catalogue sont reprises : aucune dimension à saisir, aucun prix à saisir — les valeurs obligatoires encore vides restent simplement « à compléter » sur la fiche de l'élément, à votre rythme. Le relevé relève, le devis chiffre ;
  4. saisie guidée : type du métier (chips) → produit du catalogue (chips, pré-remplissant les attributs) ou « Pas au catalogue » → dimensions + caractéristiques guidées (les champs obligatoires du type sont alors exigés). Repère facultatif.
  5. Côté terrain, reste une saisie manuelle : les dimensions (et les rares attributs TEXT). L'unité vient du schéma : jamais d'unité à taper.
  6. Édition en place : sur la fiche de l'élément, chaque dimension (H, L, Ø… une par mesure du type) s'affiche pré-remplie avec son libellé court et l'unité du schéma — on corrige la valeur, Enregistrer (service update_dimensions, refus des clés inconnues, champ vide = inchangé). Aucune mesure libre sur un relevé cloisonné. Le formulaire Mesures libres (libellé + valeur + unité, unité résolue et créée à la demande, clé facultative — §11.3) reste réservé aux relevés génériques.
  7. Photos (format/taille validés, minutaires) et Observations.
  8. Statut TERRAIN → … → CLOTURE.

Les relevés génériques (créés sans module, data legacy ou API) gardent le comportement historique : libellé libre, aucun filtre.

La suppression est gérée en « corbeille » : un relevé supprimé reste traçable dans l'historique et restauré si besoin par l'administrateur (il garde son numéro).

11.3 La clé d'une mesure — à quoi elle sert

Chaque mesure possède un libellé (« Hauteur baie ») et une clé technique : un mot court en minuscules, sans accents ni espaces (ex. largeur, hauteur, surface).

Le rôle de la clé est de relier la mesure au reste de l'application :

Vous saisissezClé produite (si vide)Effet sur le devis
« Surface » 1,5 m²surfacedevient la quantité d'une ligne tarifée en m²
« Longueur » 4 mllongueurdevient la quantité d'une ligne au mètre linéaire
« Remarque » 2remarquedescriptive uniquement

Astuce : pour forcer la liaison avec un tarif, utilisez précisément la clé de l'attribut de quantité définie dans Réglages → Tarifs (pose) (§13 bis).


12. Recherche d'objets dans les listes

Chaque liste (devis, clients, chantiers, relevés, produits) peut être parcourue via Recherche (§6) ou directement sur les cartes du tableau de bord.


13. Réglages de l'entreprise (Admin)

Réglages (menu) permet de configurer l'entreprise, avec effet immédiat sur les nouveaux devis (l'envoi fige ces informations dans la version) :

ParamètreEffet
Logo de l'entrepriseVotre propre logo d'artisan, affiché en en-tête des PDF de devis (et uniquement là — jamais dans les emails, et distinct du logo applicatif QUOTELUI). Sans logo, le PDF affiche à la place une case avec le nom de l'entreprise. Il est figé dans le devis à l'envoi.
Adresse (rue, code, ville, pays)Affichée sur les PDF et les emails.
Nom commercial / SIRET / TVA intracom.Identité légale de l'éditeur.
Conditions de règlementFigées sur le devis.
Conditions générales (CGV)Textes des CGV figurant sur le devis.
Numérotation des devisModèle par défaut DEV-{year}-{seq} (modifiable).
TVA par défaut des lignesPréremplie sur les nouvelles lignes.
Durée de validitéDate de validité proposée automatiquement.
Couleur de marqueUtilisée dans l'interface.
Email de contact (PDF)Pied de page des devis/factures/livraisons (« Toute question sur ce devis : … »). Défaut contact@quotelui.fr ; figé à l'envoi.

Configuration par entreprise : chaque société conserve ses réglages. Un réglage ne modifie jamais un devis déjà envoyé (celui-ci est figé).

À noter : si l'entreprise ne possède encore aucun taux de TVA, QUOTELUI crée automatiquement les taux standards français (20 %, 10 %, 5,5 %, 2,1 %) à l'ouverture des Réglages et fixe la TVA par défaut à 20 % — cela évite le message « Chaque ligne doit figer son taux de TVA » lors de la création d'un devis depuis un relevé (§13 ter).

Réglages → Notifications (V2.13) configure un digest d'alertes par email : destinataires (séparés par des virgules) et catégories à inclure (devis, factures en retard, stock bas, relances commerciales, relevés, licences). L'envoi est déclenché par une commande périodique (voir §13 octies).


13 bis. Tarifs (pose) — référentiel de prix (V2.5)

Réglages → Tarifs (pose) (Admin) permet de constituer un référentiel de prix par type de produit : pour chaque type du catalogue (fenêtre, porte, pose…), vous enregistrez une prestation type avec son prix unitaire HT.

Quand un commercial ajoute une ligne de devis et choisit un produit du catalogue, l'application propose automatiquement :

Le tarif proposé reste modifiable : le commercial peut valider, corriger le prix ou la quantité avant l'ajout de la ligne. La proposition ne modifie jamais le devis elle-même.

Points de fonctionnement :

13 ter. Devis depuis un relevé (V2.6)

Un relevé de chantier peut devenir un devis en un clic :

  1. Reliez chaque élément relevé à un produit du catalogue : au moment de l'ajout, ou plus tard via le sélecteur « Relier à un produit… » de la carte de l'élément (service link_item_product — produit actif de la même entreprise, type cohérent avec l'élément, métier du relevé sur un relevé cloisonné). L'élément affiche alors « · produit : … ». Un élément typé sans produit (« Pas au catalogue ») reste chiffrable via la règle du type (rule_for_product_type).
  2. Une fois le relevé reçu au bureau (statut au moins VALIDE/BUREAU), un bouton vert « Devis depuis ce relevé » s'affiche en haut de la fiche.
  3. QUOTELUI crée un devis BROUILLON avec :
  4. le client et le chantier du relevé ;
  5. une ligne par élément relevé — aucun élément n'est perdu : relié à un produit, typé (règle du type, §13 bis), ou « … (à tarifer) » à 0 € pour un élément sans produit ni tarif ; le prix se pose ensuite dans le devis (saisie manuelle, choix au catalogue ou Tarif fabricant) ;
  6. le libellé et le prix depuis le référentiel de tarifs (§13 bis) si le type de produit y figure — sinon le nom et le prix de vente du produit ;
  7. la quantité depuis une mesure du relevé (§11.3) dont la clé correspond à l'attribut de quantité de la règle (ex. surface en m²), sinon l'attribut du référentiel, sinon 1 ;
  8. la TVA par défaut de l'entreprise (réglages §13).

Points importants :


13 quater. Stock (V2.8)

Stock dans le menu permet de suivre les quantités par produit (Manager+ pour les mouvements, tous les rôles en lecture).

Dépôts et transferts (V2.14)

Le stock est organisé en dépôts (dépôt principal, atelier, camion…) :


13 quinquies. Fournisseurs & commandes fournisseurs (V2.9)

Fournisseurs

Fournisseurs (menu) : fiches d'achat (coordonnées, conditions de règlement, délai indicatif) et tarifs d'achat par produit. La gestion est réservée aux rôles Manager+ ; les autres rôles consultent. Une fiche affiche aussi l'historique de ses commandes.

Nature du prix (spec §6) — sur chaque tarif :

Remises négociées — section dédiée de la fiche fournisseur : remise par famille (type de produit), par catégorie catalogue, de volume (« à partir de N unités ») ou par défaut sur la fiche. Résolution déterministe et jamais cumulée : la règle la plus spécifique gagne (remise produit → volume/famille → famille/catégorie → défaut). Les dates de validité bornent chaque règle ; une règle retirée reste traçable.

Historique & source : chaque changement de tarif (prix, nature, remise, validité) est historisé (ancien prix jamais écrasé en silence) et la source du prix peut être saisie (« fichier 2026 », « contrat cadre »…). Les lignes de commande fournisseur reprennent automatiquement le prix d'achat net résolu pour la quantité commandée.

Modules métier : une fiche peut préciser les métiers concernés (Menuiserie, Plomberie…) ; vide = le fournisseur est proposé pour tous les métiers.

Commandes fournisseurs

Commandes (menu) gère les bons de commande (BC-YYYY-NNNN) :

BROUILLON → ENVOYEE → CONFIRMEE → PARTIELLEMENT_RECUE → RECUE
                                        ANNULÉE (depuis tout état non reçu)

13 sexies. Bons de livraison client (V2.10)

Livraisons (menu) gère les bons de livraison (BL-YYYY-NNNN) — utiles pour tracer ce qui est réellement remis au client, indépendamment de la facturation.

BROUILLON → PARTIELLEMENT_LIVREE → LIVREE
                ANNULÉE (depuis BROUILLON / PARTIELLEMENT_LIVREE)

13 septies. Affaires & relances — CRM (V2.11)

Affaires (menu) pilote le pipeline commercial avant le devis.


13 octies. Notifications par email (V2.13)

Réglages → Notifications (Admin) active un digest d'alertes envoyé par email : destinataires et catégories à inclure (devis, factures en retard, stock bas, relances commerciales, relevés, licences).

13 novies. Sous-traitants (V2.17)

Sous-traitants (menu) gère les artisans externes à qui vous confiez des parties de chantier.

13 duodecies. Multi-devises (V2.18)

Le système supporte 6 devises : EUR (€), CHF (franc suisse), USD ($), GBP (£), CAD (dollar canadien), XOF (franc CFA).

Règle : la devise est un label d'affichage. Tous les calculs (restes à payer, reporting, totaux) sont dans la devise d'origine du document. Le change sera une phase ultérieure si besoin.

13 tredecies. Documents & photos de chantier (V2.19)

Chaque chantier dispose d'un espace documents & photos accessible depuis la fiche chantier.

Aucune migration — tout repose sur le GFK existant (Document + MediaItem).


13 quattuordecies. Planning des interventions (V3.0)

Planning dans le menu ouvre un calendrier hebdomadaire qui regroupe automatiquement tout ce qui a une date, sans rien à saisir en plus :

SourceDate utilisée
ChantiersDate de début du chantier (les personnes affectées sont les techniciens).
RelevésDate de relevé prévue (TERRAIN).
ActivitésRDV, visites, appels à faire (CRM).
LivraisonsDate de livraison (non annulées).

Fonctionnement :

Le planning est en lecture seule : il se remplit à partir de la date de début des chantiers (§8), de la date des relevés (§11) et des activités (§13 septies). Pour faire vivre l'agenda, renseignez ces dates au quotidien.

Aucune migration : le planning ne fait que lire des objets existants.


13 quindecies. Tarif fabricant — configurateur & grilles (menuiserie)

Le Tarif Fabricant chiffre une menuiserie selon le catalogue du fabricant, sans quitter le devis : bouton ⚡ Tarif Fabricant (menuiserie) sur la fiche d'un devis (§10) ou d'un relevé menuiserie (§11). La page s'ouvre dans une fenêtre intégrée (même site, sans perte de contexte).

Import d'une grille fabricant — Réglages → Tarifs fabricant (Admin et Manager) :

Accès : Admin et Manager (gestion des prix). Le tarif est une proposition : la ligne reste modifiable dans le devis.


14. Administration — Membres (Admin)

Administration → Membres gère les comptes de l'entreprise.

Chaque ajout/retrait/changement de rôle est journalisé dans l'audit.

Mode d'équipe : en mode Solo, l'entreprise n'a qu'un seul compte (l'administrateur) — le formulaire d'ajout est remplacé par un bandeau expliquant de contacter l'éditeur. Le mode se pilote depuis l'espace Éditeur (§14 quater).


14 quater. Limites de membres — espace Éditeur (V4.4)

Modes d'équipe : chaque entreprise est en mode Solo (un seul compte : l'administrateur — tous les autres rôles bloqués à 0), Standard (multi-utilisateurs, défaut) ou Personnalisé (quotas édités à la main). Le basculement se fait depuis Espace Éditeur → fiche entreprise → « Membres → », boutons « Passer en Solo » / « Passer en Standard » ; il ne supprime aucun membre existant (les ajouts sont simplement bloqués, et un dépassement éventuel reste visible). Chaque bascule est audité (PERMISSION_CHANGE, acteur = l'éditeur). Le mode est dérivé des quotas (Company.member_limits, JSON) — aucune migration, aucun champ « plan ».

Quotas par rôle : par entreprise, le nombre maximal de comptes actifs est limité par défaut à 1 ADMIN, 1 MANAGER, 1 COMMERCIAL, 3 TECHNICIEN, LECTEUR illimité (EDITEUR toujours hors quotas). La règle est appliquée côté serveur dans add_member (ajouts ET changements de rôle) — un dépassement produit un message clair, jamais une erreur 500.


14 bis. Administration — Modules métiers (Admin)

Administration → Modules active les spécialités de l'entreprise.

ModuleTypes de produits injectés
MenuiserieFenêtres, portes, portes-fenêtres, baies vitrées, portails, volets, stores, accessoires, pose.
PlomberieRobinets, mitigeurs, lavabos, WC, chauffe-eau, chaudières, radiateurs, pose plomberie.
ChauffagePompes à chaleur, poêles, sèche-serviettes, planchers chauffants, ventilo-convecteurs, ballons thermodynamiques, régulation, pose chauffage.
ÉlectricitéTableaux, disjoncteurs, interrupteurs, prises, luminaires, détecteurs ; prestations : préparation et passage des câbles, pose des appareillages, compteur et tableau électrique, mise en sécurité et fin de chantier.
CouvertureTuiles, ardoises, bac acier, zinc, gouttières, isolation, étanchéité ; prestations : dépose, pose, reprise faîtages/noues.
CarrelageCarrelage sol/mur, faïence, tomettes, parquet, plinthes, joints, préparation des supports ; prestations : dépose, pose, joints.
Peinture / PlaquistePlaques de plâtre, doublage, cloisons, plafonds, enduits, peintures, papiers peints ; prestations : pose, enduits, peinture.
MaçonnerieParpaings, bétons, dalles, fondations, murs, crépis, clôtures, terrasses ; prestations : fondations, élévation, dalles, crépis.

Verrouillage par clé d'activation (installation chez un installateur)

Selon l'installation, les modules peuvent être verrouillés : seuls les métiers livrés d'office (Menuiserie) se passent de clé. Pour activer un autre métier (Plomberie, …), il faut la clé d'activation fournie par ton installateur :

Côté éditeur — gérer, renouveler, révoquer (Éditeur → fiche agence → licences)

L'éditeur dispose de trois actions par module (route editeur/<pk>/licences/) :

L'état affiché est sans ambiguïté : Actif — licence valide jusqu'au …, Actif sans licence valide (sera reverrouillé), Licence enregistrée — module inactif, Expirée le …, Pas encore de clé.

Livrer un client final (Éditeur → Livrer un client)

Après la phase de démonstration et la signature du client, l'éditeur crée son espace définitif en une passe depuis Éditeur → Livrer un client :

  1. Société : raison sociale, nom commercial, SIRET (14 chiffres), email de contact affiché sur les PDF (défaut : email admin).
  2. Compte administrateur : email, mot de passe (vide = généré et affiché une fois) ; si le prospect avait déjà un compte de démo, il est rattaché et son mot de passe est réinitialisé.
  3. URL de connexion : y saisir l'adresse dédiée du client (ex. https://client1.quotelui.fr) — c'est le lien que recevra le client par email.
  4. Modules livrés : cocher les métiers — chacun est licencié pour la durée choisie (30 j → 2 ans, défaut 1 an) et activé immédiatement ; aucune clé à transmettre.
  5. Sièges : presets Solo (un seul compte) / Standard (1 admin + 1 manager + 1 commercial + 3 techniciens, lecteurs illimités) ou quotas saisis à la main par rôle.
  6. Email d'accès (case cochée par défaut) : message dédié « Votre espace Quotelui est prêt » — modules, échéance, identifiants — envoyé depuis la boîte éditeur. Sans boîte configurée, la livraison réussit quand même et les identifiants s'affichent à l'écran (à transmettre vous-même).

La page de succès montre les identifiants une seule fois : notez-les avant de partir. Un lien mène ensuite aux licences de la société livrée (pour renouveler plus tard).


15. Historique (audit)

Historique (menu, Manager+) journalise toutes les opérations importantes de l'entreprise :

Filtres et export :

Le journal est filtré par entreprise : rien ne fuite entre deux sociétés.


15 bis. Emails envoyés (Manager+)

Emails (menu, Manager+) montre qui a reçu quoi et quand, avec le statut de chaque envoi.

Tant que la case « Activer cette boîte » est cochée, les envois passent par cette boîte. Sinon, l'application utilise la configuration serveur (variables d'environnement EMAIL_*, ou journal console en développement).

Configuration SMTP (à défaut, configurée côté serveur)

VariableExemple (Gmail)Exemple (OVH hébergement)
EMAIL_BACKENDdjango.core.mail.backends.smtp.EmailBackendidem
EMAIL_HOSTsmtp.gmail.comssl0.ovh.net
EMAIL_PORT587587
EMAIL_HOST_USERmon-artisan@gmail.comcontact@mondomaine.fr
EMAIL_HOST_PASSWORDmot de passe d'applicationmot de passe de la boîte
EMAIL_USE_TLSTrueTrue
DEFAULT_FROM_EMAILQUOTELUI <mon-artisan@gmail.com>QUOTELUI <contact@mondomaine.fr>

Gmail impose « mot de passe d'application » (2 étapes l'activation requise). Sans SMTP configuré (mode développement/démo), les emails sont imprimés dans le journal du serveur et marqués « Envoyé » — rien ne part réellement.

Les emails envoyés avec le devis (PDF en pièce jointe) utilisent l'email du client figé dans la version envoyée, jamais le client mis à jour ensuite.



16 bis. Exemple complet guidé (démo multi-modules)

Parcours de bout en bout sur l'entreprise de démonstration « Artisan Démo SARL » (compte de démonstration communiqué par l'éditeur), montrant qu'un même devis cumule des cotations de plusieurs modules métier.

  1. Se connecter (voir §1) depuis un ordinateur ou un téléphone (http://<IP-du-PC>:8000, même Wi-Fi, §1).
  2. L'entreprise active doit être « Artisan Démo SARL » ; sinon basculez en bas du menu (§2).
  3. Catalogue — Produits : ouvrez Produits (menu). Les 8 modules sont activés sur cette entreprise (Administration → Modules) ; vous y retrouvez les produits de chaque métier : fenêtres (Menuiserie), PAC (Chauffage), disjoncteurs (Électricité), tuiles (Couverture), parpaings (Maçonnerie), grès cérame (Carrelage), peinture (Peinture).
  4. Devis — créer : ouvrez Devis → bouton Nouveau devis avec le chantier visé. La création reprend l'exemple prêt à l'emploi DEV-2026-0007 : 11 lignes couvrant 7 modules, chacune avec sa TVA figée (fenêtre 5,5 %, PAC et disjoncteurs 20 %, tuiles/parpaings/carrelage/peinture/main-d'œuvre 10 %), totaux HT / TVA / TTC affichés (17 580 € TTC).
  5. États du devis : passez le devis de <BROUILLON> (ou A_COMPLETER) vers PRET, puis Envoyer : le contenu est figé dans une version (v1 → v2 …), le PDF est généré (bouton PDF) et envoi par email possible (Envoyer). Une fois envoyé, plus aucune ligne n'est modifiable sans créer une nouvelle version (retour EN_REVISION).
  6. Relance : depuis un devis ENVOYE, le bouton Relancer renvoie le même PDF figé au même destinataire (objet « Relance : … »), journalisé dans Emails (§15 bis). la relance peut être automatisée par la commande périodique :

    CommandeEffet
    Relance automatique tout devis envoyé il y a plus de 30 jours sans réponse, sauf si relancé depuis moins de 7 jours (délais ajustables). Mode simulation disponible.

    Seules les entreprises actives sont affectées ; aucune version n'est créée (le PDF figé d'origine est renvoyé). 7. Relevé de chantier : ouvrez Relevés → RELEV-2026-0003 (statut VALIDE, workflow §11) : l'item « PAC air-eau » porte des mesures (surface 85 m²) et des champs spécifiques au métier Chauffage §15 (pièces, énergie, mode d'émission) ; l'item « Tableau existant » porte des champs Électricité (prise de terre, puissance souscrite). Même relevé, deux métiers : les champs proviennent des schémas de chaque module actif. 8. Historique : ouvrez Historique (§15) : l'envoi du devis, le changement d'état du relevé, l'activation des modules et la création des produits y sont tracés.

À retenir : rien n'est codé « métier » dans le moteur. Les modules contribuent uniquement des données (types de produits, attributs, champs de relevé). On peut donc librement mélanger Menuiserie, Plomberie, Chauffage, Électricité, Couverture, Carrelage, Peinture, Maçonnerie — sur le même devis comme sur le même relevé — et désactiver un module sans jamais perdre l'historique.


17. Conseils d'utilisation


18. Dépannage rapide

ProblèmeSolution
« Connexion refusée »Vérifiez l'adresse email et le mot de passe (majuscules/symboles compris).
Impossible de modifier un devisLe devis est envoyé (figé) : repassez en EN_REVISION pour créer une nouvelle version.
Un champ métier manque dans le relevéLe module du métier est peut-être inactif : activez-le (Administration → Modules).
Le PDF/email ne fonctionne pasLe devis doit d'abord être envoyé (contenu figé). Pour l'email, le client doit avoir une adresse email.
Un devis est « expiré »Sa validité est dépassée ; relancez via EN_REVISION (nouvelle version) avec une nouvelle date.
Bouton d'administration absentVous n'avez pas le rôle ADMIN dans cette entreprise.

18 bis. Signature électronique des devis (V2.2)

Lorsque vous envoyez un devis par email, un lien de signature est inclus dans le message (vert, bien visible). Le client peut :

  1. Consulter le devis (résumé + PDF intégré) depuis n'importe quel appareil.
  2. Accepter ou refuser en un clic — sans créer de compte.
  3. La décision est immédiatement enregistrée dans QUOTELUI (statut du devis + historique audit avec date, IP et navigateur du client).

Comment ça marche :

ÉtapeAction
EnvoiLe lien est ajouté automatiquement à l'email de devis (ou relance).
Fiche devisLe bloc Signature électronique affiche le statut (« En attente » / « Accepté le … » / « Refusé le … ») et un bouton Copier le lien.
DécisionLe lien mène à une page claire : résumé du devis + 2 boutons (Accepter / Refuser). La page est lisible même sur smartphone.
AprèsLe statut passe à ACCEPTE ou REFUSE. L'historique montre « Accepté le 12/09/2026 à 14:30 · IP 203.0.113.7 ».

Points importants :

18 ter. Confidentialité & RGPD (données personnelles)

QUOTELUI est une plateforme métier : chaque entreprise utilise son propre compte et reste responsable de traitement des données qu'elle y enregistre (clients, chantiers, devis…).

Ce qui est réellement mis en œuvre (mesures techniques) :

Droits des personnes (RGPD) : accès, rectification, effacement, limitation, portabilité et opposition s'exercent auprès de l'entreprise qui traite vos données (votre artisan/client) ; l'éditeur QUOTELUI est sous-traitant et applique ces demandes transmises par l'entreprise.

Politique complète : application → « Confidentialité » (page /confidentialite/, visible dès la page de connexion, sans compte) et Mentions légales (/mentions-legales/).

18 quater. Documents tiers — import ventes & achats (bilan comptable)

Module apps.tiers — import de pièces comptables reçues des clients (recettes) et fournisseurs (dépenses), rattachement aux fiches tiers, bilan annuel harmonisé et transmission à l'expert-comptable. Aucune logique de métier particulier : module 100 % CORE (§45).

Modèle

ThirdPartyDocument — sens RECETTE/DEPENSE, type DEVIS/FACTURE (recette) ou + COMMANDE (dépense), tiers unique (client ou fournisseur, contrôle croisé), montants HT/TVA saisis → TTC calculé en Decimal (jamais de float), statut A_RAPPROCHER/RAPPROCHE, fichier rattaché via le GFK documents.Document existant (upload_document). Suppression logique (fiche et fichier). Migration tiers/0001_initial + companies/0009_companysettings_accountant_email (CompanySettings.accountant_email, email expert-comptable pré-rempli).

Services (apps/tiers/services.py)

Bilan (apps/tiers/reporting.py, pur)

accounting_summary(company, year) : recettes = factures émises (hors annulées) + pièces de recette ; dépenses = pièces de dépense + factures fournisseurs suivies sur les commandes (supplier_invoice_*) ; net TTC, pièces à rapprocher, dernier envoi. La clé facturation embarque le résultat de annual_data (mois, TVA par taux, encaissement) — source unique avec l'écran Export comptable (§10 bis.5) : les deux affichent les mêmes chiffres par construction. Chaque ligne porte sa devise (invoice.currency / order.currency ; pièces importées = EUR, le modèle n'a pas de champ devise). bilan_csv : format comptable FR (;, BOM UTF-8, décimales à la virgule), colonnes Sens;Source;Pièce;Tiers;Date;Devise;HT;TVA;TTC;Détail.

Web (routes /documents-tiers/)

Liste (filtres sens/type/statut/année/texte), import (drag & drop + bouton Parcourir), fiche/édition, rapprochement, suppression, bilan (années, cartes recettes/dépenses/net, facturation par mois + TVA par taux + encaissement repris de l'export, CSV, envoi à l'expert-comptable ; lien croisé « Synoptique factures » ↔ l'export renvoie « Bilan complet »). Capacités : THIRDDOC_VIEW (LECTEUR+) / THIRDDOC_MANAGE (MANAGER+), même matrice web et API. Carte « Documents tiers » sur /statistiques/ ; provider pièces tiers dans la recherche globale.

API

GET/POST /api/documents-tiers/ (+ PATCH/DELETE, action rapprocher/) ; création multipart avec le champ file ; mêmes validations que les services (THIRDDOC_VIEW/THIRDDOC_MANAGE).

Envoi à l'expert-comptable

Depuis le bilan : destinataire saisi ou repris de Réglages → Email de l'expert-comptable ; objet « Bilan comptable AAAA — entreprise » ; pièce jointe bilan-comptable-AAAA.csv ; trace EmailLog (SENT/FAILED) et sent_at sur les pièces. Email de transport = boîte configurée Phase 10 / auto-gérée (§20) ; aucun envoi automatique — action explicite uniquement.

18 quater.1. Extraction automatique & doublons des documents tiers (V4.5)

Suite du module apps.tiers — aucun modèle ni migration : lecture locale d'un fichier déposé, proposition de saisie, puis rapprochement des fiches tiers en doublon. Tout reste sous contrôle de l'utilisateur (l'extraction propose, jamais n'écrit tout seul).

Extraction (apps/tiers/extracting.py, pur)

Tiers (apps/tiers/parties.py)

Doublons (apps/tiers/duplicates.py)

Web (suite /documents-tiers/)

Dépendances : pypdf, pypdfium2, pytesseract (pyproject) + paquets système tesseract-ocr tesseract-ocr-fra (Dockerfile). Tests : tests/test_thirdparty_extraction.py (72) — parseur FR, PDF à couche texte, OCR réel skipUnless(tesseract), rattachement/directions, groupes/fusions (y c. prix en conflit), écrans + capacités + isolation.

Piège de déploiement (NAS) : en prod le static vit dans le volume static_data (nginx le sert en ro) — collectstatic est à lancer après chaque déploiement (docker-compose exec web python manage.py collectstatic --noinput, rappelé en commentaire de compose.synology.yml) : sans lui, tiers_extract.js est servi vide et l'extraction ne se déclenche jamais (constaté sur V2). Pire : une copie 0 octet reste collée par le Cache-Control: max-age=604800 de nginx sur /static/et par le cache cache-first du service worker — d'où le triple remède actuel (SW quotelui-static-v2 réseau d'abord + no-cache, ?v= sur l'URL du script, message explicite si le script d'extraction est absent au lieu d'un no-op silencieux).

18 quater.2. Workflow des documents tiers (brouillon / validation / facture / lien)

Suite du module apps/tiers — machine d'états des pièces + deux scénarios de facturation, sans toucher au core (les services factures existants sont appelés, jamais modifiés). migration tiers/0002.

Statuts

BROUILLON (Brouillon) → EN_VALIDATION (En validation) → A_RAPPROCHER (À rapprocher) → RAPPROCHE (Rapproché) ; états terminaux FACTURE (Facturé) et LIE (Lié — facture externe). Les pièces importées restent par défaut en À rapprocher (zéro rupture : comptabilisées tout de suite). Brouillon / En validation sont des états optionnels (création manuelle ou API, bouton « Envoyer pour validation »).

Scénario A — « Générer une facture » (RECETTE validée uniquement)

generate_invoice_from_piece(document, by=) → crée une facture interne via create_invoice + add_line (services factures inchangés) : ligne unique (libellé = n° de pièce ou type, PU = HT de la pièce, qté 1, taux TVA déduit de la TVA de la pièce, arrondi 0,01 %), facture née en BROUILLON dans le module Factures (numéro FAC-YYYY-NNNN auto) — l'artisan la revoit puis l'envoie avec l'existant. La pièce bascule en FACTURE avec FK invoice (PROTECT) : elle sort des pièces du bilan et compte via la facture (zéro trou, zéro double compte — même total TTC). Le type de la pièce n'est pas bloquant : un devis importé depuis un autre outil peut aussi devenir une facture (utile quand le devis client sort d'une autre application et qu'il faut l'encaisser ici).

Scénario B — « Lier à une facture externe »

link_external_invoice(document, number, date, amount, source) : la facture est émise par une autre application → champs external_number/date/amount/source/linked_at, pièce en LIE. La pièce reste dans le bilan (choix produit : le lien est une simple annotation — la facture externe n'existe pas comme objet Quotelui, donc zéro double compte, bilan complet) et est dispensée du rapprochement. unlink_external_invoice(document) retire la liaison (champs effacés, retour à « À rapprocher ») en cas d'erreur de saisie. Une pièce LIE ne peut plus devenir une facture interne (jamais de deux factures pour une même opération) : déliez d'abord.

Comptabilité (reporting._piece_rows)

Entrent dans les recettes et dépenses du bilan : A_RAPPROCHER, RAPPROCHEet LIE (annotation d'une facture externe — comptée puisqu'elle n'existe pas ici) ; exclus : brouillon / en validation / FACTURE (comptée via sa facture générée). annual_data (factures émises) intact ; les cartes statistiques héritent via accounting_summary.

Écrans & API

Tests : tests/test_tiers_workflow.py (22) — transitions, exclusions bilan, génération (taux déduit, zéro trou), refus (DEPENSE, brouillon, HT nul, déjà facturée, liaison sur terminal), édition refusée en terminal, écrans web (boutons par statut, redirection facture, 403 LECTEUR) + API bout en bout.

QUOTELUI · Mode d'emploi · Confidentialité (RGPD) · Mentions légales