1
0
Fork 0
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:
Alice Dahan 2025-02-10 14:26:55 +01:00 committed by liliced
parent 00069ec771
commit 6d91046698
4 changed files with 209 additions and 27 deletions

View file

@ -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:

View file

@ -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 lactivité conventionnée :"
"7": "Revenus nets tirés des autres activités non salariées :"
"8": Données transmises par lAssurance Maladie
shortname: Assistant à la déclaration de revenus des PAMC
title: Assistant à la déclaration de revenus pour les PAMC
pour-mon-entreprise:

View file

@ -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}
`

View file

@ -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 dactivité"
/>
<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 lactivité conventionnée&nbsp;:
</Trans>
</StyledBody>
<LigneImpôts
dottedName="déclaration revenus PAMC . revenus nets . revenus conventionnés"
label="Revenu net de lactivité 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&nbsp;:
</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 lactivité réalisée dans des structures de soins"
/>
<H3>Données transmises par lAssurance Maladie</H3>
<H4 as="h3">
<Trans i18nKey="pages.assistants.declaration-revenus-pamc.resultats.8">
Données transmises par lAssurance 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;
`