@rsuci/shared-form-components 1.0.88 → 1.0.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -45,6 +45,7 @@ export declare class ConditionEngine {
45
45
  evaluate(condition: string, currentIteration?: number): boolean;
46
46
  /**
47
47
  * Met en cache un résultat d'évaluation
48
+ * CORRIGÉ: Passe currentIteration au hash pour distinguer les membres
48
49
  */
49
50
  private cacheResult;
50
51
  /**
@@ -58,6 +59,8 @@ export declare class ConditionEngine {
58
59
  /**
59
60
  * Génère un hash du contexte pour les variables référencées dans une condition
60
61
  * Utilisé pour le cache des résultats d'évaluation
62
+ * CORRIGÉ: Prend en compte l'itération courante pour les variables itératives,
63
+ * évitant que le cache retourne un résultat calculé pour un autre membre.
61
64
  */
62
65
  private getContextHashForCondition;
63
66
  /**
@@ -135,6 +138,10 @@ export declare class ConditionEngine {
135
138
  private parseStringParam;
136
139
  /**
137
140
  * Construit le contexte d'évaluation à partir des réponses
141
+ * CORRIGÉ: Le fallback du code brut n'est créé que pour les variables à instance unique
142
+ * (groupes non-multiples où le backend stocke avec numeroMembre).
143
+ * Pour les variables multi-instances, seules les clés suffixées (VAR_1, VAR_2, ...)
144
+ * sont créées, évitant la contamination inter-membres.
138
145
  */
139
146
  private buildContext;
140
147
  /**
@@ -144,7 +151,10 @@ export declare class ConditionEngine {
144
151
  private replaceVariableReferencesWithIterations;
145
152
  /**
146
153
  * Suffixe les références de variables ${VAR} → ${VAR_N} pour les groupes multiples
147
- * Ne suffixe que si la variable a une version itérative dans le contexte
154
+ * CORRIGÉ: Utilise isIterativeVariable() pour détecter si la variable est itérative,
155
+ * au lieu de vérifier l'itération spécifique. Cela garantit que même si un membre
156
+ * n'a pas encore répondu, la référence est suffixée (→ undefined = pas encore répondu)
157
+ * plutôt que de tomber sur la valeur d'un autre membre.
148
158
  */
149
159
  private suffixVariableReferences;
150
160
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"condition-engine.d.ts","sourceRoot":"","sources":["../../src/lib/condition-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"condition-engine.d.ts","sourceRoot":"","sources":["../../src/lib/condition-engine.ts"],"names":[],"mappings":"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"}
@@ -39,10 +39,10 @@ export class ConditionEngine {
39
39
  const cacheKey = currentIteration !== undefined
40
40
  ? `${condition}::iter${currentIteration}`
41
41
  : condition;
42
- // Vérifier le cache
42
+ // Vérifier le cache (CORRIGÉ: hash sensible à l'itération)
43
43
  const cached = this.conditionCache.get(cacheKey);
44
44
  if (cached) {
45
- const currentHash = this.getContextHashForCondition(condition);
45
+ const currentHash = this.getContextHashForCondition(condition, currentIteration);
46
46
  if (cached.contextHash === currentHash) {
47
47
  return cached.result;
48
48
  }
@@ -51,7 +51,7 @@ export class ConditionEngine {
51
51
  if (this.isUtilityFunction(condition)) {
52
52
  const result = this.evaluateUtilityFunction(condition, currentIteration);
53
53
  // Mettre en cache le résultat
54
- this.cacheResult(cacheKey, condition, result);
54
+ this.cacheResult(cacheKey, condition, result, currentIteration);
55
55
  return result;
56
56
  }
57
57
  // Remplacer les références aux variables avec support des itérations
@@ -59,7 +59,7 @@ export class ConditionEngine {
59
59
  // Évaluer l'expression
60
60
  const result = this.safeEvaluate(processedCondition);
61
61
  // Mettre en cache le résultat
62
- this.cacheResult(cacheKey, condition, result);
62
+ this.cacheResult(cacheKey, condition, result, currentIteration);
63
63
  return result;
64
64
  }
65
65
  catch (error) {
@@ -69,15 +69,16 @@ export class ConditionEngine {
69
69
  }
70
70
  /**
71
71
  * Met en cache un résultat d'évaluation
72
+ * CORRIGÉ: Passe currentIteration au hash pour distinguer les membres
72
73
  */
73
- cacheResult(cacheKey, condition, result) {
74
+ cacheResult(cacheKey, condition, result, currentIteration) {
74
75
  // Limiter la taille du cache
75
76
  if (this.conditionCache.size >= this.maxCacheSize) {
76
77
  // Supprimer la première entrée (stratégie FIFO simple)
77
78
  const firstKey = this.conditionCache.keys().next().value;
78
79
  this.conditionCache.delete(firstKey);
79
80
  }
80
- const contextHash = this.getContextHashForCondition(condition);
81
+ const contextHash = this.getContextHashForCondition(condition, currentIteration);
81
82
  this.conditionCache.set(cacheKey, { result, contextHash });
82
83
  }
83
84
  /**
@@ -99,11 +100,21 @@ export class ConditionEngine {
99
100
  /**
100
101
  * Génère un hash du contexte pour les variables référencées dans une condition
101
102
  * Utilisé pour le cache des résultats d'évaluation
103
+ * CORRIGÉ: Prend en compte l'itération courante pour les variables itératives,
104
+ * évitant que le cache retourne un résultat calculé pour un autre membre.
102
105
  */
103
- getContextHashForCondition(condition) {
106
+ getContextHashForCondition(condition, currentIteration) {
104
107
  const referencedVars = this.getReferencedVariables(condition);
105
108
  const relevantContext = referencedVars
106
- .map(varCode => `${varCode}:${JSON.stringify(this.context[varCode])}`)
109
+ .map(varCode => {
110
+ // Pour les variables itératives en contexte d'itération,
111
+ // hasher la valeur spécifique à l'itération
112
+ if (currentIteration !== undefined && this.isIterativeVariable(varCode)) {
113
+ const iterKey = `${varCode}_${currentIteration}`;
114
+ return `${iterKey}:${JSON.stringify(this.context[iterKey])}`;
115
+ }
116
+ return `${varCode}:${JSON.stringify(this.context[varCode])}`;
117
+ })
107
118
  .join('|');
108
119
  return relevantContext;
109
120
  }
@@ -541,24 +552,36 @@ export class ConditionEngine {
541
552
  }
542
553
  /**
543
554
  * Construit le contexte d'évaluation à partir des réponses
555
+ * CORRIGÉ: Le fallback du code brut n'est créé que pour les variables à instance unique
556
+ * (groupes non-multiples où le backend stocke avec numeroMembre).
557
+ * Pour les variables multi-instances, seules les clés suffixées (VAR_1, VAR_2, ...)
558
+ * sont créées, évitant la contamination inter-membres.
544
559
  */
545
560
  buildContext() {
546
561
  this.context = {};
547
- console.log('🔧 [ConditionEngine] Building context from responses:', this.responses);
562
+ // Premier passage : stocker toutes les clés suffixées
548
563
  Object.values(this.responses).forEach(response => {
549
564
  const key = response.numeroMembre
550
565
  ? `${response.variableCode}_${response.numeroMembre}`
551
566
  : response.variableCode;
552
567
  this.context[key] = response.valeur;
553
- // Fallback: aussi stocker sous le code simple (sans suffixe _N)
554
- // pour les conditions qui référencent ${S1_0A} sans iteration
555
- // (groupes non-multiples où le backend stocke avec numero_membre)
556
- if (response.numeroMembre && this.context[response.variableCode] === undefined) {
568
+ });
569
+ // Deuxième passage : compter les instances par variableCode
570
+ const instanceCounts = {};
571
+ Object.values(this.responses).forEach(response => {
572
+ if (response.numeroMembre) {
573
+ instanceCounts[response.variableCode] = (instanceCounts[response.variableCode] || 0) + 1;
574
+ }
575
+ });
576
+ // Troisième passage : fallback du code brut UNIQUEMENT pour les variables
577
+ // à instance unique (rétrocompatibilité groupes non-multiples)
578
+ Object.values(this.responses).forEach(response => {
579
+ if (response.numeroMembre &&
580
+ (instanceCounts[response.variableCode] || 0) === 1 &&
581
+ this.context[response.variableCode] === undefined) {
557
582
  this.context[response.variableCode] = response.valeur;
558
583
  }
559
- console.log(`🔧 [ConditionEngine] Context entry: ${key} = ${JSON.stringify(response.valeur)}`);
560
584
  });
561
- console.log('🔧 [ConditionEngine] Final context:', this.context);
562
585
  }
563
586
  /**
564
587
  * Remplace les références aux variables en tenant compte des itérations
@@ -574,6 +597,8 @@ export class ConditionEngine {
574
597
  // ÉTAPE 3: Gérer les fonctions d'agrégation pour les groupes multiples
575
598
  condition = this.replaceAggregationFunctions(condition);
576
599
  // ÉTAPE 4: Remplacer les références aux variables par leurs valeurs
600
+ // CORRIGÉ: Pour les variables itératives dont l'itération courante n'a pas de valeur,
601
+ // retourner null au lieu de tomber sur le code brut (contamination inter-membres)
577
602
  return condition.replace(/\$\{([A-Z_][A-Z0-9_]*)(?:_(\d+))?\}/g, (match, varCode, iteration) => {
578
603
  if (iteration) {
579
604
  // Référence à une itération spécifique (ex: ${VAR_2})
@@ -586,25 +611,32 @@ export class ConditionEngine {
586
611
  if (iterativeValue !== undefined) {
587
612
  return this.formatValueForExpression(iterativeValue);
588
613
  }
614
+ // Pour les variables itératives, retourner null plutôt que
615
+ // de tomber sur le code brut (qui contient la valeur d'un autre membre)
616
+ if (this.isIterativeVariable(varCode)) {
617
+ return this.formatValueForExpression(null);
618
+ }
589
619
  }
590
- // Référence normale à une variable globale
620
+ // Référence normale à une variable globale (non-itérative)
591
621
  const value = this.context[varCode];
592
622
  return this.formatValueForExpression(value);
593
623
  });
594
624
  }
595
625
  /**
596
626
  * Suffixe les références de variables ${VAR} → ${VAR_N} pour les groupes multiples
597
- * Ne suffixe que si la variable a une version itérative dans le contexte
627
+ * CORRIGÉ: Utilise isIterativeVariable() pour détecter si la variable est itérative,
628
+ * au lieu de vérifier l'itération spécifique. Cela garantit que même si un membre
629
+ * n'a pas encore répondu, la référence est suffixée (→ undefined = pas encore répondu)
630
+ * plutôt que de tomber sur la valeur d'un autre membre.
598
631
  */
599
632
  suffixVariableReferences(condition, iteration) {
600
633
  // Regex pour capturer ${VAR} mais pas ${VAR_N} (déjà suffixé)
601
634
  return condition.replace(/\$\{([A-Z_][A-Z0-9_]*)(?!_\d)\}/g, (match, varCode) => {
602
- // Vérifier si cette variable a une version itérative
603
- const iterativeKey = `${varCode}_${iteration}`;
604
- if (this.context[iterativeKey] !== undefined) {
605
- return `\${${iterativeKey}}`;
635
+ // Si au moins une version itérative existe (ex: VAR_1), TOUJOURS suffixer
636
+ if (this.isIterativeVariable(varCode)) {
637
+ return `\${${varCode}_${iteration}}`;
606
638
  }
607
- // Garder la référence globale si pas de version itérative
639
+ // Garder la référence globale pour les variables non-itératives
608
640
  return match;
609
641
  });
610
642
  }
@@ -1 +1 @@
1
- {"version":3,"file":"interpolateVariableLabel.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/interpolateVariableLabel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,qBAAqB,CAAC,EAAE,MAAM,GAC7B,MAAM,CA0CR;AA2DD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAcjE;AAED,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"interpolateVariableLabel.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/interpolateVariableLabel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,qBAAqB,CAAC,EAAE,MAAM,GAC7B,MAAM,CAoDR;AA2DD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAcjE;AAED,eAAe,wBAAwB,CAAC"}
@@ -51,9 +51,18 @@ export function interpolateVariableLabel(label, allResponses, currentInstanceNum
51
51
  response = allResponses[keyWithInstance];
52
52
  }
53
53
  // 3. Si toujours pas trouvé, chercher dans les réponses par variableCode
54
- // (pour le cas la clé est juste le code sans suffix)
54
+ // CORRIGÉ: En contexte d'instance, ne retourner que la réponse du membre courant
55
+ // ou une réponse globale (sans numeroMembre), évitant la contamination inter-membres
55
56
  if (!response) {
56
- response = Object.values(allResponses).find(r => r.variableCode === variableCode);
57
+ if (currentInstanceNumber) {
58
+ // En contexte d'instance : accepter uniquement le membre courant ou global
59
+ response = Object.values(allResponses).find(r => r.variableCode === variableCode &&
60
+ (r.numeroMembre === currentInstanceNumber || !r.numeroMembre));
61
+ }
62
+ else {
63
+ // Hors contexte d'instance : tout match est acceptable
64
+ response = Object.values(allResponses).find(r => r.variableCode === variableCode);
65
+ }
57
66
  }
58
67
  // 4. Formater et retourner la valeur si trouvée
59
68
  if (response?.valeur !== undefined && response?.valeur !== null && response?.valeur !== '') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsuci/shared-form-components",
3
- "version": "1.0.88",
3
+ "version": "1.0.89",
4
4
  "description": "Composants partagés de rendu de formulaires RSU v2 - Package local pour frontend Admin et Public",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",