TraQL 1.0.0 pour Dolibarr 24.0.0

Ce qui est livré, ce qui répond, ce qui ne répond pas.

Quelles versions

TraQL 1.0.0, pour Dolibarr 24.0.0.

La base sur laquelle tout a été éprouvé a été installée en 3.8.3 puis migrée jusqu'en 24.0.0. Les deux valeurs sont dans llx_const : MAIN_VERSION_LAST_INSTALL vaut 3.8.3, MAIN_VERSION_LAST_UPGRADE vaut 24.0.0. La preuve vient donc d'une base migrée, pas d'une installation neuve. Un schéma migré porte parfois des traces de son passé qu'une installation neuve n'a pas ; c'est écrit ici pour que personne n'ait à le découvrir.

Le paquet

34 fichiers, 126,8 kB compressés, 389,9 kB décompressés. Deux dossiers : cartographe/ et bibliotheque/.

Ce paquet a été assemblé le 31 août 2026 à 07:44 UTC — la date est dans paquet.json, sous assemble_le, et c'est elle qui dit de quel assemblage cette page parle.

Les 19 fichiers de cartographe/ :

confrontations-dolibarr.json n'est pas recopié de nos fichiers de travail : il est produit au moment où le paquet est fabriqué. Il porte ce que les autres écrans de Dolibarr répondent à la même question, et ce que chacun compte en trop — rien de plus. La règle complète de ces écrans, et l'endroit du code de l'éditeur où elle est écrite, restent chez nous.

Ce qui n'en sort pas. Les outils d'atelier ne sont pas dans le paquet — pas seulement inactifs : absents. Ils sont dix-sept : banc, epreuve-gardes, couverture, sonder, verifier, assembler, diagnostic, check, comparer, mutation, catalogue, banc-reconnaissance, identites, avec-et-sans, carte, epreuve-couverture, interface.

L'installation

1. Créez un compte de lecture sur votre base.

CREATE USER 'traql'@'localhost' IDENTIFIED BY 'votre_mot_de_passe';
GRANT SELECT ON votre_base.* TO 'traql'@'localhost';

2. Remplissez le fichier de connexion. Copiez cartographe/connexion-exemple.json en cartographe/connexion-dolibarr.json et renseignez l'hôte, le port, le nom de la base et le compte. Le mot de passe n'y figure pas : vous le posez au lancement.

export TRAQL_DB_PASSWORD='votre_mot_de_passe'     # Linux, macOS
$env:TRAQL_DB_PASSWORD='votre_mot_de_passe'       # Windows PowerShell

3. Posez une question.

node cartographe/lecteur3.js --logiciel=dolibarr "mon chiffre d'affaires 2025"

Il rend la requête et sa définition, sans rien exécuter. Pour qu'il l'exécute aussi :

node cartographe/lecteur3.js --logiciel=dolibarr --executer "mon chiffre d'affaires 2025"

Les prérequis

Node.js, version 18 ou plus récente. Et un compte de base en lecture seule : GRANT SELECT, rien d'autre.

Ce compte est la garantie. TraQL ne peut pas écrire parce que votre base le lui refuse, pas parce que son code s'en abstient. Vous pouvez le vérifier vous-même : essayez un UPDATE avec ce compte, il sera rejeté.

Ce que TraQL ne demande jamais : aucun droit d'écriture, aucun accès administrateur, aucun port ouvert, aucune connexion sortante.

Les dépendances et leurs licences

27 paquets npm, dont 2 directes : mysql2 3.23.2 et pg 8.22.0, tous deux sous licence MIT. Les versions sont exactes, pas des plages : deux installations à deux dates posent le même pilote.

Aucune licence non permissive. Sur les 27 : 23 MIT, 2 Apache-2.0 (denque, long), 2 ISC (pg-int8, split2). Aucun paquet sans licence déclarée.

Un emprunt de code, déclaré. La table de correspondances de bibliotheque/decouper — celle qui fait se rejoindre « Straße » et « Strasse » — vient d'OpenRefine (FingerprintKeyer), sous licence BSD, Copyright 2010 Google Inc. C'est le seul emprunt du paquet, et il est nommé dans le code lui-même.

Ce qui répond

18 questions, déclinées en 36 combinaisons question × périmètre. Une question déclinée sur plusieurs périmètres ne compte que pour une, et son verdict est le pire de ses déclinaisons : elle ne « marche » que si elle marche partout.

Treize répondent sans réserve :

Cinq répondent sous une réserve déclarée, et c'est la même pour les cinq : la devise n'est pas une colonne de la table interrogée, c'est une valeur déclarée — 'EUR' AS devise. Elle est vraie tant que ce client ne facture que dans une seule devise. S'il en emploie plusieurs, il faut déclarer la colonne qui la porte.

Deux hypothèses valent pour toutes les questions, et elles se changent dans un fichier de déclaration : l'installation est supposée mono-société (entity = 1), et celui qui interroge est supposé voir tous les tiers.

Ce que TraQL ne fait pas

Il ne rend aucun des écrans de statistiques de Dolibarr tel quel. Trois capacités lui manquent pour cela : la série par mois, l'axe de découpe par client, et la jointure en chaîne article → ligne → document.

