generated from publicodes/model-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(rules): add new alternative
garder sa voiture
+ refactor the J…
…S API
- Loading branch information
1 parent
9591cf9
commit 3be85f9
Showing
7 changed files
with
234 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
alternatives: | ||
titre: Alternatives | ||
|
||
alternatives . garder sa voiture: | ||
titre: Conserver sa voiture actuelle 5 ans de plus | ||
description: > | ||
Conserver sa voiture actuelle peut permettre de réduire les coûts annuels | ||
liés à votre voiture. En effet, il n'y aura pas de coûts supplémentaires | ||
liés à l'achat d'une nouvelle voiture et vous étendrez la durée | ||
d'amortissement de l'achat de votre voiture actuelle. | ||
Cependant, il est important de vérifier que votre voiture actuelle respecte | ||
les [normes environnementales en | ||
vigueur](https://www.ecologie.gouv.fr/politiques-publiques/zones-faibles-emissions-zfe). | ||
avec: | ||
empreinte: | ||
valeur: empreinte | ||
note: > | ||
La durée de détention de la voiture n'impacte pas l'empreinte carbone. | ||
En effet, nous utilisons le modèle de [Nos Gestes | ||
Climat](https://nosgestesclimat.fr) qui a fait le choix d'amortir | ||
l'empreinte carbone sur la durée de vie du véhicule en km parcourus. | ||
Cela signifie que seule la distance parcourue en une année détermine | ||
l'empreinte carbone annuelle de la voiture et permet de répartir | ||
l'amortissement de l'empreinte de la construction équitablement entre | ||
toustes les propriétaires successif:ves. | ||
Voir la documentation sur | ||
[l'amortissement](https://nosgestesclimat.fr/documentation/transport/voiture/amortissement) | ||
pour plus d'informations. | ||
coûts: | ||
# TODO: prendre en compte l'augmentation des coûts d'entretien de la voiture | ||
valeur: coûts | ||
contexte: | ||
voiture . durée de détention totale: voiture . durée de détention totale + durée supplémentaire | ||
|
||
durée supplémentaire: | ||
titre: Durée de détention supplémentaire | ||
question: Combien de temps souhaitez-vous garder votre voiture actuelle ? | ||
# TODO: déterminer la valeur à ajouter pour la détention de la voiture | ||
par défaut: 5 | ||
unité: an | ||
|
||
# alternatives . utiliser le vélo: | ||
# applicable si: | ||
# toutes ces conditions: | ||
# - usage . km annuels . calculés | ||
# - usage . km annuels . calculés . quotidien <= 15 | ||
# titre: Utiliser le vélo pour les trajets quotidiens | ||
# description: > | ||
# Utiliser le vélo est une option qui peut être intéressante si vous avez des | ||
# trajets courts à effectuer. Cela vous permet de vous déplacer de manière | ||
# écologique et de faire du sport en même temps. | ||
# | ||
# avec: | ||
# empreinte: | ||
# valeur: empreinte |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
import Engine from "publicodes" | ||
import rules, { RuleName } from "../publicodes-build" | ||
import { expect, test, describe } from "vitest" | ||
|
||
describe("Alternatives", () => { | ||
const engine = new Engine<RuleName>(rules, { | ||
logger: { | ||
log: () => {}, | ||
warn: () => {}, | ||
error: (message: string) => console.error(message), | ||
}, | ||
}) | ||
|
||
describe("Garder sa voiture actuelle", () => { | ||
test("diminue les coûts annuels", () => { | ||
const coutsDeBase = engine.evaluate("coûts").nodeValue?.valueOf() | ||
const acoutsAlternative = engine | ||
.evaluate("alternatives . garder sa voiture . coûts") | ||
.nodeValue?.valueOf() | ||
|
||
if ( | ||
typeof coutsDeBase === "number" && | ||
typeof acoutsAlternative === "number" | ||
) { | ||
expect(acoutsAlternative).toBeLessThan(coutsDeBase) | ||
} else { | ||
expect(false, "les coûts doivent être des nombres").toBeTruthy() | ||
} | ||
}) | ||
|
||
test("garde la même empreinte", () => { | ||
const empreinteDeBase = engine.evaluate("empreinte").nodeValue?.valueOf() | ||
const empreinteAlternative = engine | ||
.evaluate("alternatives . garder sa voiture . empreinte") | ||
.nodeValue?.valueOf() | ||
|
||
if ( | ||
typeof empreinteDeBase === "number" && | ||
typeof empreinteAlternative === "number" | ||
) { | ||
expect(empreinteAlternative).toEqual(empreinteDeBase) | ||
} else { | ||
expect(false, "les empreintes doivent être des nombres").toBeTruthy() | ||
} | ||
}) | ||
|
||
test("plus la durée de détention est longue, plus les coûts annuels diminuent", () => { | ||
const coutsAlternative5ans = engine | ||
.evaluate("alternatives . garder sa voiture . coûts") | ||
.nodeValue?.valueOf() | ||
const coutsAlternative7ans = engine | ||
.setSituation({ | ||
"alternatives . garder sa voiture . durée supplémentaire": 7, | ||
}) | ||
.evaluate("alternatives . garder sa voiture . coûts") | ||
.nodeValue?.valueOf() | ||
|
||
if ( | ||
typeof coutsAlternative5ans === "number" && | ||
typeof coutsAlternative7ans === "number" | ||
) { | ||
expect(coutsAlternative7ans).toBeLessThan(coutsAlternative5ans) | ||
} else { | ||
expect(false, "les coûts doivent être des nombres").toBeTruthy() | ||
} | ||
}) | ||
}) | ||
}) |