1
0
Fork 0
mirror of https://github.com/betagouv/mon-entreprise synced 2025-03-13 00:25:04 +00:00

feat(économie-collaborative): ne compte pas les 23_000 premiers euros la première année

This commit is contained in:
Jalil Arfaoui 2025-02-10 16:33:13 +01:00
parent 21d4412701
commit 455eee1cbf
7 changed files with 121 additions and 40 deletions

View file

@ -10,8 +10,8 @@ location de logement meublé . courte durée:
cotisations:
titre: Cotisations dues pour la location dun logement meublé de courte durée
variations:
- si: recettes < 23000 €/an
alors: 0
- si: recettes < seuil de professionalisation
alors: 0 €/an
- sinon:
produit:
- assiette
@ -21,8 +21,20 @@ location de logement meublé . courte durée:
avec:
assiette:
valeur: recettes
variations:
- si: première année
alors: assiette première année
- sinon: assiette normale
abattement: 60%
unité: €/an
avec:
assiette première année:
formule: recettes - seuil de professionalisation
plancher: 0
unité: €/an
assiette normale: recettes
taux de cotisation:
titre: Taux de cotisation au régime général
description: Taux de cotisation pour la location dun logement meublé de courte durée au régime général

View file

@ -1,7 +1,21 @@
location de logement meublé:
avec:
date de début d'activité:
par défaut: 01/01/2024
question: Quand avez-vous commencé la location de meublé ?
type: date
première année:
formule: période . début d'année <= date de début d'activité
seuil de professionalisation: 23000 €/an
cotisations:
non applicable si:
est non applicable: location de logement meublé . courte durée . cotisations
somme:
- courte durée . cotisations
revenu net:
formule: location de logement meublé . courte durée . recettes - cotisations

View file

@ -24,10 +24,10 @@ describe('Simulateur de location de meublé', () => {
it('chiffre les cotisations quand on saisi des revenus', () => {
cy.get('input#location_de_logement_meublé___courte_durée___recettes').type(
'1000'
'25000'
)
cy.get('input#location_de_logement_meublé___cotisations')
cy.get('#location_de_logement_meublé___cotisations-value')
.should('be.visible')
.should('have.lengthOf.at.least', 1)
})
@ -37,7 +37,7 @@ describe('Simulateur de location de meublé', () => {
'78000'
)
cy.get('input#location_de_logement_meublé___cotisations').should(
cy.get('#location_de_logement_meublé___cotisations-value').should(
'not.exist'
)

View file

@ -7100,37 +7100,66 @@ impôt . taux personnalisé:
question.fr: Quel est votre taux de prélèvement à la source ?
titre.en: personalized rate
titre.fr: taux personnalisé
location de logement:
titre.en: '[automatic] housing rental'
titre.fr: location de logement
location de logement . meublé:
location de logement meublé:
avec:
cotisations:
titre.en: '[automatic] contributions'
titre.fr: cotisations
date de début d'activité:
question.en: '[automatic] When did you start renting out furnished accommodation?'
question.fr: Quand avez-vous commencé la location de meublé ?
titre.en: '[automatic] start date'
titre.fr: date de début d'activité
première année:
titre.en: '[automatic] first year'
titre.fr: première année
revenu net:
titre.en: '[automatic] net income'
titre.fr: revenu net
seuil de professionalisation:
titre.en: '[automatic] professionalization threshold'
titre.fr: seuil de professionalisation
titre.en: '[automatic] rental of furnished accommodation'
titre.fr: location de logement meublé
location de logement meublé . courte durée:
avec:
cotisations:
avec:
assiette:
avec:
assiette normale:
titre.en: '[automatic] standard plate'
titre.fr: assiette normale
assiette première année:
titre.en: '[automatic] first-year base'
titre.fr: assiette première année
titre.en: '[automatic] plate'
titre.fr: assiette
taux de cotisation:
description.en:
'[automatic] Contribution rates for short-term furnished
accommodation under the general scheme'
description.fr:
Taux de cotisation pour la location dun logement meublé de
courte durée au régime général
titre.en: '[automatic] General scheme contribution rates'
titre.fr: Taux de cotisation au régime général
titre.en:
'[automatic] Contributions payable for short-term furnished rental
accommodation'
titre.fr: Cotisations dues pour la location dun logement meublé de courte durée
plafond de loyer autorisé pour le régime général:
titre.en: '[automatic] authorized rent ceiling for the general scheme'
titre.fr: plafond de loyer autorisé pour le régime général
titre.en: '[automatic] furnished'
titre.fr: meublé
location de logement . meublé . cotisations:
avec:
assiette:
titre.en: '[automatic] plate'
titre.fr: assiette
taux de cotisation:
description.en: '[automatic] Contribution rates for short-term furnished
accommodation under the general scheme'
description.fr:
Taux de cotisation pour la location dun logement meublé de
courte durée au régime général
titre.en: '[automatic] General scheme contribution rates'
titre.fr: Taux de cotisation au régime général
titre.en: '[automatic] Contributions payable for renting furnished accommodation'
titre.fr: Cotisations dues pour la location dun logement meublé
location de logement . meublé . loyer:
titre.en: '[automatic] rent'
titre.fr: loyer
location de logement . meublé . loyer . net:
titre.en: '[automatic] Net rent'
titre.fr: Loyer net
recettes:
résumé.en: '[automatic] Receipts for short-term furnished accommodation or
short-term classified tourist accommodation'
résumé.fr: Recettes pour un logement meublé de courte durée ou de tourisme
classé de courte durée
titre.en: '[automatic] revenues'
titre.fr: recettes
titre.en: '[automatic] short term'
titre.fr: courte durée
plafond sécurité sociale:
avec:
N-1:

View file

@ -9,6 +9,7 @@ import Simulation, {
SimulationGoal,
SimulationGoals,
} from '@/components/Simulation'
import { SimulationValue } from '@/components/Simulation/SimulationValue'
import { useEngine } from '@/components/utils/EngineContext'
export default function LocationDeMeublé() {
@ -43,10 +44,8 @@ export default function LocationDeMeublé() {
dottedName="location de logement meublé . cotisations"
engine={engine}
>
<SimulationGoal
dottedName="location de logement meublé . cotisations"
small
/>
<SimulationValue dottedName="location de logement meublé . cotisations" />
<SimulationValue dottedName="location de logement meublé . revenu net" />
</WhenApplicable>
</SimulationGoals>
</Simulation>

View file

@ -1,8 +1,10 @@
import { SimulationConfig } from '@/domaine/SimulationConfig'
export const configLocationDeMeublé: SimulationConfig = {
'objectifs exclusifs': [],
objectifs: [],
'objectifs exclusifs': [
'location de logement meublé . courte durée . recettes',
],
objectifs: ['location de logement meublé . cotisations'],
'unité par défaut': '€/an',
situation: {},
}

View file

@ -2,6 +2,13 @@ import rules, { DottedName } from 'modele-social'
import Engine from 'publicodes'
import { beforeEach, describe, expect, it } from 'vitest'
import { Situation } from '@/domaine/Situation'
const situationParDéfaut = {
date: '01/01/2024à',
"location de logement meublé . date de début d'activité": '01/01/2022',
} satisfies Situation
describe('Économie collaborative', () => {
describe('Location de meublé', () => {
describe('Courte durée', () => {
@ -12,6 +19,7 @@ describe('Économie collaborative', () => {
it('applique correctement labattement et le taux de cotisation', () => {
const e = engine.setSituation({
...situationParDéfaut,
'location de logement meublé . courte durée . recettes': '40000 €/an',
})
expect(e).toEvaluate(
@ -22,12 +30,14 @@ describe('Économie collaborative', () => {
it('applique le régime général jusquà 77 700 €', () => {
const e = engine.setSituation({
...situationParDéfaut,
'location de logement meublé . courte durée . recettes': '77700 €/an',
})
expect(e).toBeApplicable('location de logement meublé . cotisations')
})
it('napplique pas le régime général si plus de 77 700 €', () => {
it('nappliquelm leblance pas le régime général si plus de 77 700 €', () => {
const e = engine.setSituation({
...situationParDéfaut,
'location de logement meublé . courte durée . recettes': '77701 €/an',
})
@ -37,11 +47,26 @@ describe('Économie collaborative', () => {
})
it('ne compte aucune cotisation en-dessous de 23 000 € de recettes', () => {
const e = engine.setSituation({
...situationParDéfaut,
'location de logement meublé . courte durée . recettes': '22000 €/an',
})
expect(e).toEvaluate('location de logement meublé . cotisations', 0)
})
it('ne compte pas les 23 000 premiers € de recettes la première année', () => {
const e = engine.setSituation({
...situationParDéfaut,
'location de logement meublé . courte durée . recettes': '24000 €/an',
"location de logement meublé . date de début d'activité":
'01/02/2025',
})
const cotisations = e.evaluate(
'location de logement meublé . cotisations'
).nodeValue
expect(cotisations).toBeLessThan(24_000 - 23_000)
})
})
})
})