👽 ajoute la traduction pour la page des démarches d'embauche

pull/418/head
Johan Girod 2018-11-08 11:45:59 +01:00
parent 6d147c7c08
commit cb10477796
8 changed files with 278 additions and 112 deletions

View File

@ -232,7 +232,11 @@ piedDePage: This website is provided by the <1>URSSAF</1>, the French social sec
entreprise:
existeDéjà: My company is already registered with the French Administration
tâches:
intro: This checklist will guide you throughout all the necessary steps to register your
page:
description: A complete todo list to help you create a {{companyStatus}} with the French administration.`
titre: Create a {{companyStatus}} in France
titre: Create a <1>{{companyStatus}}</1>
intro: This todo list will guide you throughout all the necessary steps to register your
titre1: Needed for registration
nom:
titre: Find a corporate name
@ -426,3 +430,50 @@ gérant minoritaire:
<0>Some special rules apply depending on the amount of shares owned by the director.</0><1><0><0>Chairman</0>: The director is in majority, or is part of a managing board that is in majority.</0><1><0>Managing director</0>: The director is in minority (or equality), or is part of a managing board that is in minority (or equality).</1></1>
Gérant majoritaire: Chairman
Gérant minoritaire: Managing director
Plus d'informations: More information (fr)
embauche:
tâches:
page:
titre: >
Hiring procedure in France
description: All the necessary steps to hire your first employee in France.
titre: Hiring process checklist
description: All the necessary steps to hire your first employee.
contrat:
titre: Sign an employment contract with your employee
dpae:
titre: Declare your hiring t o the social administration
description: >
This can be done through the form called DPAE, must be completed
within 8 days before any hiring, and can <2>be done online (Fr)</2>
logiciel de paie:
titre: Choose a payslip software
description: >
With fewer than 20 employees, payslips and declarations can be
handled online by the <2> Tese (Fr)</2>, a tool developped by the french
social administration. You can also use <5>a private payslip software (Fr)</5>
registre:
titre: Keep an updated staff register
pension:
titre: Contact your assigned compulsory complementary pension institution
description: Find your pension institute (Fr)
complémentaire santé:
titre: Pick a private complementary health insurance
description: >
You must cover your employees with the private complementary health
insurance ("complémentaire santé" or colloquially "mutuelle" in
French) of your choice as long as it provides a set of minimum
guarantees. The employer must pay at least half of the package.
medecine:
titre: Register to a work medicine office
description: Don't forget to plan an initial appointment for each new hire.
chaque mois: >
<0>Then each month</0>
<1>
<0>Compute the individual social contributions (using the chosen payslip software)</0>
<1>Declare the contributions through the DSN, the new online declaration system</1>
<2>Deliver the standardised payslip to your employee</2>
</1>
<2>Get an example payslip</2>

View File

@ -6,10 +6,11 @@ import { connect } from 'react-redux'
import { Link } from 'react-router-dom'
import Animate from 'Ui/animate'
import siret from './siret.jpg'
import type { TFunction } from 'react-i18next'
type Props = {
companyStatusChoice: string,
t: (string, string) => string
t: TFunction
}
const AfterRegistration = ({ t, companyStatusChoice }: Props) => (

View File

@ -4,15 +4,18 @@ import {
initializeCompanyCreationChecklist
} from 'Actions/companyCreationChecklistActions'
import { goToCompanyStatusChoice } from 'Actions/companyStatusActions'
import Scroll from 'Components/utils/Scroll'
import { React, T } from 'Components'
import Scroll from 'Components/utils/Scroll'
import { compose } from 'ramda'
import Helmet from 'react-helmet'
import { translate } from 'react-i18next'
import { connect } from 'react-redux'
import { Link } from 'react-router-dom'
import * as Animate from 'Ui/animate'
import { CheckItem, Checklist } from 'Ui/Checklist'
import StatusDescription from './StatusDescription'
import type { Match } from 'react-router'
import type { TFunction } from 'react-i18next'
type Props = {
statusChooserCompleted: boolean,
@ -20,6 +23,7 @@ type Props = {
onChecklistInitialization: (string, Array<string>) => void,
onStatusChange: () => void,
onItemCheck: (name: string, checked: boolean) => void,
t: TFunction,
companyCreationChecklist: { [string]: boolean }
}
@ -39,17 +43,27 @@ const CreateCompany = ({
return (
<Animate.fromBottom>
<Helmet>
<title>Create a {match.params.status}</title>
<title>
{t(['entreprise.tâches.page.titre', 'Créer une {{companyStatus}}'], {
companyStatus: match.params.status
})}
</title>
<meta
name="description"
content={`A complete checklist to help you create a company with the ${
match.params.status
} status with the French administration.`}
content={t(
[
'entreprise.tâches.page.description',
`Une liste complète des démarches à faire pour vous aider à créer une {{companyStatus}} auprès de l'administration française.`
],
{ companyStatus: match.params.status }
)}
/>
</Helmet>
<Scroll.toTop />
<h1>
<T>Créer une</T> {match.params.status}{' '}
<T k="entreprise.tâches.titre">
Créer une {{ companyStatus: match.params.status }}
</T>
</h1>
{!statusChooserCompleted && (
<>
@ -376,17 +390,20 @@ const CreateCompany = ({
</Animate.fromBottom>
)
}
export default connect(
state => ({
companyCreationChecklist: state.inFranceApp.companyCreationChecklist,
statusChooserCompleted:
Object.keys(state.inFranceApp.companyLegalStatus).length !== 0
}),
{
onChecklistInitialization: initializeCompanyCreationChecklist,
onItemCheck: checkCompanyCreationItem,
onStatusChange: goToCompanyStatusChoice
}
export default compose(
translate(),
connect(
state => ({
companyCreationChecklist: state.inFranceApp.companyCreationChecklist,
statusChooserCompleted:
Object.keys(state.inFranceApp.companyLegalStatus).length !== 0
}),
{
onChecklistInitialization: initializeCompanyCreationChecklist,
onItemCheck: checkCompanyCreationItem,
onStatusChange: goToCompanyStatusChoice
}
)
)(CreateCompany)
let StatutsExample = ({ status }) => (

View File

@ -7,10 +7,11 @@ import { translate } from 'react-i18next'
import { connect } from 'react-redux'
import { SkipButton } from 'Ui/Button'
import type { DirectorStatus } from 'Types/companyTypes'
import type { TFunction } from 'react-i18next'
type Props = {
defineDirectorStatus: (?DirectorStatus) => void,
t: (string, string) => string
t: TFunction
}
const DefineDirectorStatus = ({ defineDirectorStatus, t }: Props) => (
<>

View File

@ -1,22 +1,26 @@
/* @flow */
import { companyIsMicroenterprise } from 'Actions/companyStatusActions'
import { React, T } from 'Components'
import { translate } from 'react-i18next'
import { compose } from 'ramda'
import Helmet from 'react-helmet'
import { translate } from 'react-i18next'
import { connect } from 'react-redux'
import { SkipButton } from 'Ui/Button'
import {compose} from 'ramda'
import type { TFunction } from 'react-i18next'
type Props = {
companyIsMicroenterprise: (?boolean) => void,
t: (string, string) => string,
t: TFunction
}
const Microenterprise = ({ companyIsMicroenterprise, t }: Props) => (
<>
<Helmet>
<title>
{t('microentreprise.page.titre','Différence entre microentreprise et entreprise individuelle')}
{t(
'microentreprise.page.titre',
'Différence entre microentreprise et entreprise individuelle'
)}
</title>
<meta
name="description"
@ -31,28 +35,50 @@ const Microenterprise = ({ companyIsMicroenterprise, t }: Props) => (
}
/>
</Helmet>
<h2><T k="microentreprise.titre">Micro-enterprise ou entreprise individuelle (EI) ?</T></h2>
<h2>
<T k="microentreprise.titre">
Micro-enterprise ou entreprise individuelle (EI) ?
</T>
</h2>
<T k="microentreprise.description">
<p>
La micro-entreprise est un régime simplifié de déclaration et de paiement,
pour lequel l'impôt et les cotisations sociales sont basés sur le chiffre d'affaires réalisé chaque mois.
Disponible pour les entreprises dont le chiffre d'affaires annuel ne dépasse pas 70.000 pour les prestataires de services
ou 170.000 lorsque l'activité principale est la vente de biens, la restauration ou la fourniture de logements.
</p>
<p>
C'est un choix intéressant si :
</p>
<ul>
<li>Vous n'avez pas besoin de beaucoup de capital et de dépenses importantes pour mener votre activité</li>
<li>Vous voulez tester la viabilité de votre modèle, ou prévoyez de rester petits</li>
<li>Vous voulez la quantité minimale de paperasse pour commencer</li>
</ul>
<p>
<strong>Note</strong> : Certaines activités sont exclus de ce statut (<a href="https://www.afecreation.fr/pid10375/pour-quelles-activites.html#principales-exclusions"> voir la liste</a>). Certaines activités sont réglementées avec une qualification ou une expérience professionnelle (<a href="https://www.afecreation.fr/pid316/activites-reglementees.html">voir la liste</a>).
</p>
<p>
Pour tous les autres cas, il est conseillé de choisir le statut standard, qui est <strong>l'Entreprise Individuelle</strong>.
</p>
<p>
La micro-entreprise est un régime simplifié de déclaration et de
paiement, pour lequel l'impôt et les cotisations sociales sont basés sur
le chiffre d'affaires réalisé chaque mois. Disponible pour les
entreprises dont le chiffre d'affaires annuel ne dépasse pas 70.000
pour les prestataires de services ou 170.000 lorsque l'activité
principale est la vente de biens, la restauration ou la fourniture de
logements.
</p>
<p>C'est un choix intéressant si :</p>
<ul>
<li>
Vous n'avez pas besoin de beaucoup de capital et de dépenses
importantes pour mener votre activité
</li>
<li>
Vous voulez tester la viabilité de votre modèle, ou prévoyez de rester
petits
</li>
<li>Vous voulez la quantité minimale de paperasse pour commencer</li>
</ul>
<p>
<strong>Note</strong> : Certaines activités sont exclus de ce statut (
<a href="https://www.afecreation.fr/pid10375/pour-quelles-activites.html#principales-exclusions">
{' '}
voir la liste
</a>
). Certaines activités sont réglementées avec une qualification ou une
expérience professionnelle (
<a href="https://www.afecreation.fr/pid316/activites-reglementees.html">
voir la liste
</a>
).
</p>
<p>
Pour tous les autres cas, il est conseillé de choisir le statut
standard, qui est <strong>l'Entreprise Individuelle</strong>.
</p>
</T>
<div className="ui__ answer-group">
<button
@ -74,7 +100,10 @@ const Microenterprise = ({ companyIsMicroenterprise, t }: Props) => (
</>
)
export default compose(translate(), connect(
null,
{ companyIsMicroenterprise }
))(Microenterprise)
export default compose(
translate(),
connect(
null,
{ companyIsMicroenterprise }
)
)(Microenterprise)

View File

@ -6,10 +6,11 @@ import Helmet from 'react-helmet'
import { translate } from 'react-i18next'
import { connect } from 'react-redux'
import { SkipButton } from 'Ui/Button'
import type { TFunction } from 'react-i18next'
type Props = {
directorIsInAMinority: (?boolean) => void,
t: (string, string) => string
t: TFunction
}
const MinorityDirector = ({ directorIsInAMinority, t }: Props) => (

View File

@ -10,6 +10,8 @@ import type { RouterHistory } from 'react-router'
import {compose} from 'ramda'
import type { LegalStatus } from 'Selectors/companyStatusSelectors'
import withLanguage from 'Components/utils/withLanguage'
import type { TFunction } from 'react-i18next'
const setMainStatus = () => {}
type Props = {
@ -17,12 +19,12 @@ type Props = {
possibleStatus: { [LegalStatus]: boolean },
setMainStatus: LegalStatus => void,
language: string,
t: (string, string) => string,
t: TFunction
}
const StatusButton = ({ status }: { status: LegalStatus }) => (
<Link to={`/company/create-${status}`} className="ui__ button">
<T>Créer une</T> <strong>{status}</strong>
<T>Créer une</T> {status}
</Link>
)

View File

@ -3,8 +3,10 @@ import {
checkHiringItem,
initializeHiringChecklist
} from 'Actions/hiringChecklistAction'
import React from 'react'
import { React, T } from 'Components'
import { compose } from 'ramda'
import Helmet from 'react-helmet'
import { translate } from 'react-i18next'
import { connect } from 'react-redux'
import { Link } from 'react-router-dom'
import Animate from 'Ui/animate'
@ -13,25 +15,41 @@ import { CheckItem, Checklist } from 'Ui/Checklist'
const HiringProcess = ({
onChecklistInitialization,
onItemCheck,
hiringChecklist
hiringChecklist,
t
}) => (
<Animate.fromBottom>
<Helmet>
<title>Hiring process in France: the complete checklist</title>
<title>
{t(['embauche.tâches.page.titre', `Les formalités pour embaucher`])}
</title>
<meta
name="description"
content="All the necessary steps to hire your first employee in France."
content={t(
'embauche.tâches.page.description',
`Toutes les démarches nécessaires à l'embauche de votre premier salarié.`
)}
/>
</Helmet>
<h1>Hiring process checklist</h1>
<p>The necessary steps to hire your first employee.</p>
<h1>
<T k="embauche.tâches.titre">Les formalités pour embaucher</T>
</h1>
<p>
<T k="embauche.tâches.description">
Toutes les étapes nécessaires à l'embauche de votre premier employé.
</T>
</p>
<Checklist
onInitialization={onChecklistInitialization}
onItemCheck={onItemCheck}
defaultChecked={hiringChecklist}>
<CheckItem
name="contract"
title="Sign an employment contract with your employee"
title={
<T k="embauche.tâches.contrat.titre">
Signer un contrat de travail avec votre employé
</T>
}
explanations={
<p>
<a
@ -39,69 +57,93 @@ const HiringProcess = ({
href="https://www.service-public.fr/particuliers/vosdroits/N19871"
target="_blank">
{' '}
More information (Fr)
<T>Plus d'informations</T>
</a>
</p>
}
/>
<CheckItem
name="dpae"
title="Declare your hiring to the social administration"
title={
<T k="embauche.tâches.dpae.titre">
Déclarez votre embauche à l'administration sociale
</T>
}
explanations={
<p>
This can be done through the form called DPAE, must be completed
within 8 days before any hiring, and can{' '}
<a
href="https://www.due.urssaf.fr/declarant/index.jsf"
target="_blank">
be done online (Fr)
</a>
<T k="embauche.tâches.dpae.description">
Ceci peut être fait par le biais du formulaire appelé DPAE, doit
être complété dans les 8 jours avant toute embauche, et peut{' '}
<a
href="https://www.due.urssaf.fr/declarant/index.jsf"
target="_blank">
être effectué en ligne
</a>
.
</T>
</p>
}
/>
<CheckItem
name="paySoftware"
title="Choose a payslip software"
title={
<T k="embauche.tâches.logiciel de paie.titre">
Choisir un logiciel de paie
</T>
}
explanations={
<p>
With fewer than 20 employees, payslips and declarations can be
handled online by the{' '}
<a href="http://www.letese.urssaf.fr" target="_blank">
Tese (Fr)
</a>
. In any case, you can use{' '}
<a
href="http://www.dsn-info.fr/convention-charte.htm"
target="_blank">
private payslip software (Fr)
</a>
<T k="embauche.tâches.logiciel de paie.description">
Avec moins de 20 employés, les fiches de paie et les déclarations
peuvent être traitées en ligne par le{' '}
<a href="http://www.letese.urssaf.fr" target="_blank">
Tese (Fr)
</a>
. Vous pouvez aussi utiliser un{' '}
<a
href="http://www.dsn-info.fr/convention-charte.htm"
target="_blank">
logiciel de paie privé
</a>
</T>
</p>
}
/>
<CheckItem
name="registre"
title="Keep an updated staff register"
title={
<T k="embauche.tâches.registre.titre">
Tenir un registre des employés à jour
</T>
}
explanations={
<p>
<a
href="https://www.service-public.fr/professionnels-entreprises/vosdroits/F1784"
className="ui__ button"
target="_blank">
More information (Fr)
<T>Plus d'informations</T>
</a>
</p>
}
/>
<CheckItem
name="complementaryPension"
title="Contact your assigned compulsory complementary pension institution"
title={
<T k="embauche.tâches.pension.titre">
Prendre contact avec l'institution de prévoyance complémentaire
obligatoire qui vous est assignée
</T>
}
explanations={
<p>
<a
href="https://www.espace-entreprise.agirc-arrco.fr/simape/#/donneesDep"
className="ui__ button"
target="_blank">
Find your pension institute (Fr)
<T k="embauche.tâches.pension.description">
Trouvez votre institut de prévoyance
</T>
</a>
{/* // The AGIRC-ARRCO complementary pension is mandatory. Those are only federations,{' '} */}
</p>
@ -109,44 +151,66 @@ const HiringProcess = ({
/>
<CheckItem
name="complementaryHealth"
title="Pick a private complementary health insurance"
title={
<T k="embauche.tâches.complémentaire santé.titre">
Choisir une complémentaire santé
</T>
}
explanations={
<p>
You must cover your employees with the private complementary health
insurance ("complémentaire santé" or colloquially "mutuelle" in
French) of your choice as long as it provides a set of minimum
guarantees. The employer must pay at least half of the package.
<T k="embauche.tâches.complémentaire santé.description">
Vous devez couvrir vos salariés avec l'assurance complémentaire
santé privée de votre choix (aussi appelée "mutuelle"), pour
autant qu'elle offre un ensemble de garanties minimales.
L'employeur doit payer au moins la moitié du forfait.
</T>
</p>
}
/>
<CheckItem
name="workMedicine"
title="Register to a work medicine office"
explanations={<p> Plan an initial appointment for each new hire.</p>}
title={
<T k="embauche.tâches.medecine.titre">
S'inscrire à un bureau de médecine du travail
</T>
}
explanations={
<p>
<T k="embauche.tâches.medecine.description">
N'oubliez pas de planifier un rendez-vous initial pour chaque
nouvelle embauche.
</T>
</p>
}
/>
</Checklist>
<h2>Then each month</h2>
<ul>
<li>
Compute the individual social contributions (using the chosen payslip
software)
</li>
<li>
Declare the contributions through the DSN, the new online declaration
system
</li>
<li>Deliver the standardised payslip to your employee</li>
</ul>
<Link className="ui__ button" to="/social-security/simulation">
Get an example payslip
</Link>
<T k="embauche.chaque mois">
<h2>Tous les mois</h2>
<ul>
<li>
Calculer les cotisations sociales individuelles (à l'aide du logiciel
de paie choisi)
</li>
<li>
Déclarer les contributions par le biais de la DSN, le nouveau système
de déclaration en ligne
</li>
<li>Remettre la fiche de paie à votre employé</li>
</ul>
<Link className="ui__ button" to="/social-security/simulation">
Obtenir un exemple de fiche de paie
</Link>
</T>
</Animate.fromBottom>
)
export default connect(
state => ({ hiringChecklist: state.inFranceApp.hiringChecklist }),
{
onChecklistInitialization: initializeHiringChecklist,
onItemCheck: checkHiringItem
}
export default compose(
translate(),
connect(
state => ({ hiringChecklist: state.inFranceApp.hiringChecklist }),
{
onChecklistInitialization: initializeHiringChecklist,
onItemCheck: checkHiringItem
}
)
)(HiringProcess)