mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-21 14:08:08 +02:00
Qlik: la sync 12 mois passe — sonde fournisseur bornee, commentaires rectifies
Premier run reussi : 12 mois couverts, 40 411 produits ecrits dans le
cache, statut final=success.
Ce que la sonde paginee montre enfin :
Periode « (aucune) » → master exposee : 2024-01…2026-07 (31 mois)
Sans aucune Periode selectionnee, « Quantite N » couvre 31 mois, et une
seule passe (Annee=2026) sert les 12 mois de la fenetre. L'etat libre
etait donc le bon depuis le debut ; ce sont deux defauts de l'outil de
MESURE qui le cachaient — la sonde tronquee a 60 lignes, puis le Clear
appele sur le list object. Le commentaire de choisirPeriode affirmait
l'inverse (« sans Periode la master est morte ») : il est rectifie, avec
la mesure a l'appui.
Sonde fournisseur : elle lisait 1 207 205 codes en 240 pages avant de
conclure, trois fois de suite — 87 s pour un rejet joue d'avance. La
lecture s'arrete desormais des le plafond depasse.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DfqUihgixw4K1AmJhizWiu
This commit is contained in:
1 file changed
+31
-17
+31
-17
@@ -850,6 +850,12 @@ export async function fetchNetworkMetricsPlaywright(
|
|||||||
const selectionnerParFournisseur = async (): Promise<boolean> => {
|
const selectionnerParFournisseur = async (): Promise<boolean> => {
|
||||||
if (!fournisseurCode || codes.length === 0) return false;
|
if (!fournisseurCode || codes.length === 0) return false;
|
||||||
const attendus = new Set(codes.map((c) => c.trim()));
|
const attendus = new Set(codes.map((c) => c.trim()));
|
||||||
|
/**
|
||||||
|
* Au-delà de ce nombre de codes visibles, la sélection fournisseur
|
||||||
|
* ne restreint rien (elle laisse tout le catalogue) : inutile de
|
||||||
|
* finir la lecture, la réponse est déjà connue.
|
||||||
|
*/
|
||||||
|
const plafond = attendus.size * 3;
|
||||||
|
|
||||||
/** Codes articles visibles sous la sélection courante. */
|
/** Codes articles visibles sous la sélection courante. */
|
||||||
const lireCodesVisibles = async (): Promise<Set<string>> => {
|
const lireCodesVisibles = async (): Promise<Set<string>> => {
|
||||||
@@ -882,6 +888,11 @@ export async function fetchNetworkMetricsPlaywright(
|
|||||||
const c = String(r[0]?.qText ?? "").trim();
|
const c = String(r[0]?.qText ?? "").trim();
|
||||||
if (c && c !== "-") vus.add(c);
|
if (c && c !== "-") vus.add(c);
|
||||||
}
|
}
|
||||||
|
// Inutile de lire tout le catalogue pour conclure : au-delà
|
||||||
|
// du plafond, la sélection ne restreint manifestement rien.
|
||||||
|
// Mesuré : 1 207 205 codes lus en 240 pages, ×3 champs =
|
||||||
|
// 87 s perdues avant un rejet joué d'avance.
|
||||||
|
if (vus.size > plafond) break;
|
||||||
}
|
}
|
||||||
return vus;
|
return vus;
|
||||||
} finally {
|
} finally {
|
||||||
@@ -918,9 +929,9 @@ export async function fetchNetworkMetricsPlaywright(
|
|||||||
// 1 207 205 articles visibles, soit tout le catalogue — la
|
// 1 207 205 articles visibles, soit tout le catalogue — la
|
||||||
// sélection n'avait rien restreint, et la « couverture » de 97 %
|
// sélection n'avait rien restreint, et la « couverture » de 97 %
|
||||||
// ne faisait que constater que le catalogue contient nos codes.
|
// ne faisait que constater que le catalogue contient nos codes.
|
||||||
if (visibles.size > attendus.size * 3) {
|
if (visibles.size > plafond) {
|
||||||
diag(
|
diag(
|
||||||
" champ « " + champ + " » = « " + fournisseurCode + " » → " + visibles.size +
|
" champ « " + champ + " » = « " + fournisseurCode + " » → plus de " + plafond +
|
||||||
" articles visibles pour " + attendus.size + " demandés : la sélection ne restreint rien, ignorée",
|
" articles visibles pour " + attendus.size + " demandés : la sélection ne restreint rien, ignorée",
|
||||||
);
|
);
|
||||||
await rpc("Clear", {}, h);
|
await rpc("Clear", {}, h);
|
||||||
@@ -980,23 +991,26 @@ export async function fetchNetworkMetricsPlaywright(
|
|||||||
/**
|
/**
|
||||||
* Choisit la valeur de `Période` sous laquelle l'extraction aura lieu.
|
* Choisit la valeur de `Période` sous laquelle l'extraction aura lieu.
|
||||||
*
|
*
|
||||||
* ⚠️ Correction majeure. La version précédente mesurait la couverture
|
* CE QUE DIT LA MESURE (production, 2026-08-01, sonde paginée) :
|
||||||
* d'une `Période` **sans sélection d'année**, puis effaçait `Période`
|
|
||||||
* si aucune valeur ne couvrait les 12 mois. Or :
|
|
||||||
*
|
*
|
||||||
* - sans `Période`, `Type_Cal` ne résout rien : « Quantité N » est
|
* Période « (aucune) » → master exposée : 2024-01…2026-07 (31 mois)
|
||||||
* morte partout (mesuré : couverture 0/12). Les passes annuelles
|
|
||||||
* renvoyaient bien 270 056 lignes, mais **toutes mesures nulles** —
|
|
||||||
* d'où « 0 point mensuel ajouté » et le refus final ;
|
|
||||||
* - « Année à date » ne vaut « janvier → aujourd'hui » que pour
|
|
||||||
* l'année EN COURS. Avec `Année=2025` sélectionnée, la même valeur
|
|
||||||
* donne l'année 2025 COMPLÈTE — c'est exactement ce que montre
|
|
||||||
* l'app : « Période d'analyse : Du 02/01/2025 au 31/12/2025 ».
|
|
||||||
*
|
*
|
||||||
* La couverture d'une `Période` ne veut donc rien dire hors du contexte
|
* Sans aucune `Période` sélectionnée, « Quantité N » couvre **31 mois**,
|
||||||
* d'année dans lequel elle sera utilisée. On la mesure désormais comme
|
* et une seule passe (`Année=2026`) sert les 12 mois de la fenêtre.
|
||||||
* l'**union des passes annuelles** — 2025 puis 2026 — c'est-à-dire
|
* L'état libre est donc le bon — encore fallait-il pouvoir le voir.
|
||||||
* exactement ce que fera `monthDimPath`.
|
*
|
||||||
|
* Deux erreurs successives l'avaient masqué, toutes deux dans l'outil
|
||||||
|
* de mesure et non dans le modèle Qlik :
|
||||||
|
* 1. la sonde ne lisait que les 60 premières lignes du cube `[Mois]`,
|
||||||
|
* donc jamais les mois récents → « 0/12 » pour toute valeur ;
|
||||||
|
* 2. `Clear` était appelée sur le list object au lieu du champ, ce qui
|
||||||
|
* faisait avorter la cartographie entière avant son premier essai.
|
||||||
|
*
|
||||||
|
* D'où le principe retenu ici : **ne rien présumer, tout mesurer**. La
|
||||||
|
* couverture est évaluée par année et dans le contexte exact où elle
|
||||||
|
* sera exploitée (`monthDimPath` pose la même valeur), l'état sans
|
||||||
|
* `Période` étant un candidat comme un autre — et, en l'occurrence, le
|
||||||
|
* gagnant.
|
||||||
*/
|
*/
|
||||||
const choisirPeriode = async (annees: number[]): Promise<number> => {
|
const choisirPeriode = async (annees: number[]): Promise<number> => {
|
||||||
const fenetre = new Set(monthlyPayload.map((m) => m.label));
|
const fenetre = new Set(monthlyPayload.map((m) => m.label));
|
||||||
|
|||||||
Reference in new issue
Block a user