🔨 ajoute la déduction tabac

🐛⚙️ et corrige un bug dans le moteur lorsque plusieurs règles en, remplace une autre
pull/789/head
Johan Girod 2019-11-14 13:18:41 +01:00
parent 64baead119
commit b54b369669
2 changed files with 57 additions and 13 deletions

View File

@ -17,7 +17,7 @@ const getApplicableReplacements = (
rules,
rule
) => {
const missingVariableList = []
let missingVariableList = []
const applicableReplacements = rule.replacedBy
.sort(
(replacement1, replacement2) =>
@ -54,7 +54,7 @@ const getApplicableReplacements = (
referenceRule
)
if (referenceNode.question && situationValue == null) {
missingVariableList[referenceNode.dottedName] = 1
missingVariableList.push({ [referenceNode.dottedName]: 1 })
}
return situationValue !== false
})
@ -91,6 +91,11 @@ const getApplicableReplacements = (
unit: replacementNode.unit || replacedRuleUnit
}
})
missingVariableList = missingVariableList.filter(
missingVariables => !!Object.keys(missingVariables).length
)
return [applicableReplacements, missingVariableList]
}
@ -105,7 +110,7 @@ let evaluateReference = (filter, contextRuleName) => (
// a redirection in the evaluation of references to use a potential active replacement
const [
applicableReplacements,
missingVariableList
replacementMissingVariableList
] = getApplicableReplacements(
filter,
contextRuleName,
@ -116,8 +121,25 @@ let evaluateReference = (filter, contextRuleName) => (
)
if (applicableReplacements.length) {
if (applicableReplacements.length > 1) {
console.warn(`
Règle ${rule.dottedName}: plusieurs remplacements valides ont été trouvés :
\n\t${applicableReplacements.map(node => node.rawNode).join('\n\t')}
Par défaut, seul le premier s'applique. Si vous voulez un autre comportement, vous pouvez :
- Restreindre son applicabilité via "applicable si" sur la règle de définition
- Restreindre sa portée en ajoutant une liste blanche (via le mot clé "dans") ou une liste noire (via le mot clé "sauf dans")
`)
}
return applicableReplacements[0]
}
const addReplacementMissingVariable = node => ({
...node,
missingVariables: replacementMissingVariableList.reduce(
mergeMissing,
node.missingVariables
)
})
let dottedName = node.dottedName,
// On va vérifier dans le cache courant, dict, si la variable n'a pas été déjà évaluée
@ -125,12 +147,9 @@ let evaluateReference = (filter, contextRuleName) => (
cacheName = dottedName + (filter ? '.' + filter : ''),
cached = cache[cacheName]
if (cached) return cached
if (cached) return addReplacementMissingVariable(cached)
let cacheNode = (nodeValue, missingVariables, explanation) => {
missingVariables = missingVariableList.reduce(
mergeMissing,
missingVariables
)
cache[cacheName] = {
...node,
nodeValue,
@ -140,7 +159,7 @@ let evaluateReference = (filter, contextRuleName) => (
...(explanation?.unit && { unit: explanation.unit }),
missingVariables
}
return cache[cacheName]
return addReplacementMissingVariable(cache[cacheName])
}
const {
nodeValue: isApplicable,

View File

@ -3652,6 +3652,11 @@ entreprise . catégorie d'activité . libérale règlementée . type d'activité
- Sage-femme
- Vétérinaire
entreprise . catégorie d'activité . débit de tabac:
applicable si: catégorie d'activité = 'commerciale ou industrielle'
question: Votre entreprise est-elle un débit de tabac ?
par défaut: non
entreprise . rattachée à la CIPAV:
# TODO implémenter un nouveau mécanisme
# TODO consolider la formule :
@ -3711,6 +3716,23 @@ dirigeant . indépendant . cotisations et contributions:
- (- réduction ACRE)
unité par défaut: €/an
dirigeant . indépendant . cotisations et contributions . cotisations . déduction tabac:
applicable si: entreprise . catégorie d'activité . débit de tabac
question: Quels est le montant des revenus issus de la vente de tabac que souhaitez-vous exonérer de cotisation vieillesse ?
description: |
Si vous exercez une activité de débit de tabac simultanément à une activité commerciale, vous avez la possibilité dopter pour le calcul de votre cotisation dassurance vieillesse sur le seul revenu tiré de votre activité commerciale (en effet, les remises pour débit de tabac sont soumises par ailleurs à un prélèvement vieillesse particulier). Nous attirons cependant votre attention sur le fait quen cotisant sur une base moins importante, excluant les revenus de débit de tabac, vos droits à retraite pour lassurance vieillesse des commerçants en seront diminués.
unité:
période: flexible
par défaut: 0
remplace:
règle: revenu professionnel
dans:
- retraite de base
- retraite complémentaire
par: revenu professionnel - déduction tabac
dirigeant . indépendant . rattachement CIPAV:
description: |
Les entreprises libérales non règlementées créées étaient rattachées aux règlementées pour le calcul des cotisations sociales. Depuis 2018 ce n'est plus le cas pour les auto-entrepreneurs (2019 pour les entreprise individuelles). Elles sont maintenant rattachées aux artisans-commerçants, donc dépendent de la sécurité sociale des indépendants.
@ -3864,12 +3886,13 @@ dirigeant . indépendant . cotisations et contributions . cotisations . retraite
titre: assiette retraite de base
formule:
variations:
- si: situation personnelle . RSA != oui
alors:
- si: situation personnelle . RSA
alors: revenu professionnel
- sinon:
encadrement:
plancher: 11.5% * plafond sécurité sociale temps plein
valeur: revenu professionnel
- sinon: revenu professionnel
références:
secu-independants.fr: https://www.secu-independants.fr/cotisations/calcul-des-cotisations/cotisations-minimales/
@ -4024,7 +4047,9 @@ dirigeant . indépendant . cotisations et contributions . CSG et CRDS . assiette
- cotisations
- (- revenus étrangers . montant)
- (- situation personnelle . IJSS . fiscalisées)
dirigeant . indépendant . cotisations et contributions . formation professionnelle:
formule:
multiplication: