Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Comportement anormal du revenu_super_brut sur Décembre 2017 #844

Closed
Anna-Livia opened this issue Nov 8, 2017 · 25 comments
Closed

Comportement anormal du revenu_super_brut sur Décembre 2017 #844

Anna-Livia opened this issue Nov 8, 2017 · 25 comments
Assignees

Comments

@Anna-Livia
Copy link
Contributor

Anna-Livia commented Nov 8, 2017

Mail reçu sur contact :
Date : 7 novembre
Objet : Comportement anormal du simulateur sur Décembre 2017

Bonjour,

Je vous contacte à propos de l'API OpenFisca utilisée pour une simulation de salaire. 
Nous avons constaté aujourd'hui que renseigner le mois de décembre 2017 dans la date de début d'embauche entraînait une réponse qui semble erronées, de l'ordre de plusieurs milliers d'euros.

Nous avons reproduit ce comportement sur le simulateur embauche.beta.gouv.fr.

Ci dessous un premier appel (celui avec les paramètres par défaut) sur une simulation d'embauche en novembre 2017 :

https://embauche.beta.gouv.fr/openfisca/api/2/formula/2017-11/mmid_employeur+mmid_salarie+prevoyance_obligatoire_cadre+complementaire_sante_employeur+complementaire_sante_salarie+accident_du_travail+vieillesse_plafonnee_employeur+vieillesse_plafonnee_salarie+vieillesse_deplafonnee_employeur+vieillesse_deplafonnee_salarie+arrco_employeur+arrco_salarie+agirc_employeur+agirc_salarie+agirc_gmp_employeur+agirc_gmp_salarie+agff_employeur+agff_salarie+cotisation_exceptionnelle_temporaire_employeur+cotisation_exceptionnelle_temporaire_salarie+famille+chomage_employeur+chomage_salarie+ags+apec_employeur+apec_salarie+contribution_solidarite_autonomie+fnal+financement_organisations_syndicales+participation_effort_construction+formation_professionnelle+versement_transport+forfait_social+csg_deductible_salaire+csg_imposable_salaire+crds_salaire+allegement_fillon+allegement_cotisation_allocations_familiales+taxe_apprentissage+contribution_supplementaire_apprentissage+penibilite+taxe_salaires+exoneration_cotisations_employeur_jei+credit_impot_competitivite_emploi+aide_premier_salarie+aide_embauche_pme+cout_du_travail+salaire_super_brut+salaire_net_a_payer?allegement_fillon_mode_recouvrement=anticipe_regularisation_fin_de_periode&allegement_cotisation_allocations_familiales_mode_recouvrement=anticipe_regularisation_fin_de_periode&contrat_de_travail_debut=2017-11&effectif_entreprise=1&heures_remunerees_volume=129.9942857142857&salaire_de_base=2300&contrat_de_travail=temps_plein&categorie_salarie=prive_non_cadre&complementaire_sante_montant=40&salarie_regime_alsace_moselle=0&depcom_entreprise=29019&ratio_alternants=0&taux_accident_travail=0.01&exposition_penibilite=0&jeune_entreprise_innovante=0

Le résultat est d'environ 3200€ bruts :
"salaire_super_brut": 3196.43994140625


Si on effectue maintenant la même simulation, mais en décembre 2017 :