Une question du banc est déclarée hors de portée, avec sa raison : « Martin m'a payé en mars ». llx_paiement ne porte aucun fk_soc ; le chemin vers le tiers passe par llx_paiement_facture puis llx_facture, soit deux jointures en chaîne que le moteur ne sait pas encore poser.

Il ne vérifie pas le SENS de vos colonnes. Ce qu'il contrôle, c'est que les colonnes déclarées existent bien dans votre base. Si un module a détourné une colonne pour y ranger autre chose, il ne le verra pas.

Il ne voit que les droits du compte que vous lui donnez. Sa lecture des privilèges est sincère, pas exhaustive : c'est la question posée, et le rapport nomme toujours le compte.

Le sondage de votre base

Il a eu lieu à la fabrication, pas chez vous. La base a été regardée avant que ce paquet soit fait, et cartographe/schema-dolibarr.json porte ce qui y a été constaté. La date du sondage est dans paquet.json, sous base_sondee_le.

Ce que ça vous donne : le lecteur n'ouvre pas votre base pour produire une requête — il relit ce fichier. C'est ce qui rend ses réponses reproductibles : la même question, sur le même paquet, rend la même requête.

Ce qui a été lu, et pourquoi.

Ce qui n'a pas été lu. Aucune valeur de donnée métier : pas un montant, pas un nom de tiers, pas une ligne de facture. Les seules lectures sont information_schema pour des noms de colonnes, la version du serveur, et llx_const pour des réglages désignés par leur nom.

Le sondeur sait aussi compter des lignes — un COUNT(*) qui rend un nombre, jamais une valeur. Sur votre base, il n'en a lancé aucun.

Quand votre base change — montée de version, module installé, réglage modifié — demandez un paquet à jour. Le sondage se fait à la fabrication : un paquet ne se met pas à jour tout seul, et TraQL ne devine pas qu'une constante a bougé.

Les chiffres de référence

Obtenus sur la base d'épreuve décrite plus haut — installée en 3.8.3, migrée en 24.0.0 — avec le compte en lecture seule.

« mon chiffre d'affaires 2025 »
  ton chiffre d affaires — le total de ce que tu as facture   HT · exercice 2025   en EUR
    8 450,00   (sur 4 lignes)
« combien j'ai de clients »
  combien il y en a   nombre
  1 ligne(s) :
    COUNT(*)
    28

La deuxième ligne est celle qui compte : HT · exercice 2025 · en EUR. Si l'un de ces trois est faux pour vous, le chiffre l'est aussi. Et en EUR est la garantie que rien de ce total n'est dans une autre devise — quand TraQL ne peut pas la donner, il écrit UNITÉ NON BORNÉE à la place, et le chiffre se lit autrement.

Et voici ce qu'il rend quand on lui demande le détail. On y regarde trois choses : la règle appliquée avec l'endroit du logiciel où elle est écrite, la requête produite mot pour mot, et les autres réponses que votre propre logiciel donne à la même question — avec ce que chacune compte en trop ou en moins.

node cartographe/lecteur3.js --logiciel=dolibarr --executer --details "mon chiffre d'affaires 2025"
« mon chiffre d'affaires 2025 »
  ton chiffre d affaires — le total de ce que tu as facture   HT · exercice 2025   en EUR
    8 450,00   (sur 4 lignes)

  la période : exercice 2025 — du 1er avril 2025 au dernier jour de mars 2026, début d'exercice lu dans llx_const.SOCIETE_FISCAL_MONTH_START, entité 1, sondé le 2026-08-23 03:07 UTC
  SELECT ROUND(SUM(llx_facture.total_ht), 2), COUNT(*) FROM llx_facture WHERE type IN (0,1,2,3,5) AND fk_statut IN (1,2) AND llx_facture.entity = 1 AND llx_facture.datef BETWEEN ? AND ?
  valeurs : "2025-04-01" · "2026-03-31"
  votre logiciel répond aussi à cette question, autrement :
     (1) l'export de donnees livre avec le logiciel — tout : brouillons, proformas, factures remplacees, autres societes, autres devises
     (2) le graphique du chiffre d'affaires par mois — les BROUILLONS (fk_statut >= 0)
     (3) l'ecran comptable du chiffre d'affaires — rien de trop : la regle est bonne
  FACTURE_DEPOSITS_ARE_JUST_PAYMENTS : vérifié dans ta base, inactif — la règle ci-dessus s'applique. Sondé le 2026-08-23 03:07 UTC.
  en EUR — cette colonne y est déjà convertie, rien à borner
  note : activité = hors taxes, c'est ce qui s'appelle ton chiffre d'affaires

Cette sortie se reproduit à l'identique chez qui relance la même commande sur la même version : c'est ce qui la rend vérifiable. Vous n'avez pas à nous croire sur parole, vous pouvez comparer.

Ce qui est connu et pas corrigé

Rien pour cette version. Les défauts ouverts aujourd'hui sont des défauts d'atelier : ils portent sur les outils de fabrication et de contrôle, qui ne sont pas dans le paquet. Aucun n'est visible depuis ce qui est livré. Cette section existe pour être remplie le jour où ce ne sera plus le cas.

Les chiffres de cette page ont été mesurés le 31 août 2026, sur le dépôt au commit 17d9143. Ils y ont été relevés un par un, pas repris de mémoire.

Les autres versions de Dolibarr

Les autres logiciels que TraQL couvre