Skip to content

Commit

Permalink
feat(lodeom): ajout de la sélection de zone
Browse files Browse the repository at this point in the history
  • Loading branch information
liliced committed Dec 26, 2024
1 parent 151d5a9 commit 85d9bc4
Show file tree
Hide file tree
Showing 11 changed files with 457 additions and 19 deletions.
121 changes: 114 additions & 7 deletions modele-social/règles/salarié/cotisations.publicodes
Original file line number Diff line number Diff line change
Expand Up @@ -309,9 +309,9 @@ salarié . cotisations . exonérations . lodeom . zone un:
- barème compétitivité renforcée
- barème innovation et croissance
une de ces conditions:
- barèmes . barème compétitivité
- entreprise . salariés . effectif < 11
- secteurs d'activité éligibles
- barèmes . barème compétitivité
description: |
Le barème de compétitivité <strong>est applicable</strong> :
- aux employeurs de moins de 11 salariés ;
Expand Down Expand Up @@ -411,10 +411,113 @@ salarié . cotisations . exonérations . lodeom . zone deux:
Fiche Urssaf: https://www.urssaf.fr/accueil/employeur/beneficier-exonerations/exonerations-zonees/exoneration-lodeom.html#ancre-calcul-declaration-a-saint-barth

avec:
# Impossible (ou trop compliqué) avec Publicodes de gérer dans la même règle :
# - une valeur calculée par l'engine (avec applicabilité et formule)
# - une valeur choisie par l'usager (depuis une QCM)
# On répète donc les barèmes afin de pouvoir dans certains cas demander à l'usager
# de choisir directement son barème (ex: simulateur Lodéom), et dans d'autres, de
# déduire le barème à partir d'autres paramètres (effectif, secteur éligible...)
# (ex: simulateur salarié)
# /!\ Attention /!\ Penser à modifier les titres, descriptions et références dans
# les 2 règles à chaque évolution
barèmes:
question: Quel barème souhaitez-vous appliquer ?
formule:
une possibilité:
choix obligatoire: oui
possibilités:
- barème moins de 11 salariés
- barème sectoriel
- barème renforcé
avec:
barème moins de 11 salariés:
valeur: barèmes = 'barème moins de 11 salariés'
titre: Barème pour les employeurs de moins de 11 salariés
description: |
L’exonération est applicable aux employeurs occupant <strong>moins de 11 salariés</strong>.

Par ailleurs, peuvent également être éligibles à cette exonération les employeurs qui, bien que remplissant
les conditions pour bénéficier du barème sectoriel sans critère d’effectif, choisissent d’opter pour
cette exonération, plus favorable, car elles ont moins de 11 salariés.
références:
Fiche Urssaf: https://www.urssaf.fr/accueil/employeur/beneficier-exonerations/exonerations-zonees/exoneration-lodeom.html#ancre-calcul-declaration-a-saint-barth
Champ d'application du barème réservé aux employeurs de moins de 11 salariés: https://boss.gouv.fr/portail/accueil/exonerations/exonerations-zonees.html#1520

barème sectoriel:
valeur: barèmes = 'barème sectoriel'
titre: Barème d'exonération sectorielle
description: |
L’exonération est applicable aux employeurs, quel que soit leur effectif, relevant d’un des secteurs d’activité
éligibles au dispositif d’exonération « Lodeom » :
- 🔬 recherche et développement ;
- 📷 tourisme, y compris les activités de loisirs s’y rapportant ;
- 🛏️ hôtellerie ;
- 🌱 agronutrition ;
- 🌳 environnement ;
- 🔋 énergies renouvelables ;
- 🚜 agriculture (y compris les coopératives agricoles et sociétés d’intérêt collectif agricoles
et leurs unions ainsi que les coopératives maritimes et leurs unions) ;
- 🎣 pêche, cultures marines et aquaculture ;
- 🏗 bâtiment et travaux publics
- 🍴 restauration ;
- 📰 presse ;
- 🎥 production audiovisuelle.
- ⛵ transport fluvial ou maritime pour les employeurs assurant :
- la desserte maritime ou fluviale de plusieurs points de la Guadeloupe, de la Guyane, de la Martinique, de La Réunion, de Saint-Barthélemy ou de Saint-Martin ;
- la liaison entre les ports de ces départements ou collectivités ;
- la liaison entre les ports de la Réunion et de Mayotte.
- ✈️ transport aérien pour les employeurs assurant :
- la liaison entre la métropole et la Guadeloupe, la Guyane, la Martinique, La Réunion, Saint-Martin, Saint-Barthélemy ;
- la liaison entre ces départements ou collectivités et entre la Réunion et Mayotte ;
- la desserte intérieure de ces départements ou collectivités.
références:
Fiche Urssaf: https://www.urssaf.fr/accueil/employeur/beneficier-exonerations/exonerations-zonees/exoneration-lodeom.html#ancre-calcul-declaration-a-saint-barth
Champ d'application du barème réservé aux employeurs de moins de 11 salariés: https://boss.gouv.fr/portail/accueil/exonerations/exonerations-zonees.html#1540