https://embauche.beta.gouv.fr/openfisca/api/2/formula/2017-12/mmid_employeur+mmid_salarie+prevoyance_obligatoire_cadre+complementaire_sante_employeur+complementaire_sante_salarie+accident_du_travail+vieillesse_plafonnee_employeur+vieillesse_plafonnee_salarie+vieillesse_deplafonnee_employeur+vieillesse_deplafonnee_salarie+arrco_employeur+arrco_salarie+agirc_employeur+agirc_salarie+agirc_gmp_employeur+agirc_gmp_salarie+agff_employeur+agff_salarie+cotisation_exceptionnelle_temporaire_employeur+cotisation_exceptionnelle_temporaire_salarie+famille+chomage_employeur+chomage_salarie+ags+apec_employeur+apec_salarie+contribution_solidarite_autonomie+fnal+financement_organisations_syndicales+participation_effort_construction+formation_professionnelle+versement_transport+forfait_social+csg_deductible_salaire+csg_imposable_salaire+crds_salaire+allegement_fillon+allegement_cotisation_allocations_familiales+taxe_apprentissage+contribution_supplementaire_apprentissage+penibilite+taxe_salaires+exoneration_cotisations_employeur_jei+credit_impot_competitivite_emploi+aide_premier_salarie+aide_embauche_pme+cout_du_travail+salaire_super_brut+salaire_net_a_payer?allegement_fillon_mode_recouvrement=anticipe_regularisation_fin_de_periode&allegement_cotisation_allocations_familiales_mode_recouvrement=anticipe_regularisation_fin_de_periode&contrat_de_travail_debut=2017-11&effectif_entreprise=1&heures_remunerees_volume=129.9942857142857&salaire_de_base=2300&contrat_de_travail=temps_plein&categorie_salarie=prive_non_cadre&complementaire_sante_montant=40&salarie_regime_alsace_moselle=0&depcom_entreprise=29019&ratio_alternants=0&taux_accident_travail=0.01&exposition_penibilite=0&jeune_entreprise_innovante=0

On constate un écart de salaire de plusieurs milliers d'euros, ainsi que des charges beaucoup plus importantes. 
"salaire_super_brut": 5970.6298828125

