/* @flow */
import { setSituationBranch } from 'Actions/actions'
import {
isAutoentrepreneur,
defineDirectorStatus
} from 'Actions/companyStatusActions'
import PeriodSwitch from 'Components/PeriodSwitch'
import RuleLink from 'Components/RuleLink'
import withSitePaths from 'Components/utils/withSitePaths'
import React from 'react'
import { connect } from 'react-redux'
import { Link } from 'react-router-dom'
import { config } from 'react-spring'
import { branchAnalyseSelector } from 'Selectors/analyseSelectors'
import {
règleAvecMontantSelector,
règleAvecValeurSelector
} from 'Selectors/regleSelectors'
import Animate from 'Ui/animate'
import Montant from 'Ui/Montant'
import { validInputEnteredSelector } from '../selectors/analyseSelectors'
import './ComparativeTargets.css'
import SchemeCard from './ui/SchemeCard'
const connectRègles = (situationBranchName: string) =>
connect(
state => {
return {
revenuDisponible:
validInputEnteredSelector(state) &&
règleAvecMontantSelector(state, {
situationBranchName
})('revenu disponible'),
prélèvements:
validInputEnteredSelector(state) &&
règleAvecValeurSelector(state, {
situationBranchName
})('ratio de prélèvements')
}
},
{
setSituationBranch,
isAutoentrepreneur,
defineDirectorStatus
}
)
const ComparativeTargets = connect(state => {
const analyse = branchAnalyseSelector(state, {
situationBranchName: 'Auto-entrepreneur'
})
return {
plafondAutoEntrepreneurDépassé:
analyse.controls &&
analyse.controls.find(({ test }) =>
test.includes('base des cotisations > plafond')
)
}
})(({ plafondAutoEntrepreneurDépassé }) => (
))
const Indépendant = connectRègles('Indépendant')(
({
revenuDisponible,
prélèvements,
branchIndex,
setSituationBranch,
defineDirectorStatus,
isAutoentrepreneur
}) => (
setSituationBranch(branchIndex)}
amount={revenuDisponible.montant}
amountNotice={}
icon="👩🔧"
amountDesc={}
features={[
'Régime des indépendants',
'Complémentaire santé et prévoyance non incluses',
'Accidents du travail non couverts',
'Retraite faible (41% du dernier brut)',
'Indemnités journalières plus faibles',
'Montant minimum de cotisations',
'Cotisations en décalage de deux ans'
]}
onSchemeChoice={() => {
defineDirectorStatus('SELF_EMPLOYED')
isAutoentrepreneur(false)
}}
/>
)
)
const AssimiléSalarié = connectRègles('Assimilé salarié')(
({
revenuDisponible,
prélèvements,
branchIndex,
setSituationBranch,
defineDirectorStatus
}) => (
setSituationBranch(branchIndex)}
subtitle="Le régime tout compris"
amount={revenuDisponible.montant}
amountNotice={}
featured="Le choix de 58% des dirigeants de sociétés"
icon="☂"
amountDesc={}
features={[
'Régime général',
'Complémentaires santé et prévoyance incluses',
'Accidents du travail couverts',
'Retraite élevée (62 % du dernier brut)',
'Pas de cotisations minimales',
"Seuil pour l'activation des droits (4000€/an)",
'Fiches de paie mensuelles',
'Prélèvement des cotisations à la source'
]}
onSchemeChoice={() => {
defineDirectorStatus('SALARIED')
isAutoentrepreneur(false)
}}
/>
)
)
const AutoEntrepreneur = connectRègles('Auto-entrepreneur')(
({
revenuDisponible,
prélèvements,
setSituationBranch,
isAutoentrepreneur,
branchIndex,
plafondDépassé
}) => {
return (
setSituationBranch(branchIndex)}
disabled={plafondDépassé}
amountDesc={}
icon="🚶♂️"
amountNotice={}
amount={revenuDisponible.montant}
features={[
'Régime des indépendants',
'Pas de déduction des charges',
'Pas de déduction fiscale pour la mutuelle (Madelin)',
"Chiffre d'affaires plafonné",
"Durée de l'ACCRE plus élevée",
'Comptabilité réduite au minimum'
]}
onSchemeChoice={() => {
defineDirectorStatus('SELF_EMPLOYED')
isAutoentrepreneur(true)
}}
/>
)
}
)
const PrélèvementNotice = withSitePaths(
({ prélèvements, sitePaths }) =>
prélèvements && (
<>
soit{' '}
{prélèvements.valeur}
{' '}
de{' '}
prélèvements
>
)
)
export default ComparativeTargets