Evalue les questions pour afficher un texte dynamique
parent
ab51ddc6c9
commit
383676843d
|
@ -467,7 +467,8 @@ dirigeant . indépendant . PL . PAMC . proportion recette activité non conventi
|
|||
La proportion ne peut pas être supérieure à 100%
|
||||
|
||||
dirigeant . indépendant . PL . PAMC . remplaçant:
|
||||
question: Au 1er janvier 2020, exerciez-vous votre activité exclusivement en tant que remplaçant ?
|
||||
question:
|
||||
texte: Au {{ période . début d'année }}, exerciez-vous votre activité exclusivement en tant que remplaçant ?
|
||||
description: |
|
||||
Les practicien et auxiliaire médical exerçant une activité de remplacement ne sont pas redevables de la contribution aux unions régionales des professionnels de santé (CURPS)
|
||||
par défaut: non
|
||||
|
@ -491,7 +492,7 @@ dirigeant . indépendant . PL . PAMC . CURPS:
|
|||
acronyme: CURPS
|
||||
applicable si:
|
||||
toutes ces conditions:
|
||||
- entreprise . date de création < 01/2020
|
||||
- entreprise . date de création < période . début d'année
|
||||
- revenu professionnel > 0
|
||||
non applicable si:
|
||||
une de ces conditions:
|
||||
|
|
|
@ -2425,8 +2425,14 @@ contrat salarié . temps de travail . heures complémentaires . seuil légal:
|
|||
|
||||
contrat salarié . statut JEI:
|
||||
titre: Statut JEI
|
||||
question: >-
|
||||
La personne bénéficie-t-elle de l'exonération Jeune Entreprise Innovante (JEI) ?
|
||||
question:
|
||||
variations:
|
||||
- si: dirigeant
|
||||
alors:
|
||||
texte: Bénéficiez-vous de l'exonération Jeune Entreprise Innovante (JEI) ?
|
||||
- sinon:
|
||||
texte: Le salarié bénéficie-t-il de l'exonération Jeune Entreprise Innovante (JEI) ?
|
||||
|
||||
description: >-
|
||||
Le statut de jeune entreprise innovante (JEI) a été créé par la loi de
|
||||
finances pour 2004 et permet aux PME de moins de 8 ans consacrant 15% au
|
||||
|
|
|
@ -12,7 +12,13 @@ situation personnelle . domiciliation fiscale à l'étranger:
|
|||
Si votre résidence fiscale est située hors de France, vos revenus d’activité ne sont pas soumis à la CSG-CRDS.
|
||||
|
||||
Une cotisation maladie majorée de 14,5% sera en revanche applicable.
|
||||
question: La résidence fiscale de la personne est-elle située à l'étranger ?
|
||||
question:
|
||||
variations:
|
||||
- si: dirigeant
|
||||
alors:
|
||||
texte: Votre résidence fiscale est-elle située à l'étranger ?
|
||||
- sinon:
|
||||
texte: La résidence fiscale du salarié est-elle située à l'étranger ?
|
||||
rend non applicable:
|
||||
- dirigeant . indépendant . cotisations et contributions . CSG et CRDS
|
||||
- contrat salarié . CSG et CRDS
|
||||
|
|
|
@ -19,9 +19,9 @@ import {
|
|||
situationSelector,
|
||||
} from '@/selectors/simulationSelectors'
|
||||
import { TrackPage } from '../../ATInternetTracking'
|
||||
import './conversation.css'
|
||||
import { ExplicableRule } from './Explicable'
|
||||
import SeeAnswersButton from './SeeAnswersButton'
|
||||
import { evaluateQuestion } from '@/utils'
|
||||
|
||||
export type ConversationProps = {
|
||||
customEndMessages?: React.ReactNode
|
||||
|
@ -66,7 +66,7 @@ export default function Conversation({ customEndMessages }: ConversationProps) {
|
|||
`}
|
||||
>
|
||||
<H3>
|
||||
{engine.getRule(currentQuestion).rawNode.question}
|
||||
{evaluateQuestion(engine, engine.getRule(currentQuestion))}
|
||||
<ExplicableRule light dottedName={currentQuestion} />
|
||||
</H3>
|
||||
</div>
|
||||
|
|
|
@ -2,7 +2,6 @@ import { Button } from '@/design-system/buttons'
|
|||
import PopoverWithTrigger from '@/design-system/PopoverWithTrigger'
|
||||
import { Trans } from 'react-i18next'
|
||||
import Answers from './AnswerList'
|
||||
import './conversation.css'
|
||||
|
||||
export default function SeeAnswersButton() {
|
||||
return (
|
||||
|
|
|
@ -1,91 +0,0 @@
|
|||
.step fieldset {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-wrap: wrap;
|
||||
align-items: baseline;
|
||||
}
|
||||
|
||||
.step fieldset ul {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.step fieldset .step.question .variantLeaf,
|
||||
.step fieldset .step.question {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.step.question .variant {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.step.question .variant > ul {
|
||||
border-right: 1px dashed #333;
|
||||
text-align: right;
|
||||
padding-right: 0.6em;
|
||||
padding-top: 0.6em;
|
||||
padding-left: 2em;
|
||||
margin-left: 1rem;
|
||||
}
|
||||
.step.question .variant > div {
|
||||
padding-right: 0.6em;
|
||||
font-weight: 600;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.step.question fieldset span {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.step.question .variantLeaf {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.step.question .variant .variantLeaf {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.step.question .variant .variantLeaf:not(:first-child) {
|
||||
margin-left: 0.6rem;
|
||||
}
|
||||
.step.question .variantLeaf.aucun label {
|
||||
font-weight: 800;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.step .input > :first-child {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.step label.suffix {
|
||||
vertical-align: baseline;
|
||||
transition: color 0.1s;
|
||||
margin-left: 0.6rem;
|
||||
}
|
||||
.step label.userAnswerButton {
|
||||
margin-bottom: 0.6rem;
|
||||
background: none;
|
||||
border: 1px solid var(--color) !important;
|
||||
text-transform: none !important;
|
||||
background-color: white;
|
||||
color: var(--textColorOnWhite) !important;
|
||||
}
|
||||
.step label.userAnswerButton.selected {
|
||||
background: var(--lightColor);
|
||||
color: var(--textColor) !important;
|
||||
}
|
||||
|
||||
@media print {
|
||||
.step label.userAnswerButton.selected {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.step label.userAnswerButton:not(.selected) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media (hover) {
|
||||
.step label.userAnswerButton:hover:not(.selected) {
|
||||
background: var(--lighterColor);
|
||||
transition: all 0.05s;
|
||||
}
|
||||
}
|
|
@ -12,6 +12,7 @@ import { useCallback, useContext } from 'react'
|
|||
import { useDispatch, useSelector } from 'react-redux'
|
||||
import { situationSelector } from '@/selectors/simulationSelectors'
|
||||
import { Question } from './PreviousVersion'
|
||||
import { evaluateQuestion } from '@/utils'
|
||||
|
||||
type SubSectionProp = {
|
||||
dottedName: DottedName
|
||||
|
@ -86,7 +87,7 @@ export function SimpleField({
|
|||
<FromTop>
|
||||
<Question>
|
||||
<Intro>
|
||||
{question ?? rule.rawNode.question}
|
||||
{evaluateQuestion(engine, rule)}
|
||||
<ExplicableRule dottedName={dottedName} />
|
||||
</Intro>
|
||||
<SmallBody>{summary ?? rule.rawNode.résumé}</SmallBody>
|
||||
|
|
|
@ -63,7 +63,9 @@ const useFields = (
|
|||
|
||||
return (
|
||||
evaluation.nodeValue !== null &&
|
||||
(rule.rawNode.question || rule.rawNode.API || rule.rawNode.type)
|
||||
(evaluateQuestion(engine, rule) ||
|
||||
rule.rawNode.API ||
|
||||
rule.rawNode.type)
|
||||
)
|
||||
})
|
||||
.map((dottedName) => engine.getRule(dottedName))
|
||||
|
|
|
@ -14,6 +14,7 @@ import { Container, Spacing } from '@/design-system/layout'
|
|||
import { H2, H3, H4 } from '@/design-system/typography/heading'
|
||||
import { Body, Intro } from '@/design-system/typography/paragraphs'
|
||||
import { useQuestionList } from '@/hooks/useQuestionList'
|
||||
import { evaluateQuestion } from '@/utils'
|
||||
import { Grid } from '@mui/material'
|
||||
import Engine, { Evaluation } from 'publicodes'
|
||||
import { useContext } from 'react'
|
||||
|
@ -256,6 +257,7 @@ export const AskCompanyMissingDetails = () => {
|
|||
useSimulationConfig(companyDetailsConfig)
|
||||
|
||||
const [questions, onQuestionAnswered] = useQuestionList()
|
||||
const engine = useEngine()
|
||||
|
||||
return (
|
||||
<>
|
||||
|
@ -273,7 +275,7 @@ export const AskCompanyMissingDetails = () => {
|
|||
|
||||
{questions.map((question) => (
|
||||
<FromTop key={question.dottedName}>
|
||||
<H4>{question.rawNode.question}</H4>
|
||||
<H4>{evaluateQuestion(engine, question)}</H4>
|
||||
<RuleInput
|
||||
dottedName={question.dottedName}
|
||||
onChange={onQuestionAnswered(question.dottedName)}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { formatValue, Rule } from 'publicodes'
|
||||
import Engine, { formatValue, Rule, RuleNode } from 'publicodes'
|
||||
|
||||
export function capitalise0(name: undefined): undefined
|
||||
export function capitalise0(name: string): string
|
||||
|
@ -203,3 +203,17 @@ export async function getIframeOffset(): Promise<number> {
|
|||
window.addEventListener('message', returnOffset)
|
||||
})
|
||||
}
|
||||
|
||||
export function evaluateQuestion(
|
||||
engine: Engine,
|
||||
question: RuleNode
|
||||
): string | undefined | number {
|
||||
if (
|
||||
question.rawNode.question &&
|
||||
typeof question.rawNode.question === 'object'
|
||||
) {
|
||||
return engine.evaluate(question.rawNode.question).nodeValue as string
|
||||
}
|
||||
|
||||
return question.rawNode.question
|
||||
}
|
||||
|
|
|
@ -319,11 +319,11 @@ exports[`calculate simulations-professions-libérales > CIPAV 8`] = `
|
|||
Notifications affichées : entreprise . chiffre d'affaires . franchise de TVA . dépassement"
|
||||
`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > auxiliaire médical 1`] = `"[30000,0,8060,21940,1212,20728]"`;
|
||||
exports[`calculate simulations-professions-libérales > auxiliaire médical 1`] = `"[30000,0,8078,21922,1208,20714]"`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > auxiliaire médical 2`] = `"[30000,0,8381,21619,1160,20459]"`;
|
||||
exports[`calculate simulations-professions-libérales > auxiliaire médical 2`] = `"[30000,0,8398,21602,1157,20445]"`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > auxiliaire médical 3`] = `"[300000,0,62709,237291,89754,147537]"`;
|
||||
exports[`calculate simulations-professions-libérales > auxiliaire médical 3`] = `"[300000,0,62883,237117,89673,147444]"`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > avocat 1`] = `
|
||||
"[50000,0,11135,38865,5988,32877]
|
||||
|
@ -342,45 +342,45 @@ exports[`calculate simulations-professions-libérales > expert-comptable 2`] = `
|
|||
Notifications affichées : entreprise . chiffre d'affaires . franchise de TVA . dépassement"
|
||||
`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > médecin 1`] = `"[50000,0,14246,35754,5055,30699]"`;
|
||||
exports[`calculate simulations-professions-libérales > médecin 1`] = `"[50000,0,14385,35615,5011,30604]"`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > médecin 2`] = `"[50000,0,21962,28038,2740,25298]"`;
|
||||
exports[`calculate simulations-professions-libérales > médecin 2`] = `"[50000,0,22059,27941,2710,25231]"`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > médecin 3`] = `"[300000,0,87748,212252,78486,133766]"`;
|
||||
exports[`calculate simulations-professions-libérales > médecin 3`] = `"[300000,0,87915,212085,78409,133676]"`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > médecin 4`] = `"[400000,0,107868,292132,117244,174888]"`;
|
||||
exports[`calculate simulations-professions-libérales > médecin 4`] = `"[400000,0,108031,291969,117164,174805]"`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > médecin 5`] = `
|
||||
"[120000,0,36415,83585,21327,62258]
|
||||
Notifications affichées : entreprise . chiffre d'affaires . franchise de TVA . dépassement"
|
||||
`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > médecin 6`] = `"[50000,0,14246,35754,5055,30699]"`;
|
||||
exports[`calculate simulations-professions-libérales > médecin 6`] = `"[50000,0,14385,35615,5011,30604]"`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > sage-femme 1`] = `"[50000,0,12451,37549,5593,31956]"`;
|
||||
exports[`calculate simulations-professions-libérales > sage-femme 1`] = `"[50000,0,12479,37521,5584,31937]"`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > sage-femme 2`] = `
|
||||
"[20000,0,5178,14822,31,14791]
|
||||
"[20000,0,5190,14810,29,14781]
|
||||
Notifications affichées : dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . cotisation forfaitaire . réduction applicable"
|
||||
`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > sage-femme 3`] = `
|
||||
"[4000,0,1313,2687,0,2687]
|
||||
"[4000,0,1315,2685,0,2685]
|
||||
Notifications affichées : dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . cotisation forfaitaire . réduction applicable, dirigeant . indépendant . PL . CARCDSF . sage-femme . exonération PCV"
|
||||
`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > sage-femme 4`] = `
|
||||
"[20000,0,5178,14822,31,14791]
|
||||
"[20000,0,5190,14810,29,14781]
|
||||
Notifications affichées : dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . cotisation forfaitaire . réduction applicable"
|
||||
`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > sage-femme 5`] = `
|
||||
"[20000,0,5255,14745,18,14727]
|
||||
"[20000,0,5267,14733,17,14716]
|
||||
Notifications affichées : dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . cotisation forfaitaire . réduction applicable"
|
||||
`;
|
||||
|
||||
exports[`calculate simulations-professions-libérales > sage-femme 6`] = `
|
||||
"[20000,0,5332,14668,6,14662]
|
||||
"[20000,0,5343,14657,4,14653]
|
||||
Notifications affichées : dirigeant . indépendant . PL . CARCDSF . retraite complémentaire . cotisation forfaitaire . réduction applicable"
|
||||
`;
|
||||
|
||||
|
|
Loading…
Reference in New Issue