Ceci aurait pu en partie s'expliquer par l'entrée en vigueur de nouvelles lois, mais, on ne constate pas ces écarts sur les mois suivants (janvier 2018, etc, ni d'ailleurs en décembre 2018).

Pouvez vous regarder ce point de votre côté, car lorsque l'on va passer en décembre, le simulateur présent sur embauche.gouv.fr renverra lui aussi des données incorrectes.

Merci d'avance,

Bien cordialement,
@Anna-Livia
Copy link
Contributor Author

Nous avons reproduit une incohérence (mais pas sur les même montants) :

# -*- coding: utf-8 -*-

import openfisca_france
from openfisca_core.simulations import Simulation
from openfisca_core import reforms
from openfisca_core import periods


####### Décrivez les entités ###########
def situation_generator(date):
  return {
    "familles": {
      "famille_1": {
        "parents": [
          "Bob"
        ]
      }
    },
    "foyers_fiscaux": {
      "foyer_fiscal_1": {
        "declarants": [
          "Bob"
        ]
      }
    },
    "individus": {
      "Bob": {
        "allegement_fillon_mode_recouvrement": {
          date: "anticipe_regularisation_fin_de_periode"
        },
        "allegement_cotisation_allocations_familiales_mode_recouvrement": {
          date: "anticipe_regularisation_fin_de_periode"
        },
        "contrat_de_travail_debut": {
          date: date
        },
        "effectif_entreprise": {
          date: 1
        },
        "heures_remunerees_volume": {
          date: 129.9942857142857
        },
        "salaire_de_base": {
          date: 2300
        },
        "contrat_de_travail": {
          date: "temps_plein"
        },
        "categorie_salarie": {
          date: "prive_non_cadre"
        },
        "complementaire_sante_montant": {
          date: 40
        },
        "salarie_regime_alsace_moselle": {
          date: 0
        },
        "depcom_entreprise": {
          date: 29019
        },
        "ratio_alternants": {
          date: 0
        },
        "taux_accident_travail": {
          date: 0.01
        },
        "exposition_penibilite": {
          date: 0
        },
        "jeune_entreprise_innovante": {
          date: 0
        }
      }
    },
    "menages": {
      "menage_1": {
        "personne_de_reference": [
          "Bob"
        ]
        }
      }
    }


####### Calcule la situation 2017-11 ##############
situation = situation_generator("2017-11")

legislation_france = openfisca_france.FranceTaxBenefitSystem()
simulation_actuelle = Simulation(tax_benefit_system=legislation_france, simulation_json=situation)

resultat = simulation_actuelle.calculate('salaire_super_brut', "2017-11")

print "Résultat pour " + "2017-11"
print resultat

####### Calcule la situation 2017-12 ##############
situation = situation_generator("2017-12")

legislation_france = openfisca_france.FranceTaxBenefitSystem()
simulation_actuelle = Simulation(tax_benefit_system=legislation_france, simulation_json=situation)

resultat = simulation_actuelle.calculate('salaire_super_brut', "2017-12")

print "Résultat pour " + "2017-12"
print resultat

####### Calcule la situation 2017-12 ##############
situation = situation_generator("2018-01")

legislation_france = openfisca_france.FranceTaxBenefitSystem()
simulation_actuelle = Simulation(tax_benefit_system=legislation_france, simulation_json=situation)

resultat = simulation_actuelle.calculate('salaire_super_brut', "2018-01")

print "Résultat pour " + "2018-01"
print resultat

Donne les resultats suivants :

Résultat pour 2017-11
[ 3195.29003906]
Résultat pour 2017-12
[ 2582.34008789]
Résultat pour 2018-01
[ 3195.29003906]

@laem
Copy link
Contributor

laem commented Nov 8, 2017

Il y a un problème connu sur le calcul des allègements (Fillon et allocations familiales), documenté ici. Cependant dans cette simulation, le montant de certaines cotisation est lui aussi incohérent... Le résultat est déjà moins incohérent en mettant la même date de début de contrat que la période de simulation.

@Anna-Livia
Copy link
Contributor Author

L'allegement Fillon devrait représenter 32 EUR sur l'année

Capture d’écran 2017-11-08 à 17.23.58.png

hors sur la simulation suivante :

# -*- coding: utf-8 -*-

import openfisca_france
from openfisca_core.simulations import Simulation
from openfisca_core import reforms
from openfisca_core import periods


####### Décrivez les entités ###########
def situation_generator(date):
    return {
        "familles": {
          "famille_1": {
            "parents": [
              "Bob"
            ]
          }
        },
        "foyers_fiscaux": {
          "foyer_fiscal_1": {
            "declarants": [
              "Bob"
            ]
          }
        },
        "individus": {
          "Bob": {
            "allegement_fillon_mode_recouvrement": {
              date: "fin_d_annee"
            },
            "allegement_cotisation_allocations_familiales_mode_recouvrement": {
              date: "fin_d_annee"
            },
            "contrat_de_travail_debut": {
              date: date
            },
            "effectif_entreprise": {
              date: 1
            },
            "heures_remunerees_volume": {
              date: 129.9942857142857
            },
            "salaire_de_base": {
                "2017-01": 0,
                "2017-02": 0,
                "2017-03": 0,
                "2017-04": 0,
                "2017-05": 0,
                "2017-06": 0,
                "2017-07": 0,
                "2017-08": 0,
                "2017-09": 0,
                "2017-10": 0,
                "2017-11": 2300,
                "2017-12": 0
            },
            "contrat_de_travail": {
              date: "temps_plein"
            },
            "categorie_salarie": {
              date: "prive_non_cadre"
            },
            "complementaire_sante_montant": {
              date: 40
            },
            "salarie_regime_alsace_moselle": {
              date: 0
            },
            "depcom_entreprise": {
              date: 29019
            },
            "ratio_alternants": {
              date: 0
            },
            "taux_accident_travail": {
              date: 0.01
            },
            "exposition_penibilite": {
              date: 0
            },
            "jeune_entreprise_innovante": {
              date: 0
            }
          }
        },
        "menages": {
          "menage_1": {
            "personne_de_reference": [
              "Bob"
            ]
            }
          }
        }

for period in ["2017-11", "2017-12", "2018-01"]:
    situation = situation_generator(period)

    legislation_france = openfisca_france.FranceTaxBenefitSystem()
    simulation = Simulation(tax_benefit_system=legislation_france, simulation_json=situation)

    print period
    print "Salaire_super_brut"
    print simulation.calculate('salaire_super_brut', period)
    print "Salaire_net"
    print simulation.calculate('salaire_net', period)
    print "fillon"
    print simulation.calculate_add('allegement_fillon', 2017)

retourne

2017-11
Salaire_super_brut
[ 3268.66015625]
Salaire_net
[ 1767.56982422]
fillon
[ 646.07000732]
2017-12
Salaire_super_brut
[-653.67004395]
Salaire_net
[-21.60000038]
fillon
[ 646.07000732]
2018-01
Salaire_super_brut
[ 20.]
Salaire_net
[-21.60000038]
fillon
[ 646.07000732]

@benjello Je ne comprends pas trop les résultats. J'ai l'impression qu'il y a une confusion entre le calcul de l'allègement et la récupération de l'allègement par l'entreprise.
Peux-tu nous éclairer ?

@benjello
Copy link
Member

benjello commented Nov 8, 2017

Il faut définir le cas que l'on veut simuler. Veut-on l'allègement Fillon d'un salarié qui travaille toute l'année ou un seul mois etc.
@Anna-Livia : Il y a des incohérences entre tes dates pour les heures etc, et la date du salaire de base salaire_de base

@Anna-Livia
Copy link
Contributor Author

Il faudrait calculer l'allègement pour un seul mois. Comment faire ?

@benjello : J'ai modifié la simulation précédente pour éviter les incohérences :

# -*- coding: utf-8 -*-

import openfisca_france
from openfisca_core.simulations import Simulation
from openfisca_core import reforms
from openfisca_core import periods


####### Décrivez les entités ###########
def situation_generator(date):
    return {
        "familles": {
          "famille_1": {
            "parents": [
              "Bob"
            ]
          }
        },
        "foyers_fiscaux": {
          "foyer_fiscal_1": {
            "declarants": [
              "Bob"
            ]
          }
        },
        "individus": {
          "Bob": {
            "allegement_fillon_mode_recouvrement": {
              date: "fin_d_annee"
            },
            "allegement_cotisation_allocations_familiales_mode_recouvrement": {
              date: "fin_d_annee"
            },
            "contrat_de_travail_debut": {
              date: date
            },
            "effectif_entreprise": {
              date: 1
            },
            "heures_remunerees_volume": {
              date: 129.9942857142857
            },
            "salaire_de_base": {
                date : 2300,
            },
            "contrat_de_travail": {
              date: "temps_plein"
            },
            "categorie_salarie": {
              date: "prive_non_cadre"
            },
            "complementaire_sante_montant": {
              date: 40
            },
            "salarie_regime_alsace_moselle": {
              date: 0
            },
            "depcom_entreprise": {
              date: 29019
            },
            "ratio_alternants": {
              date: 0
            },
            "taux_accident_travail": {
              date: 0.01
            },
            "exposition_penibilite": {
              date: 0
            },
            "jeune_entreprise_innovante": {
              date: 0
            }
          }
        },
        "menages": {
          "menage_1": {
            "personne_de_reference": [
              "Bob"
            ]
            }
          }
        }

for period in ["2017-11", "2017-12", "2018-01"]:
    situation = situation_generator(period)

    legislation_france = openfisca_france.FranceTaxBenefitSystem()
    simulation = Simulation(tax_benefit_system=legislation_france, simulation_json=situation)

    print period
    print "Salaire_super_brut"
    print simulation.calculate('salaire_super_brut', period)
    print "Salaire_net"
    print simulation.calculate('salaire_net', period)
    print "fillon"
    print simulation.calculate_add('allegement_fillon', 2017)
2017-11
Salaire_super_brut
[ 3268.66015625]
Salaire_net
[ 1767.56982422]
fillon
[ 646.07000732]
2017-12
Salaire_super_brut
[ 2582.34008789]
Salaire_net
[ 1767.56982422]
fillon
[ 646.07000732]
2018-01
Salaire_super_brut
[ 3268.66015625]
Salaire_net
[ 1767.56982422]
fillon
[ 0.]

@benjello
Copy link
Member

benjello commented Nov 8, 2017

J'essaierai de mettre

"allegement_fillon_mode_recouvrement": {
              date: "progressif"
              }

@Anna-Livia
Copy link
Contributor Author

# -*- coding: utf-8 -*-

import openfisca_france
from openfisca_core.simulations import Simulation
from openfisca_core import reforms
from openfisca_core import periods


####### Décrivez les entités ###########
def situation_generator(date):
    return {
        "familles": {
          "famille_1": {
            "parents": [
              "Bob"
            ]
          }
        },
        "foyers_fiscaux": {
          "foyer_fiscal_1": {
            "declarants": [
              "Bob"
            ]
          }
        },
        "individus": {
          "Bob": {
            "allegement_fillon_mode_recouvrement": {
              date: "progressif"
            },
            "allegement_cotisation_allocations_familiales_mode_recouvrement": {
              date: "fin_d_annee"
            },
            "contrat_de_travail_debut": {
              date: date
            },
            "effectif_entreprise": {
              date: 1
            },
            "heures_remunerees_volume": {
              date: 129.9942857142857
            },
            "salaire_de_base": {
                date : 2300,
            },
            "contrat_de_travail": {
              date: "temps_plein"
            },
            "categorie_salarie": {
              date: "prive_non_cadre"
            },
            "complementaire_sante_montant": {
              date: 40
            },
            "salarie_regime_alsace_moselle": {
              date: 0
            },
            "depcom_entreprise": {
              date: 29019
            },
            "ratio_alternants": {
              date: 0
            },
            "taux_accident_travail": {
              date: 0.01
            },
            "exposition_penibilite": {
              date: 0
            },
            "jeune_entreprise_innovante": {
              date: 0
            }
          }
        },
        "menages": {
          "menage_1": {
            "personne_de_reference": [
              "Bob"
            ]
            }
          }
        }

for period in ["2017-11", "2017-12", "2018-01"]:
    situation = situation_generator(period)

    legislation_france = openfisca_france.FranceTaxBenefitSystem()
    simulation = Simulation(tax_benefit_system=legislation_france, simulation_json=situation)

    print period
    print "Salaire_super_brut"
    print simulation.calculate('salaire_super_brut', period)
    print "Salaire_net"
    print simulation.calculate('salaire_net', period)
    print "fillon"
    print simulation.calculate_add('allegement_fillon', 2017)
2017-11
Salaire_super_brut
[ 2622.59008789]
Salaire_net
[ 1767.56982422]
fillon
[ 646.07000732]
2017-12
Salaire_super_brut
[ 2582.34008789]
Salaire_net
[ 1767.56982422]
fillon
[ 646.07000732]
2018-01
Salaire_super_brut
[ 3236.69018555]
Salaire_net
[ 1767.56982422]
fillon
[ 0.]

@benjello
Copy link
Member

benjello commented Nov 9, 2017

Le problème est donc en janvier 2018 avec allegement_fillon_mode_recouvrement = progressif.
Il doit y avoir un problème de parmètres/formule au passage à 2018.

Pour les autres modes de recouvrement, il faut renseigner plus de salaires pour faire des tests informatifs en choisissant des cas précis où l'on sait ce que l'on attend.

@Anna-Livia
Copy link
Contributor Author

1/ Je ne pense pas que le problème soit en janvier : Avec un seul salaire sur l'année, le recouvrement fillon est de 646 EUR au lieu de 32,04 eur donné par l'URSSAF.

2/Je pense qu'il y a peut être une complexité avec le fait que la méthode de recouvrement soit imbriqué dans la formule de calcul.
Dans le cas de l'IR, il me semble que ce n'est pas le cas (l'IR est calculé sur l'année, l'échéancier de paiement ne rentre pas en compte dans le calcul)
Si on calcul le recouvrement Fillon indépendamment de sa méthode de recouvrement, cela donnerait plus de flexibilité il me semble

@benjello
Copy link
Member

Je suis d'accord qu'il semble naturel de séparer le calcul du recouvrement.
Mais selon la loi le calcul du montant dû à l'année se fait en fin d'année mais le recouvrement peut se faire petit à petit ... donc sans connaître tout ce qui est versé à l'année.
En fait, on a déjà séparé la formule de calcul du calcul du montant recouvert, il faut juste arriver à écrire des tests pour déboguer proprement.

@Anna-Livia
Copy link
Contributor Author

Anna-Livia commented Nov 22, 2017

Je te propose les tests suivants :

- name: "Salarie un seul mois (novembre) - recouvrement fin d'année"
  period: 2017
  absolute_error_margin: 0.01
  input_variables:
    salaire_de_base: # un salaire en 2017
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 2300
      2017-12: 0
    allegement_fillon_mode_recouvrement: "fin-d-annee"
    effectif_entreprise: 1
    code_postal_entreprise: "75001"
    categorie_salarie: prive_non_cadre
    contrat_de_travail_debut: "2017-11-01"
  output_variables:
    allegement_fillon:
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 0
      2017-12: 32.04

- name: "Salarie un seul mois (novembre) - recouvrement progressif"
  period: 2017
  absolute_error_margin: 0.01
  input_variables:
    salaire_de_base: # un salaire en 2017
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 2300
      2017-12: 0
    allegement_fillon_mode_recouvrement: "progressif"
    effectif_entreprise: 1
    code_postal_entreprise: "75001"
    categorie_salarie: prive_non_cadre
    contrat_de_travail_debut: "2017-11-01"
  output_variables:
    allegement_fillon:
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 32.04
      2017-12: 0

- name: "Salarie un seul mois (novembre) - recouvrement anticipe"
  period: 2017
  absolute_error_margin: 0.01
  input_variables:
    salaire_de_base: # un salaire en 2017
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 2300
      2017-12: 0
    allegement_fillon_mode_recouvrement: "anticipe-regularisation-fin-de-periode"
    effectif_entreprise: 1
    code_postal_entreprise: "75001"
    categorie_salarie: prive_non_cadre
    contrat_de_travail_debut: "2017-11-01"
  output_variables:
    allegement_fillon:
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 0
      2017-12: 32.04

- name: "Salarie un seul mois (décembre) - recouvrement fin d'année"
  period: 2017
  absolute_error_margin: 0.01
  input_variables:
    salaire_de_base: # un salaire en 2017
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 0
      2017-12: 2300
    allegement_fillon_mode_recouvrement: "fin-d-annee"
    effectif_entreprise: 1
    code_postal_entreprise: "75001"
    categorie_salarie: prive_non_cadre
    contrat_de_travail_debut: "2017-12-01"
  output_variables:
    allegement_fillon:
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 0
      2017-12: 32.04

- name: "Salarie un seul mois (décembre) - recouvrement progressif"
  period: 2017
  absolute_error_margin: 0.01
  input_variables:
    salaire_de_base: # un salaire en 2017
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 0
      2017-12: 2300
    allegement_fillon_mode_recouvrement: "progressif"
    effectif_entreprise: 1
    code_postal_entreprise: "75001"
    categorie_salarie: prive_non_cadre
    contrat_de_travail_debut: "2017-12-01"
  output_variables:
    allegement_fillon:
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 0
      2017-12: 32.04

- name: "Salarie un seul mois (décembre) - recouvrement anticipe"
  period: 2017
  absolute_error_margin: 0.01
  input_variables:
    salaire_de_base: # un salaire en 2017
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 0
      2017-12: 2300
    allegement_fillon_mode_recouvrement: "anticipe-regularisation-fin-de-periode"
    effectif_entreprise: 1
    code_postal_entreprise: "75001"
    categorie_salarie: prive_non_cadre
    contrat_de_travail_debut: "2017-12-01"
  output_variables:
    allegement_fillon:
      2017-01: 0
      2017-02: 0
      2017-03: 0
      2017-04: 0
      2017-05: 0
      2017-06: 0
      2017-07: 0
      2017-08: 0
      2017-09: 0
      2017-10: 0
      2017-11: 0
      2017-12: 32.04

PS : En regardant les tests fillon, Salarie 2015 5000 euros me semble étrange :
Il a un salaire_de_base en 2013 sur lequel on demande un allegement_fillon en 2015. Est ce c'est normal ?

@laem laem closed this as completed Nov 22, 2017
@laem laem removed the support label Nov 22, 2017
@laem laem reopened this Nov 22, 2017
@laem laem added the support label Nov 22, 2017
@Anna-Livia
Copy link
Contributor Author

@benjello : Que penses-tu des tests ?

@benjello
Copy link
Member

Cela m'a l'air pas mal mais je suis un peu rusty. @laem s'il n'est pas rangé des voitures pourrait nous donenr son avis ;-)

Cela donne quoi quand tu les fais tourner ?

@laem
Copy link
Contributor

laem commented Nov 28, 2017

C'est bon on a vu ensemble ! Je suis en train de finir le créneau là !

@Anna-Livia
Copy link
Contributor Author

@benjello : Ils fails tous quand on fait tourner :/

@benjello
Copy link
Member

benjello commented Nov 28, 2017

Ben alors @laem, ce créneau, il est pas complètement fini ;-)
@Anna-Livia y'a une trace quelque part ? (je vais pas avoir le temps de regarder en profondeur aujourd'hui though)

