Merge pull request #665 from betagouv/quickfix

Quickfix
pull/682/head
Johan Girod 2019-09-13 11:15:16 +02:00 committed by GitHub
commit 4ec00d5d6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 318 additions and 317 deletions

View File

@ -1,6 +1,10 @@
https://embauche.beta.gouv.fr/règle/contrat-salarié--salaire--net-après-impôt https://embauche.beta.gouv.fr/documentation/contrat-salarié/salaire/net-après-impôt 302
https://embauche.beta.gouv.fr/règle/prime-de-fin-de-contrat https://embauche.beta.gouv.fr/documentation/contrat-salarié/CDD/prime-de-fin-de-contrat 302
https://embauche.beta.gouv.fr/règle/contrat-salarié--salaire--brut-de-base https://embauche.beta.gouv.fr/documentation/contrat-salarié/salaire/brut-de-base 302
https://embauche.beta.gouv.fr/règle/contrat-salarié--rémunération-total https://embauche.beta.gouv.fr/documentation/contrat-salarié/rémunération/total 302
https://embauche.beta.gouv.fr/règle/contribution-au-dialogue-social https://embauche.beta.gouv.fr/documentation/contrat-salarié/contribution-au-dialogue-social 302
https://embauche.beta.gouv.fr/règle/contrat-salarié--CDD--motif--complément-formation https://embauche.beta.gouv.fr/documentation/contrat-salarié/CDD/motif/complément-formation 302
https://embauche.beta.gouv.fr/règle/contrat-salarié--salaire--net-après-impôt https://mon-entreprise.fr/contrat-salarié/salaire/net-après-impôt 301
https://embauche.beta.gouv.fr/règle/prime-de-fin-de-contrat https://mon-entreprise.fr/contrat-salarié/CDD/prime-de-fin-de-contrat 301
https://embauche.beta.gouv.fr/règle/contrat-salarié--salaire--brut-de-base https://mon-entreprise.fr/contrat-salarié/salaire/brut-de-base 301
https://embauche.beta.gouv.fr/règle/contrat-salarié--rémunération-total https://mon-entreprise.fr/contrat-salarié/rémunération/total 301
https://embauche.beta.gouv.fr/règle/contribution-au-dialogue-social https://mon-entreprise.fr/contrat-salarié/contribution-au-dialogue-social 301
https://embauche.beta.gouv.fr/règle/contrat-salarié--CDD--motif--complément-formation https://mon-entreprise.fr/contrat-salarié/CDD/motif/complément-formation 301
https://embauche.beta.gouv.fr/règle/* https://mon-entreprise.fr/documentation/:splat 301
/documentation/contrat-salarié/salaire/* /documentation/contrat-salarié/rémunération/:splat 301

View File

@ -1,11 +1,6 @@
# Redirect for google SEO. See also _redirects file
[[redirects]]
from = "/documentation/salaire/*"
to = "/documentation/rémunération/:splat"
status = 302
# InFrance PRODUCTION settings
[[redirects]]

View File

@ -30,7 +30,8 @@
"i18next": "^14.1.1",
"iframe-resizer": "^4.1.1",
"js-yaml": "^3.13.1",
"nearley": "^2.16.0",
"moo": "^0.5.0",
"nearley": "^2.19.0",
"ramda": "^0.25.0",
"raven-for-redux": "^1.3.1",
"raven-js": "^3.26.4",

View File

@ -43,7 +43,7 @@ type Props = OwnProps & {
}
let getBranchIndex = branch =>
({ assimilé: 0, indépendant: 1, 'auto entrepreneur': 2 }[branch])
({ assimilé: 0, indépendant: 1, 'auto-entrepreneur': 2 }[branch])
let getRuleFrom = analyses => (branch, dottedName) => {
let i = getBranchIndex(branch)
return getRuleFromAnalysis(analyses[i])(dottedName)
@ -360,7 +360,7 @@ const SchemeComparaison = ({
'Plafond de CA dépassé'
) : (
<RuleValueLink
branch="auto entrepreneur"
branch="auto-entrepreneur"
rule="revenu net après impôt"
/>
)}
@ -388,8 +388,8 @@ const SchemeComparaison = ({
'—'
) : (
<RuleValueLink
branch="auto entrepreneur"
rule="auto entrepreneur . revenu net de cotisations"
branch="auto-entrepreneur"
rule="auto-entrepreneur . revenu net de cotisations"
/>
)}
</div>
@ -438,12 +438,12 @@ const SchemeComparaison = ({
{plafondAutoEntrepreneurDépassé ? (
'—'
) : getRule(
'auto entrepreneur',
'auto-entrepreneur',
'protection sociale . retraite'
).applicable !== false ? (
<span>
<RuleValueLink
branch="auto entrepreneur"
branch="auto-entrepreneur"
rule="protection sociale . retraite"
/>{' '}
<InfoBulle>
@ -485,7 +485,7 @@ const SchemeComparaison = ({
'—'
) : (
<RuleValueLink
branch="auto entrepreneur"
branch="auto-entrepreneur"
rule="protection sociale . retraite . trimestres validés par an"
appendText={<T>trimestres</T>}
unit={null}
@ -538,7 +538,7 @@ const SchemeComparaison = ({
) : (
<span>
<RuleValueLink
branch="auto entrepreneur"
branch="auto-entrepreneur"
rule="protection sociale . santé . indemnités journalières"
appendText={
<>

View File

@ -170,7 +170,7 @@ export default compose(
to={
dottedName.includes('contrat salarié')
? sitePaths.sécuritéSociale.salarié
: dottedName.includes('auto entrepreneur')
: dottedName.includes('auto-entrepreneur')
? sitePaths.sécuritéSociale['auto-entrepreneur']
: dottedName.includes('indépendant')
? sitePaths.sécuritéSociale.indépendant

View File

@ -39,7 +39,7 @@ questions:
- contrat salarié . régime des impatriés
situation:
auto entrepreneur: non
auto-entrepreneur: non
indépendant: non
contrat salarié . assimilé salarié: oui
contrat salarié . temps partiel: non

View File

@ -1,21 +1,21 @@
objectifs:
- entreprise . chiffre d'affaires
- auto entrepreneur . cotisations et contributions
- auto entrepreneur . revenu net de cotisations
- auto-entrepreneur . cotisations et contributions
- auto-entrepreneur . revenu net de cotisations
- impôt
- revenu net après impôt
questions:
à l'affiche:
Type d'activité: entreprise . catégorie d'activité
Versement libératoire: auto entrepreneur . impôt . versement libératoire
Versement libératoire: auto-entrepreneur . impôt . versement libératoire
Impôt sur le revenu: impôt . méthode de calcul
ACRE: entreprise . ACRE
liste noire:
- entreprise . charges
situation:
auto entrepreneur: oui
auto-entrepreneur: oui
indépendant: non
contrat salarié: non
période: année

View File

@ -24,6 +24,6 @@ questions:
situation:
indépendant: oui
auto entrepreneur: non
auto-entrepreneur: non
contrat salarié: non
période: année

View File

@ -24,7 +24,7 @@ situation:
branches:
- nom: Assimilé salarié
situation:
auto entrepreneur: non
auto-entrepreneur: non
indépendant: non
contrat salarié: oui
contrat salarié . assimilé salarié: oui
@ -32,10 +32,10 @@ branches:
- nom: Indépendant
situation:
indépendant: oui
auto entrepreneur: non
auto-entrepreneur: non
contrat salarié: non
- nom: Auto-entrepreneur
situation:
auto entrepreneur: oui
auto-entrepreneur: oui
indépendant: non
contrat salarié: non

View File

@ -31,5 +31,5 @@ questions:
situation:
contrat salarié . assimilé salarié: non
indépendant: non
auto entrepreneur: non
auto-entrepreneur: non
période: mois

View File

@ -212,7 +212,6 @@
display: flex;
user-select: text;
align-items: baseline;
flex-wrap: wrap;
padding: 1rem;
background: white;
color: var(--darkColour);

View File

@ -15,7 +15,6 @@ export default function withSitePaths<Props: { sitePaths: SitePaths }>(
constructor(props) {
super(props)
i18n.on('languageChanged', () => {
console.log('zop')
this.forceUpdate()
})
}

View File

@ -31,20 +31,6 @@ export let mergeMissing = (left, right) =>
export let evaluateNode = (cache, situationGate, parsedRules, node) =>
node.evaluate ? node.evaluate(cache, situationGate, parsedRules, node) : node
export let rewriteNode = (
node,
nodeValue,
explanation,
missingVariables,
lazyEval
) => ({
...node,
nodeValue,
explanation,
missingVariables,
lazyEval
})
export let evaluateArray = (reducer, start) => (
cache,
situationGate,
@ -60,8 +46,7 @@ export let evaluateArray = (reducer, start) => (
: reduce(reducer, start, values),
missingVariables =
node.nodeValue == null ? mergeAllMissing(explanation) : {}
// console.log("".padStart(cache.parseLevel), missingVariables)
return rewriteNode(node, nodeValue, explanation, missingVariables)
return { ...node, nodeValue, explanation, missingVariables }
}
export let evaluateArrayWithFilter = (evaluationFilter, reducer, start) => (
@ -83,7 +68,7 @@ export let evaluateArrayWithFilter = (evaluationFilter, reducer, start) => (
missingVariables =
node.nodeValue == null ? mergeAllMissing(explanation) : {}
return rewriteNode(node, nodeValue, explanation, missingVariables)
return { ...node, nodeValue, explanation, missingVariables }
}
export let defaultNode = nodeValue => ({
@ -123,8 +108,7 @@ export let evaluateObject = (objectShape, effect) => (
: automaticExplanation,
nodeValue = is(Object, evaluated) ? evaluated.nodeValue : evaluated,
missingVariables = mergeAllMissing(values(explanation))
// console.log("".padStart(cache.parseLevel),map(node => length(flatten(collectNodeMissing(node))) ,explanation))
return rewriteNode(node, nodeValue, explanation, missingVariables)
return { ...node, nodeValue, explanation, missingVariables }
}
export let E = (cache, situationGate, parsedRules) => {

View File

@ -6,80 +6,89 @@
@{%
import {string, filteredVariable, variable, temporalVariable, operation, boolean, number, percentage } from './grammarFunctions'
const moo = require("moo");
const letter = '[a-zA-Z\u00C0-\u017F]';
const letterOrNumber = '[a-zA-Z\u00C0-\u017F0-9\']';
const word = `${letter}(?:[\-']?${letterOrNumber}+)*`;
const words = `${word}(?: ${word}|${letterOrNumber}*)*`
const numberRegExp = '-?(?:[1-9][0-9]+|[0-9])(?:\.[0-9]+)?';
const percentageRegExp = numberRegExp + '\\%'
const lexer = moo.compile({
percentage: new RegExp(percentageRegExp),
number: new RegExp(numberRegExp),
'(': '(',
')': ')',
'[': '[',
']': ']',
comparisonOperator: ['>','<','>=','<=','=','!='],
additionSubstractionOperator: /[\+-]/,
multiplicationDivisionOperator: ['*','/'],
temporality: ['annuel' , 'mensuel'],
words: new RegExp(words),
string: /'[ \t\.'a-zA-Z\-\u00C0-\u017F0-9 ]+'/,
dot: ' . ',
_: { match: /[\s]/, lineBreaks: true }
});
%}
@lexer lexer
main ->
AdditionSubstraction {% id %}
| Comparison {% id %}
| NonNumericTerminal {% id %}
AdditionSubstraction {% id %}
| Comparison {% id %}
| NonNumericTerminal {% id %}
NumericTerminal ->
Variable {% id %}
| TemporalVariable {% id %}
| FilteredVariable {% id %}
| percentage {% id %}
| number {% id %}
Variable {% id %}
| TemporalVariable {% id %}
| FilteredVariable {% id %}
| number {% id %}
Parentheses -> "(" AdditionSubstraction ")" {% ([,e]) => e %}
| NumericTerminal {% id %}
Parentheses ->
"(" AdditionSubstraction ")" {% ([,e]) => e %}
| NumericTerminal {% id %}
ComparisonOperator -> ">" | "<" | ">=" | "<=" | "=" | "!="
Comparison -> Comparable _ ComparisonOperator _ Comparable {% operation('comparison')%}
Comparison -> Comparable %_ %comparisonOperator %_ Comparable {% operation('comparison')%}
Comparable -> ( AdditionSubstraction | NonNumericTerminal) {% ([[e]]) => e %}
NonNumericTerminal ->
Boolean {% id %}
| String {% id %}
boolean {% id %}
| string {% id %}
FilteredVariable -> Variable _ Filter {% filteredVariable %}
Filter -> "[" VariableFragment "]" {% ([,filter]) => filter %}
Variable -> %words (%dot %words {% ([,words]) => words %}):* {% variable %}
TemporalVariable -> Variable _ TemporalTransform {% temporalVariable %}
TemporalTransform -> "[" Temporality "]" {% d =>d[1] %}
Filter -> "[" %words "]" {% ([,filter]) => filter %}
FilteredVariable -> Variable %_ Filter {% filteredVariable %}
TemporalTransform -> "[" %temporality "]" {% ([,temporality]) => temporality %}
TemporalVariable -> Variable %_ TemporalTransform {% temporalVariable %}
Temporality -> "annuel" | "mensuel" {% id %}
#-----
# Addition and subtraction
AdditionSubstraction -> AdditionSubstraction _ AdditionSubstractionOperator _ MultiplicationDivision {% operation('calculation') %}
| MultiplicationDivision {% id %}
AdditionSubstraction ->
AdditionSubstraction %_ %additionSubstractionOperator %_ MultiplicationDivision {% operation('calculation') %}
| MultiplicationDivision {% id %}
AdditionSubstractionOperator -> "+" {% id %}
| "-" {% id %}
MultiplicationDivisionOperator -> "*" {% id %}
| "/" {% id %}
# Multiplication and division
MultiplicationDivision -> MultiplicationDivision _ MultiplicationDivisionOperator _ Parentheses {% operation('calculation') %}
| Parentheses {% id %}
Variable -> VariableFragment (_ Dot _ VariableFragment {% ([,,,fragment]) => fragment %}):*
{% variable %}
String -> "'" [ .'a-zA-Z\-\u00C0-\u017F0-9 ]:+ "'" {% string %}
VariableFragment -> VariableWordWithoutNumber (_ VariableWord {% d=> ' ' + d[1] %}):* {% d => d[0] + d[1].join('') %}
VariableWordWithoutNumber -> [a-zA-Z\u00C0-\u017F] [\-'a-zA-Z\u00C0-\u017F]:* {% d => d[0] + d[1].join('') %}
VariableWord -> [a-zA-Z\u00C0-\u017F0-9] [\-'a-zA-Z\u00C0-\u017F0-9]:* {% d => d[0] + d[1].join('') %}
Dot -> [\.] {% d => null %}
_ -> [\s] {% d => null %}
MultiplicationDivision ->
MultiplicationDivision %_ %multiplicationDivisionOperator %_ Parentheses {% operation('calculation') %}
| Parentheses {% id %}
number -> [0-9]:+ ([\.] [0-9]:+):? {% number %}
boolean ->
"oui" {% boolean(true) %}
| "non" {% boolean(false) %}
percentage -> [0-9]:+ ([\.] [0-9]:+):? [\%] {% percentage %}
Boolean -> (
"oui"
| "non" ) {% boolean %}
number ->
%number {% number %}
| %percentage {% percentage %}
string -> %string {% string %}

View File

@ -1,4 +1,4 @@
/* Those are postprocessor functions for the Nearley grammar.ne.
/* Those are postprocessor functions for the Nearley grammar.ne.
The advantage of putting them here is to get prettier's JS formatting, since Nealrey doesn't support it https://github.com/kach/nearley/issues/310 */
import { parseUnit } from 'Engine/units'
@ -9,7 +9,11 @@ export let operation = operationType => ([A, , operator, , B]) => ({
}
})
export let filteredVariable = ([{ variable }, , filter], l, reject) =>
export let filteredVariable = (
[{ variable }, , { value: filter }],
l,
reject
) =>
['mensuel', 'annuel'].includes(filter)
? reject
: { filter: { filter, explanation: variable } }
@ -18,10 +22,11 @@ export let temporalVariable = ([{ variable }, , temporalTransform]) => ({
temporalTransform: { explanation: variable, temporalTransform }
})
export let variable = ([firstFragment, nextFragments], l, reject) => {
let fragments = [firstFragment, ...nextFragments]
if (fragments.length === 1 && ['oui', 'non'].includes(fragments[0]))
export let variable = ([firstFragment, nextFragment], _, reject) => {
const fragments = [firstFragment, ...nextFragment].map(({ value }) => value)
if (!nextFragment.length && ['oui', 'non'].includes(firstFragment)) {
return reject
}
return {
variable: {
fragments
@ -29,37 +34,30 @@ export let variable = ([firstFragment, nextFragments], l, reject) => {
}
}
export let number = d => ({
export let number = ([{ value }]) => ({
constant: {
rawNode: d,
nodeValue: parseFloat(
d[0].join('') + (d[1] ? d[1][0] + d[1][1].join('') : '')
)
nodeValue: parseFloat(value)
}
})
export let percentage = d => ({
export let percentage = ([{ value }]) => ({
constant: {
rawNode: d,
type: 'percentage',
unit: parseUnit('%'),
nodeValue:
parseFloat(d[0].join('') + (d[1] ? d[1][0] + d[1][1].join('') : '')) / 100
nodeValue: parseFloat(value.slice(0, -1)) / 100
}
})
export let boolean = ([val]) => ({
export let boolean = nodeValue => () => ({
constant: {
rawNode: val,
type: 'boolean',
nodeValue: { oui: true, non: false }[val]
nodeValue
}
})
export let string = d => ({
export let string = ([{ value }]) => ({
constant: {
type: 'string',
nodeValue: d[1].join(''),
rawNode: d[1].join('')
nodeValue: value.slice(1, -1)
}
})

View File

@ -38,8 +38,7 @@ import {
makeJsx,
mergeAllMissing,
mergeMissing,
parseObject,
rewriteNode
parseObject
} from './evaluation'
import Allègement from './mecanismViews/Allègement'
import { Node, SimpleRuleLink } from './mecanismViews/common'
@ -88,7 +87,7 @@ export let mecanismOneOf = (recurse, k, v) => {
? reduce(mergeWith(max), {}, map(collectNodeMissing, explanation))
: {}
return rewriteNode(node, nodeValue, explanation, missingVariables)
return { ...node, nodeValue, explanation, missingVariables }
}
return {
@ -133,7 +132,7 @@ export let mecanismAllOf = (recurse, k, v) => {
: true,
missingVariables = nodeValue == null ? mergeAllMissing(explanation) : {}
return rewriteNode(node, nodeValue, explanation, missingVariables)
return { ...node, nodeValue, explanation, missingVariables }
}
return {
@ -231,7 +230,7 @@ export let mecanismNumericalSwitch = (recurse, k, v) => {
? choice.missingVariables
: mergeAllMissing(explanation)
return rewriteNode(node, nodeValue, explanation, missingVariables)
return { ...node, nodeValue, explanation, missingVariables }
}
let explanation = map(parseCondition, terms)
@ -374,12 +373,15 @@ export let mecanismInversion = dottedName => (recurse, k, v) => {
given: inversion.inversedWith.rule.dottedName,
estimated: dottedName
}
let evaluatedNode = rewriteNode(
node,
let evaluatedNode = {
...node,
nodeValue,
{ ...node.explanation, inversedWith: inversion?.inversedWith },
explanation: {
...node.explanation,
inversedWith: inversion?.inversedWith
},
missingVariables
)
}
// TODO - we need this so that ResultsGrid will work, but it's
// just not right
toPairs(inversion.inversionCache).map(([k, v]) => (cache[k] = v))
@ -665,7 +667,7 @@ export let mecanismSynchronisation = (recurse, k, v) => {
let missingVariables =
val(APIExplanation) === null ? { [APIExplanation.dottedName]: 1 } : {}
let explanation = { ...v, API: APIExplanation }
return rewriteNode(node, safeNodeValue, explanation, missingVariables)
return { ...node, nodeValue: safeNodeValue, explanation, missingVariables }
}
return {

View File

@ -1,10 +1,10 @@
import { defaultNode, E, rewriteNode } from 'Engine/evaluation'
import variations from 'Engine/mecanisms/variations'
import { defaultNode, E } from 'Engine/evaluation'
import { decompose } from 'Engine/mecanisms/utils'
import variations from 'Engine/mecanisms/variations'
import Barème from 'Engine/mecanismViews/Barème'
import { val } from 'Engine/traverse-common-functions'
import { evolve, has, pluck, sum } from 'ramda'
import { inferUnit, parseUnit } from 'Engine/units'
import { evolve, has, pluck, sum } from 'ramda'
export let desugarScale = recurse => tranches =>
tranches
@ -68,16 +68,16 @@ export default (recurse, k, v) => {
}),
nodeValue = sum(pluck('value', tranches))
return rewriteNode(
node,
return {
...node,
nodeValue,
{
explanation: {
...explanation,
tranches
},
e.missingVariables(),
e.valNode
)
missingVariables: e.missingVariables(),
lazyEval: e.valNode
}
}
return {

View File

@ -1,13 +1,8 @@
import React from 'react'
import { curry, map } from 'ramda'
import { inferUnit } from 'Engine/units'
import {
evaluateNode,
makeJsx,
mergeMissing,
rewriteNode
} from 'Engine/evaluation'
import { evaluateNode, makeJsx, mergeMissing } from 'Engine/evaluation'
import { Node } from 'Engine/mecanismViews/common'
import { inferUnit } from 'Engine/units'
import { curry, map } from 'ramda'
import React from 'react'
export default (k, operatorFunction, symbol) => (recurse, k, v) => {
let evaluate = (cache, situation, parsedRules, node) => {
@ -26,7 +21,7 @@ export default (k, operatorFunction, symbol) => (recurse, k, v) => {
explanation[1].missingVariables
)
return rewriteNode(node, nodeValue, explanation, missingVariables)
return { ...node, nodeValue, explanation, missingVariables }
}
let explanation = v.explanation.map(recurse)
@ -43,7 +38,6 @@ export default (k, operatorFunction, symbol) => (recurse, k, v) => {
<span className="fa fa" />
{makeJsx(explanation[0])}
<span className="operator">{symbol || k}</span>
{makeJsx(explanation[1])}
</span>
}
@ -55,7 +49,6 @@ export default (k, operatorFunction, symbol) => (recurse, k, v) => {
evaluate,
jsx,
operator: symbol || k,
// is this useful ? text: rawNode,
explanation,
unit
}

View File

@ -1,14 +1,13 @@
import { inferUnit } from 'Engine/units'
import {
bonus,
collectNodeMissing,
evaluateNode,
mergeAllMissing,
mergeMissing,
rewriteNode
mergeMissing
} from 'Engine/evaluation'
import { reject, pluck, isNil, filter, dissoc, reduce } from 'ramda'
import Variations from 'Engine/mecanismViews/Variations'
import { inferUnit } from 'Engine/units'
import { dissoc, filter, isNil, pluck, reduce, reject } from 'ramda'
/* @devariate = true => This function will produce variations of a same mecanism (e.g. product) that share some common properties */
export default (recurse, k, v, devariate) => {
@ -78,11 +77,15 @@ export default (recurse, k, v, devariate) => {
? collectNodeMissing(satisfiedVariation.consequence)
: mergeMissing(bonus(leftMissing), rightMissing)
return rewriteNode(node, nodeValue, resolvedExplanation, missingVariables)
return {
...node,
nodeValue,
explanation: resolvedExplanation,
missingVariables
}
}
// TODO - find an appropriate representation
return {
explanation,
evaluate,

View File

@ -5,30 +5,29 @@
import barème from 'Engine/mecanisms/barème'
import barèmeContinu from 'Engine/mecanisms/barème-continu'
import barèmeLinéaire from 'Engine/mecanisms/barème-linéaire'
import variations from 'Engine/mecanisms/variations'
import operation from 'Engine/mecanisms/operation'
import { Parser } from 'nearley'
import variations from 'Engine/mecanisms/variations'
import { Grammar, Parser } from 'nearley'
import {
add,
cond,
divide,
equals,
fromPairs,
gt,
gte,
is,
keys,
without,
lt,
lte,
multiply,
propOr,
subtract,
fromPairs,
is,
cond,
T
T,
without
} from 'ramda'
import React from 'react'
import Grammar from './grammar.ne'
import grammar from './grammar.ne'
import {
mecanismAllOf,
mecanismComplement,
@ -38,11 +37,11 @@ import {
mecanismMin,
mecanismNumericalSwitch,
mecanismOneOf,
mecanismOnePossibility,
mecanismProduct,
mecanismReduction,
mecanismSum,
mecanismSynchronisation,
mecanismOnePossibility
mecanismSynchronisation
} from './mecanisms'
import { parseReferenceTransforms } from './parseReference'
@ -62,15 +61,13 @@ export let parse = (rules, rule, parsedRules) => rawNode => {
: { ...parsedNode, evaluate: defaultEvaluate }
}
export let nearley = () => new Parser(Grammar.ParserRules, Grammar.ParserStart)
const compiledGrammar = Grammar.fromCompiled(grammar)
export let parseString = (rules, rule, parsedRules) => rawNode => {
/* Strings correspond to infix expressions.
* Indeed, a subset of expressions like simple arithmetic operations `3 + (quantity * 2)` or like `salary [month]` are more explicit that their prefixed counterparts.
* This function makes them prefixed operations. */
let [parseResult] = nearley().feed(rawNode).results
let [parseResult] = new Parser(compiledGrammar).feed(rawNode).results
return parseObject(rules, rule, parsedRules)(parseResult)
}
@ -93,7 +90,7 @@ export let parseObject = (rules, rule, parsedRules) => rawNode => {
let mecanisms = intersection(keys(rawNode), keys(knownMecanisms))
if (mecanisms.length != 1) {
}
}
*/
let attributes = keys(rawNode),
@ -162,7 +159,7 @@ export let parseObject = (rules, rule, parsedRules) => rawNode => {
nodeValue: v.nodeValue,
unit: v.unit,
// eslint-disable-next-line
jsx: () => <span className={v.type}>{v.rawNode}</span>
jsx: () => <span className={v.type}>{v.nodeValue}</span>
})
},
action = propOr(mecanismError, k, dispatch)

View File

@ -1,7 +1,7 @@
// Reference to a variable
import parseRule from 'Engine/parseRule'
import React from 'react'
import { evaluateNode, rewriteNode } from './evaluation'
import { evaluateNode } from './evaluation'
import { getSituationValue } from './getSituationValue'
import { Leaf } from './mecanismViews/common'
import {
@ -50,12 +50,12 @@ export let parseReference = (rules, rule, parsedRules, filter) => ({
: variable
let cacheAndNode = (nodeValue, missingVariables, customExplanation) => {
cache[cacheName] = rewriteNode(
node,
cache[cacheName] = {
...node,
nodeValue,
customExplanation || explanation,
explanation: customExplanation || explanation,
missingVariables
)
}
return cache[cacheName]
}
const variableScore = variable.defaultValue ? 1 : 2
@ -187,16 +187,14 @@ export let parseReferenceTransforms = (
: nodeValue,
periodTransform = nodeValue !== transformedNodeValue
let result = rewriteNode(
{
...filteredNode,
periodTransform: periodTransform,
...(periodTransform ? { originPeriodValue: nodeValue } : {})
},
transformedNodeValue,
filteredNode.explanation,
filteredNode.missingVariables
)
let result = {
...filteredNode,
periodTransform,
...(periodTransform ? { originPeriodValue: nodeValue } : {}),
nodeValue: transformedNodeValue,
explanation: filteredNode.explanation,
missingVariables: filteredNode.missingVariables
}
return result
}

View File

@ -5,7 +5,7 @@ import evaluate from 'Engine/evaluateRule'
import { parse } from 'Engine/parse'
import { evolve, map } from 'ramda'
import React from 'react'
import { evaluateNode, makeJsx, rewriteNode } from './evaluation'
import { evaluateNode, makeJsx } from './evaluation'
import { Node } from './mecanismViews/common'
import { disambiguateRuleReference, findParentDependency } from './rules'
@ -82,7 +82,7 @@ export default (rules, rule, parsedRules) => {
nodeValue = explanation.nodeValue,
missingVariables = explanation.missingVariables
return rewriteNode(node, nodeValue, explanation, missingVariables)
return { ...node, nodeValue, explanation, missingVariables }
}
let child = parse(rules, rule, parsedRules)(value)
@ -177,7 +177,7 @@ let evolveCond = (name, rule, rules, parsedRules) => value => {
nodeValue = explanation.nodeValue,
missingVariables = explanation.missingVariables
return rewriteNode(node, nodeValue, explanation, missingVariables)
return { ...node, nodeValue, explanation, missingVariables }
}
let child = parse(rules, rule, parsedRules)(value)

View File

@ -84,9 +84,19 @@ export let nameLeaf = pipe(
)
export let encodeRuleName = name =>
encodeURI(name.replace(/\s\.\s/g, '/').replace(/\s/g, '-'))
encodeURI(
name
.replace(/\s\.\s/g, '/')
.replace(/-/g, '\u2011') // replace with a insecable tiret to differenciate from space
.replace(/\s/g, '-')
)
export let decodeRuleName = name =>
decodeURI(name.replace(/\//g, ' . ').replace(/-/g, ' '))
decodeURI(
name
.replace(/\//g, ' . ')
.replace(/-/g, ' ')
.replace(/\u2011/g, '-')
)
export let ruleParents = dottedName => {
let fragments = splitName(dottedName) // dottedName ex. [CDD . événements . rupture]
@ -232,7 +242,7 @@ export let findParentDependency = (rules, rule) => {
reject(isNil),
find(
//Find the first "calculable" parent
({ question, unit, formule, name }) =>
({ question, unit, formule }) =>
(question && !unit && !formule) ||
(question && formule?.['une possibilité'] !== undefined) ||
(typeof formule === 'string' && formule.includes(' = ')) //implicitly, the format is boolean

View File

@ -1,9 +1,13 @@
import { evaluateControls } from 'Engine/controls';
import parseRule from 'Engine/parseRule';
import { chain, path } from 'ramda';
import { evaluateNode } from './evaluation';
import { parseReference } from './parseReference';
import { findRule, findRuleByDottedName, disambiguateRuleReference } from './rules';
import { evaluateControls } from 'Engine/controls'
import parseRule from 'Engine/parseRule'
import { chain, path } from 'ramda'
import { evaluateNode } from './evaluation'
import { parseReference } from './parseReference'
import {
disambiguateRuleReference,
findRule,
findRuleByDottedName
} from './rules'
/*
Dans ce fichier, les règles YAML sont parsées.
@ -65,7 +69,7 @@ export let parseAll = flatRules => {
)
})
})
/* Then we need to infer units. Since only references to variables have been created, we need to wait for the latter map to complete before starting this job. Consider this example :
/* Then we need to infer units. Since only references to variables have been created, we need to wait for the latter map to complete before starting this job. Consider this example :
A = B * C
B = D / E

View File

@ -557,7 +557,7 @@ Plusieurs associés: Several partners
Un seul associé: Only one partner
Responsabilité limitée: Limited liability
Sans responsabilité limitée: Without limited liability
Pas en auto entrepreneur: Not in auto-entrepreneur
Pas en auto-entrepreneur: Not in auto-entrepreneur
Précédent: Previous
Choisir plus tard: Choose later

View File

@ -1310,7 +1310,7 @@
type: rémunération
unité:
période: flexible
formule: rémunération . brut - cotisations . salariales
formule: brut - cotisations . salariales
- espace: contrat salarié . rémunération
nom: net imposable
@ -3267,7 +3267,7 @@
assiette: revenu imposable
taux: taux personnalisé
- CEHR
- auto entrepreneur . impôt . versement libératoire . montant
- auto-entrepreneur . impôt . versement libératoire . montant
- espace: impôt
nom: méthode de calcul
@ -3281,7 +3281,7 @@
question: Comment souhaitez-vous calculer l'impôt sur le revenu ?
# applicable si: revenu imposable > 0
# bizarrement, cette condition ne semble pas marcher, on se résout donc à utiliser une version plus "hacky" et moins proche de la loi. Elle posera problème le jour où l'on aura a calculer l'impot avec plusieurs sources de revenu
non applicable si: auto entrepreneur . impôt . versement libératoire
non applicable si: auto-entrepreneur . impôt . versement libératoire
période: aucune
par défaut: barème standard
formule:
@ -3322,7 +3322,7 @@
somme:
- contrat salarié . rémunération . net imposable
- indépendant . revenu professionnel
- auto entrepreneur . impôt . revenu imposable
- auto-entrepreneur . impôt . revenu imposable
- espace: impôt
nom: revenu abattu
@ -3333,7 +3333,7 @@
formule:
somme:
- revenu abattu par défaut
- auto entrepreneur . impôt . revenu imposable
- auto-entrepreneur . impôt . revenu imposable
- espace: impôt
nom: revenu abattu par défaut
@ -3407,7 +3407,7 @@
formule:
somme:
- revenu abattu par défaut
- auto entrepreneur . impôt . revenu abattu
- auto-entrepreneur . impôt . revenu abattu
- contrat salarié . prime d'impatriation
références:
Article 1417 du Code général des impôts: https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000034596743&cidTexte=LEGITEXT000006069577&categorieLien=id&dateTexte=20170505
@ -3442,7 +3442,7 @@
somme:
- contrat salarié . rémunération . net
- indépendant . revenu net de cotisations
- auto entrepreneur . revenu net de cotisations
- auto-entrepreneur . revenu net de cotisations
- nom: revenu net après impôt
unité:
@ -3559,11 +3559,11 @@
variations:
- si: indépendant
alors: revenu net de cotisations + indépendant . cotisations et contributions
- si: auto entrepreneur
- si: auto-entrepreneur
alors:
inversion numérique:
avec:
- auto entrepreneur . revenu net de cotisations
- auto-entrepreneur . revenu net de cotisations
- revenu net après impôt
- entreprise . chiffre d'affaires
- entreprise . chiffre d'affaires minimum
@ -3577,7 +3577,7 @@
question: Quelles sont les charges de l'entreprise ?
description: |
Ce sont les dépenses de l'entreprise engagées dans l'intérêt de celle-ci, hors rémunération du dirigeant. Pour les sociétés et entreprises hors auto entrepreneur, ces charges sont dites déductibles du résultat : l'entreprise ne paiera pas de cotisations ou impôt dessus. Pour l'auto entrepreneur, elles ne sont pas déductibles du chiffre d'affaire encaissé.
Ce sont les dépenses de l'entreprise engagées dans l'intérêt de celle-ci, hors rémunération du dirigeant. Pour les sociétés et entreprises hors auto-entrepreneur, ces charges sont dites déductibles du résultat : l'entreprise ne paiera pas de cotisations ou impôt dessus. Pour l'auto-entrepreneur, elles ne sont pas déductibles du chiffre d'affaire encaissé.
Nous ne traitons pas encore la TVA : les charges sont à renseigner hors taxe (excepté pour les auto-entrepreneurs en franchise de TVA)
@ -3894,7 +3894,7 @@
- entreprise . date de création = 'avant 2019'
- entreprise . catégorie d'activité = 'libérale'
- toutes ces conditions:
- auto entrepreneur
- auto-entrepreneur
- entreprise . date de création = 'avant 2018'
- entreprise . catégorie d'activité = 'libérale'
@ -4196,7 +4196,7 @@
1.1: 0%
1.4: 3.1%
- nom: auto entrepreneur
- nom: auto-entrepreneur
icônes: 🚶
par défaut: non
question: L'activité est-elle exercée en auto-entreprise ?
@ -4205,7 +4205,7 @@
rend non applicable:
- contrat salarié
- espace: auto entrepreneur
- espace: auto-entrepreneur
nom: base des cotisations
formule: entreprise . chiffre d'affaires
période: flexible
@ -4214,7 +4214,7 @@
message: Seuil de chiffre d'affaires dépassé. [En savoir plus](/documentation/auto-entrepreneur/plafond)
niveau: avertissement
- espace: auto entrepreneur
- espace: auto-entrepreneur
nom: plafond
description: |
Le statut de micro-entrepreneur s'applique tant que le chiffre d'affaires annuel (effectivement encaissé au cours de l'année civile) ne dépasse pas un certain seuil, qui dépend de sa catégorie d'activité.
@ -4237,7 +4237,7 @@
alors: 170000
- sinon: 70000
- espace: auto entrepreneur
- espace: auto-entrepreneur
nom: revenu net de cotisations
résumé: Avant impôt
question: Quel revenu avant impôt voulez-vous toucher ?
@ -4246,7 +4246,7 @@
période: flexible
unité:
- espace: auto entrepreneur
- espace: auto-entrepreneur
nom: cotisations et contributions
unité:
formule:
@ -4259,7 +4259,7 @@
Imposition du micro-entrepreneur: https://www.service-public.fr/professionnels-entreprises/vosdroits/F23267
période: flexible
- espace: auto entrepreneur . cotisations et contributions
- espace: auto-entrepreneur . cotisations et contributions
nom: TFC
titre: Taxes pour frais de chambre
unité:
@ -4276,7 +4276,7 @@
- commerce
- métiers
- espace: auto entrepreneur . cotisations et contributions . TFC
- espace: auto-entrepreneur . cotisations et contributions . TFC
nom: commerce
titre: taxe pour frais de chambre de commerce
période: flexible
@ -4294,7 +4294,7 @@
alors: 0.015%
- sinon: 0.044%
- espace: auto entrepreneur . cotisations et contributions . TFC
- espace: auto-entrepreneur . cotisations et contributions . TFC
nom: métiers
période: flexible
unité:
@ -4309,7 +4309,7 @@
alors: 0.22%
- sinon: 0.48%
- espace: auto entrepreneur . cotisations et contributions
- espace: auto-entrepreneur . cotisations et contributions
nom: contribution formation professionnelle
titre: Contribution à la formation professionnelle
unité:
@ -4332,7 +4332,7 @@
alors: 0.1%
- sinon: 0
- espace: auto entrepreneur . cotisations et contributions
- espace: auto-entrepreneur . cotisations et contributions
nom: cotisations
description: |
Les cotisations sociales donnent à l'auto-entrepreneur accès à une protection sociale minimale : une retraite, des soins de santé, des allocations familiales, etc.
@ -4354,7 +4354,7 @@
références:
La protection sociale du micro-entrepreneur: https://bpifrance-creation.fr/encyclopedie/micro-entreprise-regime-auto-entrepreneur/fiscal-social-comptable/protection-sociale
- espace: auto entrepreneur . cotisations et contributions . cotisations
- espace: auto-entrepreneur . cotisations et contributions . cotisations
nom: retraite complémentaire
description: Le montant total qui est alloué à la retraite complémentaire, utile pour estimer le montant total de la pension de retraite des auto-entrepreneurs
unité:
@ -4377,7 +4377,7 @@
- entreprise . catégorie d'activité = 'artisanale'
alors: 3.50%
- espace: auto entrepreneur . cotisations et contributions . cotisations
- espace: auto-entrepreneur . cotisations et contributions . cotisations
nom: taux de cotisation
description: |
Les cotisations sociales de l'auto-entreprise sont simplifiées : il n'y a qu'une ligne unique dont le taux dépend de la catégorie d'activité.
@ -4407,7 +4407,7 @@
- espace: entreprise . ACRE
nom: année
applicable si: auto entrepreneur
applicable si: auto-entrepreneur
question: Quel est l'âge de l'entreprise ?
formule:
une possibilité:
@ -4427,12 +4427,12 @@
- espace: entreprise . ACRE . année
nom: moins de trois ans
- espace: auto entrepreneur . cotisations et contributions . cotisations
- espace: auto-entrepreneur . cotisations et contributions . cotisations
nom: taux ACRE
période: flexible
formule: 100% - réduction ACRE
- espace: auto entrepreneur . cotisations et contributions . cotisations
- espace: auto-entrepreneur . cotisations et contributions . cotisations
nom: réduction ACRE
titre: réduction ACRE
applicable si: entreprise . ACRE
@ -4449,16 +4449,16 @@
références:
Fiche URSSAF: https://www.urssaf.fr/portail/home/independant/je-beneficie-dexonerations/accre.html
service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32318
- espace: auto entrepreneur . cotisations et contributions . cotisations
- espace: auto-entrepreneur . cotisations et contributions . cotisations
nom: plafond ACRE
formule: plafond sécurité sociale temps plein / impôt . abattement . taux inversé
période: flexible
- espace: auto entrepreneur
- espace: auto-entrepreneur
nom: impôt
- espace: auto entrepreneur . impôt
- espace: auto-entrepreneur . impôt
nom: abattement
période: flexible
unité: '€'
@ -4469,12 +4469,12 @@
taux: taux
- 305
- espace: auto entrepreneur . impôt . abattement
- espace: auto-entrepreneur . impôt . abattement
nom: taux inversé
description: C'est le taux à appliquer pour savoir ce qu'il reste après application de l'abattement
formule: 1 - taux
- espace: auto entrepreneur . impôt . abattement
- espace: auto-entrepreneur . impôt . abattement
nom: taux
titre: taux d'abattement de l'impôt
formule:
@ -4488,7 +4488,7 @@
alors: 71%
- sinon: 50%
- espace: auto entrepreneur . impôt
- espace: auto-entrepreneur . impôt
nom: versement libératoire
description: >
Avec l'option pour le versement libératoire, limpôt sur le revenu est payé en même temps que vos cotisations (par mois ou par trimestre) avec application dun taux spécifique en fonction de votre activité.
@ -4504,9 +4504,9 @@
niveau: info
période: aucune
- espace: auto entrepreneur . impôt . versement libératoire
- espace: auto-entrepreneur . impôt . versement libératoire
nom: montant
titre: versement libératoire auto entrepreneur
titre: versement libératoire auto-entrepreneur
description: |
Si vous avez opté pour le versement libératoire, limpôt sur le revenu est payé en même temps que vos cotisations (par mois ou par trimestre) avec application dun taux spécifique en fonction de votre activité :
@ -4531,13 +4531,13 @@
- si: entreprise . catégorie d'activité = 'libérale'
alors: 2.2%
- espace: auto entrepreneur . impôt
- espace: auto-entrepreneur . impôt
nom: revenu imposable
non applicable si: versement libératoire
période: flexible
formule: revenu abattu
- espace: auto entrepreneur . impôt
- espace: auto-entrepreneur . impôt
nom: revenu abattu
titre: revenu abattu auto-entrepreneur
période: flexible
@ -4632,7 +4632,7 @@
- somme:
- trimestres salarié
- trimestres indépendant
- trimestres auto entrepreneur
- trimestres auto-entrepreneur
- 4
- nom: trimestres salarié
@ -4681,11 +4681,11 @@
références:
cnav.fr: https://www.legislation.cnav.fr/Pages/bareme.aspx?Nom=salaire_validant_un_trimestre_montant_bar
- nom: trimestres auto entrepreneur
applicable si: auto entrepreneur
- nom: trimestres auto-entrepreneur
applicable si: auto-entrepreneur
espace: protection sociale . retraite . trimestres validés par an
période: aucune
description: Les seuils de chiffre d'affaires minimum pour la validation des trimestres pour la retraite en auto entrepreneur. En-dessous du montant minimum, vous n'aurez accès qu'à l'allocation de solidarité.
description: Les seuils de chiffre d'affaires minimum pour la validation des trimestres pour la retraite en auto-entrepreneur. En-dessous du montant minimum, vous n'aurez accès qu'à l'allocation de solidarité.
formule:
variations:
- si: entreprise . catégorie d'activité = 'libérale'
@ -4759,7 +4759,7 @@
formule:
le maximum de:
- indépendant . revenu professionnel
- auto entrepreneur . impôt . revenu imposable
- auto-entrepreneur . impôt . revenu imposable
- contrat salarié . rémunération . brut
- espace: protection sociale . retraite
@ -4834,7 +4834,7 @@
assiette:
somme:
- indépendant . cotisations et contributions . cotisations . retraite complémentaire
- auto entrepreneur . cotisations et contributions . cotisations . retraite complémentaire
- auto-entrepreneur . cotisations et contributions . cotisations . retraite complémentaire
facteur: 1 / prix d'achat du point
- espace: protection sociale . retraite . complémentaire sécurité des indépendants
@ -4879,13 +4879,13 @@
unité:
formule:
somme:
- indemnités journalières . auto entrepreneur
- indemnités journalières . auto-entrepreneur
- indemnités journalières . indépendant
- indemnités journalières . salarié
- espace: protection sociale . santé . indemnités journalières
nom: auto entrepreneur
applicable si: auto entrepreneur
nom: auto-entrepreneur
applicable si: auto-entrepreneur
période: aucune
unité:
formule:

View File

@ -2369,7 +2369,7 @@ entreprise . charges:
description.en: >
These are the company's expenses incurred in the company's interest,
excluding executive compensation. For companies and businesses excluding
auto entrepreneur, these expenses are said to be deductible from the result:
auto-entrepreneur, these expenses are said to be deductible from the result:
the company will not pay any contributions or taxes on it. For the
self-entrepreneur, they are not deductible: the contractor pays them with
his salary staff net of contributions and income.
@ -2402,7 +2402,7 @@ entreprise . charges:
Ce sont les dépenses de l'entreprise engagées dans l'intérêt de celle-ci,
hors rémunération du dirigeant. Pour les sociétés et entreprises hors auto
entrepreneur, ces charges sont dites déductibles du résultat : l'entreprise
ne paiera pas de cotisations ou impôt dessus. Pour l'auto entrepreneur,
ne paiera pas de cotisations ou impôt dessus. Pour l'auto-entrepreneur,
elles ne sont pas déductibles du chiffre d'affaire encaissé.
@ -2823,7 +2823,7 @@ indépendant . cotisations et contributions . formation professionnelle:
indépendant . cotisations et contributions . cotisations . allocations familiales:
titre.en: family allowances
titre.fr: allocations familiales
auto entrepreneur:
auto-entrepreneur:
question.en: Is the activity carried out in a auto-enterprise?
question.fr: L'activité est-elle exercée en auto-entreprise ?
description.en: |
@ -2837,9 +2837,9 @@ auto entrepreneur:
micro-entrepreneur » est un régime de travailleur indépendant créé pour
simplifier la gestion administrative, notamment en remplaçant toutes les
cotisations sociales par un prélèvement unique mensuel.
titre.en: auto entrepreneur
titre.fr: auto entrepreneur
auto entrepreneur . base des cotisations:
titre.en: auto-entrepreneur
titre.fr: auto-entrepreneur
auto-entrepreneur . base des cotisations:
contrôles.en:
- si: base des cotisations > plafond
message: >-
@ -2854,7 +2854,7 @@ auto entrepreneur . base des cotisations:
niveau: avertissement
titre.en: contribution basis
titre.fr: base des cotisations
auto entrepreneur . plafond:
auto-entrepreneur . plafond:
description.en: >
The status of microentrepreneur applies as long as the annual turnover
(actually collected during the calendar year) does not exceed a certain
@ -2874,7 +2874,7 @@ auto entrepreneur . plafond:
individuelle](/sécurité-sociale/indépendant).
titre.en: upper limit
titre.fr: plafond
auto entrepreneur . revenu net de cotisations:
auto-entrepreneur . revenu net de cotisations:
résumé.en: Before taxes
résumé.fr: Avant impôt
question.en: What pre-tax income do you want to receive?
@ -2887,22 +2887,22 @@ auto entrepreneur . revenu net de cotisations:
l'impôt sur le revenu.
titre.en: Net contribution income
titre.fr: revenu net de cotisations
auto entrepreneur . cotisations et contributions:
auto-entrepreneur . cotisations et contributions:
titre.en: Contributions
titre.fr: cotisations et contributions
auto entrepreneur . cotisations et contributions . TFC:
auto-entrepreneur . cotisations et contributions . TFC:
titre.en: Chamber taxes
titre.fr: Taxes pour frais de chambre
auto entrepreneur . cotisations et contributions . TFC . commerce:
auto-entrepreneur . cotisations et contributions . TFC . commerce:
titre.en: Chamber of Trades taxes
titre.fr: taxe pour frais de chambre de commerce
auto entrepreneur . cotisations et contributions . TFC . métiers:
auto-entrepreneur . cotisations et contributions . TFC . métiers:
titre.en: Chamber of Crafts taxes
titre.fr: taxe pour frais de chambre des métiers
? auto entrepreneur . cotisations et contributions . contribution formation professionnelle
? auto-entrepreneur . cotisations et contributions . contribution formation professionnelle
: titre.en: Contribution to vocational training
titre.fr: Contribution à la formation professionnelle
auto entrepreneur . cotisations et contributions . cotisations:
auto-entrepreneur . cotisations et contributions . cotisations:
description.en: >
Social security contributions give the self-employed entrepreneur access to
a minimum social protection: a pension, health care, social security, social
@ -2931,7 +2931,7 @@ auto entrepreneur . cotisations et contributions . cotisations:
l'ACRE, une réduction de cotisations, dégressive sur 3 ans.
titre.en: contributions
titre.fr: cotisations
auto entrepreneur . cotisations et contributions . cotisations . retraite complémentaire:
auto-entrepreneur . cotisations et contributions . cotisations . retraite complémentaire:
description.en: >-
The total amount that is allocated to the supplementary pension, useful to
estimate the total amount of the retirement pension for auto-entrepreneurs
@ -2940,7 +2940,7 @@ auto entrepreneur . cotisations et contributions . cotisations . retraite compl
estimer le montant total de la pension de retraite des auto-entrepreneurs
titre.en: supplementary pension
titre.fr: retraite complémentaire
auto entrepreneur . cotisations et contributions . cotisations . taux de cotisation:
auto-entrepreneur . cotisations et contributions . cotisations . taux de cotisation:
description.en: >
The social contributions of the self-employed are simplified: there is no
than a single line whose rate depends on the category of activity.
@ -3002,11 +3002,11 @@ entreprise . ACRE . année . moins de deux ans:
entreprise . ACRE . année . moins de trois ans:
titre.en: less than three years
titre.fr: moins de trois ans
auto entrepreneur . cotisations et contributions . cotisations . taux ACRE:
auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE:
titre.en: |
"ACRE" rate
titre.fr: taux ACRE
auto entrepreneur . cotisations et contributions . cotisations . réduction ACRE:
auto-entrepreneur . cotisations et contributions . cotisations . réduction ACRE:
titre.en: |
"ACRE" reduction
titre.fr: réduction ACRE
@ -3017,16 +3017,16 @@ auto entrepreneur . cotisations et contributions . cotisations . réduction ACRE
description.fr: >-
Ce taux peut dans certains cas réduire le montant des cotisations sociales
de l'auto-entrepreneur pour l'aider dans ses premières année d'activité.
auto entrepreneur . cotisations et contributions . cotisations . plafond ACRE:
auto-entrepreneur . cotisations et contributions . cotisations . plafond ACRE:
titre.en: ACRE upper limit
titre.fr: plafond ACRE
auto entrepreneur . impôt:
auto-entrepreneur . impôt:
titre.en: tax
titre.fr: impôt
auto entrepreneur . impôt . abattement:
auto-entrepreneur . impôt . abattement:
titre.en: allowance
titre.fr: abattement
auto entrepreneur . impôt . abattement . taux inversé:
auto-entrepreneur . impôt . abattement . taux inversé:
description.en: >-
This is the rate to be applied to determine what remains after the
application of
@ -3036,10 +3036,10 @@ auto entrepreneur . impôt . abattement . taux inversé:
l'abattement
titre.en: inverted rate
titre.fr: taux inversé
auto entrepreneur . impôt . abattement . taux:
auto-entrepreneur . impôt . abattement . taux:
titre.en: tax allowance rate
titre.fr: taux d'abattement de l'impôt
auto entrepreneur . impôt . versement libératoire:
auto-entrepreneur . impôt . versement libératoire:
description.en: >
With the option for the discharge payment, the income tax is paid at the same time as your contributions (per month or per quarter) with the application of a specific rate according to your activity. To benefit from it, your reference tax income must not exceed €27,086 in 2018
description.fr: >
@ -3069,9 +3069,9 @@ auto entrepreneur . impôt . versement libératoire:
niveau: info
titre.en: discharge payment
titre.fr: versement libératoire
auto entrepreneur . impôt . versement libératoire . montant:
titre.en: discharge payment for auto entrepreneur
titre.fr: versement libératoire auto entrepreneur
auto-entrepreneur . impôt . versement libératoire . montant:
titre.en: discharge payment for auto-entrepreneur
titre.fr: versement libératoire auto-entrepreneur
description.en: |
If you have opted for the discharge payment, the income tax is paid at the same time as your contributions (per month or per quarter) with application of a specific rate according to your activity:
@ -3094,10 +3094,10 @@ auto entrepreneur . impôt . versement libératoire . montant:
- 2,2% pour les autres prestations de services relevants des bénéfices non
commerciaux (BNC)
auto entrepreneur . impôt . revenu imposable:
auto-entrepreneur . impôt . revenu imposable:
titre.en: taxable income
titre.fr: revenu imposable
auto entrepreneur . impôt . revenu abattu:
auto-entrepreneur . impôt . revenu abattu:
titre.en: reduced income
titre.fr: revenu abattu auto-entrepreneur
protection sociale:
@ -3146,17 +3146,17 @@ protection sociale . retraite . trimestres validés par an . trimestres indépen
protection sociale . retraite . trimestres validés par an . barème trimestres générique:
titre.en: generic quarters scale
titre.fr: barème trimestres générique
protection sociale . retraite . trimestres validés par an . trimestres auto entrepreneur:
protection sociale . retraite . trimestres validés par an . trimestres auto-entrepreneur:
description.en: >-
Minimum turnover thresholds for the validation of quarters for retirement as
a self-employed entrepreneur. Below the minimum amount, you will only have
access to the solidarity allowance.
description.fr: >-
Les seuils de chiffre d'affaires minimum pour la validation des trimestres
pour la retraite en auto entrepreneur. En-dessous du montant minimum, vous
pour la retraite en auto-entrepreneur. En-dessous du montant minimum, vous
n'aurez accès qu'à l'allocation de solidarité.
titre.en: auto-entrepreneur quarters
titre.fr: trimestres auto entrepreneur
titre.fr: trimestres auto-entrepreneur
protection sociale . revenu moyen:
description.en: >-
The income used to calculate the amount of retirement pensions and daily
@ -3221,9 +3221,9 @@ protection sociale . santé . indemnités journalières:
partir de votre revenu brut et versées tous les 14 jours en moyenne.
titre.en: Daily allowances
titre.fr: indemnités journalières
protection sociale . santé . indemnités journalières . auto entrepreneur:
titre.en: auto entrepreneur
titre.fr: auto entrepreneur
protection sociale . santé . indemnités journalières . auto-entrepreneur:
titre.en: auto-entrepreneur
titre.fr: auto-entrepreneur
protection sociale . santé . indemnités journalières . indépendant:
titre.en: self employed
titre.fr: indépendant

View File

@ -1,12 +1,14 @@
html,
body,
#js {
min-height: 100%;
height: 100%;
overflow: hidden;
}
.app-container {
position: relative;
width: 100%;
overflow: auto;
height: 100vh;
}
.app-content {
@ -22,8 +24,6 @@ body,
flex: 1;
}
.app-container {
overflow: auto;
min-height: 100vh;
height: auto;
}
}

View File

@ -75,9 +75,7 @@ function InFranceRoute({ basename, language }) {
...retrievePersistedState(),
previousSimulation: retrievePersistedSimulation()
}}>
<div id="content">
<RouterSwitch />
</div>
<RouterSwitch />
</Provider>
)
}

View File

@ -20,6 +20,7 @@
}
.sidebar__container.opened + * {
transform: translateX(100%);
overflow: hidden;
}
.menu__button {
position: absolute;

View File

@ -54,7 +54,7 @@
plateformes:
- Deliveroo
- Uber
- Academia
- Malt
- plateformes de jobbing (Youpijob, Frizbiz)
seuil pro: 0
explication: |

View File

@ -62,7 +62,7 @@ describe('bug-analyse-many', function() {
const situationSelector = dottedName =>
({
'contrat salarié . rémunération . net de cotisations': 3500,
'auto entrepreneur': 'non',
'auto-entrepreneur': 'non',
'contrat salarié': 'oui',
'contrat salarié . assimilé salarié': 'oui',
'contrat salarié . ATMP . taux réduit': 'oui',

View File

@ -104,7 +104,6 @@
nombre de personnes: 10
valeur attendue: 300
- test: comparaison stricte
formule: salaire de base < 3001
exemples:
@ -215,16 +214,23 @@
- situation:
revenu: 1000
valeur attendue: 12000
##############
# Hors limite aujourd'hui
#- test: opérations multiples
# formule: 4 * plafond sécurité sociale * 12
#
#- test: comparaison et opération
# formule: salaire de base < 4 * plafond sécurité sociale
# exemples:
# - situation:
# salaire de base: 1000
# plafond sécurité sociale: 3500
# valeur attendue: true
- test: opérations multiples
formule: 4 * plafond sécurité sociale * 10%
exemples:
- situation:
plafond sécurité sociale: 1000
valeur attendue: 400
- test: comparaison et opération
formule: salaire de base < 4 * plafond sécurité sociale
exemples:
- situation:
salaire de base: 1000
plafond sécurité sociale: 3500
valeur attendue: true
- test: nombres négatifs
formule: -5 * -10
exemples:
- valeur attendue: 50

View File

@ -5889,12 +5889,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
lodash@4.17.15, lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.3, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4:
lodash@4.17.15, lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0:
version "4.17.15"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
@ -6359,6 +6354,11 @@ moo@^0.4.3:
resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e"
integrity sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==
moo@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.0.tgz#72f949e6735aeb27d07eb7c087ea5a70143c56e5"
integrity sha512-AMv6iqhTEd5vT/cQlH6cammKS5ekyHhyqTRKi5zKMWl1RTyFnQ3ohPSBNSm8ySe2wlxSKwDonr9D5ZT44mdO3g==
move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@ -6423,10 +6423,10 @@ nearley-loader@^2.0.0:
resolved "https://registry.yarnpkg.com/nearley-loader/-/nearley-loader-2.0.0.tgz#8d75fd2ab3ca9f6153ae099b2bf18f8d5605d203"
integrity sha512-kkUlMrkLWMoQPlOVmv7a8aHFEiTOShPb1H+CkvJrDMYpMCqnQUpfJgViGFlh0wufMQlGcawPzebcng6KnDJEdg==
nearley@^2.16.0:
version "2.18.0"
resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.18.0.tgz#a9193612dd6d528a2e47e743b1dc694cfe105223"
integrity sha512-/zQOMCeJcioI0xJtd5RpBiWw2WP7wLe6vq8/3Yu0rEwgus/G/+pViX80oA87JdVgjRt2895mZSv2VfZmy4W1uw==
nearley@^2.19.0:
version "2.19.0"
resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.0.tgz#37717781d0fd0f2bfc95e233ebd75678ca4bda46"
integrity sha512-2v52FTw7RPqieZr3Gth1luAXZR7Je6q3KaDHY5bjl/paDUdMu35fZ8ICNgiYJRr3tf3NMvIQQR1r27AvEr9CRA==
dependencies:
commander "^2.19.0"
moo "^0.4.3"