/* @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 sociale à la carte

{emoji('🚶‍♂️')} Auto-entrepreneur Pour créer sans risques

<>

Statuts juridiques possibles

SAS, SASU, SARL (gérant minoritaire)
{hideAssimiléSalarié ? ( EI, EIRL ) : ( EI, EIRL, EURL, SARL (gérant majoritaire) )}
Auto-entreprise
<>

Sécurité sociale

Régime général
Sécurité sociale des indépendants

Couverture accidents du travail

Oui
Non

Assurance maladie{' '} (médicaments, soins, hospitalisations)

Identique pour tous

Mutuelle santé

Obligatoire
Fortement conseillée

Indemnités journalières

+++
++
+

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

ACRE

1 an (exonération partielle de cotisations)
3 ans{' '} (application de taux réduits de cotisations)

Déduction des charges

Oui (régime fiscal du réel)
Non{' '} (mais abattement forfaitaire pour le calcul de l'impôt sur le revenu)
)}

Paiement des cotisations

Mensuel
Provision mensuelle{' '} (avec régularisation après coup en fonction du revenu réel)
Mensuel ou trimestriel

Contrats prévoyance et retraite facultatives déductibles

Oui (sous certaines conditions)
Oui (Loi Madelin)
Non

Paiement de cotisations minimales

Non
Oui
Non

Revenu minimum pour l'ouverture des droits aux prestations

Oui
Non (cotisations minimales obligatoires)
Oui
) : (

Comparaison détaillée

)} {!hideAutoEntrepreneur && (

Plafond de chiffre d'affaires

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

Gestion comptable, sociale, juridique...

Accompagnement fortement conseillé{' '} (expert comptable, comptable, centre de gestion agrée...)
Simplifiée (peut être gérée par l'auto-entrepreneur)
) } 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)