ps: Pour la complétude de ce thread: https://fr.wiktionary.org/wiki/se_ranger_des_voitures

@Anna-Livia
Copy link
Contributor Author

@benjello Si on fait passer les tests, on obtient la trace suivante :

ERROR:openfisca_core.tools.test_runner:allegement_fillon.yaml: Salarie un seul mois (novembre) - recouvrement fin d'année - 2017
FERROR:openfisca_core.tools.test_runner:allegement_fillon.yaml: Salarie un seul mois (novembre) - recouvrement progressif - 2017
FERROR:openfisca_core.tools.test_runner:allegement_fillon.yaml: Salarie un seul mois (novembre) - recouvrement anticipe - 2017
FERROR:openfisca_core.tools.test_runner:allegement_fillon.yaml: Salarie un seul mois (décembre) - recouvrement fin d'année - 2017
FERROR:openfisca_core.tools.test_runner:allegement_fillon.yaml: Salarie un seul mois (décembre) - recouvrement progressif - 2017
FERROR:openfisca_core.tools.test_runner:allegement_fillon.yaml: Salarie un seul mois (décembre) - recouvrement anticipe - 2017
F
======================================================================
FAIL: unittest.case.FunctionTestCase (check)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 150, in check
    _run_test(period_str, test, verbose, options)
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 243, in _run_test
    relative_error_margin = relative_error_margin,
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/__init__.py", line 21, in assert_near
    abs(target_value - value), absolute_error_margin)
