/* @flow */ import { setSituationBranch, startConversation } from 'Actions/actions' import { defineDirectorStatus, isAutoentrepreneur } from 'Actions/companyStatusActions' import classnames from 'classnames' import { T } from 'Components' 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 withSitePaths from 'Components/utils/withSitePaths' import { compose, tryCatch } from 'ramda' import React, { useState } from 'react' import emoji from 'react-easy-emoji' import { connect } from 'react-redux' import { Link } from 'react-router-dom' 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, startConversation: () => void, setSituationBranch: number => void, defineDirectorStatus: string => void, sitePaths: any, isAutoentrepreneur: boolean => void, plafondAutoEntrepreneurDépassé: boolean } type SimulationResult = { retraite: RègleAvecMontant, revenuNetAvantImpôts: RègleAvecMontant, revenuNetAprèsImpôts: RègleAvecMontant, plafondDépassé?: boolean } const SchemeComparaison = ({ /* Own Props */ hideAutoEntrepreneur = false, hideAssimiléSalarié = false, /* Injected Props */ assimiléSalarié, indépendant, autoEntrepreneur, conversationStarted, defineDirectorStatus, isAutoentrepreneur, setSituationBranch, startConversation }: Props) => { const [showMore, setShowMore] = useState(false) return (

{emoji('☂')}{' '} Assimilé salarié Le régime tout compris

{emoji('👩‍🔧')}{' '} {hideAssimiléSalarié ? ( Entreprise Individuelle ) : ( 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)

Couverture accidents du travail

Oui
Non

Assurance maladie

++
+

Indemnités journalières

++
+
)} {!conversationStarted && ( <>

Retraite

+++
++
+
)} {conversationStarted && ( <>

Période

)}
{!conversationStarted ? (

Comparez vos revenus et votre retraite en 1 minute

) : (
)}
{conversationStarted && ( <>

Revenu net après impôts

{assimiléSalarié && ( setSituationBranch(0)} {...assimiléSalarié.revenuNetAprèsImpôts} /> )}
{indépendant && ( setSituationBranch(1)} {...indépendant.revenuNetAprèsImpôts} /> )}
{autoEntrepreneur && ( {autoEntrepreneur.plafondDépassé ? ( 'Plafond de CA dépassé' ) : ( setSituationBranch(2)} {...autoEntrepreneur.revenuNetAprèsImpôts} /> )} )}

Revenu net de cotisations (avant impôts)

{assimiléSalarié && ( setSituationBranch(0)} {...assimiléSalarié.revenuNetAvantImpôts} /> )}
{indépendant && ( setSituationBranch(1)} {...indépendant.revenuNetAvantImpôts} /> )}
{autoEntrepreneur && ( {autoEntrepreneur.plafondDépassé ? ( '—' ) : ( setSituationBranch(2)} {...autoEntrepreneur.revenuNetAvantImpôts} /> )} )}

Votre pension de retraite (estimation)

{assimiléSalarié && assimiléSalarié.retraite.montant !== 0 ? ( setSituationBranch(0)} {...assimiléSalarié.retraite} garder une trace /> ) : ( Pas implémenté )}
{indépendant && indépendant.retraite.montant !== 0 ? ( setSituationBranch(1)} {...indépendant.retraite} /> ) : ( Pas implémenté )}
{autoEntrepreneur && (autoEntrepreneur.plafondDépassé ? ( '—' ) : autoEntrepreneur.retraite.montant !== 0 ? ( setSituationBranch(2)} {...autoEntrepreneur.retraite} /> ) : ( Pas implémenté ))}
)} {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

)} {!hideAutoEntrepreneur && (

Plafond de chiffre d'affaires

Non
  • 70 000 € en services
  • 170 000 € en vente de biens, restauration ou hébergement
)}

Comptabilité

Experte
Complexe
Simple
) } const RuleValueLink = withSitePaths( ({ lien, montant, sitePaths, onClick }: RègleAvecMontant & { sitePaths: any, onClick: () => void }) => ( ) ) export default (compose( withSimulationConfig(ComparaisonConfig), connect( tryCatch( state => ({ conversationStarted: state.conversationStarted, autoEntrepreneur: { retraite: règleAvecMontantSelector(state, { situationBranchName: 'Auto-entrepreneur' })('protection sociale . retraite'), revenuNetAprèsImpôts: règleAvecMontantSelector(state, { situationBranchName: 'Auto-entrepreneur' })('revenu net'), revenuNetAvantImpôts: règleAvecMontantSelector(state, { situationBranchName: 'Auto-entrepreneur' })('auto entrepreneur . revenu net de cotisations'), // $FlowFixMe plafondDépassé: branchAnalyseSelector(state, { situationBranchName: 'Auto-entrepreneur' }).controls?.find( ({ test }) => test.includes && test.includes('base des cotisations > plafond') ) }, indépendant: { retraite: règleAvecMontantSelector(state, { situationBranchName: 'Indépendant' })('protection sociale . retraite'), revenuNetAprèsImpôts: règleAvecMontantSelector(state, { situationBranchName: 'Indépendant' })('revenu net'), revenuNetAvantImpôts: règleAvecMontantSelector(state, { situationBranchName: 'Indépendant' })('indépendant . revenu professionnel') }, assimiléSalarié: { retraite: règleAvecMontantSelector(state, { situationBranchName: 'Assimilé salarié' })('protection sociale . retraite'), revenuNetAprèsImpôts: règleAvecMontantSelector(state, { situationBranchName: 'Assimilé salarié' })('revenu net'), revenuNetAvantImpôts: règleAvecMontantSelector(state, { situationBranchName: 'Assimilé salarié' })('contrat salarié . salaire . net') } }), (e, state) => console.log(e) || { conversationStarted: state.conversationStarted } ), { startConversation, defineDirectorStatus, isAutoentrepreneur, setSituationBranch } ) )(SchemeComparaison): React$Component)