Ajoute le lien avec publicodes (in progress)

pull/2782/head
Johan Girod 2023-06-14 15:30:14 +02:00
parent 8b6c86fbc4
commit 3aacc4d359
12 changed files with 72 additions and 68 deletions

View File

@ -320,7 +320,9 @@ entreprise . activités . principale:
code guichet:
description: |
Le code guichet est utilisé pour identifier l'activité principale lors de la déclaration de
la nouvelle entreprise via le guichet unique
la nouvelle entreprise via le guichet unique. Il diffère du code APE : certains code APE ont plusieurs code guichet associés.
Il permet de connaître le type d'imposition de bénéfince (BIC, BNC, BA), la nature d'activité ou encore les régimes de retraite spécifiques associés au type d'activité.
# une possibilité:
# choix obligatoire: oui

View File

@ -51,7 +51,11 @@ entreprise . catégorie juridique . EI:
par: "'unique'"
avec:
auto-entrepreneur:
non applicable si: associés . multiples
acronyme: AE
non applicable si:
une de ces conditions:
- associés . multiples
- entreprise . imposition . IR . type de bénéfices = 'BA'
question: Êtes-vous auto-entrepreneur ?
remplace:
- règle: imposition . régime
@ -68,6 +72,7 @@ entreprise . catégorie juridique . EI:
valeur: oui
EI:
titre: entreprise individuelle
acronyme: EI
valeur: auto-entrepreneur = non
non applicable si: associés . multiples

View File

