mirror of
https://github.com/betagouv/mon-entreprise
synced 2025-03-13 01:35:05 +00:00
feat(pam): Mise en forme des résultats
This commit is contained in:
parent
00069ec771
commit
6d91046698
4 changed files with 209 additions and 27 deletions
|
@ -935,6 +935,15 @@ pages:
|
|||
meta:
|
||||
description: Calculate the amounts of your income to report on your tax return.
|
||||
title: PAMC tax return
|
||||
resultats:
|
||||
"1": Amounts to report on your tax return
|
||||
"2": Replacement income
|
||||
"3": Deductions and exemptions
|
||||
"4": Compulsory social security contributions
|
||||
"5": Breakdown of net income
|
||||
"6": "Net income from contract activity :"
|
||||
"7": "Net income from other self-employed activities :"
|
||||
"8": Data provided by Assurance Maladie
|
||||
shortname: PAMC tax return assistant
|
||||
title: PAMC tax return assistant
|
||||
pour-mon-entreprise:
|
||||
|
|
|
@ -994,6 +994,15 @@ pages:
|
|||
description: Calculez les montants de vos revenus à reporter dans votre
|
||||
déclaration de revenus.
|
||||
title: Déclaration de revenus des PAMC
|
||||
resultats:
|
||||
"1": Montants à reporter dans votre déclaration de revenus
|
||||
"2": Montant des revenus de remplacement
|
||||
"3": Déductions et exonérations
|
||||
"4": Cotisations sociales obligatoires
|
||||
"5": Répartition des revenus nets
|
||||
"6": "Revenus nets de l’activité conventionnée :"
|
||||
"7": "Revenus nets tirés des autres activités non salariées :"
|
||||
"8": Données transmises par l’Assurance Maladie
|
||||
shortname: Assistant à la déclaration de revenus des PAMC
|
||||
title: Assistant à la déclaration de revenus pour les PAMC
|
||||
pour-mon-entreprise:
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
import { DottedName } from 'modele-social'
|
||||
import { formatValue } from 'publicodes'
|
||||
import React from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { useSelector } from 'react-redux'
|
||||
import { styled } from 'styled-components'
|
||||
|
||||
import LectureGuide from '@/components/LectureGuide'
|
||||
import { useEngine } from '@/components/utils/EngineContext'
|
||||
import { FlexCenter } from '@/design-system/global-style'
|
||||
import { Grid } from '@/design-system/layout'
|
||||
import { Strong } from '@/design-system/typography'
|
||||
import { Body } from '@/design-system/typography/paragraphs'
|
||||
import { Contexte } from '@/domaine/Contexte'
|
||||
import { targetUnitSelector } from '@/store/selectors/simulationSelectors'
|
||||
|
||||
type SimulationValueProps = {
|
||||
dottedName: DottedName
|
||||
code: string
|
||||
label?: React.ReactNode
|
||||
round?: boolean
|
||||
contexte?: Contexte
|
||||
}
|
||||
|
||||
export function LigneImpôts({
|
||||
dottedName,
|
||||
code,
|
||||
label,
|
||||
round = true,
|
||||
contexte = {},
|
||||
}: SimulationValueProps) {
|
||||
const engine = useEngine()
|
||||
const currentUnit = useSelector(targetUnitSelector)
|
||||
const language = useTranslation().i18n.language
|
||||
const evaluation = engine.evaluate({
|
||||
valeur: dottedName,
|
||||
arrondi: round ? 'oui' : 'non',
|
||||
unité: currentUnit,
|
||||
contexte,
|
||||
})
|
||||
|
||||
const noValue =
|
||||
evaluation.nodeValue === null || evaluation.nodeValue === undefined
|
||||
if (noValue) {
|
||||
return null
|
||||
}
|
||||
|
||||
const rule = engine.getRule(dottedName)
|
||||
const elementIdPrefix = dottedName.replace(/\s|\./g, '_')
|
||||
|
||||
return (
|
||||
<StyledGridContainer container spacing={2}>
|
||||
<Grid item md="auto" sm={8} xs={12}>
|
||||
<StyledBody id={`${elementIdPrefix}-label`}>
|
||||
{label || rule.title}
|
||||
</StyledBody>
|
||||
</Grid>
|
||||
|
||||
<LectureGuide />
|
||||
|
||||
<Grid item style={{ display: 'flex', alignItems: 'center' }}>
|
||||
<StyledBody>
|
||||
<Strong>{code}</Strong>
|
||||
</StyledBody>
|
||||
<StyledBody>
|
||||
<Value id={`${elementIdPrefix}-value`}>
|
||||
{formatValue(evaluation, {
|
||||
precision: round ? 0 : 2,
|
||||
language,
|
||||
displayedUnit: '',
|
||||
})}
|
||||
</Value>
|
||||
</StyledBody>
|
||||
</Grid>
|
||||
</StyledGridContainer>
|
||||
)
|
||||
}
|
||||
|
||||
const StyledGridContainer = styled(Grid)`
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
padding: ${({ theme }) => theme.spacings.xxs} 0;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
@media (max-width: ${({ theme }) => theme.breakpointsWidth.sm}) {
|
||||
align-items: center;
|
||||
}
|
||||
`
|
||||
const StyledBody = styled(Body)`
|
||||
margin: 0;
|
||||
padding: ${({ theme }) => `${theme.spacings.xs} ${theme.spacings.sm} 0 0`};
|
||||
`
|
||||
const Value = styled.div`
|
||||
width: 100px;
|
||||
min-height: ${({ theme }) => theme.spacings.xl};
|
||||
padding: ${({ theme }) => `${theme.spacings.xxs} ${theme.spacings.xs}`};
|
||||
background-color: ${({ theme }) => theme.colors.extended.grey[100]};
|
||||
border-radius: ${({ theme }) => theme.spacings.xxs};
|
||||
color: ${({ theme }) => theme.colors.extended.dark[800]};
|
||||
${FlexCenter}
|
||||
`
|
|
@ -1,9 +1,15 @@
|
|||
import { Trans } from 'react-i18next'
|
||||
import { styled } from 'styled-components'
|
||||
|
||||
import { Condition } from '@/components/EngineValue/Condition'
|
||||
import { WhenAlreadyDefined } from '@/components/EngineValue/WhenAlreadyDefined'
|
||||
import { SimulationValue } from '@/components/Simulation/SimulationValue'
|
||||
import { Emoji } from '@/design-system/emoji'
|
||||
import { Container } from '@/design-system/layout'
|
||||
import { H2, H3 } from '@/design-system/typography/heading'
|
||||
import { Container, Spacing } from '@/design-system/layout'
|
||||
import { H2, H4 } from '@/design-system/typography/heading'
|
||||
import { Body } from '@/design-system/typography/paragraphs'
|
||||
|
||||
import { LigneImpôts } from './LigneImpôts'
|
||||
|
||||
export default function Résultats() {
|
||||
return (
|
||||
|
@ -13,8 +19,10 @@ export default function Résultats() {
|
|||
backgroundColor={(theme) => theme.colors.bases.primary[600]}
|
||||
>
|
||||
<H2>
|
||||
<Emoji emoji="📄" /> Montants à reporter dans votre déclaration de
|
||||
revenus
|
||||
<Emoji emoji="📄" />{' '}
|
||||
<Trans i18nKey="pages.assistants.declaration-revenus-pamc.resultats.1">
|
||||
Montants à reporter dans votre déclaration de revenus
|
||||
</Trans>
|
||||
</H2>
|
||||
|
||||
<SimulationValue
|
||||
|
@ -22,64 +30,119 @@ export default function Résultats() {
|
|||
label="Situation au 1er janvier ou à la date du début d’activité"
|
||||
/>
|
||||
|
||||
<H3>Recettes brutes</H3>
|
||||
<SimulationValue
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . recettes brutes totales"
|
||||
code="DSCS"
|
||||
label="Recettes brutes totales tirées des activités non salariées"
|
||||
/>
|
||||
|
||||
<Condition expression="déclaration revenus PAMC . revenus de remplacement . total">
|
||||
<H3>Montant des revenus de remplacement</H3>
|
||||
<H4 as="h3">
|
||||
<Trans i18nKey="pages.assistants.declaration-revenus-pamc.resultats.2">
|
||||
Montant des revenus de remplacement
|
||||
</Trans>
|
||||
</H4>
|
||||
</Condition>
|
||||
<SimulationValue
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . revenus de remplacement . AJPA"
|
||||
code="DSAG"
|
||||
label="Montant des allocations journalières du proche aidant (AJPA) versées par la CAF"
|
||||
/>
|
||||
|
||||
<Condition expression="déclaration revenus PAMC . déductions et exonérations . total déductible">
|
||||
<H3>Déductions et exonérations</H3>
|
||||
<H4 as="h3">
|
||||
<Trans i18nKey="pages.assistants.declaration-revenus-pamc.resultats.3">
|
||||
Déductions et exonérations
|
||||
</Trans>
|
||||
</H4>
|
||||
</Condition>
|
||||
<SimulationValue
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . déductions et exonérations . zone déficitaire en offre de soins"
|
||||
code="DSFA"
|
||||
label="Exonération zone déficitaire en offre de soins"
|
||||
/>
|
||||
<SimulationValue
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . déductions et exonérations . chèques vacances"
|
||||
code="DSCN"
|
||||
label="Chèques vacances déduits du revenu imposable"
|
||||
/>
|
||||
|
||||
<H3>Cotisations sociales obligatoires</H3>
|
||||
<SimulationValue
|
||||
<H4 as="h3">
|
||||
<Trans i18nKey="pages.assistants.declaration-revenus-pamc.resultats.4">
|
||||
Cotisations sociales obligatoires
|
||||
</Trans>
|
||||
</H4>
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . cotisations sociales obligatoires"
|
||||
code="DSCA"
|
||||
label="Cotisations sociales obligatoires déduites du résultat imposable"
|
||||
/>
|
||||
|
||||
<H3>Répartition des revenus nets</H3>
|
||||
<SimulationValue
|
||||
<H4 as="h3">
|
||||
<Trans i18nKey="pages.assistants.declaration-revenus-pamc.resultats.5">
|
||||
Répartition des revenus nets
|
||||
</Trans>
|
||||
</H4>
|
||||
<StyledBody>
|
||||
<Trans i18nKey="pages.assistants.declaration-revenus-pamc.resultats.6">
|
||||
Revenus nets de l’activité conventionnée :
|
||||
</Trans>
|
||||
</StyledBody>
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . revenus nets . revenus conventionnés"
|
||||
label="Revenu net de l’activité conventionnée"
|
||||
code="DSGA"
|
||||
label="Bénéfice"
|
||||
/>
|
||||
<SimulationValue
|
||||
<StyledBody>
|
||||
<Trans i18nKey="pages.assistants.declaration-revenus-pamc.resultats.7">
|
||||
Revenus nets tirés des autres activités non salariées :
|
||||
</Trans>
|
||||
</StyledBody>
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . revenus nets . revenus non conventionnés"
|
||||
label="Revenus nets tirés des autres activités non salariées"
|
||||
code="DSCR"
|
||||
label="Bénéfice"
|
||||
/>
|
||||
<SimulationValue
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . revenus nets . revenus structures de soins"
|
||||
code="DSAT"
|
||||
label="Dont revenus nets de l’activité réalisée dans des structures de soins"
|
||||
/>
|
||||
|
||||
<H3>Données transmises par l’Assurance Maladie</H3>
|
||||
<H4 as="h3">
|
||||
<Trans i18nKey="pages.assistants.declaration-revenus-pamc.resultats.8">
|
||||
Données transmises par l’Assurance Maladie
|
||||
</Trans>
|
||||
</H4>
|
||||
<Condition expression="déclaration revenus PAMC . profession != 'dentiste'">
|
||||
<SimulationValue dottedName="déclaration revenus PAMC . SNIR . honoraires remboursables" />
|
||||
<SimulationValue dottedName="déclaration revenus PAMC . SNIR . dépassements honoraires" />
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . SNIR . honoraires remboursables"
|
||||
code="DSAV"
|
||||
/>
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . SNIR . dépassements honoraires"
|
||||
code="DSAW"
|
||||
/>
|
||||
</Condition>
|
||||
<SimulationValue dottedName="déclaration revenus PAMC . SNIR . honoraires tarifs opposables" />
|
||||
<SimulationValue dottedName="déclaration revenus PAMC . SNIR . honoraires hors forfaits" />
|
||||
<SimulationValue
|
||||
dottedName="déclaration revenus PAMC . SNIR . taux urssaf"
|
||||
displayedUnit="%"
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . SNIR . honoraires tarifs opposables"
|
||||
code="DSAX"
|
||||
/>
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . SNIR . honoraires hors forfaits"
|
||||
code="DSAY"
|
||||
/>
|
||||
<LigneImpôts
|
||||
dottedName="déclaration revenus PAMC . SNIR . taux urssaf"
|
||||
code="DSAZ"
|
||||
/>
|
||||
|
||||
<Spacing xxl />
|
||||
</Container>
|
||||
</WhenAlreadyDefined>
|
||||
)
|
||||
}
|
||||
|
||||
const StyledBody = styled(Body)`
|
||||
margin-bottom: 0;
|
||||
`
|
||||
|
|
Loading…
Add table
Reference in a new issue