diff --git a/mon-entreprise/source/components/ShareSimulationBanner.tsx b/mon-entreprise/source/components/ShareSimulationBanner.tsx
index 86c69c031..0bd6efcd0 100644
--- a/mon-entreprise/source/components/ShareSimulationBanner.tsx
+++ b/mon-entreprise/source/components/ShareSimulationBanner.tsx
@@ -4,13 +4,16 @@ import { TrackerContext } from 'Components/utils/withTracker'
import Animate from 'Components/ui/animate'
import Banner from './Banner'
import { LinkButton } from 'Components/ui/Button'
-import { useGetSearchParams } from './utils/useSearchParamsSimulationSharing'
+import { useParamsFromSituation } from './utils/useSearchParamsSimulationSharing'
+import { useSelector } from 'react-redux'
+import { situationSelector } from 'Selectors/simulationSelectors'
export default function ShareSimulationBanner() {
const [opened, setOpened] = useState(false)
const { t } = useTranslation()
const tracker = useContext(TrackerContext)
- const getSearchParams = useGetSearchParams()
+ const situation = useSelector(situationSelector)
+ const searchParams = useParamsFromSituation(situation)
const shareAPIAvailable = !!window?.navigator?.share
@@ -19,7 +22,7 @@ export default function ShareSimulationBanner() {
window.location.origin,
window.location.pathname,
'?',
- getSearchParams().toString(),
+ searchParams.toString(),
].join('')
const startSharing = () => {
diff --git a/mon-entreprise/source/components/Simulation.tsx b/mon-entreprise/source/components/Simulation.tsx
index be0607b6e..43e15e65d 100644
--- a/mon-entreprise/source/components/Simulation.tsx
+++ b/mon-entreprise/source/components/Simulation.tsx
@@ -13,7 +13,6 @@ import React from 'react'
import { Trans } from 'react-i18next'
import { useSelector } from 'react-redux'
import { firstStepCompletedSelector } from 'Selectors/simulationSelectors'
-import useSearchParamsSimulationSharing from 'Components/utils/useSearchParamsSimulationSharing'
import ShareSimulationBanner from 'Components/ShareSimulationBanner'
type SimulationProps = {
@@ -30,7 +29,6 @@ export default function Simulation({
showPeriodSwitch,
}: SimulationProps) {
const firstStepCompleted = useSelector(firstStepCompletedSelector)
- const getShareSearchParams = useSearchParamsSimulationSharing()
return (
<>
@@ -39,7 +37,7 @@ export default function Simulation({
{firstStepCompleted && (
{results}
-
+
{
+export const useParamsFromSituation = (situation: Situation) => {
const engine = useEngine()
- const situation = useSelector(situationSelector)
const dottedNameParamName = useMemo(
() => getRulesParamNames(engine.getParsedRules()),
[engine]
)
- return () =>
- getSearchParamsFromSituation(engine, situation, dottedNameParamName)
+ return getSearchParamsFromSituation(engine, situation, dottedNameParamName)
}
const objectifsOfConfig = (config: Partial) =>
diff --git a/mon-entreprise/source/pages/Simulateurs/AidesEmbauche.tsx b/mon-entreprise/source/pages/Simulateurs/AidesEmbauche.tsx
index e4c3ab46b..a4481d776 100644
--- a/mon-entreprise/source/pages/Simulateurs/AidesEmbauche.tsx
+++ b/mon-entreprise/source/pages/Simulateurs/AidesEmbauche.tsx
@@ -1,24 +1,19 @@
-import { formatValue } from 'publicodes'
-import useSimulationConfig from 'Components/utils/useSimulationConfig'
-import Animate from 'Components/ui/animate'
import Conversation from 'Components/conversation/Conversation'
-import { Questions } from 'Components/Simulation'
-import { useEngine } from 'Components/utils/EngineContext'
-import RuleLink from 'Components/RuleLink'
-import { DottedName } from 'modele-social'
-import { ThemeColorsContext } from 'Components/utils/colors'
-import { useContext, useMemo } from 'react'
-import { SimulationConfig, Situation } from 'Reducers/rootReducer'
-import { situationSelector } from 'Selectors/simulationSelectors'
-import { partition } from 'ramda'
-import { useSimulationProgress } from 'Components/utils/useNextQuestion'
import { HiddenOptionContext } from 'Components/conversation/Question'
-import useSearchParamsSimulationSharing, {
- getRulesParamNames,
- getSearchParamsFromSituation,
-} from 'Components/utils/useSearchParamsSimulationSharing'
+import Animate from 'Components/ui/animate'
+import { ThemeColorsContext } from 'Components/utils/colors'
+import { useEngine } from 'Components/utils/EngineContext'
import { SitePathsContext } from 'Components/utils/SitePathsContext'
+import { useSimulationProgress } from 'Components/utils/useNextQuestion'
+import { useParamsFromSituation } from 'Components/utils/useSearchParamsSimulationSharing'
+import useSimulationConfig from 'Components/utils/useSimulationConfig'
+import { DottedName } from 'modele-social'
+import Engine, { formatValue } from 'publicodes'
+import { partition } from 'ramda'
+import { useContext, useMemo } from 'react'
import { Link } from 'react-router-dom'
+import { SimulationConfig, Situation } from 'Reducers/rootReducer'
+import styled from 'styled-components'
type AideDescriptor = {
title: string
@@ -30,36 +25,42 @@ type AideDescriptor = {
// This could be moved into publicodes
const aides = [
{
- title: 'Apprenti',
+ title: 'Apprenti ou contrat Pro jeune',
dottedName:
"contrat salarié . aides employeur . aide exceptionnelle à l'embauche d'apprentis",
situation: {
'contrat salarié . rémunération . brut de base': '1700 €/mois',
- // 'contrat salarié': "'apprentissage'",
},
description:
"Pour l'embauche d'un apprenti ou d'un jeune en contrat de professionnalisation",
},
{
- title: 'Jeune en CDI',
+ title: 'Jeune de -26 ans',
dottedName:
"contrat salarié . aides employeur . aide exceptionnelle à l'embauche des jeunes",
situation: {
- 'contrat salarié . rémunération . brut de base': '2300 €/mois',
- // 'contrat salarié': "'CDI'",
+ 'contrat salarié . rémunération . brut de base': '1700 €/mois',
"contrat salarié . aides employeur . aide exceptionnelle à l'embauche des jeunes . jeune de moins de 26 ans":
'oui',
},
},
{
- title: 'Jeune en CDD',
- dottedName:
- "contrat salarié . aides employeur . aide exceptionnelle à l'embauche des jeunes",
+ title: 'Emploi franc',
+ dottedName: 'contrat salarié . aides employeur . emploi franc',
situation: {
- 'contrat salarié . rémunération . brut de base': '2300 €/mois',
- // 'contrat salarié': "'CDD'",
- 'contrat salarié . CDD . durée contrat': '12 mois',
- "contrat salarié . aides employeur . aide exceptionnelle à l'embauche des jeunes . jeune de moins de 26 ans":
+ 'contrat salarié . rémunération . brut de base': '1700 €/mois',
+ 'contrat salarié . aides employeur . emploi franc . éligible': 'oui',
+ },
+ },
+ {
+ title: "Demandeur d'emploi de 45 ans ou plus",
+ dottedName:
+ "contrat salarié . aides employeur . aide à l'embauche senior professionnalisation",
+ situation: {
+ // 'contrat salarié . rémunération . brut de base': '1700 €/mois',
+ 'contrat salarié . professionnalisation . jeune de moins de 30 ans':
+ 'non',
+ 'contrat salarié . professionnalisation . salarié de 45 ans et plus':
'oui',
},
},
@@ -79,7 +80,9 @@ const config = {
'liste noire': [
'contrat salarié . activité partielle',
'contrat salarié . prix du travail',
+ "contrat salarié . ancienneté . date d'embauche",
'contrat salarié . temps de travail . heures supplémentaires',
+ 'contrat salarié . temps de travail . heures complémentaires',
'contrat salarié . rémunération',
'contrat salarié . aides employeur . emploi franc . éligible',
],
@@ -97,7 +100,14 @@ export default function AidesEmbauche() {
-
+
+ Vous pouvez maintenant simuler le coût d'embauche précis en en
+ sélectionnant une aide éligible.
+ >
+ }
+ />
@@ -106,26 +116,37 @@ export default function AidesEmbauche() {
)}
+
+ En savoir plus sur les aides
+ Bla bla 1jeune1solution
+
>
)
}
function Results() {
- const engine = useEngine()
+ const baseEngine = useEngine()
+ const aidesEngines = aides.map((aide) => {
+ const engine = new Engine(baseEngine.parsedRules)
+ const situation = { ...aide.situation, ...baseEngine.parsedSituation }
+ engine.setSituation({ ...aide.situation, ...baseEngine.parsedSituation })
+ return { ...aide, situation, engine }
+ })
const [aidesActives, aidesInactives] = partition(
- (aide) => typeof engine.evaluate(aide.dottedName).nodeValue === 'number',
- aides
+ ({ dottedName, engine }) =>
+ typeof engine.evaluate(dottedName).nodeValue === 'number',
+ aidesEngines
)
return (
<>
Aides disponibles
-
+
{aidesActives.map((aide, i) => (
))}
Les autres aides
-
+
{aidesInactives.map((aide, i) => (
))}
@@ -142,22 +163,13 @@ function ResultCard({
}: AideDescriptor) {
const engine = useEngine()
const rule = engine.getParsedRules()[dottedName]
- const valueNode = rule.explanation.valeur.explanation.valeur
+ const valueNode = (rule.explanation.valeur as any)?.explanation.valeur
const evaluation = engine.evaluate(valueNode)
- const dottedNameParamName = useMemo(
- () => getRulesParamNames(engine.getParsedRules()),
- [engine]
- )
- const search = getSearchParamsFromSituation(
- engine,
- situation,
- dottedNameParamName
- ).toString()
+ const search = useParamsFromSituation(situation).toString()
const sitePaths = useContext(SitePathsContext)
- // TODO
return (
-
+
{title}
{description}
@@ -170,6 +182,15 @@ function ResultCard({
{formatValue(evaluation, { displayedUnit: '€' })}
-
+
)
}
+
+const AideCard = styled.div`
+ max-width: none !important;
+ align-items: flex-start;
+
+ p {
+ text-align: left;
+ }
+`
diff --git a/mon-entreprise/source/pages/Simulateurs/images/logo-france-relance.svg b/mon-entreprise/source/pages/Simulateurs/images/logo-france-relance.svg
new file mode 100644
index 000000000..99972ff98
--- /dev/null
+++ b/mon-entreprise/source/pages/Simulateurs/images/logo-france-relance.svg
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mon-entreprise/source/pages/Simulateurs/metadata.tsx b/mon-entreprise/source/pages/Simulateurs/metadata.tsx
index f60427562..4d3b56f13 100644
--- a/mon-entreprise/source/pages/Simulateurs/metadata.tsx
+++ b/mon-entreprise/source/pages/Simulateurs/metadata.tsx
@@ -27,6 +27,7 @@ import urlIllustrationNetBrut from './images/illustration-net-brut.png'
import RémunérationSASUPreview from './images/RémunérationSASUPreview.png'
import salaireBrutNetPreviewEN from './images/SalaireBrutNetPreviewEN.png'
import salaireBrutNetPreviewFR from './images/SalaireBrutNetPreviewFR.png'
+import logoFranceRelance from './images/logo-france-relance.svg'
import PAMCHome from './PAMCHome'
import IndépendantSimulation, {
IndépendantPLSimulation,
@@ -768,11 +769,19 @@ export function getSimulatorsData({
title: "Aides à l'embauche",
description: (
+
Les employeurs peuvent bénéficier d'une aide financière pour
l'embauche de certains publics prioritaires. Découvrez les dispositifs
existants et estimez le montant de l'aide en répondant aux questions.
-
-
),
component: AidesEmbauche,