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/ :
LISEZ-MOI-CLIENT-dolibarr.md— le mode d'emploilecteur3.js— le moteurusage.js·demandes.jsbase-dolibarr.json·contrat-dolibarr.json·lecture-dolibarr.json·schema-dolibarr.json·confrontations-dolibarr.jsonpatrons.json·vocabulaire-matiere.json·territoire-langue.json·mots-outils.json·listes-client.jsonconnexion-exemple.json·clown-exemple.json·modele-exemple.json·modele-distant-exemple.json·modele-vllm-exemple.json
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 :
- combien il y en a
- les factures d'une période
- votre chiffre d'affaires — le total de ce que vous avez facturé
- ce qu'on vous doit
- ce que vos clients ont réellement payé
- la taxe d'une période
- les devis qui expirent
- les devis d'une période
- l'historique d'un client
- les commandes d'une période
- les notes de frais d'une période
- ce que vous avez en banque aujourd'hui
- ce que vous avez acheté — le total de vos factures fournisseur
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.
- le prix d'un article — sur
llx_product - les contrats d'une période — sur
llx_contrat - les dons d'une période — sur
llx_don - vos projets et opportunités en cours — sur
llx_projet - les opportunités commerciales remportées — sur
llx_projet
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.
- Le schéma — 16 tables, 792 colonnes. Pour savoir quelles colonnes existent réellement chez vous : Dolibarr en a renommé plusieurs en onze ans, et TraQL déclare parfois deux candidats pour un même rôle. Il prend celui que votre base porte, pas le premier de sa liste.
- L'exercice — mois 4, lu dans
llx_const.SOCIETE_FISCAL_MONTH_START, entité 1. Sans lui, « cette année » répondrait sur l'année civile alors que vous clôturez ailleurs. - La devise — EUR, lue dans
llx_const.MAIN_MONNAIE, entity 1. C'est elle qui permet d'écrireen EURà côté d'un total, et de refuser d'additionner deux monnaies sans le dire. - Les sociétés — non comptées, et c'est déclaré avec sa raison.
Les entités de Dolibarr ne se comptent dans aucune table de ce montage :
llx_entityappartient au module Multi-société, qui n'est pas installé ici. Rien ne dépend de ce nombre chez Dolibarr, donc l'absence n'arrête rien. - Deux réglages —
FACTURE_DEPOSITS_ARE_JUST_PAYMENTSetMAIN_PAIMENTS_SHOW_ALL_INVOICE_TYPES— tous deux absents dellx_const, donc inactifs. Ils ne changent pas une mention : ils remplacent le périmètre d'un calcul. C'est pour ça qu'ils sont lus.
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.