diff --git a/README.md b/README.md index 5a7f37c..1bc6f4f 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,163 @@

- Simulateur Changer de voiture + @betagouv/publicodes-voiture

- Report Bug + Reporter un bug • - API docs + Documentation intéractiveContributePublicodes

-Modèle de calcul pour le simulateur d'aide au changement de voiture d'Agir. - -
+Modèle de calcul des coûts et de l'empreinte CO2e de la possession et +l'utilisation d'une voiture individuelle et de ses alternatives. Il existe un +client autonome [`agir-voiture`](https://github.com/betagouv/agir-voiture) et +une intégration est en cours dans l'application +[J'agis](https://jagis.beta.gouv.fr). > [!WARNING] -> Ce projet est en cours d'expérimentation et n'est pas encore prêt pour une -> réutilisation en production. Voir le [document de travail](/specs.md) pour -> plus d'informations sur le projet. +> Ce projet est en cours de construction et est susceptible de fortement +> évoluer. Voir le [document de travail](/specs.md) pour plus d'informations +> sur le projet. + + ## Usage Ajouter le paquet à vos dépendances : ``` -yarn add publicodes-voiture +yarn add @betagouv/publicodes-voiture ``` -Instancier un nouveau moteur Publicode : +### Avec la classe `CarSimulator` -```typescript -import Engine from "publicodes" -import rules from "publicodes-voiture" +Afin de faciliter la réutilisation du modèle, ce paquet expose en plus des +règles [Publicodes](https://publi.codes) (accessibles depuis +[`./src/rules`](./src/rules), une classe +[`CarSimulator`](https://www.jsdocs.io/package/@betagouv/publicodes-voiture#CarSimulator) +qui encapsule un moteur [Publicodes](https://publi.codes). -const engine = new Engine(rules) +> [!NOTE] +> To see the full API documentation, please refer to +> [jsDocs.io](https://www.jsdocs.io/package/@betagouv/publicodes-voiture). -engine.evaluate("empreinte carbone . voiture . essence") +```typescript +import { CarSimulator } from "@betagouv/publicodes-voiture" + +// Initialisation du moteur (parsing des règles Publicodes) +const simulator = new CarSimulator() + +// Définition des paramètres (cad. les réponses aux questions) +simulator.setInputs({ + "voiture . prix d'achat": 10000, + "voiture . occasion": true, + "voiture . gabarit": "moyenne", + "voiture . motorisation": "thermique", + "voiture . thermique . carburant": "gazole B7 ou B10", + "usage . km annuels . connus": true, + "usage . km annuels . renseignés": 5000, + "voiture . thermique . prix carburant": 5, + "voiture . durée de détention totale": 10, + // ... +}) + +// Calcul pour la voiture "actuelle" +console.log(simulator.evaluateCar()) +// Sortie : +{ + emissions: { + value: 1115.731110659287, + unit: "kgCO2e", + title: "Empreinte carbone annuelle de votre voiture", + isEnumValue: false, + isApplicable: true, + }, + cost: { + value: 4344.882978723404, + unit: "€/an", + title: "Coûts annuels de votre voiture", + isEnumValue: false, + isApplicable: true, + }, + size: { + value: "moyenne", + unit: undefined, + title: "Monospace", + isEnumValue: true, + isApplicable: true, + }, + motorisation: { + value: "thermique", + unit: undefined, + title: "Thermique", + isEnumValue: true, + isApplicable: true, + }, + fuel: { + value: "gazole B7 ou B10", + unit: undefined, + title: "Diesel", + isEnumValue: true, + isApplicable: true, + }, +} + +// Calcul des alternatives +const alternatives = simulator.evaluateAlternatives() + +// Récupération des informations de la voiture cibles afin de filtrer les alternatives +// non compatibles (ex: ne pas proposer une voiture électrique si la personne +// n'a pas la possibilité de pouvoir recharger sa voiture quotidiennement). +simulator.setInputs( + { + "voiture . cible . gabarit": "SUV", + "voiture . cible . borne de recharge": false, + }, + { + // Permet de simplement mettre à jours les entrées au lieu de les écraser + // (comportement par défaut). + overwrite: false + }, +) +console.log(simulator.evaluateTargetInfos()) +// Sortie : +{ + size: { + value: "SUV", + unit: undefined, + title: "SUV", + isEnumValue: true, + isApplicable: true, + }, + hasChargingStation: { + value: false, + unit: undefined, + title: "Borne de recharge", + isEnumValue: false, + isApplicable: true, + } +} ``` ### En local #### Compiler le modèle -> Les règles publicodes du modèle sont disponible dans le dossier +> Les règles Publicodes du modèle sont disponible dans le dossier > [`rules/`](https://github.com/betagouv/publicodes-voiture/tree/main/rules). -Pour installer les dépendances et compiler tous les fichiers `.publicodes` en -un seul fichier JSON, il suffit d'exécuter la commande suivante : - ``` -yarn +yarn compile:rules +``` -yarn build +#### Lancer les tests + +``` +yarn test ``` #### Lancer la documentation @@ -72,5 +176,5 @@ yarn doc ## Publier une nouvelle version -Afin de publier une nouvelle version il suffit d'exécuter la commande `npm +Afin de publier une nouvelle version il suffit d'exécuter la commande `yarn version`.