@ -11,7 +11,7 @@ import {
import { Tag } from '@/design-system/tag'
import { Colors } from '@/design-system/theme'
export const TAG_DATA = {
const TAG_DATA = {
EI: {
color: 'independant',
longName: 'Entreprise individuelle',
@ -71,7 +71,7 @@ export const TAG_DATA = {
}
}
export type Status = keyof typeof TAG_DATA
export type Statut = keyof typeof TAG_DATA
const StyledTag = styled(Tag)`
margin: 0 0.25rem;
@ -87,19 +87,19 @@ const StyledTag = styled(Tag)`
}
`
interface StatusTagProps {
status: Status
interface StatutTagProps {
statut: Statut
text: 'acronym' | 'shortName' | 'longName'
showIcon?: boolean
}
export const StatusTag = ({ status, text, showIcon }: StatusTagProps) => {
const Icon = TAG_DATA[status].icon
export const StatutTag = ({ statut, text, showIcon }: StatutTagProps) => {
const Icon = TAG_DATA[statut].icon
return (
<StyledTag color={TAG_DATA[status].color} sm>
<StyledTag color={TAG_DATA[statut].color} sm>
{showIcon && <Icon />}
{TAG_DATA[status][text]}
{TAG_DATA[statut][text]}
</StyledTag>
)
}

View File

@ -139,6 +139,7 @@ const Shadow = styled.div`
position: sticky;
bottom: 35px;
transform: translateY(-200%);
clip-path: inset(-5px 0px -5px -5px);
height: 25px;
padding: 0;
margin: 0;

View File

@ -1,7 +1,7 @@
import styled from 'styled-components'
import { DottedName } from '@/../../modele-social'
import { Status, StatusTag } from '@/components/StatusTag'
import { Statut, StatutTag } from '@/components/StatutTag'
import { useEngine } from '@/components/utils/EngineContext'
import { Message } from '@/design-system'
import { H5 } from '@/design-system/typography/heading'
@ -17,29 +17,15 @@ export default function StatutsDisponibles() {
professionnelle que vous exercez
</SmallBody>
<StyledUl noMarker>
<Statut
statut="entreprise . catégorie juridique . EI . EI"
status="EI"
/>
<Statut
statut="entreprise . catégorie juridique . EI . auto-entrepreneur"
status="AE"
/>
<Statut
statut="entreprise . catégorie juridique . SARL . EURL"
status="EURL"
/>
<Statut
statut="entreprise . catégorie juridique . SARL . SARL"
status="SARL"
/>
<Statut statut="entreprise . catégorie juridique . EI . EI" />
<Statut statut="entreprise . catégorie juridique . EI . auto-entrepreneur" />
<Statut statut="entreprise . catégorie juridique . SARL . EURL" />
<Statut statut="entreprise . catégorie juridique . SARL . SARL" />
<Statut
statut="entreprise . catégorie juridique . SAS . SAS"
status="SAS"
/>
<Statut
statut="entreprise . catégorie juridique . SAS . SASU"
status="SASU"
/>
{/* <Statut
statut="entreprise . catégorie juridique . SELARL . SELARL"
@ -57,10 +43,7 @@ export default function StatutsDisponibles() {
statut="entreprise . catégorie juridique . SELAS . SELASU"
status=""
/> */}
<Statut
statut="entreprise . catégorie juridique . association"
status="association"
/>
<Statut statut="entreprise . catégorie juridique . association" />
</StyledUl>
</StyledMessage>
)
@ -96,14 +79,18 @@ const StyledMessage = styled(Message)`
}
`
function Statut({ statut, status }: { statut: DottedName; status: Status }) {
function Statut({ statut }: { statut: DottedName }) {
const engine = useEngine()
const disabled = status === 'AE'
const disabled =
engine.evaluate({ 'est non applicable': statut }).nodeValue === true
const acronyme = (engine.getRule(statut).rawNode.acronyme ??
engine.getRule(statut).title.toLocaleLowerCase()) as Statut
return (
<Li className={disabled ? 'disabled' : ''}>
<StyledSpan>{engine.getRule(statut).title}</StyledSpan>
<StatusTag status={status} text="acronym" showIcon />
<StatutTag statut={acronyme} text="acronym" showIcon />
</Li>
)
}

View File

@ -11,7 +11,7 @@ import { Spacing } from '@/design-system/layout'
import { H3, H5 } from '@/design-system/typography/heading'
import { Body } from '@/design-system/typography/paragraphs'
import { useSitePaths } from '@/sitePaths'
import { updateSituation } from '@/store/actions/actions'
import { batchUpdateSituation } from '@/store/actions/actions'
import {
GuichetDescription,
@ -37,6 +37,23 @@ export default function DétailsActivité() {
setCodeGuichet(guichetEntries[0].code)
}, [guichetEntries])
const guichetSelected = guichetEntries?.find(
(guichet) => guichet.code === codeGuichet
)
const onNextStepClicked = () => {
if (!guichetSelected) {
return
}
dispatch(
batchUpdateSituation({
'entreprise . activités . principale . code guichet': `'${guichetSelected.code}'`,
'entreprise . imposition . IR . type de bénéfices':
guichetSelected.typeBénéfice,
})
)
}
if (!codeApe) return <CodeAPENonConnu />
return (
@ -68,15 +85,7 @@ export default function DétailsActivité() {
guichetEntries?.length === 1 &&
t('créer.activité-détails.next1', 'Continuer avec cette activité')
}
onNextStep={() =>
codeGuichet &&
dispatch(
updateSituation(
'entreprise . activités . principale . code guichet',
`'${codeGuichet}'`
)
)
}
onNextStep={onNextStepClicked}
/>
</Layout>
</>

View File

@ -72,8 +72,8 @@ export function GuichetDescription({
return (
<>
<Body>
Activité <Strong>{catégorieActivité.replace(/_/g, ' ')}</Strong> avec
des revenus déclarés en <Strong>{typeBénéfice}</Strong>
Activité <Strong>{catégorieActivité.replace(/_/g, ' ')}</Strong> avec le
type de bénéfice <Strong>{typeBénéfice}</Strong>
{caisseDeRetraiteSpéciale && (
<>
, affiliée à la <Strong>{caisseDeRetraiteSpéciale}</Strong> pour la

View File

@ -9,7 +9,7 @@ import { SwitchInput } from '@/components/conversation/ChoicesInput'
import { ExplicableRule } from '@/components/conversation/Explicable'
import RuleInput from '@/components/conversation/RuleInput'
import Value from '@/components/EngineValue'
import { StatusTag } from '@/components/StatusTag'
import { StatutTag } from '@/components/StatutTag'
import { useEngine } from '@/components/utils/EngineContext'
import { Message } from '@/design-system'
import { Button } from '@/design-system/buttons'
@ -138,7 +138,7 @@ const AllerPlusLoinRevenus = ({
<th className="sr-only">Type de structure</th>
<th scope="col">
<span className="table-title-sasu">
<StatusTag status="SASU" text="acronym" showIcon />
<StatutTag statut="SASU" text="acronym" showIcon />
</span>
</th>
@ -148,7 +148,7 @@ const AllerPlusLoinRevenus = ({
id="tooltip-ei-table"
>
<span className="table-title-ei">
<StatusTag status="EI" text="acronym" showIcon />
<StatutTag statut="EI" text="acronym" showIcon />
</span>
</Tooltip>
</th>
@ -156,7 +156,7 @@ const AllerPlusLoinRevenus = ({
<th scope="col">
<Tooltip tooltip="Auto-entreprise" id="tooltip-ae-table">
<span className="table-title-ae">
<StatusTag status="AE" text="acronym" showIcon />
<StatutTag statut="AE" text="acronym" showIcon />
</span>
</Tooltip>
</th>

View File

@ -121,7 +121,7 @@ const DetailsRowCards = ({
as="ul"
>
<StatusCard
status={getStatusLabelsArray(statusArray)}
statut={getStatusLabelsArray(statusArray)}
footerContent={footers?.[statusObject.type]}
isBestOption={
statusArray.length !== 3 &&

View File

@ -489,7 +489,7 @@ const Détails = ({
sa vie professionnelle.
</Trans>
</Body>
<StatusCard status={['SASU', 'EI', 'AE']}>
<StatusCard statut={['SASU', 'EI', 'AE']}>
<span>
<Value
linkToRule={false}
@ -637,12 +637,12 @@ const Détails = ({
</Body>
<Grid container spacing={4}>
<Grid item xs={12} lg={4}>
<StatusCard status={['SASU']}>
<StatusCard statut={['SASU']}>
<Trans>1 minimum</Trans>
</StatusCard>
</Grid>
<Grid item xs={12} lg={8}>
<StatusCard status={['EI', 'AE']}>
<StatusCard statut={['EI', 'AE']}>
<DisabledLabel>
<Trans>Aucun</Trans>
</DisabledLabel>
@ -664,17 +664,17 @@ const Détails = ({
</Body>
<Grid container spacing={4}>
<Grid item xs={12} lg={4}>
<StatusCard status={['SASU']}>
<StatusCard statut={['SASU']}>
<Trans>Conjoint associé ou salarié</Trans>
</StatusCard>
</Grid>
<Grid item xs={12} lg={4}>
<StatusCard status={['EI']}>
<StatusCard statut={['EI']}>
<Trans>Conjoint collaborateur ou salarié</Trans>
</StatusCard>
</Grid>
<Grid item xs={12} lg={4}>
<StatusCard status={['AE']}>
<StatusCard statut={['AE']}>
<Trans>Conjoint collaborateur</Trans>
</StatusCard>
</Grid>

View File

@ -66,7 +66,7 @@ const RevenuAprèsImpot = ({
<Grid container spacing={4}>
<Grid item xs={12} lg={4}>
<StatusCard
status={['SASU']}
statut={['SASU']}
isBestOption={bestOption === 'sasu'}
footerContent={
<CheckList
@ -121,7 +121,7 @@ const RevenuAprèsImpot = ({
<Grid item xs={12} lg={4}>
<StatusCard
status={['EI']}
statut={['EI']}
isBestOption={bestOption === 'ei'}
footerContent={
<CheckList
@ -181,7 +181,7 @@ const RevenuAprèsImpot = ({
<Grid item xs={12} lg={4}>
<StatusCard
status={['AE']}
statut={['AE']}
isBestOption={bestOption === 'ae'}
footerContent={
<CheckList

View File

@ -2,7 +2,7 @@ import { ReactNode, useRef } from 'react'
import { Trans } from 'react-i18next'
import styled from 'styled-components'
import { StatusTag } from '@/components/StatusTag'
import { StatutTag } from '@/components/StatutTag'
import { CardContainer } from '@/design-system/card/Card'
import { Emoji } from '@/design-system/emoji'
import { Grid } from '@/design-system/layout'
@ -10,19 +10,19 @@ import { Tooltip } from '@/design-system/tooltip'
import { Body } from '@/design-system/typography/paragraphs'
import { generateUuid } from '@/utils'
type StatusCardType = {
status: ('SASU' | 'EI' | 'AE')[]
type StatutCardType = {
statut: ('SASU' | 'EI' | 'AE')[]
footerContent?: ReactNode
isBestOption?: boolean
children: ReactNode
}
const StatusCard = ({
status,
statut: status,
children,
footerContent,
isBestOption,
}: StatusCardType) => {
}: StatutCardType) => {
const tooltipIdRef = useRef(generateUuid())
return (
@ -31,7 +31,7 @@ const StatusCard = ({
<Grid container spacing={1}>
{status.map((statusString) => (
<Grid item key={statusString}>
<StatusTag status={statusString} text="shortName" showIcon />
<StatutTag statut={statusString} text="shortName" showIcon />
</Grid>
))}
</Grid>