/* @flow */
import { startConversation } from 'Actions/actions'
import {
defineDirectorStatus,
isAutoentrepreneur
} from 'Actions/companyStatusActions'
import classnames from 'classnames'
import PeriodSwitch from 'Components/PeriodSwitch'
import Simulation from 'Components/Simulation'
// $FlowFixMe
import ComparaisonConfig from 'Components/simulationConfigs/rémunération-dirigeant.yaml'
import withSimulationConfig from 'Components/simulationConfigs/withSimulationConfig'
import { compose, map, tryCatch } from 'ramda'
import React, { useState } from 'react'
import emoji from 'react-easy-emoji'
import { connect } from 'react-redux'
import { branchAnalyseSelector } from 'Selectors/analyseSelectors'
import { règleAvecMontantSelector } from 'Selectors/regleSelectors'
import Animate from 'Ui/animate'
import AnimatedTargetValue from 'Ui/AnimatedTargetValue'
import './SchemeComparaison.css'
import type { RègleAvecMontant } from 'Types/RegleTypes'
type OwnProps = {
hideAutoEntrepreneur?: boolean,
hideAssimiléSalarié?: boolean
}
type Props = OwnProps & {
assimiléSalarié: ?SimulationResult,
indépendant: ?SimulationResult,
autoEntrepreneur: ?SimulationResult,
conversationStarted: boolean,
noUserInput: boolean,
startConversation: () => void,
setSituationBranch: () => void,
defineDirectorStatus: string => void,
isAutoentrepreneur: boolean => void,
plafondAutoEntrepreneurDépassé: boolean
}
type SimulationResult = {
retraite: RègleAvecMontant,
revenuNet: RègleAvecMontant
}
const SchemeComparaison = ({
/* Own Props */
hideAutoEntrepreneur = false,
hideAssimiléSalarié = false,
/* Injected Props */
assimiléSalarié,
indépendant,
plafondAutoEntrepreneurDépassé,
autoEntrepreneur,
conversationStarted,
defineDirectorStatus,
isAutoentrepreneur,
// setSituationBranch,
startConversation
}: Props) => {
const [showMore, setShowMore] = useState(false)
return (
{emoji('☂')}{' '}
Assimilé salarié
Le régime tout compris
{emoji('👩🔧')}{' '}
Indépendant
La protection à la carte
{emoji('🚶♂️')}{' '}
Auto-entrepreneur
Pour les petites activités
Statuts juridiques possibles
SAS, SASU, SARL minoritaire
EI, EURL, SARL majoritaire
Micro-entreprise
{!hideAssimiléSalarié && (
<>
Sécurité sociale
Régime général
Sécurité sociale des indépendants (SSI)
Accidents du travail couverts
Oui
Non
Assurance maladie
++
+
Indémnités journalières
++
+
>
)}
{!hideAutoEntrepreneur && (
<>
Plafond de chiffre d'affaire
Non
- 70 000 € en services
- 170 000 € en vente de biens, restauration ou hébergement
>
)}
{!conversationStarted && (
<>
Retraite
++
+
−
>
)}
{conversationStarted && (
<>
Période
>
)}
{!conversationStarted ? (
<>
Comparez vos revenus et votre retraite en 1 minute
>
) : (
)}
{conversationStarted && (
<>
Revenu net après impôts
{autoEntrepreneur && (
{plafondAutoEntrepreneurDépassé ? (
'Plafond de CA dépassé'
) : (
)}
)}
Retraite (estimation)
{indépendant && indépendant.retraite.montant !== 0 ? (
) : (
Pas implémenté
)}
{autoEntrepreneur && (
)}
>
)}
{showMore ? (
<>
{!hideAutoEntrepreneur && (
<>
ACCRE
Une année, plafonné
3 années, progressif, non plafonné
Déduction des charges
Régime réel
Abattement forfaitaire
>
)}
Paiment des cotisations
Mensuel (à la source)
Annuel avec deux ans de décalage
Mensuel ou trimestriel
Complémentaires retraite et santé déductibles
Oui (jusqu'à 50%)
Oui (Loi Madelin)
Non
Cotisations minimales
Non
Oui
Non
Seuil d'activation des droits
Oui
Non
Oui
>
) : (
<>
Comparaison détaillée
>
)}
Comptabilité
Expert
Compliquée
Simplifiée
)
}
export default (compose(
connect(
state => {
const analyse = branchAnalyseSelector(state, {
situationBranchName: 'Auto-entrepreneur'
})
return {
plafondAutoEntrepreneurDépassé:
analyse.controls &&
analyse.controls.find(({ test }) =>
test.includes('base des cotisations > plafond')
),
conversationStarted: state.conversationStarted,
...map(
situationBranchName =>
tryCatch(
() => ({
retraite: règleAvecMontantSelector(state, {
situationBranchName
})('protection sociale . retraite'),
revenuNet: règleAvecMontantSelector(state, {
situationBranchName
})('revenu net')
}),
() => null
)(),
{
assimiléSalarié: 'Assimilé salarié',
indépendant: 'Indépendant',
autoEntrepreneur: 'Auto-entrepreneur'
}
)
}
},
{ startConversation, defineDirectorStatus, isAutoentrepreneur }
),
withSimulationConfig(ComparaisonConfig)
)(SchemeComparaison): React$Component)