AssertionError: allegement_fillon@2017-12: [ 0.] differs from [ 32.04000092] with an absolute margin [ 32.04000092] > 0.01
-------------------- >> begin captured logging << --------------------
openfisca_core.tools.test_runner: ERROR: allegement_fillon.yaml: Salarie un seul mois (novembre) - recouvrement fin d'année - 2017
--------------------- >> end captured logging << ---------------------

======================================================================
FAIL: unittest.case.FunctionTestCase (check)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 150, in check
    _run_test(period_str, test, verbose, options)
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 243, in _run_test
    relative_error_margin = relative_error_margin,
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/__init__.py", line 21, in assert_near
    abs(target_value - value), absolute_error_margin)
AssertionError: allegement_fillon@2017-11: [ 0.] differs from [ 32.04000092] with an absolute margin [ 32.04000092] > 0.01
-------------------- >> begin captured logging << --------------------
openfisca_core.tools.test_runner: ERROR: allegement_fillon.yaml: Salarie un seul mois (novembre) - recouvrement progressif - 2017
--------------------- >> end captured logging << ---------------------

======================================================================
FAIL: unittest.case.FunctionTestCase (check)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 150, in check
    _run_test(period_str, test, verbose, options)
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 243, in _run_test
    relative_error_margin = relative_error_margin,
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/__init__.py", line 21, in assert_near
    abs(target_value - value), absolute_error_margin)