barème renforcé:
valeur: barèmes = 'barème renforcé'
titre: Barème d'exonération renforcée
description: |
Pour bénéficier du barème d'exonération renforcée, les employeurs doivent :
- employer <strong>moins de 250 salariés</strong>,
- réaliser un chiffre d’affaires annuel <strong>inférieur à 50 millions d’euros</strong>
- et, pour ceux installés à <strong>Saint-Martin</strong>, être soumis de plein droit ou sur option à
un <strong>régime réel d’imposition</strong>.

Par ailleurs, l'employeur doit remplir <strong>au moins l’une des conditions</strong> suivantes :
- soit relever de l’un des secteurs d’activité éligibles à la réduction d’impôt sur le revenu ouverte aux
contribuables domiciliés en France qui ont réalisés des investissements productifs neufs en outre-mer
(prévue à l’article 199 undecies B du code général des impôts) ;
- soit exercer une des activités suivantes :
- comptabilité ;
- conseil aux entreprises ;
- ingénierie ou études techniques à destination des entreprises ;
- recherche et développement
- technologies de l’information et de la communication.

L'employeur doit <strong>également</strong> remplir <strong>au moins l’une des conditions</strong> suivantes :
- soit relever d'un des <strong>secteurs</strong> suivants :
- 🔬 recherche et développement ;
- 🖥️ technologies de l’information et de la communication ;
- 📷 tourisme, y compris les activités de loisirs s’y rapportant ;
- 🌱 agronutrition ;
- 🌳 environnement ;
- 🔋 énergies renouvelables ;
- soit bénéficier du <strong>régime de « perfectionnement actif »</strong>.
références:
Fiche Urssaf: https://www.urssaf.fr/accueil/employeur/beneficier-exonerations/exonerations-zonees/exoneration-lodeom.html#ancre-calcul-declaration-a-saint-barth
Champ d'application du barème réservé aux employeurs de moins de 11 salariés: https://boss.gouv.fr/portail/accueil/exonerations/exonerations-zonees.html#1560

barème moins de 11 salariés:
titre: Barème pour les employeurs de moins de 11 salariés
formule: entreprise . salariés . effectif < 11
non applicable si: barème compétitivité
formule:
une de ces conditions:
- barèmes . barème moins de 11 salariés
- entreprise . salariés . effectif < 11
non applicable si:
une de ces conditions:
- barème sectoriel
- barème compétitivité
description: |
L’exonération est applicable aux employeurs occupant <strong>moins de 11 salariés</strong>.

Expand All @@ -427,11 +530,14 @@ salarié . cotisations . exonérations . lodeom . zone deux:

barème sectoriel:
titre: Barème d'exonération sectorielle
non applicable si: barème compétitivité
formule:
toutes ces conditions:
- barème moins de 11 salariés = non
- barème compétitivité = non
- secteurs d'activité éligibles = oui
une de ces conditions:
- barèmes . barème sectoriel
- toutes ces conditions:
- barème moins de 11 salariés = non
- barème compétitivité = non
- secteurs d'activité éligibles = oui
description: |
L’exonération est applicable aux employeurs, quel que soit leur effectif, relevant d’un des secteurs d’activité
éligibles au dispositif d’exonération « Lodeom » :
Expand Down Expand Up @@ -465,6 +571,7 @@ salarié . cotisations . exonérations . lodeom . zone deux:
applicable si: entreprise . salariés . effectif < 250
question: Êtes-vous éligible au barème d'exonération renforcée ?
par défaut: non
formule: barèmes . barème renforcé
description: |
Pour bénéficier du barème d'exonération renforcée, les employeurs doivent :
- employer <strong>moins de 250 salariés</strong>,
Expand Down
47 changes: 47 additions & 0 deletions site/cypress/integration/mon-entreprise/lodeom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ describe('Simulateur lodeom', { testIsolation: false }, function () {
})

