openfisca / openfisca-france

French tax and benefit system for OpenFisca
https://openfisca.org/fr
260 stars 99 forks source link

Gestion des non résidents (exoneration des prélèvements sociaux, non éligible au RSA, ...) #2104

Open Nodraak opened 1 year ago

Nodraak commented 1 year ago

Hello hello !

Je suis le fan numéro un d'OpenFisca, mais je viens de rencontrer un problème : le cas des non résidents n'est pas géré (case 8SH dans la déclaration d'impôts).

Qu'ai-je fait ?

Je suis non résident. Openfisca :

  1. Me fait payer les prélèvements sociaux (CSG et CRDS)
  2. Me donne droit à des minimum sociaux (ex: RSA)

À quoi m'attendais-je ?

  1. Exonération des prélèvements sociaux (CSG et CRDS)
  2. Non éligible au RSA
  3. Surement d'autres conséquences dont je n'ai pas connaissance

Que s'est-il passé en réalité ?

/

Voici des informations qui peuvent aider à reproduire le problème :

from openfisca_core.simulation_builder import SimulationBuilder
from openfisca_france import CountryTaxBenefitSystem

CONFIG = {
    "individus": {
        "Alice": {
            # salaire brut avant déduction des cotisations sociales et avant versement des prestations sociales.
            "salaire_de_base": {
                "2022": 0,
            },
        },
    },
    "foyers_fiscaux": {
        "ff1": {
            "declarants": [
                "Alice",
            ],
            # Revenus fonciers imposables
            "f4ba": {
                "2022": 1_000,
            },
        },
    },
}

sim = SimulationBuilder().build_from_entities(CountryTaxBenefitSystem(), CONFIG)

rni = sim.calculate("rni", "2022")  # revenu net imposable
csg = sim.calculate("csg", "2022")
crds = sim.calculate("crds", "2022")
prelevement_solidarite = sim.calculate("prelevements_sociaux_revenus_capital_hors_csg_crds", "2022")
revenus_nets_du_capital = sim.calculate("revenus_nets_du_capital", "2022")
revenu_disponible = sim.calculate("revenu_disponible", "2022")

print("revenu net imposable     %d" % rni[0])
print("csg                      %d" % csg[0])
print("crds                     %d" % crds[0])
print("solidarité               %d" % prelevement_solidarite[0])
print("revenus_nets_du_capital  %d" % revenus_nets_du_capital[0])
print("revenu_disponible        %d" % revenu_disponible[0])

"""

Sortie actuelle:

revenu net imposable     1000
csg                      -92
crds                     -5
solidarité               -75
revenus_nets_du_capital  828
revenu_disponible        7160

Sortie attendue:

revenu net imposable     1000
csg                      0
crds                     0
solidarité               -75
revenus_nets_du_capital  925
revenu_disponible        925
"""

Contexte

Je m'identifie plus en tant que :

Qu'est ce qu'on fait maintenant ?

Je peux ouvrir une PR, mais j'ai besoin d'un peu d'aide à propos des habitudes de ce repo.

  1. Determination du status de non résident : certaines variables existent, mais ne permettent pas de représenter le cas des non résidents : resident_ue et ressortissant_eee. Je ne saisi pas trop la différence entre les deux, mais le fait qu'une des deux soit True devrait signifier que la personne est non résidente (?). Faut il créer une troisième variable ? Refactorer ces deux la ?
  2. Ajout d'une condition lors du calcul des variables csg et crds (d'autres solutions tordues existent : mise à 0 du taux, ajout d'un crédit d'impôt, ...)
  3. Ajout d'une condition lors du calcul de la variable rsa_condition_nationalite ou rsa_eligibilite (laquelle ? les deux ?) quelque part par ici
benjello commented 1 year ago

Je pense que resident_ue et ressortissant_eee relèvent d'usage particuliers bien précis. Ils ne couvrent pas votre besoin.

Je pense qu'il faut donc en créer une nouvelle variable booléenne non_resident_france et s'assurer qu'elle est propagée partout où elle s'applique.

Je remarque aussi que rsa_condition_nationalite n'est pas bien nommée, car elle s'applique aux conditions de séjour.