Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Aides locales narbonne #221

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions app/locales/IllustratedHeader.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import useWikidata from '@/components/wikidata/useWikidata'

export default function IllustratedHeader({ placeTitle, imageTitle }) {
export default function IllustratedHeader({ placeTitle, imageTitle, imageLink }) {
const wikidataImage = useWikidata(imageTitle),
wikidataImageUrl = wikidataImage?.pictureUrl

Expand All @@ -14,14 +14,11 @@ export default function IllustratedHeader({ placeTitle, imageTitle }) {
`}
>
<img
src={wikidataImageUrl}
width="30"
height="30"
src={imageLink ? "/logo-locale/"+imageLink : wikidataImageUrl}
alt={`Photo emblématique du territoire ${imageTitle}`}
css={`
object-fit: cover;
height: 4rem;
width: 10rem;
width: 5rem;
border-radius: 0.6rem;
margin-right: 1rem;
margin-left: 0.4rem;
Expand Down
11 changes: 8 additions & 3 deletions app/locales/PlaceSummary.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ export default function PlaceSummary({ place, placeRules }) {

const placeTitle = getRuleTitle(place, Object.fromEntries(placeRules)),
rule = Object.fromEntries(placeRules)[place] || {},
imageTitle = rule['image wikidata'] || placeTitle

imageTitle = rule['image wikidata'] || placeTitle,
imageLink = rule['image']
const valueRules =
Array.isArray(placeRules) &&
placeRules.filter(([dottedName]) => dottedName.endsWith('montant'))
Expand Down Expand Up @@ -68,7 +68,12 @@ export default function PlaceSummary({ place, placeRules }) {
>
{' '}
<Link href={href}>
<IllustratedHeader imageTitle={imageTitle} placeTitle={placeTitle} />
<IllustratedHeader {...{
imageTitle,
placeTitle,
imageLink
}}
/>
</Link>
<Card
css={`
Expand Down
9 changes: 7 additions & 2 deletions app/locales/[place]/Place.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,8 @@ export default function LocalePlace({ place }) {

const placeTitle = getRuleTitle(place, Object.fromEntries(placeRules)),
rule = Object.fromEntries(placeRules)[place] || {},
imageTitle = rule['image wikidata'] || placeTitle
imageTitle = rule['image wikidata'] || placeTitle,
imageLink = rule['image']

const engine = useMemo(() => {
console.log('instantiating new publicodes engine for evaluation')
Expand All @@ -140,7 +141,11 @@ export default function LocalePlace({ place }) {
return (
<div css={``}>
<Section>
<IllustratedHeader placeTitle={placeTitle} imageTitle={imageTitle} />
<IllustratedHeader {...{
placeTitle,
imageTitle,
imageLink
}} />
<p>
Découvrez ci-dessous les aides locales {capitalise0(place)}. Vous
pouvez changer la situation de votre ménage pour voir l'évolution du
Expand Down
157 changes: 157 additions & 0 deletions app/règles/aides-locales.publicodes
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
# Voir aussi le fichier aides-locales.brouillon.yaml pour les aides pas encore implémentées ou qui ne sont plus valides

'':
titre: Aide Locale
marque: Aide locale
icône: 'hexagone-contour.svg'
avec:
Expand Down Expand Up @@ -458,3 +459,159 @@ essonne . gros travaux . montant:
essonne . gros travaux . travaux plafonnés:
valeur: projet . travaux
plafond: 20000 €

# Toutes ces aides ne sont pas implémentées
grand narbonne:
image wikidata: Le Grand Narbonne
image: le-grand-narbonne.png
titre: Grand Narbonne Communauté d'agglomération - Prime Energie
grand narbonne . conditions géo: ménage . EPCI = '241100593'
grand narbonne . aides:
applicable si: conditions
remplace: intercommunalité
valeur: prime énergie . montant
grand narbonne . aides . conditions:
toutes ces conditions:
- conditions géo
- prime énergie . statut bénéficiaire = oui
- pig . bénéficiaire = non
grand narbonne . montant: 0 € # pour l'instant on ne souhaite pas afficher de montant
# somme:
# - mon coach éco-logis
# - aide département
# - aide grand narbonne
# - aide acv narbonne

grand narbonne . prime énergie:
# grand narbonne . prime énergie . conditions:
# toutes ces conditions:
# - ménage . EPCI = '241100593'
# - statut bénéficiaire
# - logement . résidence principale
# - logement . construit avant 2013
# - mon coach éco-logis . bénéficiaire = non
# - pig . bénéficiaire = non
grand narbonne . prime énergie . montant: 0 € # On ne communique pas de chiffre pour l'instant
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implémentons quand même un modèle complet, et limitons-le dans l'UI principale. Il faut que notre base d'aides locales (/locales) et notre modèle soient complets je pense.


grand narbonne . prime énergie . statut bénéficiaire:
titre: Propriétaire éligible
question: Etes-vous proprietaire (occupant, bailleur, SCI) ou accédant à la propriété qui occupera le logement dans les 6 mois suivant l'achèvement des travaux?
par défaut: oui
description: |
Sont également éligibles :
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On ne peut pas cacher ces deux cas essentiels dans la description, comme des exceptions rares au titre. Ce sont des situations différentes et complémentaires.

À mon avis ça nous invite à modifier le composant de question pour gérer ce genre de questions impossibles à résumer en une phrase. Tant pis, cette complexité n'est pas de notre faute et ne concerne qu'une faible part des français.

- les propriétaires qui réhabilitent des logements vacants en vue de les louer (à condition que le logement soit loué au moment de la demande de paiement).
- les propriétaires dans le cadre de transformation d'usage, dont l'usage final est de l'habitation
grand narbonne . pig:
grand narbonne . pig . bénéficiaire:
titre: Bénéficiaire du PIG Grand Narbonne
question: Etes-vous bénéficiaire du Programme d'Intérêt Général du Grand Narbonne?
par défaut: oui
sous-titre: A l'exception de la Prime Energie Innovation Solidaire
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ce bloc ne me semble pas lisible, je ne la comprends pas facilement, il faut qu'on clarifie.

description: |
A l'exception de la Prime Energie Innovation Solidaire qui est cumulable avec l'ensemble des PIG et dispositifs existants

grand narbonne . prime énergie . logement:
grand narbonne . prime énergie . logement . résidence principale:
question: Le logement est-il occupé à titre de résidence principale
par défaut: oui
description: Sont exclus du dispositif, les résidences secondaires et les logements saisonniers.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pourquoi faire une nouvelle question ici, par rapport à la question existante logement . résidence principale ?

grand narbonne . prime énergie . logement . construit avant 2013:
question: Le permis de construire du logement a été déposé avant le 1er janvier 2013
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ohlala, aucune standardisation des dates. Ça sent le truc rédigé en 2023 pour faire 10 ans... À voir s'ils ne l'ont pas MAJ. En effet, ne pas imposer cette complexité aux autres 👍

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah non OK, je vois que c'est l'année d'après la norme thermique 2013

par défaut: oui
# TODO: Pour l'instant, cette aide n'est pas implémentée côté UI
grand narbonne . prime énergie . innovation solidaire:
grand narbonne . prime énergie . innovation solidaire . conditions:
toutes ces conditions:
- ménage . revenu < 2 x catégorie bleue

# # TODO: Pour l'instant, cette aide n'est pas implémentée côté UI
# grand narbonne . aide département:
# grand narbonne . aide département . montant:
# valeur: 200 €
# grand narbonne . aide grand narbonne:
# applicable si: ménage . EPCI = '241100593'
# grand narbonne . aide grand narbonne . montant:
# valeur: 300 €

# # TODO: Pour l'instant, cette aide n'est pas implémentée côté UI
# grand narbonne . aide acv narbonne:
# question: Etes-vous concerné par le dispositif "Action coeur de ville" Narbonne?
# par défaut: non
# grand narbonne . aide acv narbonne . montant:
# valeur: 200 €

# # TODO: Pour l'instant, cette aide n'est pas implémentée côté UI
# grand narbonne . mon coach éco-logis:
# lien: https://www.aude.fr/je-renove-mon-logement-avec-mon-coach-eco-logis
# description: |
# Pour bénéficier de ce programme:
# - Vous devez être propriétaire de votre logement et avoir des ressources modestes
# - Votre logement doit avoir été construit il y a plus de 15 ans
# - Vous vous engagez à y vivre à titre de résidence principale pendant trois ans
# - Vous ne devez pas avoir eu recours à un prêt à taux zéro pour l’acquisition du logement dans les cinq dernières années
# Pour savoir si vous pouvez bénéficier de Mon Coach Éco-Logis, appelez le 04 68 11 81 30. Du lundi au vendredi de 9h à 12h et de 14h à 17h. Prix d’un appel local.
# grand narbonne . mon coach éco-logis . bénéficiaire:
# question: "Etes-vous bénéficiaire du Programme d'Intérêt Général du Département de l'Aude (Mon Coach EcoLogis)?"
# par défaut: non
# lien: https://www.aude.fr/je-renove-mon-logement-avec-mon-coach-eco-logis
# description: |
# Pour bénéficier de ce programme:
# - Vous devez être propriétaire de votre logement et avoir des ressources modestes
# - Votre logement doit avoir été construit il y a plus de 15 ans
# - Vous vous engagez à y vivre à titre de résidence principale pendant trois ans
# - Vous ne devez pas avoir eu recours à un prêt à taux zéro pour l’acquisition du logement dans les cinq dernières années
# Pour savoir si vous pouvez bénéficier de Mon Coach Éco-Logis, appelez le 04 68 11 81 30. Du lundi au vendredi de 9h à 12h et de 14h à 17h. Prix d’un appel local.
# grand narbonne . mon coach éco-logis . conditions:
# toutes ces conditions:
# - conditions géo
# - logement . résidence principale propriétaire
# - logement . période de construction = 'au moins 15 ans'
# - conditions de revenu
# - projet . gain energétique >= 35 %
# - vivre trois ans
# - pas de PTZ
# - travaux recevables
# grand narbonne . mon coach éco-logis . conditions de revenu:
# une de ces conditions:
# - ménage . revenu . classe = 'modeste'
# - ménage . revenu . classe = 'très modeste'
# grand narbonne . mon coach éco-logis . vivre trois ans:
# question: Vous vous engagez à vivre à titre de résidence principale pendant trois ans dans le logement
# par défaut: oui
# grand narbonne . mon coach éco-logis . pas de PTZ:
# question: Avez-vous eu recours à un prêt à taux zéro pour l’acquisition du logement dans les cinq dernières années
# par défaut: non
# grand narbonne . mon coach éco-logis . travaux recevables:
# question: Les travaux envisagés sont-ils éligibles à la prime éco-logis?
# par défaut: oui
# description: |
# La fourniture des matériaux et les travaux doivent impérativement être réalisés par des artisans reconnu garant de l’environnement (RGE) et figurer parmi la liste suivante :
# - Changement de chauffage
# - Isolation des combles, des murs, du plancher
# - Mise en place d’une ventilation
# - Changement de menuiseries, etc.
# grand narbonne . mon coach éco-logis . montant:
# applicable si: conditions
# somme:
# - bonus bâtiment basse consommation
# - bonus sortie passoire thermique
# - 10 % * projet . travaux
# plafond: 30000 €
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'ai l'impression que c'est ça l'aide principale à Narbonne, non ? C'est la seule qui a des montants substantiels, elle écrase tout le reste, et elle concerne tout le département (donc à coder hors de la variable grand narbone).

Est-ce qu'on se concentrerait pas d'abord sur celle-ci, vu la complexité des exclusions des autres et leur montant super faibles ?

# grand narbonne . mon coach éco-logis . bonus bâtiment basse consommation:
# grand narbonne . mon coach éco-logis . bonus bâtiment basse consommation . conditions:
# toutes ces conditions:
# - projet . DPE visé <= 2
# - DPE . actuel >= 2
# grand narbonne . mon coach éco-logis . bonus bâtiment basse consommation . montant:
# titre: Bonus "Bâtiment basse consommation"
# applicable si: conditions
# valeur: 1500 €
# grand narbonne . mon coach éco-logis . bonus sortie passoire thermique:
# grand narbonne . mon coach éco-logis . bonus sortie passoire thermique . conditions:
# toutes ces conditions:
# - projet . DPE visé < 6
# - DPE . actuel >= 6
# grand narbonne . mon coach éco-logis . bonus sortie passoire thermique . montant:
# titre: Bonus "Sortie de passoire énergétique"
# applicable si: conditions
# valeur: 1500 €
2 changes: 2 additions & 0 deletions app/simulation/Answers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@ export const categoryData = (

const category = firstLevelCategory(currentQuestion)
const categoryTitle = currentQuestion && rules[category]?.titre
const aideLocale = rules[currentQuestion.split(' . ').slice(0, 2).join(' . ').trim()]
const isLastCategory = currentQuestion == nextQuestions.slice(-1)
return {
categoryTitle,
aideLocale,
isLastCategory,
allCategories,
pastCategories,
Expand Down
2 changes: 2 additions & 0 deletions app/simulation/QuestionHeader.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ export const QuestionHeader = styled.header`
flex-wrap: wrap;
align-items: start;
flex-direction: column;
flex: 1;
min-width: 80%;
margin: 0.4rem 0.2rem 0.4rem 0.2rem;
> small {
color: var(--color);
Expand Down
2 changes: 2 additions & 0 deletions app/simulation/simulationConfig.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ prioritaires:
- ménage . revenu
- DPE . actuel
- logement . commune
- aides locales . grand narbonne . prime énergie . statut bénéficiaire
- aides locales . grand narbonne . pig . bénéficiaire
- parcours d'aide
# Le reste est non-linéaire, en fonction du choix
non prioritaires:
Expand Down
46 changes: 26 additions & 20 deletions components/ClassicQuestionWrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import Suggestions from '@/app/simulation/Suggestions'
import { AnswerWrapper } from './InputUI'
import Notifications from './Notifications'
import { encodeSituation } from './publicodes/situationUtils'

import { isMosaicQuestion } from './BooleanMosaic'
import { gestesMosaicQuestionText } from './GestesMosaic'
import QuestionDescription from './QuestionDescription'
Expand Down Expand Up @@ -37,7 +36,7 @@ export default function ClassicQuestionWrapper({
nextQuestions,
}) {
const isCompact = useIsCompact()
const { categoryTitle } = categoryData(
const { categoryTitle, aideLocale } = categoryData(
nextQuestions,
currentQuestion,
answeredQuestions,
Expand All @@ -48,24 +47,31 @@ export default function ClassicQuestionWrapper({
<Card>
<div>
{(!rule.type || !rule.type === 'question rhétorique') && (
<QuestionHeader>
<small>{categoryTitle}</small>
<h3>
<QuestionText {...{ rule, question: currentQuestion, rules, situation, engine }} />
</h3>
{rule['sous-titre'] && (
<div
css={`
p {
color: #666;
font-size: 90%;
line-height: 1.25rem;
}
`}
dangerouslySetInnerHTML={{ __html: rule.sousTitreHtml }}
></div>
)}
</QuestionHeader>
<div css={`display: flex;flex-wrap:wrap;justify-content: center;`}>
{ aideLocale?.image && (<img
css={`margin: 0.4rem 0.4rem 0;width: 100px;height: fit-content;`}
src={`/logo-locale/${aideLocale.image}`}
/>)
}
<QuestionHeader>
<small>{categoryTitle}{ aideLocale?.image ? " - " + aideLocale?.titre : "" }</small>
<h3>
<QuestionText {...{ rule, question: currentQuestion, rules, situation, engine }} />
</h3>
{rule['sous-titre'] && (
<div
css={`
p {
color: #666;
font-size: 90%;
line-height: 1.25rem;
}
`}
dangerouslySetInnerHTML={{ __html: rule.sousTitreHtml }}
></div>
)}
</QuestionHeader>
</div>
)}
<AnswerWrapper>
{!noSuggestions && (
Expand Down
1 change: 1 addition & 0 deletions components/InputSwitch.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ export default function InputSwitch({
questionsToSubmit: [
'ménage . code région',
'ménage . code département',
'ménage . EPCI',
'ménage . commune',
],
currentValue,
Expand Down
Loading