AssertionError: allegement_fillon@2017-11: [ 31.96999931] differs from [ 0.] with an absolute margin [ 31.96999931] > 0.01
-------------------- >> begin captured logging << --------------------
openfisca_core.tools.test_runner: ERROR: allegement_fillon.yaml: Salarie un seul mois (novembre) - recouvrement anticipe - 2017
--------------------- >> end captured logging << ---------------------

======================================================================
FAIL: unittest.case.FunctionTestCase (check)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 150, in check
    _run_test(period_str, test, verbose, options)
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 243, in _run_test
    relative_error_margin = relative_error_margin,
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/__init__.py", line 21, in assert_near
    abs(target_value - value), absolute_error_margin)
AssertionError: allegement_fillon@2017-12: [ 0.] differs from [ 32.04000092] with an absolute margin [ 32.04000092] > 0.01
-------------------- >> begin captured logging << --------------------
openfisca_core.tools.test_runner: ERROR: allegement_fillon.yaml: Salarie un seul mois (décembre) - recouvrement fin d'année - 2017
--------------------- >> end captured logging << ---------------------

======================================================================
FAIL: unittest.case.FunctionTestCase (check)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 150, in check
    _run_test(period_str, test, verbose, options)
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 243, in _run_test
    relative_error_margin = relative_error_margin,
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/__init__.py", line 21, in assert_near
    abs(target_value - value), absolute_error_margin)
AssertionError: allegement_fillon@2017-12: [ 0.] differs from [ 32.04000092] with an absolute margin [ 32.04000092] > 0.01
-------------------- >> begin captured logging << --------------------
openfisca_core.tools.test_runner: ERROR: allegement_fillon.yaml: Salarie un seul mois (décembre) - recouvrement progressif - 2017
--------------------- >> end captured logging << ---------------------

======================================================================
FAIL: unittest.case.FunctionTestCase (check)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 150, in check
    _run_test(period_str, test, verbose, options)
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/test_runner.py", line 243, in _run_test
    relative_error_margin = relative_error_margin,
  File "/Users/annalivia/.local/share/virtualenvs/enums/lib/python2.7/site-packages/openfisca_core/tools/__init__.py", line 21, in assert_near
    abs(target_value - value), absolute_error_margin)
AssertionError: allegement_fillon@2017-12: [ 0.] differs from [ 32.04000092] with an absolute margin [ 32.04000092] > 0.01
-------------------- >> begin captured logging << --------------------
openfisca_core.tools.test_runner: ERROR: allegement_fillon.yaml: Salarie un seul mois (décembre) - recouvrement anticipe - 2017
--------------------- >> end captured logging << ---------------------

----------------------------------------------------------------------
Ran 6 tests in 1.627s