it('should allow to change time period', function () {
cy.contains('Guadeloupe, Guyane, Martinique, La Réunion').click()
cy.contains('Barème de compétitivité').click()
cy.contains('Exonération annuelle').click()
cy.get(inputSelector).first().type('{selectall}42000')
Expand Down Expand Up @@ -78,7 +79,41 @@ describe('Simulateur lodeom', { testIsolation: false }, function () {
).should('include.text', '978,25 €')
})

it('should allow to select a zone', function () {
cy.contains('Saint-Barthélémy, Saint-Martin').click()
cy.get(
'#salarié___cotisations___exonérations___lodeom___zone_deux___barèmes'
)
.contains('Barème pour les employeurs de moins de 11 salariés')
.click()

cy.get(
'p[id="salarié___cotisations___exonérations___lodeom___montant-value"]'
).should('include.text', '530,25 €')

cy.get(
'#salarié___cotisations___exonérations___lodeom___zone_deux___barèmes'
)
.contains("Barème d'exonération sectorielle")
.click()

cy.get(
'p[id="salarié___cotisations___exonérations___lodeom___montant-value"]'
).should('include.text', '350,35 €')

cy.get(
'#salarié___cotisations___exonérations___lodeom___zone_deux___barèmes'
)
.contains("Barème d'exonération renforcée")
.click()

cy.get(
'p[id="salarié___cotisations___exonérations___lodeom___montant-value"]'
).should('include.text', '644 €')
})

it('should display a custom warning for a remuneration too high', function () {
cy.contains('Guadeloupe, Guyane, Martinique, La Réunion').click()
cy.get(inputSelector).first().type('{selectall}6500')

cy.get('div[id="simulator-legend"]').should(
Expand Down Expand Up @@ -271,6 +306,18 @@ describe('Simulateur lodeom', { testIsolation: false }, function () {

cy.get('@recapTable').should('include.text', 'code 473')
cy.get('@recapTable').should('include.text', 'code 685')

cy.contains('Saint-Barthélémy, Saint-Martin').click()

cy.get('@recapTable').should('include.text', 'code 688')

cy.contains("Barème d'exonération sectorielle").click()

cy.get('@recapTable').should('include.text', 'code 686')

cy.contains('Barème pour les employeurs de moins de 11 salariés').click()

cy.get('@recapTable').should('include.text', 'code 687')
})

it('should be RGAA compliant', function () {
Expand Down
38 changes: 38 additions & 0 deletions site/source/hooks/useZoneLodeom.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { useDispatch } from 'react-redux'

import { useEngine } from '@/components/utils/EngineContext'
import { toOuiNon } from '@/domaine/engine/toOuiNon'
import { batchUpdateSituation } from '@/store/actions/actions'

const zones = ['zone un', 'zone deux']

export type ZoneLodeom = (typeof zones)[number]

type ReturnType = {
currentZone?: ZoneLodeom
updateZone: (zone: ZoneLodeom) => void
}

export const useZoneLodeom = (): ReturnType => {
const engine = useEngine()
const dispatch = useDispatch()
const dottedName = 'salarié . cotisations . exonérations . lodeom'

const currentZone = zones.find((zone) => {
const zoneValue = engine.evaluate(`${dottedName} . ${zone}`).nodeValue

return !!zoneValue
})

const updateZone = (newZone: ZoneLodeom): void => {
const newSituation = zones.reduce((situation, zone) => {
return {
...situation,
[`${dottedName} . ${zone}`]: toOuiNon(zone === newZone),
}
}, {})
dispatch(batchUpdateSituation(newSituation))
}

return { currentZone, updateZone }
}
Loading

0 comments on commit 85d9bc4

Please sign in to comment.