🔨 ajoute la déduction tabac
🐛⚙️ et corrige un bug dans le moteur lorsque plusieurs règles en, remplace une autrepull/789/head
parent
64baead119
commit
b54b369669
|
@ -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,
|
||||
|
|
|
@ -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é d’opter pour le calcul de votre cotisation d’assurance 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 qu’en cotisant sur une base moins importante, excluant les revenus de débit de tabac, vos droits à retraite pour l’assurance 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:
|
||||
|
|
Loading…
Reference in New Issue