🐛 Répare la page blanche sur artiste auteur et le CA sur indépendant et SASU
parent
afc7010441
commit
c6a92f3d10
|
@ -22,7 +22,7 @@ artiste-auteur . revenus . BNC:
|
|||
artiste-auteur . revenus . BNC . micro-bnc:
|
||||
non applicable si: contrôle micro-bnc
|
||||
par défaut: oui
|
||||
titre: Souhaitez-vous opter pour le régime micro-BNC ?
|
||||
question: Souhaitez-vous opter pour le régime micro-BNC ?
|
||||
résumé: Avec abattement forfaitaire fiscal de 34 % au titre des frais professionnels
|
||||
|
||||
artiste-auteur . revenus . BNC . contrôle micro-bnc:
|
||||
|
|
|
@ -225,23 +225,27 @@ dirigeant . auto-entrepreneur . cotisations et contributions . contribution form
|
|||
note: |
|
||||
Les taux implémentés sont ceux prélevés par l'Urssaf.
|
||||
produit:
|
||||
assiette: entreprise . chiffre d'affaires
|
||||
taux:
|
||||
variations:
|
||||
- si: entreprise . activité = 'artisanale'
|
||||
alors: 0.3%
|
||||
- si: entreprise . activité . libérale règlementée
|
||||
alors: 0.2%
|
||||
- sinon: 0.1%
|
||||
# dirigeant . auto-entrepreneur . chiffre d'affaires:
|
||||
# question: Quel est votre chiffre d'affaires ?
|
||||
# résumé: Montant total des recettes brutes (hors taxe)
|
||||
# unité: €/an
|
||||
# arrondi: oui
|
||||
# inversion numérique:
|
||||
# avec:
|
||||
# - net de cotisations
|
||||
# - net après impôt
|
||||
composantes:
|
||||
- attributs:
|
||||
nom: revenus BIC
|
||||
assiette:
|
||||
somme:
|
||||
- entreprise . chiffre d'affaires . vente restauration hébergement
|
||||
- entreprise . chiffre d'affaires . prestations de service . BIC
|
||||
taux:
|
||||
variations:
|
||||
- si: entreprise . activité = 'artisanale'
|
||||
alors: 0.3%
|
||||
- sinon: 0.1%
|
||||
- attributs:
|
||||
nom: revenus BNC
|
||||
assiette: entreprise . chiffre d'affaires . prestations de service . BNC
|
||||
taux:
|
||||
variations:
|
||||
- si: entreprise . activité . libérale règlementée
|
||||
alors: 0.2%
|
||||
- sinon: 0.1%
|
||||
|
||||
dirigeant . auto-entrepreneur . cotisations et contributions . cotisations:
|
||||
description: |
|
||||
Les cotisations sociales donnent à l'auto-entrepreneur accès à une
|
||||
|
@ -378,9 +382,9 @@ dirigeant . auto-entrepreneur . impôt . versement libératoire . montant:
|
|||
- assiette: entreprise . chiffre d'affaires . vente restauration hébergement
|
||||
taux: 1%
|
||||
- assiette: entreprise . chiffre d'affaires . prestations de service . BIC
|
||||
abattement: 1.7%
|
||||
taux: 1.7%
|
||||
- assiette: entreprise . chiffre d'affaires . prestations de service . BNC
|
||||
abattement: 2.2%
|
||||
taux: 2.2%
|
||||
|
||||
dirigeant . auto-entrepreneur . net après impôt:
|
||||
titre: revenu net après impôt
|
||||
|
|
|
@ -56,10 +56,19 @@ entreprise . chiffre d'affaires:
|
|||
question: Quel est votre chiffre d'affaires envisagé ?
|
||||
résumé: Montant total des recettes brutes (hors taxe)
|
||||
unité: €/an
|
||||
inversion numérique:
|
||||
avec:
|
||||
- dirigeant . auto-entrepreneur . net de cotisations
|
||||
- dirigeant . auto-entrepreneur . net après impôt
|
||||
variations:
|
||||
- si: dirigeant . auto-entrepreneur
|
||||
alors:
|
||||
inversion numérique:
|
||||
avec:
|
||||
- dirigeant . auto-entrepreneur . net de cotisations
|
||||
- dirigeant . auto-entrepreneur . net après impôt
|
||||
- sinon:
|
||||
somme:
|
||||
- dirigeant . rémunération totale
|
||||
- charges
|
||||
|
||||
|
||||
|
||||
arrondi: oui
|
||||
identifiant court: ca
|
||||
|
@ -70,9 +79,15 @@ entreprise . chiffre d'affaires . vente restauration hébergement:
|
|||
résumé: Chiffre d'affaires hors taxe
|
||||
question: Quel est le chiffre d'affaires issus de la vente de bien, restauration ou hébergement ?
|
||||
unité: €/an
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
taux: activité . proportions . vente restauration hébergement
|
||||
variations:
|
||||
- si: activité . mixte
|
||||
alors:
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
taux: activité . mixte . proportions . vente restauration hébergement
|
||||
- sinon:
|
||||
applicable si: activité . service ou vente = 'vente'
|
||||
valeur: chiffre d'affaires
|
||||
arrondi: oui
|
||||
plancher: 0€/an
|
||||
description: |
|
||||
|
@ -115,9 +130,15 @@ entreprise . chiffre d'affaires . prestations de service . BIC:
|
|||
services qui nécessite plus qu'un ordinateur pour être effectuées.
|
||||
|
||||
**Exemples** : transports, service à la personne, réparation etc.
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
taux: activité . proportions . prestations de service BIC
|
||||
variations:
|
||||
- si: activité . mixte
|
||||
alors:
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
taux: activité . mixte . proportions . prestations de service BIC
|
||||
- sinon:
|
||||
applicable si: activité . service ou vente = 'service'
|
||||
valeur: chiffre d'affaires
|
||||
références:
|
||||
service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32919
|
||||
|
||||
|
@ -135,11 +156,16 @@ entreprise . chiffre d'affaires . prestations de service . BNC:
|
|||
|
||||
**Exemples** : conseil, accompagnement, traduction, développement,
|
||||
formation, enseignement, sportif
|
||||
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
taux: activité . proportions . prestations de service BNC
|
||||
|
||||
variations:
|
||||
- si: activité . mixte
|
||||
alors:
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
taux: activité . mixte . proportions . prestations de service BNC
|
||||
- sinon:
|
||||
applicable si: activité = 'libérale'
|
||||
valeur: chiffre d'affaires
|
||||
|
||||
références:
|
||||
liste des activités libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales
|
||||
|
||||
|
@ -677,28 +703,29 @@ entreprise . activité . mixte:
|
|||
Si votre entreprise a des activités correspondants à plus d'un type de
|
||||
revenus, répondez oui à cette question.
|
||||
|
||||
entreprise . activité . proportions:
|
||||
titre: Part des différentes activités dans le chiffre d'affaires
|
||||
entreprise . activité . mixte . proportions:
|
||||
description: Part des différentes activités dans le chiffre d'affaires
|
||||
titre: proportion activité
|
||||
unité: '%'
|
||||
somme:
|
||||
- nom: prestations de service BIC
|
||||
variations:
|
||||
- si: mixte
|
||||
alors: 1 / 3
|
||||
- si: activité . service ou vente = 'service'
|
||||
alors: 100%
|
||||
par défaut:
|
||||
variations:
|
||||
- si: activité = 'libérale'
|
||||
alors: 0
|
||||
- sinon: 50%
|
||||
- nom: prestations de service BNC
|
||||
variations:
|
||||
- si: mixte
|
||||
alors: 1 / 3
|
||||
- si: activité = 'libérale'
|
||||
alors: 100%
|
||||
par défaut:
|
||||
variations:
|
||||
- si: activité = 'libérale'
|
||||
alors: 2 / 3
|
||||
- sinon: 0
|
||||
- nom: vente restauration hébergement
|
||||
variations:
|
||||
- si: mixte
|
||||
alors: 1 / 3
|
||||
- si: activité . service ou vente = 'vente'
|
||||
alors: 100%
|
||||
par défaut:
|
||||
variations:
|
||||
- si: activité = 'libérale'
|
||||
alors: 1 / 3
|
||||
- sinon: 50%
|
||||
|
||||
|
||||
entreprise . activité . libérale règlementée:
|
||||
|
|
|
@ -19,7 +19,7 @@ export type Action =
|
|||
| typeof updateSituation
|
||||
| typeof updateSituation
|
||||
| typeof updateUnit
|
||||
| typeof updateSituationBatch
|
||||
| typeof batchUpdateSituation
|
||||
>
|
||||
| CompanyCreationAction
|
||||
| CompanyStatusAction
|
||||
|
@ -70,11 +70,14 @@ export const updateSituation = (fieldName: DottedName, value: unknown) =>
|
|||
fieldName,
|
||||
value,
|
||||
} as const)
|
||||
|
||||
export const batchUpdateSituation = (situation: Parameters<Engine<DottedName>['setSituation']>[0]) => ({
|
||||
type: 'BATCH_UPDATE_SITUATION',
|
||||
situation,
|
||||
} as const)
|
||||
|
||||
export const batchUpdateSituation = (
|
||||
situation: Parameters<Engine<DottedName>['setSituation']>[0]
|
||||
) =>
|
||||
({
|
||||
type: 'BATCH_UPDATE_SITUATION',
|
||||
situation,
|
||||
} as const)
|
||||
|
||||
export const updateUnit = (targetUnit: string) =>
|
||||
({
|
||||
|
|
|
@ -62,6 +62,7 @@ type SimulationGoalProps = {
|
|||
small?: boolean
|
||||
appear?: boolean
|
||||
editable?: boolean
|
||||
boolean?: boolean
|
||||
onUpdateSituation?: (
|
||||
name: DottedName,
|
||||
...rest: Parameters<InputProps['onChange']>
|
||||
|
@ -75,6 +76,7 @@ export function SimulationGoal({
|
|||
onUpdateSituation,
|
||||
appear = true,
|
||||
editable = true,
|
||||
boolean = false, //TODO : remove when type inference works in publicodes
|
||||
}: SimulationGoalProps) {
|
||||
const dispatch = useDispatch()
|
||||
const engine = useEngine()
|
||||
|
@ -83,8 +85,7 @@ export function SimulationGoal({
|
|||
const isNotApplicable = UNSAFE_isNotApplicable(engine, dottedName)
|
||||
const evaluation = engine.evaluate({
|
||||
valeur: dottedName,
|
||||
unité: currentUnit,
|
||||
arrondi: 'oui',
|
||||
...(!boolean ? { unité: currentUnit, arrondi: 'oui' } : {}),
|
||||
})
|
||||
const rule = engine.getRule(dottedName)
|
||||
const initialRender = useContext(InitialRenderContext)
|
||||
|
@ -137,10 +138,14 @@ export function SimulationGoal({
|
|||
{ focused: isFocused }
|
||||
)}
|
||||
isTarget
|
||||
modifiers={{
|
||||
unité: currentUnit,
|
||||
arrondi: 'oui',
|
||||
}}
|
||||
modifiers={
|
||||
!boolean
|
||||
? {
|
||||
unité: currentUnit,
|
||||
arrondi: 'oui',
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
dottedName={dottedName}
|
||||
onFocus={() => setFocused(true)}
|
||||
onBlur={() => setFocused(false)}
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
margin-right: -1rem;
|
||||
}
|
||||
.light #targetSelection .targets > li {
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
||||
border-top: 1px dashed var(--darkColor);
|
||||
}
|
||||
.light #targetSelection .targets > li.small-target,
|
||||
.light #targetSelection .targets > li:not(.small-target):first-of-type {
|
||||
|
@ -65,6 +65,9 @@
|
|||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
#targetSelection li:not(.small-target) .header {
|
||||
flex: 1;
|
||||
}
|
||||
#targetSelection .targets > li.small-target .header p {
|
||||
display: none;
|
||||
}
|
||||
|
@ -130,22 +133,23 @@
|
|||
text-align: right;
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
padding: 0.2rem 0.6rem;
|
||||
|
||||
border-radius: 0.3rem;
|
||||
border: 1px solid;
|
||||
font-size: inherit;
|
||||
}
|
||||
|
||||
#targetSelection .targetInput.focused {
|
||||
box-shadow: 0 0 0px 1px white;
|
||||
box-shadow: 0 0 0px 2px white;
|
||||
}
|
||||
|
||||
.light #targetSelection .targetInput {
|
||||
color: var(--darkColor);
|
||||
border-color: var(--darkColor);
|
||||
background: white !important;
|
||||
background: white;
|
||||
}
|
||||
.light #targetSelection .targetInput.focused {
|
||||
box-shadow: 0 0 0px 2px var(--darkColor);
|
||||
}
|
||||
|
||||
.light #targetSelection .optionTitle {
|
||||
color: var(--darkColor);
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
import { explainVariable } from 'Actions/actions'
|
||||
import Overlay from 'Components/Overlay'
|
||||
import { EngineContext } from 'Components/utils/EngineContext'
|
||||
import { DottedName } from 'modele-social'
|
||||
import React, { useContext, useState } from 'react'
|
||||
import emoji from 'react-easy-emoji'
|
||||
import { useDispatch } from 'react-redux'
|
||||
import { DottedName } from 'modele-social'
|
||||
import usePortal from 'react-useportal'
|
||||
import { TrackerContext } from '../utils/withTracker'
|
||||
import './Explicable.css'
|
||||
import usePortal from 'react-useportal'
|
||||
|
||||
export function ExplicableRule({ dottedName }: { dottedName: DottedName }) {
|
||||
const engine = useContext(EngineContext)
|
||||
|
@ -59,6 +59,10 @@ export function Explicable({ children }: { children: React.ReactNode }) {
|
|||
margin-left: 0.3rem !important;
|
||||
vertical-align: middle;
|
||||
font-size: 110% !important;
|
||||
> img {
|
||||
border: 1px solid rgba(255, 255, 255, 0.7) !important;
|
||||
border-radius: 0.1rem;
|
||||
}
|
||||
`}
|
||||
>
|
||||
{emoji('ℹ️')}
|
||||
|
|
|
@ -22,28 +22,21 @@ export default function ArtisteAuteur() {
|
|||
<>
|
||||
<SimulateurWarning simulateur="artiste-auteur" />
|
||||
<SimulationGoals className="light">
|
||||
<SimulationGoal
|
||||
labelWithQuestion
|
||||
dottedName="artiste-auteur . revenus . traitements et salaires"
|
||||
/>
|
||||
<SimulationGoal
|
||||
labelWithQuestion
|
||||
dottedName="artiste-auteur . revenus . BNC . recettes"
|
||||
/>
|
||||
<SimulationGoal dottedName="artiste-auteur . revenus . traitements et salaires" />
|
||||
<SimulationGoal dottedName="artiste-auteur . revenus . BNC . recettes" />
|
||||
<SimulationGoal
|
||||
labelWithQuestion
|
||||
dottedName="artiste-auteur . revenus . BNC . micro-bnc"
|
||||
boolean
|
||||
/>
|
||||
<Warning dottedName="artiste-auteur . revenus . BNC . contrôle micro-bnc" />
|
||||
<Condition expression="artiste-auteur . revenus . BNC . micro-bnc = non">
|
||||
<SimulationGoal
|
||||
labelWithQuestion
|
||||
dottedName="artiste-auteur . revenus . BNC . frais réels"
|
||||
/>
|
||||
<SimulationGoal dottedName="artiste-auteur . revenus . BNC . frais réels" />
|
||||
</Condition>
|
||||
<SimulationGoal
|
||||
labelWithQuestion
|
||||
dottedName="artiste-auteur . cotisations . option surcotisation"
|
||||
boolean
|
||||
/>
|
||||
</SimulationGoals>
|
||||
<CotisationsResult />
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { batchUpdateSituation, updateSituation } from 'Actions/actions'
|
||||
import { batchUpdateSituation } from 'Actions/actions'
|
||||
import { Explicable } from 'Components/conversation/Explicable'
|
||||
import { Condition } from 'Components/EngineValue'
|
||||
import PeriodSwitch from 'Components/PeriodSwitch'
|
||||
import SimulateurWarning from 'Components/SimulateurWarning'
|
||||
|
@ -7,6 +8,7 @@ import { SimulationGoal, SimulationGoals } from 'Components/SimulationGoals'
|
|||
import StackedBarChart from 'Components/StackedBarChart'
|
||||
import { ThemeColorsContext } from 'Components/utils/colors'
|
||||
import { useEngine } from 'Components/utils/EngineContext'
|
||||
import { Markdown } from 'Components/utils/markdown'
|
||||
import { serializeEvaluation } from 'publicodes'
|
||||
import { default as React, useCallback, useContext } from 'react'
|
||||
import { Trans, useTranslation } from 'react-i18next'
|
||||
|
@ -15,11 +17,11 @@ import { situationSelector } from 'Selectors/simulationSelectors'
|
|||
import AidesCovid from '../../components/simulationExplanation/AidesCovid'
|
||||
|
||||
const proportions = {
|
||||
'entreprise . activité . proportions . prestations de service BIC':
|
||||
'entreprise . activité . mixte . proportions . prestations de service BIC':
|
||||
"entreprise . chiffre d'affaires . prestations de service . BIC",
|
||||
'entreprise . activité . proportions . prestations de service BNC':
|
||||
'entreprise . activité . mixte . proportions . prestations de service BNC':
|
||||
"entreprise . chiffre d'affaires . prestations de service . BNC",
|
||||
'entreprise . activité . proportions . vente restauration hébergement':
|
||||
'entreprise . activité . mixte . proportions . vente restauration hébergement':
|
||||
"entreprise . chiffre d'affaires . vente restauration hébergement",
|
||||
} as const
|
||||
function useAdjustProportions(): () => void {
|
||||
|
@ -110,14 +112,17 @@ export default function AutoEntrepreneur() {
|
|||
|
||||
function ActivitéMixte({ defaultChecked }: { defaultChecked: boolean }) {
|
||||
const dispatch = useDispatch()
|
||||
const engine = useEngine()
|
||||
const situation = useSelector(situationSelector)
|
||||
const rule = useEngine().getRule('entreprise . activité . mixte')
|
||||
|
||||
const onMixteChecked = useCallback(
|
||||
(checked: boolean) => {
|
||||
dispatch(
|
||||
updateSituation(
|
||||
'entreprise . activité . mixte',
|
||||
checked ? 'oui' : 'non'
|
||||
batchUpdateSituation(
|
||||
Object.values(proportions).reduce(
|
||||
(acc, dottedName) => ({ ...acc, [dottedName]: undefined }),
|
||||
{ 'entreprise . activité . mixte': checked ? 'oui' : 'non' }
|
||||
)
|
||||
)
|
||||
)
|
||||
},
|
||||
|
@ -137,12 +142,15 @@ function ActivitéMixte({ defaultChecked }: { defaultChecked: boolean }) {
|
|||
justify-content: flex-end;
|
||||
`}
|
||||
>
|
||||
Activité mixte {' '}
|
||||
<input
|
||||
type="checkbox"
|
||||
defaultChecked={defaultChecked}
|
||||
onChange={(evt) => onMixteChecked(evt.target.checked)}
|
||||
/>{' '}
|
||||
/>
|
||||
Activité mixte
|
||||
<Explicable>
|
||||
<Markdown source={`## ${rule.title}\n ${rule.rawNode.description}`} />
|
||||
</Explicable>
|
||||
</label>
|
||||
</li>
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue