diff --git a/app/faq/FAQ.yaml b/app/faq/FAQ.yaml index 8e397e30..02e25925 100644 --- a/app/faq/FAQ.yaml +++ b/app/faq/FAQ.yaml @@ -14,3 +14,16 @@ id: fenetre réponse: | Une fenêtre, dans le parcours gestes, c'est une petite fenêtre ? Une baie vitrée, ça compte pour combien de fenêtres ? Car le coût n'est pas le même entre une lucarne et une baie vitrée ! +- question: Que met-on dans l'enveloppe des travaux MaPrimeRénov' accompagnée ? + catégorie: accompagnée + id: enveloppe + réponse: | + Si à l'occasion de mes travaux, j'isole par l'intérieur ma cuisine, et je suis donc plus ou moins contraint à la refaire (ou tout du moins, c'est une bonne ocasion), dois-je écarte de l'enveloppe MPRA (MaPrimeRénov accompagnée) les dépenses concernant la cuisine, qui d'ailleurs ne seront pas assujetties à une TVA de 5,5 % ? + + Plus précisément, si des travaux sont partagés entre isolation et confort, où les mettre ? + + La page ["La TVA à taux réduit"](https://www.anah.gouv.fr/sites/default/files/2024-02/202402_Guide_des_aides_WEBA.pdf#page=32) donne des éléments de réponse, à creuser pour donner une réponse claire. + + Le jeu de test ANAH nous donne aussi des indices : il semble bien que MPRA est souvent appliquée sur la totalité d'enveloppes qui comporte plus que 5 % de TVA, par exemple la ligne `32188`, ce qui laisse penser que l'assiette MPRA peut en effet contenir des travaux à la TVA de 10 %, donc des travaux qui ne sont pas strictement de l'amélioration de la performance énergétique ! + + Exemple précis : je fais l'isolation par l'intérieur de ma maison sur 2 faces. Je dois donc refaire la peinture, c'est automatique. Est-ce que la peinture est incluse dans l'assiette MPRA ? diff --git a/app/personas/Tests.tsx b/app/personas/Tests.tsx new file mode 100644 index 00000000..cb477e93 --- /dev/null +++ b/app/personas/Tests.tsx @@ -0,0 +1,94 @@ +import { Section } from '@/components/UI' +import rawTests from '@/app/règles/tests.csv' +import { GreenCell, Table } from './TestsUI' +import rules from '@/app/règles/rules' +import Publicodes from 'publicodes' +import { formatValue } from '@/node_modules/publicodes/dist/index' +import Link from 'next/link' +import useSetSearchParams from '@/components/useSetSearchParams' +import { encodeSituation } from '@/components/publicodes/situationUtils' + +const tests = rawTests.filter((test) => test['aide complémentaire'] === 0) + +const engine = new Publicodes(rules) + +export default function Tests() { + return ( +
+

Tests

+

+ Pour assurer la fiabilité de notre modèle de calcul, voici une liste de + tests effectués via un modèle tiers. +

+ + + + + + + + + + + + + {tests.map((test) => { + const situation = { + travaux: test['montant de travaux HT'], + 'travaux . TTC': test['montant de travaux TTC'], + investissement: 9999999, //TODO dirty, this happens because "plafond" still applies to a rule for which we set a value + sauts: test['saut de classe'], + 'MPR . accompagnée . bonus . condition': + test['bonus passoire'] === '0,1' ? 'oui' : 'non', + 'ménage . revenu . classe': `"${ + { + TMO: 'très modeste', + MO: 'modeste', + INT: 'intermédiaire', + SUP: 'supérieure', + }[test['ressource ménage']] + }"`, + } + console.log(situation) + const evaluation = engine + .setSituation(situation) + .evaluate('MPR . accompagnée') + + const value = formatValue(evaluation) + + const expectedValue = test['aide MPR'] + + const valid = + Math.round(evaluation.nodeValue) === + Math.round( + typeof expectedValue === 'string' + ? expectedValue.replace(',', '.') + : expectedValue, + ) + return ( + + + + + + + + {valid ? {value} : } + + + ) + })} + +
Classe de revenuSauts DPETravaux HTBonus passoireAide MPR-A testAide MPR-A recalculée
{test['ressource ménage']}{test['saut de classe']}{test['montant de travaux HT']} €{test['bonus passoire']}{expectedValue} €{value} + + Inspection + +
+
+ ) +} diff --git a/app/personas/TestsUI.tsx b/app/personas/TestsUI.tsx new file mode 100644 index 00000000..b631c536 --- /dev/null +++ b/app/personas/TestsUI.tsx @@ -0,0 +1,13 @@ +'use client' +import styled from 'styled-components' + +export const Table = styled.table` + width: 100%; + td { + text-align: center; + } +` + +export const GreenCell = styled.td` + background: #c4fad5; +` diff --git a/app/personas/page.tsx b/app/personas/page.tsx index 2146b69b..e6874554 100644 --- a/app/personas/page.tsx +++ b/app/personas/page.tsx @@ -1,11 +1,13 @@ import Footer from '@/components/Footer' import { Suspense } from 'react' import Personas from '../Personas' +import Tests from './Tests' export default function PersonasPage() { return ( +