@open3cl/engine 1.0.0
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.
- package/10_besoin_fr.js +76 -0
- package/10_clim.js +45 -0
- package/11_besoin_ecs.js +25 -0
- package/11_ecs.js +95 -0
- package/11_nadeq.js +87 -0
- package/11_nadeq.spec.js +55 -0
- package/12.4_pac.js +54 -0
- package/13.2_generateur_combustion.js +295 -0
- package/13.2_generateur_combustion_bouilleur.js +173 -0
- package/13.2_generateur_combustion_ch.js +195 -0
- package/13.2_generateur_combustion_chaudiere.js +151 -0
- package/13.2_generateur_pac.js +36 -0
- package/13_rendement_distribution_ecs.js +12 -0
- package/14_generateur_ecs.js +388 -0
- package/15_conso_aux.js +257 -0
- package/16.2_production_enr.js +328 -0
- package/16.2_production_enr.spec.js +251 -0
- package/16_conso_eclairage.js +37 -0
- package/2021_04_13_confort_ete.js +61 -0
- package/2021_04_13_qualite_isolation.js +174 -0
- package/3.1_b.js +141 -0
- package/3.2.1_mur.js +331 -0
- package/3.2.1_mur.spec.js +46 -0
- package/3.2.2_plancher_bas.js +259 -0
- package/3.2.2_plancher_bas.spec.js +88 -0
- package/3.2.3_plancher_haut.js +158 -0
- package/3.3.1.4_porte.js +32 -0
- package/3.3_baie_vitree.js +308 -0
- package/3.3_baie_vitree.spec.js +333 -0
- package/3.4_pont_thermique.js +463 -0
- package/3_deperdition.js +258 -0
- package/4_ventilation.js +197 -0
- package/5_conso_ventilation.js +127 -0
- package/6.1_apport_gratuit.js +61 -0
- package/6.1_apport_gratuit.spec.js +181 -0
- package/6.2_surface_sud_equivalente.js +109 -0
- package/7_inertie.js +178 -0
- package/7_inertie.spec.js +263 -0
- package/8_intermittence.js +5 -0
- package/9_besoin_ch.js +198 -0
- package/9_chauffage.js +291 -0
- package/9_chauffage.spec.js +101 -0
- package/9_conso_ch.js +95 -0
- package/9_conso_ch.spec.js +255 -0
- package/9_emetteur_ch.js +122 -0
- package/9_generateur_ch.js +230 -0
- package/9_generateur_ch.spec.js +87 -0
- package/README.md +43 -0
- package/apport_et_besoin.js +55 -0
- package/conso.js +529 -0
- package/conso.spec.js +90 -0
- package/core/assets/domain/add-additionnal-ue-values-tables.js +57 -0
- package/core/assets/domain/synchronize-assets.js +29 -0
- package/core/assets/domain/synchronize-assets.spec.js +37 -0
- package/core/assets/domain/synchronize-c1-tables.js +61 -0
- package/core/assets/domain/synchronize-c1-tables.spec.js +35 -0
- package/core/assets/domain/synchronize-dpe-ges-limit-values-tables.js +73 -0
- package/core/assets/domain/synchronize-dpe-ges-limit-values-tables.spec.js +72 -0
- package/core/assets/domain/synchronize-enum-tables.js +77 -0
- package/core/assets/domain/synchronize-enum-tables.spec.js +31 -0
- package/core/assets/domain/synchronize-solicitations-tables.js +72 -0
- package/core/assets/domain/synchronize-solicitations-tables.spec.js +47 -0
- package/core/assets/domain/synchronize-valeur-tables.js +146 -0
- package/core/assets/domain/synchronize-valeur-tables.spec.js +54 -0
- package/core/conf/infrastructure/application.config.js +33 -0
- package/core/file/infrastructure/adapter/file.store.js +75 -0
- package/core/file/infrastructure/adapter/file.store.spec.js +30 -0
- package/core/tv/infrastructure/assets/additional-ue-values.js +69 -0
- package/core/tv/infrastructure/tvs.store.js +40 -0
- package/core/tv/infrastructure/tvs.store.spec.js +34 -0
- package/core/util/infrastructure/object-util.js +23 -0
- package/core/util/infrastructure/object-util.spec.js +25 -0
- package/engine.js +503 -0
- package/enums.js +1155 -0
- package/ficheTechnique.js +86 -0
- package/ficheTechnique.spec.js +181 -0
- package/index.js +4 -0
- package/package.json +87 -0
- package/tv/18.2_sollicitations_ext.ods +0 -0
- package/tv/18.5_c1.ods +0 -0
- package/tv/dpe_ges_limit_values.ods +0 -0
- package/tv.js +80811 -0
- package/tvs.d.ts +7 -0
- package/utils.js +500 -0
- package/utils.spec.js +36 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retourne si elle existe la fiche technique contenant le texte description et
|
|
3
|
+
* présente dans la catégorie de fiches techniques ayant pour catégorie categoryFicheTechiqueId
|
|
4
|
+
* et contenant la valeur classification
|
|
5
|
+
* @param dpe {FullDpe}
|
|
6
|
+
* @param categoryFicheTechiqueId {string}
|
|
7
|
+
* @param description {string}
|
|
8
|
+
* @param classifications {[string]}
|
|
9
|
+
* @param field {'description' | 'valeur'}
|
|
10
|
+
*/
|
|
11
|
+
export default function getFicheTechnique(
|
|
12
|
+
dpe,
|
|
13
|
+
categoryFicheTechiqueId,
|
|
14
|
+
description,
|
|
15
|
+
classifications = [],
|
|
16
|
+
field = 'description'
|
|
17
|
+
) {
|
|
18
|
+
/** @type {FicheTechniqueItem[]} */
|
|
19
|
+
let fichesTechniques = dpe.fiche_technique_collection.fiche_technique;
|
|
20
|
+
|
|
21
|
+
if (!Array.isArray(fichesTechniques)) {
|
|
22
|
+
fichesTechniques = [fichesTechniques];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
classifications = classifications.filter((classification) => classification);
|
|
26
|
+
|
|
27
|
+
fichesTechniques = fichesTechniques
|
|
28
|
+
.filter((ficheTechnique) => ficheTechnique)
|
|
29
|
+
.reduce((acc, ficheTechnique) => {
|
|
30
|
+
if (ficheTechnique.enum_categorie_fiche_technique_id === categoryFicheTechiqueId) {
|
|
31
|
+
/**
|
|
32
|
+
* Plusieurs collections de fiches techniques peuvent exister pour la même catégorie (pour 2 systèmes ECS par exemple)
|
|
33
|
+
* Le champs classification permet de trouver la collection qui convient en filtrant sur une seconde donnée
|
|
34
|
+
*/
|
|
35
|
+
if (classifications.length) {
|
|
36
|
+
/** @type {SousFicheTechniqueItem[]} */
|
|
37
|
+
let sousFichesTechniques =
|
|
38
|
+
ficheTechnique.sous_fiche_technique_collection.sous_fiche_technique;
|
|
39
|
+
|
|
40
|
+
if (!Array.isArray(sousFichesTechniques)) {
|
|
41
|
+
sousFichesTechniques = [sousFichesTechniques];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const allContained = classifications.every((classification) =>
|
|
45
|
+
sousFichesTechniques.some((ficheTechnique) => {
|
|
46
|
+
const valeur = ficheTechnique?.valeur;
|
|
47
|
+
|
|
48
|
+
if (typeof valeur === 'string') {
|
|
49
|
+
return (
|
|
50
|
+
ficheTechnique.valeur
|
|
51
|
+
.toLowerCase()
|
|
52
|
+
.indexOf(classification.toString().toLowerCase()) !== -1
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return ficheTechnique.valeur === classification;
|
|
57
|
+
})
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
if (!allContained) {
|
|
61
|
+
return acc;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return acc.concat(ficheTechnique.sous_fiche_technique_collection.sous_fiche_technique);
|
|
66
|
+
}
|
|
67
|
+
return acc;
|
|
68
|
+
}, []);
|
|
69
|
+
|
|
70
|
+
if (!fichesTechniques.length) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const firstFiche = fichesTechniques.filter(
|
|
75
|
+
(ficheTechnique) =>
|
|
76
|
+
ficheTechnique &&
|
|
77
|
+
ficheTechnique[field] &&
|
|
78
|
+
ficheTechnique[field].toString().toLowerCase().indexOf(description.toLowerCase()) !== -1
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
if (!firstFiche.length) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return firstFiche[0];
|
|
86
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import getFicheTechnique from './ficheTechnique.js';
|
|
2
|
+
|
|
3
|
+
describe('FicheTechnique service tests', () => {
|
|
4
|
+
const dpe = {
|
|
5
|
+
fiche_technique_collection: {
|
|
6
|
+
fiche_technique: [
|
|
7
|
+
{
|
|
8
|
+
enum_categorie_fiche_technique_id: '10',
|
|
9
|
+
sous_fiche_technique_collection: {
|
|
10
|
+
sous_fiche_technique: [
|
|
11
|
+
{
|
|
12
|
+
description: 'Type de ventilation: VMC SF Auto réglable avant 1982',
|
|
13
|
+
valeur: 'VMC SF Auto réglable avant 1982',
|
|
14
|
+
detail_origine_donnee: '',
|
|
15
|
+
enum_origine_donnee_id: '2'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
description: 'Année installation: 1949',
|
|
19
|
+
valeur: 1949,
|
|
20
|
+
detail_origine_donnee: '',
|
|
21
|
+
enum_origine_donnee_id: '1'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
description: 'Energie utilisée: Electrique',
|
|
25
|
+
valeur: 'Electrique',
|
|
26
|
+
detail_origine_donnee: '',
|
|
27
|
+
enum_origine_donnee_id: '2'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
description: 'Façades exposées: plusieurs',
|
|
31
|
+
valeur: 'plusieurs',
|
|
32
|
+
detail_origine_donnee: '',
|
|
33
|
+
enum_origine_donnee_id: '2'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
description: 'Logement Traversant: oui',
|
|
37
|
+
valeur: 'oui',
|
|
38
|
+
detail_origine_donnee: '',
|
|
39
|
+
enum_origine_donnee_id: '2'
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
enum_categorie_fiche_technique_id: '10',
|
|
46
|
+
sous_fiche_technique_collection: {
|
|
47
|
+
sous_fiche_technique: [
|
|
48
|
+
{
|
|
49
|
+
description: 'Type de ventilation: VMC SF Auto réglable avant 1982',
|
|
50
|
+
valeur: 'VMC SF Auto réglable avant 1982',
|
|
51
|
+
detail_origine_donnee: '',
|
|
52
|
+
enum_origine_donnee_id: '2'
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
description: 'Année installation: 1950',
|
|
56
|
+
valeur: 1950,
|
|
57
|
+
detail_origine_donnee: '',
|
|
58
|
+
enum_origine_donnee_id: '1'
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
description: 'Energie utilisée: Bois',
|
|
62
|
+
valeur: 'Bois',
|
|
63
|
+
detail_origine_donnee: '',
|
|
64
|
+
enum_origine_donnee_id: '2'
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
description: 'Façades exposées: plusieurs',
|
|
68
|
+
valeur: 'plusieurs',
|
|
69
|
+
detail_origine_donnee: '',
|
|
70
|
+
enum_origine_donnee_id: '2'
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
description: 'Logement Traversant: oui',
|
|
74
|
+
valeur: 'oui',
|
|
75
|
+
detail_origine_donnee: '',
|
|
76
|
+
enum_origine_donnee_id: '2'
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
enum_categorie_fiche_technique_id: '10',
|
|
83
|
+
sous_fiche_technique_collection: {
|
|
84
|
+
sous_fiche_technique: [
|
|
85
|
+
{
|
|
86
|
+
description: 'Type de ventilation: VMC SF Auto réglable avant 1982',
|
|
87
|
+
valeur: 'VMC SF Auto réglable avant 1982',
|
|
88
|
+
detail_origine_donnee: '',
|
|
89
|
+
enum_origine_donnee_id: '2'
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
description: 'Année installation: 1950',
|
|
93
|
+
valeur: 1950,
|
|
94
|
+
detail_origine_donnee: '',
|
|
95
|
+
enum_origine_donnee_id: '1'
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
description: 'Energie utilisée: Gaz',
|
|
99
|
+
valeur: 'Gaz',
|
|
100
|
+
detail_origine_donnee: '',
|
|
101
|
+
enum_origine_donnee_id: '2'
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
description: 'Façades exposées: plusieurs',
|
|
105
|
+
valeur: 'aucune',
|
|
106
|
+
detail_origine_donnee: '',
|
|
107
|
+
enum_origine_donnee_id: '2'
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
description: 'Logement Traversant: oui',
|
|
111
|
+
valeur: 'oui',
|
|
112
|
+
detail_origine_donnee: '',
|
|
113
|
+
enum_origine_donnee_id: '2'
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
it('should return a fiche technique', async () => {
|
|
123
|
+
let fiche = getFicheTechnique(dpe, '10', 'exposées');
|
|
124
|
+
expect(fiche).not.toBeNull();
|
|
125
|
+
expect(fiche.description).toBe('Façades exposées: plusieurs');
|
|
126
|
+
expect(fiche.valeur).toBe('plusieurs');
|
|
127
|
+
|
|
128
|
+
// Some DPE have a fiche_technique node which is not an array
|
|
129
|
+
const dpeWithoutArray = {
|
|
130
|
+
fiche_technique_collection: {
|
|
131
|
+
fiche_technique: {
|
|
132
|
+
enum_categorie_fiche_technique_id: '10',
|
|
133
|
+
sous_fiche_technique_collection: {
|
|
134
|
+
sous_fiche_technique: [
|
|
135
|
+
{
|
|
136
|
+
description: 'Façades exposées: plusieurs',
|
|
137
|
+
valeur: 'plusieurs',
|
|
138
|
+
detail_origine_donnee: '',
|
|
139
|
+
enum_origine_donnee_id: '2'
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
fiche = getFicheTechnique(dpeWithoutArray, '10', 'exposées');
|
|
148
|
+
expect(fiche).not.toBeNull();
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it('should return a fiche technique with multiple criteria', async () => {
|
|
152
|
+
let fiche = getFicheTechnique(dpe, '10', 'exposées', [1950, 'Gaz']);
|
|
153
|
+
expect(fiche).not.toBeNull();
|
|
154
|
+
expect(fiche.description).toBe('Façades exposées: plusieurs');
|
|
155
|
+
expect(fiche.valeur).toBe('aucune');
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it('should not return a non existing fiche technique', async () => {
|
|
159
|
+
let fiche = getFicheTechnique(dpe, '40', 'exposées');
|
|
160
|
+
expect(fiche).toBeNull();
|
|
161
|
+
|
|
162
|
+
fiche = getFicheTechnique(dpe, '10', 'non existing');
|
|
163
|
+
expect(fiche).toBeNull();
|
|
164
|
+
|
|
165
|
+
dpe.fiche_technique_collection.fiche_technique[0].sous_fiche_technique_collection.sous_fiche_technique =
|
|
166
|
+
null;
|
|
167
|
+
|
|
168
|
+
fiche = getFicheTechnique(dpe, '11', 'non existing');
|
|
169
|
+
expect(fiche).toBeNull();
|
|
170
|
+
|
|
171
|
+
dpe.fiche_technique_collection.fiche_technique[0].sous_fiche_technique_collection = null;
|
|
172
|
+
|
|
173
|
+
fiche = getFicheTechnique(dpe, '11', 'non existing');
|
|
174
|
+
expect(fiche).toBeNull();
|
|
175
|
+
|
|
176
|
+
dpe.fiche_technique_collection.fiche_technique = null;
|
|
177
|
+
|
|
178
|
+
fiche = getFicheTechnique(dpe, '10', 'non existing');
|
|
179
|
+
expect(fiche).toBeNull();
|
|
180
|
+
});
|
|
181
|
+
});
|
package/index.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@open3cl/engine",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Open Source 3CL-DPE engine",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"directories": {
|
|
7
|
+
"test": "test"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"private": false,
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|
|
16
|
+
"test:benchmark": "node inspect test/run_benchmark.js",
|
|
17
|
+
"qa:lint": "eslint .",
|
|
18
|
+
"qa:lint:fix": "npm run qa:lint -- --fix",
|
|
19
|
+
"qa:duplication": "jscpd",
|
|
20
|
+
"qa:format": "prettier --plugin-search-dir . --write .",
|
|
21
|
+
"release": "semantic-release",
|
|
22
|
+
"release:dry": "semantic-release --dry-run",
|
|
23
|
+
"prepare": "husky install",
|
|
24
|
+
"assets:sync": "node scripts/synchronize_assets.js"
|
|
25
|
+
},
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/jzck/Open3CL.git"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"dpe",
|
|
32
|
+
"3cl"
|
|
33
|
+
],
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@jest/globals": "^29.7.0",
|
|
36
|
+
"fast-xml-parser": "^4.5.0",
|
|
37
|
+
"lodash": "^4.17.21"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@commitlint/cli": "^19.2.1",
|
|
41
|
+
"@commitlint/config-conventional": "^19.1.0",
|
|
42
|
+
"@commitlint/cz-commitlint": "^19.2.0",
|
|
43
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
44
|
+
"@semantic-release/git": "^10.0.1",
|
|
45
|
+
"@semantic-release/github": "^10.0.2",
|
|
46
|
+
"@types/jest": "^29.5.12",
|
|
47
|
+
"@types/node": "^20.12.4",
|
|
48
|
+
"deep-object-diff": "^1.1.9",
|
|
49
|
+
"eslint": "^8.57.0",
|
|
50
|
+
"eslint-config-prettier": "^9.1.0",
|
|
51
|
+
"eslint-config-standard": "^17.1.0",
|
|
52
|
+
"eslint-plugin-check-file": "^2.7.1",
|
|
53
|
+
"eslint-plugin-import": "^2.29.1",
|
|
54
|
+
"eslint-plugin-n": "^16.6.2",
|
|
55
|
+
"eslint-plugin-promise": "^6.1.1",
|
|
56
|
+
"husky": "^9.0.11",
|
|
57
|
+
"jest": "^29.7.0",
|
|
58
|
+
"jest-html-reporter": "^3.10.2",
|
|
59
|
+
"jscpd": "^3.5.10",
|
|
60
|
+
"prettier": "^3.2.5",
|
|
61
|
+
"pretty-quick": "^4.0.0",
|
|
62
|
+
"semantic-release": "^23.0.6",
|
|
63
|
+
"xlsx": "^0.18.5"
|
|
64
|
+
},
|
|
65
|
+
"author": "Jack Halford",
|
|
66
|
+
"license": "GPL-3.0",
|
|
67
|
+
"bugs": {
|
|
68
|
+
"url": "https://github.com/jzck/Open3CL/issues"
|
|
69
|
+
},
|
|
70
|
+
"homepage": "https://github.com/jzck/Open3CL#readme",
|
|
71
|
+
"jscpd": {
|
|
72
|
+
"threshold": 0.1,
|
|
73
|
+
"reporters": [
|
|
74
|
+
"console",
|
|
75
|
+
"html"
|
|
76
|
+
],
|
|
77
|
+
"ignore": [
|
|
78
|
+
"**/*.spec.js"
|
|
79
|
+
],
|
|
80
|
+
"path": [
|
|
81
|
+
"src"
|
|
82
|
+
],
|
|
83
|
+
"output": "./duplicate",
|
|
84
|
+
"absolute": true,
|
|
85
|
+
"gitignore": true
|
|
86
|
+
}
|
|
87
|
+
}
|
|
Binary file
|
package/tv/18.5_c1.ods
ADDED
|
Binary file
|
|
Binary file
|