feat(scripts): qlik-validate.mjs — valider les expressions et la clé de jointure

Le serveur Qlik est filtré par IP : injoignable depuis l'extérieur du réseau FF
(la passerelle d'egress tombe en connection timeout sur 443 comme sur 80, alors
qu'elle atteint le reste d'Internet). Impossible donc de valider à distance les
expressions par défaut ni la clé de jointure.

Ce script répond aux deux questions en une exécution, à lancer depuis le
conteneur de l'app :
  - expressions réelles des master measures (CA N, Quantité N, COMP…) ;
  - tableau mois par mois comparant Sum(quantite) / Sum(ca_ht) / Sum(ca_ttc) /
    Count(DISTINCT [Magasin Code]) aux mesures « N », sur l'année en cours (où
    elles doivent coïncider) et sur l'année précédente (où les « N » sont
    censées être à 0) ;
  - Article Code, article_no_centrale et article_codein côte à côte, pour
    trancher la jointure avec articles.artcentrale.

Lecture seule : sélections en soft lock, objets de session détruits. Le mot de
passe vient de l'environnement, rien n'est écrit ni affiché.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DfqUihgixw4K1AmJhizWiu
This commit is contained in:
Claude committed 2026-07-31 06:43:25 +00:00
1 parent 4a56584a27
commit f0e36308f2
2 files changed
+374

No files matched your search

+20
View File
@@ -120,6 +120,26 @@ Un calibrage faible signale une expression à ajuster (filtre `flag_type_mvt`,
`ca_ttc` plutôt que `ca_ht`…). Quantité totale nulle ou erreur Engine → repli
automatique sur l'ancien chemin. `QLIK_USE_EXPR=0` le force.
### Valider les expressions sur le vrai serveur
`scripts/qlik-validate.mjs` répond aux deux questions ouvertes en une exécution,
**depuis un réseau qui atteint Qlik** (le serveur est filtré par IP : injoignable
depuis l'extérieur, la passerelle d'egress tombe en `connection timeout`) :
```
docker exec -e QLIK_PWD='<mot de passe>' -it <conteneur> node scripts/qlik-validate.mjs
```
Il affiche les expressions réelles des master measures, puis un tableau mois par
mois comparant `Sum(quantite)` / `Sum(ca_ht)` / `Sum(ca_ttc)` /
`Count(DISTINCT [Magasin Code])` aux mesures « N » — sur les mois de l'année en
cours (où elles doivent coïncider) comme sur ceux de l'année précédente (où les
mesures « N » sont censées être à 0). Il affiche enfin `Article Code`,
`article_no_centrale` et `article_codein` côte à côte, pour trancher la clé de
jointure avec `articles.artcentrale`.
Lecture seule : sélections en soft lock, objets de session détruits.
## Mois vides de la fenêtre glissante (chemin de repli)
Les mesures « N » de l'app sont bornées à une année civile. Quand la fenêtre