@open3cl/engine 1.7.0 → 1.7.2

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.
Files changed (58) hide show
  1. package/10_besoin_fr.spec.js +1 -0
  2. package/10_clim.spec.js +1 -0
  3. package/11_besoin_ecs.spec.js +1 -0
  4. package/11_ecs.spec.js +1 -0
  5. package/12.4_pac.spec.js +1 -0
  6. package/13.2_generateur_combustion.js +2 -10
  7. package/13.2_generateur_combustion.spec.js +3 -3
  8. package/13.2_generateur_combustion_ch.spec.js +3 -3
  9. package/14_generateur_ecs.spec.js +1 -0
  10. package/15_conso_aux.spec.js +3 -3
  11. package/2021_04_13_confort_ete.spec.js +1 -0
  12. package/3.1_b.js +45 -33
  13. package/3.1_b.spec.js +1 -0
  14. package/3.2.1_mur.spec.js +1 -0
  15. package/3.2.2_plancher_bas.spec.js +1 -0
  16. package/3.2.3_plancher_haut.spec.js +1 -0
  17. package/3.3.1.4_porte.spec.js +1 -0
  18. package/3.3_baie_vitree.js +32 -10
  19. package/3.3_baie_vitree.spec.js +1 -0
  20. package/3.4_pont_thermique.js +21 -13
  21. package/3.4_pont_thermique.spec.js +2 -1
  22. package/4_ventilation.spec.js +1 -0
  23. package/5_conso_ventilation.spec.js +1 -0
  24. package/6.2_surface_sud_equivalente.spec.js +1 -0
  25. package/9_besoin_ch.spec.js +1 -0
  26. package/9_chauffage.spec.js +3 -3
  27. package/9_conso_ch.spec.js +1 -0
  28. package/9_emetteur_ch.spec.js +1 -0
  29. package/9_generateur_ch.spec.js +1 -0
  30. package/README.md +442 -291
  31. package/conso.spec.js +1 -0
  32. package/engine.js +3 -1
  33. package/engine.spec.js +1 -0
  34. package/ficheTechnique.js +133 -53
  35. package/ficheTechnique.spec.js +46 -14
  36. package/formula.js +251 -0
  37. package/formula.spec.js +99 -0
  38. package/package.json +15 -15
  39. package/utils.js +195 -44
  40. package/utils.spec.js +69 -0
  41. package/features/engine/domain/apport_et_besoin/apport-et-besoin.service.spec.js +0 -222
  42. package/features/engine/domain/apport_et_besoin/ch/perte-ch-recup.service.spec.js +0 -345
  43. package/features/engine/domain/apport_et_besoin/ecs/besoin-ecs.service.spec.js +0 -87
  44. package/features/engine/domain/apport_et_besoin/ecs/perte-ecs-recup.service.spec.js +0 -260
  45. package/features/engine/domain/apport_et_besoin/froid/besoin-froid.service.spec.js +0 -272
  46. package/features/engine/domain/apport_et_besoin/surface-sud-equivalente.service.spec.js +0 -231
  47. package/features/engine/domain/ch/generateur-ch.service.spec.js +0 -849
  48. package/features/engine/domain/conso/froid/conso-froid.service.spec.js +0 -233
  49. package/features/engine/domain/ecs/installation-ecs.service.spec.js +0 -337
  50. package/features/engine/domain/enveloppe/baie_vitree/deperdition-baie-vitree.service.spec.js +0 -607
  51. package/features/engine/domain/enveloppe/deperdition-enveloppe.service.spec.js +0 -550
  52. package/features/engine/domain/enveloppe/espace_tampon/espace-tampon.service.spec.js +0 -82
  53. package/features/engine/domain/enveloppe/mur/deperdition-mur.service.spec.js +0 -542
  54. package/features/engine/domain/enveloppe/plancher_bas/deperdition-plancher-bas.service.spec.js +0 -430
  55. package/features/engine/domain/enveloppe/plancher_haut/deperdition-plancher-haut.service.spec.js +0 -411
  56. package/features/engine/domain/enveloppe/pont_thermique/deperdition-pont-thermique.service.spec.js +0 -653
  57. package/features/engine/domain/enveloppe/porte/deperdition-porte.service.spec.js +0 -117
  58. package/features/engine/domain/enveloppe/ventilation/deperdition-ventilation.service.spec.js +0 -508
@@ -19,6 +19,7 @@ vi.mock('./tv.js', () => ({
19
19
  }));
20
20
 
21
21
  vi.mock('./utils.js', () => ({
22
+ set_bug_for_bug_compat: vi.fn(),
22
23
  mois_liste: ['Janvier']
23
24
  }));
24
25
 
package/10_clim.spec.js CHANGED
@@ -8,6 +8,7 @@ import { beforeEach, describe, expect, test, vi } from 'vitest';
8
8
  * d'installation.
9
9
  */
10
10
  vi.mock('./utils.js', () => ({
11
+ set_bug_for_bug_compat: vi.fn(),
11
12
  tv: vi.fn(),
12
13
  requestInputID: (de, du, field) => {
13
14
  const enumName = `enum_${field}_id`;
@@ -14,6 +14,7 @@ vi.mock('./tv.js', () => ({
14
14
  }));
15
15
 
16
16
  vi.mock('./utils.js', () => ({
17
+ set_bug_for_bug_compat: vi.fn(),
17
18
  mois_liste: ['Janvier'],
18
19
  Njj: { Janvier: 30 }
19
20
  }));
package/11_ecs.spec.js CHANGED
@@ -19,6 +19,7 @@ vi.mock('./enums.js', () => ({
19
19
  }));
20
20
 
21
21
  vi.mock('./utils.js', () => ({
22
+ set_bug_for_bug_compat: vi.fn(),
22
23
  tv: vi.fn(),
23
24
  requestInput: vi.fn()
24
25
  }));
package/12.4_pac.spec.js CHANGED
@@ -7,6 +7,7 @@ import { beforeEach, describe, expect, test, vi } from 'vitest';
7
7
  * Le comportement de ces utilitaires n'est pas testé ici, seulement la logique du module.
8
8
  */
9
9
  vi.mock('./utils.js', () => ({
10
+ set_bug_for_bug_compat: vi.fn(),
10
11
  tv: vi.fn(),
11
12
  requestInputID: vi.fn((de, du, field) => {
12
13
  const enumName = `enum_${field}_id`;
@@ -4,7 +4,7 @@ import { updateGenerateurBouilleurs } from './13.2_generateur_combustion_bouille
4
4
  import { updateGenerateurChaudieres } from './13.2_generateur_combustion_chaudiere.js';
5
5
  import { updateGenerateurPacs } from './13.2_generateur_pac.js';
6
6
  import getFicheTechnique from './ficheTechnique.js';
7
- import { evaluate } from 'mathjs';
7
+ import { evaluateFormula as evaluateTvFormula } from './formula.js';
8
8
 
9
9
  function criterePn(Pn, matcher) {
10
10
  let critere_list = tvColumnLines('generateur_combustion', 'critere_pn', matcher);
@@ -38,15 +38,7 @@ const F_tab = {
38
38
  };
39
39
 
40
40
  function evaluateFormula(formulaOrValue, pn, E, F) {
41
- const pnVariable = pn / 1000;
42
- if (!isNaN(formulaOrValue)) {
43
- return Number(formulaOrValue);
44
- }
45
- const variables = new Map();
46
- variables.set('Pn', pnVariable);
47
- variables.set('E', E);
48
- variables.set('F', F);
49
- return evaluate(formulaOrValue, variables);
41
+ return evaluateTvFormula(formulaOrValue, pn, E, F);
50
42
  }
51
43
 
52
44
  /**
@@ -14,6 +14,7 @@ import { beforeEach, describe, expect, test, vi } from 'vitest';
14
14
  const state = vi.hoisted(() => ({ bug: false }));
15
15
 
16
16
  vi.mock('./utils.js', () => ({
17
+ set_bug_for_bug_compat: vi.fn(),
17
18
  get bug_for_bug_compat() {
18
19
  return state.bug;
19
20
  },
@@ -51,9 +52,8 @@ vi.mock('./ficheTechnique.js', () => ({
51
52
  default: vi.fn()
52
53
  }));
53
54
 
54
- const { tv_generateur_combustion, updateGenerateurCombustion } = await import(
55
- './13.2_generateur_combustion.js'
56
- );
55
+ const { tv_generateur_combustion, updateGenerateurCombustion } =
56
+ await import('./13.2_generateur_combustion.js');
57
57
  const { tv, tvColumnLines } = await import('./utils.js');
58
58
  const { updateGenerateurBouilleurs } = await import('./13.2_generateur_combustion_bouilleur.js');
59
59
  const { updateGenerateurChaudieres } = await import('./13.2_generateur_combustion_chaudiere.js');
@@ -29,6 +29,7 @@ vi.mock('./enums.js', () => ({
29
29
  }));
30
30
 
31
31
  vi.mock('./utils.js', () => ({
32
+ set_bug_for_bug_compat: vi.fn(),
32
33
  get bug_for_bug_compat() {
33
34
  return state.bug;
34
35
  },
@@ -37,9 +38,8 @@ vi.mock('./utils.js', () => ({
37
38
  requestInputID: vi.fn((de, du, field) => de[`enum_${field}_id`])
38
39
  }));
39
40
 
40
- const { tv_temp_fonc_30_100, calc_generateur_combustion_ch } = await import(
41
- './13.2_generateur_combustion_ch.js'
42
- );
41
+ const { tv_temp_fonc_30_100, calc_generateur_combustion_ch } =
42
+ await import('./13.2_generateur_combustion_ch.js');
43
43
  const { tv } = await import('./utils.js');
44
44
 
45
45
  beforeEach(() => {
@@ -32,6 +32,7 @@ vi.mock('./enums.js', () => ({
32
32
  }));
33
33
 
34
34
  vi.mock('./utils.js', () => ({
35
+ set_bug_for_bug_compat: vi.fn(),
35
36
  get bug_for_bug_compat() {
36
37
  return state.bug;
37
38
  },
@@ -25,14 +25,14 @@ vi.mock('./tv.js', () => ({
25
25
  }));
26
26
 
27
27
  vi.mock('./utils.js', () => ({
28
+ set_bug_for_bug_compat: vi.fn(),
28
29
  mois_liste: ['Janvier'],
29
30
  Njj: { Janvier: 31 },
30
31
  Tbase: { ca1: { h1: -9 } }
31
32
  }));
32
33
 
33
- const { conso_aux_gen, conso_aux_distribution_ch, conso_aux_distribution_ecs } = await import(
34
- './15_conso_aux.js'
35
- );
34
+ const { conso_aux_gen, conso_aux_distribution_ch, conso_aux_distribution_ecs } =
35
+ await import('./15_conso_aux.js');
36
36
 
37
37
  /**
38
38
  * 15.1 Consommation des auxiliaires de génération
@@ -15,6 +15,7 @@ vi.mock('./enums.js', () => ({
15
15
  }));
16
16
 
17
17
  vi.mock('./utils.js', () => ({
18
+ set_bug_for_bug_compat: vi.fn(),
18
19
  getKeyByValue: (object, value) => value,
19
20
  requestInput: (de, du, field) => de[field]
20
21
  }));
package/3.1_b.js CHANGED
@@ -1,8 +1,47 @@
1
1
  import enums from './enums.js';
2
2
  import { tv, requestInput, requestInputID, bug_for_bug_compat } from './utils.js';
3
3
 
4
+ const RANGES = [0.25, 0.5, 0.75, 1, 1.25, 2, 2.5, 3, 3.5, 4, 6, 8, 10, 25, 50];
5
+
6
+ /**
7
+ * Identifiants de type d'adjacence pour lesquels le ratio aiu/aue est pris en compte.
8
+ */
9
+ const ADJACENCE_AIU_AUE_IDS = new Set([
10
+ '8',
11
+ '9',
12
+ '11',
13
+ '12',
14
+ '13',
15
+ '14',
16
+ '15',
17
+ '16',
18
+ '17',
19
+ '18',
20
+ '19',
21
+ '21'
22
+ ]);
23
+
24
+ const TYPE_ADJACENCE_IDS = Object.keys(enums.type_adjacence);
25
+
26
+ /**
27
+ * Formate une borne du ratio aiu/aue au format des tables de valeurs (`0,25`, `1,00`…).
28
+ *
29
+ * `toLocaleString(undefined, { minimumFractionDigits: 2, … })` construisait un
30
+ * `Intl.NumberFormat` à chaque appel (~29 µs), ce qui représentait l'essentiel du
31
+ * temps CPU de `b()`. `toFixed(2)` produit exactement les mêmes chaînes pour toutes
32
+ * les valeurs de `RANGES`, en ~0,2 µs, et sans dépendre de la locale de la machine —
33
+ * le `.replace('.', ',')` qui suivait était d'ailleurs un no-op sur une machine en
34
+ * locale française et une vraie conversion ailleurs.
35
+ *
36
+ * @param borne {number}
37
+ * @returns {string}
38
+ */
39
+ function formatBorneAiuAue(borne) {
40
+ return borne.toFixed(2).replace('.', ',');
41
+ }
42
+
4
43
  export function findRanges(inputNumber) {
5
- const ranges = [0.25, 0.5, 0.75, 1, 1.25, 2, 2.5, 3, 3.5, 4, 6, 8, 10, 25, 50];
44
+ const ranges = RANGES;
6
45
  const result = [];
7
46
 
8
47
  if (inputNumber < ranges[0]) {
@@ -28,7 +67,7 @@ export function findRanges(inputNumber) {
28
67
  export default function b(di, de, du, zc_id) {
29
68
  const zc = enums.zone_climatique[zc_id].slice(0, 2);
30
69
 
31
- du.enum_type_adjacence_id = Object.keys(enums.type_adjacence);
70
+ du.enum_type_adjacence_id = TYPE_ADJACENCE_IDS;
32
71
  const matcher = {
33
72
  enum_type_adjacence_id: requestInputID(de, du, 'type_adjacence')
34
73
  };
@@ -37,11 +76,7 @@ export default function b(di, de, du, zc_id) {
37
76
  matcher.zone_climatique = zc;
38
77
  matcher.enum_cfg_isolation_lnc_id = requestInputID(de, du, 'cfg_isolation_lnc');
39
78
  /* du.enum_cfg_isolation_lnc_id = ['6', '7', '8', '9', '10', '11'] */
40
- } else if (
41
- ['8', '9', '11', '12', '13', '14', '15', '16', '17', '18', '19', '21'].includes(
42
- de.enum_type_adjacence_id.toString()
43
- )
44
- ) {
79
+ } else if (ADJACENCE_AIU_AUE_IDS.has(de.enum_type_adjacence_id.toString())) {
45
80
  if (de.surface_aue === 0) {
46
81
  // cf page 10
47
82
  // NOTE: bizarre de regarder aue pour un local chauffé non accessible
@@ -96,36 +131,13 @@ export default function b(di, de, du, zc_id) {
96
131
  // Si le rapport des surfaces est égale à la borne inférieure, utilisation de la borne supérieure
97
132
  // et prise en compte de l'égalité
98
133
  if (ranges[0] === de.surface_aiu / de.surface_aue) {
99
- matcher.aiu_aue_max =
100
- '≤ ' +
101
- ranges[0]
102
- .toLocaleString(undefined, {
103
- minimumFractionDigits: 2,
104
- maximumFractionDigits: 2,
105
- useGrouping: false
106
- })
107
- .replace('.', ',');
134
+ matcher.aiu_aue_max = '≤ ' + formatBorneAiuAue(ranges[0]);
108
135
  } else {
109
- matcher.aiu_aue_min =
110
- ranges[0]
111
- .toLocaleString(undefined, {
112
- minimumFractionDigits: 2,
113
- maximumFractionDigits: 2,
114
- useGrouping: false
115
- })
116
- .replace('.', ',') + ' <';
136
+ matcher.aiu_aue_min = formatBorneAiuAue(ranges[0]) + ' <';
117
137
  }
118
138
  }
119
139
  if (ranges[1]) {
120
- matcher.aiu_aue_max =
121
- '≤ ' +
122
- ranges[1]
123
- .toLocaleString(undefined, {
124
- minimumFractionDigits: 2,
125
- maximumFractionDigits: 2,
126
- useGrouping: false
127
- })
128
- .replace('.', ',');
140
+ matcher.aiu_aue_max = '≤ ' + formatBorneAiuAue(ranges[1]);
129
141
  }
130
142
  }
131
143
  }
package/3.1_b.spec.js CHANGED
@@ -14,6 +14,7 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
14
14
  const state = vi.hoisted(() => ({ bug: false }));
15
15
 
16
16
  vi.mock('./utils.js', () => ({
17
+ set_bug_for_bug_compat: vi.fn(),
17
18
  tv: vi.fn(),
18
19
  requestInputID: (de, du, field) => {
19
20
  const enumName = `enum_${field}_id`;
package/3.2.1_mur.spec.js CHANGED
@@ -24,6 +24,7 @@ vi.mock('./3.1_b.js', () => ({
24
24
  }));
25
25
 
26
26
  vi.mock('./utils.js', () => ({
27
+ set_bug_for_bug_compat: vi.fn(),
27
28
  tv: vi.fn(),
28
29
  requestInput: (de, du, field) => de[field],
29
30
  requestInputID: (de, du, field) => de[`enum_${field}_id`],
@@ -30,6 +30,7 @@ vi.mock('./3.1_b.js', () => ({
30
30
  }));
31
31
 
32
32
  vi.mock('./utils.js', () => ({
33
+ set_bug_for_bug_compat: vi.fn(),
33
34
  tv: vi.fn(),
34
35
  requestInput: (de, du, field) => de[field],
35
36
  getKeyByValue: (object, value) => Object.keys(object).find((key) => object[key] === value),
@@ -23,6 +23,7 @@ vi.mock('./3.1_b.js', () => ({
23
23
  }));
24
24
 
25
25
  vi.mock('./utils.js', () => ({
26
+ set_bug_for_bug_compat: vi.fn(),
26
27
  tv: vi.fn(),
27
28
  requestInput: (de, du, field) => de[field],
28
29
  getKeyByValue: (object, value) => Object.keys(object).find((key) => object[key] === value),
@@ -11,6 +11,7 @@ vi.mock('./3.1_b.js', () => ({
11
11
  }));
12
12
 
13
13
  vi.mock('./utils.js', () => ({
14
+ set_bug_for_bug_compat: vi.fn(),
14
15
  tv: vi.fn(),
15
16
  requestInput: (de, du, field) => de[field]
16
17
  }));
@@ -23,6 +23,37 @@ function tv_ug(di, de, du) {
23
23
  }
24
24
  }
25
25
 
26
+ /**
27
+ * Valeurs de Ug tabulées dans `uw`, indexées par (type de baie, matériau de menuiserie).
28
+ *
29
+ * Le scan des 723 lignes de `tvs.uw` — avec un `split('|')` par ligne — était refait
30
+ * pour chaque baie vitrée de chaque DPE, alors que la table est statique.
31
+ *
32
+ * Le tableau est partagé et `getRange()` le trie sur place : le tri par défaut de
33
+ * `Array#sort` étant déterministe, la première mise en cache le laisse trié et les
34
+ * appels suivants produisent exactement le même résultat qu'avec un tableau reconstruit.
35
+ */
36
+ const uwUgValuesCache = new Map();
37
+
38
+ function uwUgValues(enum_type_baie_id, enum_type_materiaux_menuiserie_id) {
39
+ const cacheKey = `${enum_type_baie_id}${enum_type_materiaux_menuiserie_id}`;
40
+ let values = uwUgValuesCache.get(cacheKey);
41
+ if (values === undefined) {
42
+ values = tvs.uw
43
+ .filter((row) => {
44
+ return (
45
+ row.enum_type_baie_id.split('|').includes(enum_type_baie_id) &&
46
+ row.enum_type_materiaux_menuiserie_id
47
+ .split('|')
48
+ .includes(enum_type_materiaux_menuiserie_id)
49
+ );
50
+ })
51
+ .map((row) => parseFloat(row.ug));
52
+ uwUgValuesCache.set(cacheKey, values);
53
+ }
54
+ return values;
55
+ }
56
+
26
57
  function tv_uw(di, de) {
27
58
  const enum_type_baie_id = de.enum_type_baie_id;
28
59
  const matcher = { enum_type_baie_id };
@@ -46,16 +77,7 @@ function tv_uw(di, de) {
46
77
  matcher.enum_type_materiaux_menuiserie_id = enum_type_materiaux_menuiserie_id;
47
78
 
48
79
  // Récupération de toutes les valeurs de Ug présentes dans les tables Uw pour le type de baie et matériaux de la baie vitrée
49
- const ugValues = tvs.uw
50
- .filter((row) => {
51
- return (
52
- row.enum_type_baie_id.split('|').includes(enum_type_baie_id) &&
53
- row.enum_type_materiaux_menuiserie_id
54
- .split('|')
55
- .includes(enum_type_materiaux_menuiserie_id)
56
- );
57
- })
58
- .map((row) => parseFloat(row.ug));
80
+ const ugValues = uwUgValues(enum_type_baie_id, enum_type_materiaux_menuiserie_id);
59
81
 
60
82
  /**
61
83
  * 3.3.2 Coefficients Uw des fenêtres / portes-fenêtres
@@ -17,6 +17,7 @@ vi.mock('./3.1_b.js', () => ({
17
17
  }));
18
18
 
19
19
  vi.mock('./utils.js', () => ({
20
+ set_bug_for_bug_compat: vi.fn(),
20
21
  tv: vi.fn(),
21
22
  requestInput: (de, du, field) => de[field],
22
23
  requestInputID: (de, du, field) => de[`enum_${field}_id`],
@@ -1,6 +1,6 @@
1
1
  import enums from './enums.js';
2
2
  import { isNil } from 'lodash-es';
3
- import { tv, requestInput, compareReferences, bug_for_bug_compat } from './utils.js';
3
+ import { tv, requestInput, cleanReference, bug_for_bug_compat } from './utils.js';
4
4
 
5
5
  function defaultValue(type_liaison, pt_di, de) {
6
6
  if (pt_di.k === 0) {
@@ -115,10 +115,20 @@ function tv_k(pt_di, di, de, du, pc_id, logement) {
115
115
  }
116
116
  }
117
117
 
118
+ /**
119
+ * Références du pont thermique nettoyées une seule fois : elles sont confrontées à toutes les
120
+ * parois de plusieurs listes ci-dessous, et `compareReferences` les renettoyait à chaque
121
+ * comparaison. Les affectations de `de.reference_1` / `de.reference_2` ont toutes eu lieu
122
+ * au-dessus, dans le bloc de récupération par description.
123
+ */
124
+ const cleaned_reference_1 = cleanReference(de.reference_1);
125
+ const cleaned_reference_2 = cleanReference(de.reference_2);
126
+
118
127
  let mur = mur_list.find((mur, murIndex) => {
128
+ const cleaned_mur_reference = cleanReference(mur.donnee_entree.reference);
119
129
  if (
120
- compareReferences(mur.donnee_entree.reference, de.reference_1) ||
121
- compareReferences(mur.donnee_entree.reference, de.reference_2)
130
+ cleaned_mur_reference === cleaned_reference_1 ||
131
+ cleaned_mur_reference === cleaned_reference_2
122
132
  ) {
123
133
  return true;
124
134
  }
@@ -190,11 +200,10 @@ function tv_k(pt_di, di, de, du, pc_id, logement) {
190
200
  case 'plancher bas / mur':
191
201
  case 'plancher haut lourd / mur': {
192
202
  const plancher_list = ph_list.concat(pb_list);
193
- const plancher = plancher_list.find(
194
- (plancher) =>
195
- compareReferences(plancher.donnee_entree.reference, de.reference_1) ||
196
- compareReferences(plancher.donnee_entree.reference, de.reference_2)
197
- );
203
+ const plancher = plancher_list.find((plancher) => {
204
+ const cleaned = cleanReference(plancher.donnee_entree.reference);
205
+ return cleaned === cleaned_reference_1 || cleaned === cleaned_reference_2;
206
+ });
198
207
  if (!plancher) {
199
208
  di.k = defaultValue(type_liaison, pt_di, de);
200
209
  console.error(
@@ -331,11 +340,10 @@ function tv_k(pt_di, di, de, du, pc_id, logement) {
331
340
  }
332
341
 
333
342
  const menuiserie_list = bv_list.concat(porte_list);
334
- const menuiserie = menuiserie_list.find(
335
- (men) =>
336
- compareReferences(men.donnee_entree.reference, de.reference_1) ||
337
- compareReferences(men.donnee_entree.reference, de.reference_2)
338
- );
343
+ const menuiserie = menuiserie_list.find((men) => {
344
+ const cleaned = cleanReference(men.donnee_entree.reference);
345
+ return cleaned === cleaned_reference_1 || cleaned === cleaned_reference_2;
346
+ });
339
347
  if (!menuiserie) {
340
348
  di.k = defaultValue(type_liaison, pt_di, de);
341
349
  console.error(
@@ -27,9 +27,10 @@ vi.mock('lodash-es', () => ({
27
27
  const state = vi.hoisted(() => ({ bug: false }));
28
28
 
29
29
  vi.mock('./utils.js', () => ({
30
+ set_bug_for_bug_compat: vi.fn(),
30
31
  tv: vi.fn(),
31
32
  requestInput: (de, du, field) => de[field],
32
- compareReferences: (a, b) => a === b,
33
+ cleanReference: (reference) => reference,
33
34
  get bug_for_bug_compat() {
34
35
  return state.bug;
35
36
  }
@@ -8,6 +8,7 @@ import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
8
8
  * - `calc_pvent` (5_conso_ventilation.js) : espion, la conso de ventilation est testée ailleurs.
9
9
  */
10
10
  vi.mock('./utils.js', () => ({
11
+ set_bug_for_bug_compat: vi.fn(),
11
12
  tv: vi.fn(),
12
13
  requestInput: (de, du, field) => de[field],
13
14
  requestInputID: (de, du, field) => de[`enum_${field}_id`],
@@ -5,6 +5,7 @@ import { beforeEach, describe, expect, test, vi } from 'vitest';
5
5
  * d'entrée `de` pour le champ demandé. Cela isole `calc_pvent` de la logique de `utils`.
6
6
  */
7
7
  vi.mock('./utils.js', () => ({
8
+ set_bug_for_bug_compat: vi.fn(),
8
9
  requestInput: (de, du, field) => de[field]
9
10
  }));
10
11
 
@@ -24,6 +24,7 @@ vi.mock('./tv.js', () => ({
24
24
  }));
25
25
 
26
26
  vi.mock('./utils.js', () => ({
27
+ set_bug_for_bug_compat: vi.fn(),
27
28
  mois_liste: ['Janvier']
28
29
  }));
29
30
 
@@ -47,6 +47,7 @@ vi.mock('./9_generateur_ch.js', () => ({
47
47
 
48
48
  const utilState = vi.hoisted(() => ({ bug: false }));
49
49
  vi.mock('./utils.js', () => ({
50
+ set_bug_for_bug_compat: vi.fn(),
50
51
  mois_liste: ['Janvier'],
51
52
  get bug_for_bug_compat() {
52
53
  return utilState.bug;
@@ -15,6 +15,7 @@ import { beforeEach, describe, expect, test, vi } from 'vitest';
15
15
  * hybride) et répartition des auxiliaires.
16
16
  */
17
17
  vi.mock('./utils.js', () => ({
18
+ set_bug_for_bug_compat: vi.fn(),
18
19
  requestInput: vi.fn(),
19
20
  tv: vi.fn(),
20
21
  tvColumnIDs: vi.fn(),
@@ -52,9 +53,8 @@ vi.mock('./enums.js', () => ({
52
53
  const { default: calc_chauffage, tauxChargeForGenerator } = await import('./9_chauffage.js');
53
54
  const { requestInput, tv, tvColumnIDs } = await import('./utils.js');
54
55
  const { calc_emetteur_ch } = await import('./9_emetteur_ch.js');
55
- const { calc_generateur_ch, checkForGeneratorType, hasConsoForAuxDistribution } = await import(
56
- './9_generateur_ch.js'
57
- );
56
+ const { calc_generateur_ch, checkForGeneratorType, hasConsoForAuxDistribution } =
57
+ await import('./9_generateur_ch.js');
58
58
  const { tv_generateur_combustion } = await import('./13.2_generateur_combustion.js');
59
59
  const { tv_temp_fonc_30_100 } = await import('./13.2_generateur_combustion_ch.js');
60
60
 
@@ -13,6 +13,7 @@ import { beforeEach, describe, expect, test, vi } from 'vitest';
13
13
  * propre au module (choix des coefficients, prorata de surface, base+appoint).
14
14
  */
15
15
  vi.mock('./utils.js', () => ({
16
+ set_bug_for_bug_compat: vi.fn(),
16
17
  mois_liste: ['Janvier', 'Février'],
17
18
  requestInputID: vi.fn()
18
19
  }));
@@ -17,6 +17,7 @@ const { getRendementDistributionCh, getRendementDistributionChById, utilState }
17
17
  );
18
18
 
19
19
  vi.mock('./utils.js', () => ({
20
+ set_bug_for_bug_compat: vi.fn(),
20
21
  tv: vi.fn(),
21
22
  get bug_for_bug_compat() {
22
23
  return utilState.bug;
@@ -29,6 +29,7 @@ vi.mock('./enums.js', () => ({
29
29
  }));
30
30
 
31
31
  vi.mock('./utils.js', () => ({
32
+ set_bug_for_bug_compat: vi.fn(),
32
33
  requestInput: vi.fn(),
33
34
  requestInputID: vi.fn(),
34
35
  tv: vi.fn(),