FAILED (failures=6)

@Anna-Livia
Copy link
Contributor Author

@laem @benjello des nouvelles sur ce point ?

@laem
Copy link
Contributor

laem commented Dec 11, 2017

@Morendil proposait de corriger ce 🐛 jeudi. J'espère vous aider si j'ai un peu de temps.

@Morendil
Copy link
Contributor

Disons, "de commencer à analyser en vue de corriger", je ne sais pas si l'après-midi de jeudi y suffira :)

@laem
Copy link
Contributor

laem commented Dec 11, 2017

Est-ce qu'on n'a pas un problème ici ? Que vient faire le first_month ?

Sinon, c'est très probablement sur des lignes de ce genre :

up_to_this_month = period.start.offset('first-of', 'year').period('month', period.start.month)
up_to_previous_month = period.start.offset('first-of', 'year').period('month', period.start.month - 1)

@Morendil
Copy link
Contributor

Le problème semble venir d'un faux calcul du coefficient_proratisation: lorsqu'on demande le coefficient de proratisation dans le contexte d'un objet simulation où la période d'embauche réelle est d'un mois (par exemple le mois commençant le 1er novembre), mais que la période de calcul passée en paramètre est l'année entière (ce qui se produit effectivement lors de l'exécution de compute_allegement_progressif), le coefficient renvoyé est 11, ce qui est incorrect: il devrait dans ce cas être 1.

Je constate que cette fonction est plutôt complexe. Je propose dans un premier temps d'écrire un test pour la situation que je viens de décrire, et de faire ce qu'il faut pour que la fonction renvoie 1 dans ce cas précis.

WDYT?

@laem
Copy link
Contributor

laem commented Dec 14, 2017

Est-ce que vous avez pu faire une PR qui met en évidence le problème avec un test qui casse ?

@Morendil
Copy link
Contributor

Yep, see #862 (WIP)

@benjello
Copy link
Member

Good job @Morendil

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants