openfisca / openfisca-web-api

[DEPRECATED] Web API for OpenFisca
https://www.openfisca.fr/
GNU Affero General Public License v3.0
13 stars 11 forks source link

Prestations sociales erronées pour un test case donné #34

Closed iDevelopper closed 9 years ago

iDevelopper commented 9 years ago

Bonjour,

https://www.dropbox.com/s/q7vbmofqazw7vvf/simulation.txt?dl=0

Sur api-test :

Ce test case me renvoie des prestations sociales pour un montant de 726 euros (salaire de base = 50000 euros, célibataire).

cbenz commented 9 years ago

Je ne peux pas utiliser ce test case car il n'est pas au format JSON :-(

Peux-tu plutôt le poster en JSON ?

Ensuite il faudra le copier-coller dans l'outil de trace (http://www.openfisca.fr/outils/trace) et investiguer pour trouver les formules fausses.

En attendant on pourra aussi créer un test YAML (voir par ex. les tests mes-aides)

iDevelopper commented 9 years ago

La page http://www.openfisca.fr/outils/trace est introuvable

iDevelopper commented 9 years ago

testcase au format JSON

https://www.dropbox.com/s/x3ua2ttiqxupz9w/testcase.json?dl=0

cbenz commented 9 years ago

J'ai rétabli l'outil trace, j'avais ajouté une redirection Apache trop tôt. Comme c'est une redirection permanente peut-être qu'il faudra insister un peu pour charger la page pour passer au travers du cache du navigateur.

cbenz commented 9 years ago

J'ai reformaté le test case JSON avec http://jsoneditoronline.org/ puis changé l'expression de la période en string (l'outil trace ne supporte pas encore les périodes en dictionnaire).

{
  "scenarios": [
    {
      "period": "2014",
      "test_case": {
        "individus": [
          {
            "id": "Parent 1",
            "salaire_de_base": 50000
          }
        ],
        "familles": [
          {
            "id": "Famille",
            "parents": [
              "Parent 1"
            ],
            "enfants": []
          }
        ],
        "menages": [
          {
            "id": "Logement",
            "enfants": [],
            "personne_de_reference": "Parent 1"
          }
        ],
        "foyers_fiscaux": [
          {
            "id": "Déclaration d'impôt",
            "declarants": [
              "Parent 1"
            ],
            "personnes_a_charge": []
          }
        ]
      }
    }
  ],
  "variables": ["revdisp"]
}

J'en ai fait le test YAML suivant:

- name: "psoc - Célibataire ayant un salaire de base de 50000€ annuel"
  period: 2014
  individus:
  - id: ind0
    salaire_de_base: 50000
  output_variables:
    psoc: 0

Qu'on peut exécuter comme ça depuis openfisca_france :

cbenz@lambert ~/D/o/openfisca-france (master)> python openfisca_france/tests/test_yaml.py openfisca_france/tests/formulas/psoc.yaml 
===================================================================================================================================================================
Test 1: /home/cbenz/Dev/openfisca/openfisca-france/openfisca_france/tests/formulas/psoc.yaml psoc - Célibataire ayant un salaire de base de 50000€ annuel - 2014
===================================================================================================================================================================
Traceback (most recent call last):
  File "openfisca_france/tests/test_yaml.py", line 345, in <module>
    function(yaml_path, name, period_str, test, force)
  File "openfisca_france/tests/test_yaml.py", line 190, in check
    relative_error_margin = test.get('relative_error_margin'),
  File "/home/cbenz/Dev/openfisca/openfisca-core/openfisca_core/tools.py", line 56, in assert_near
    abs(target_value - value), absolute_error_margin)
AssertionError: psoc@2014: [ 726.11260986] differs from [ 0.] with an absolute margin [ 726.11260986] > 0.005

On constate bien que psoc vaut 726.113€, et ça devrait être 0.

@benjello Une idée ?

benjello commented 9 years ago

Sans tester: les prestations sociales peuvent dépendre des revenus en n-2. Il faut donc mettre des salaires sur trois ans.

cbenz commented 9 years ago

Ceci fonctionne :

- name: "psoc - Célibataire ayant un salaire de base de 50000€ annuel"
  period: 2014
  individus:
  - id: ind0
    salaire_de_base:
      2013: 50000
      2014: 50000
  output_variables:
    psoc: 0

En JSON cela donne :

{
  "scenarios": [
    {
      "period": "2014",
      "test_case": {
        "individus": [
          {
            "id": "Parent 1",
            "salaire_de_base": {
                "2013": 50000,
                "2014": 50000
            }
          }
        ],
        "familles": [
          {
            "id": "Famille",
            "parents": [
              "Parent 1"
            ],
            "enfants": []
          }
        ],
        "menages": [
          {
            "id": "Logement",
            "enfants": [],
            "personne_de_reference": "Parent 1"
          }
        ],
        "foyers_fiscaux": [
          {
            "id": "Déclaration d'impôt",
            "declarants": [
              "Parent 1"
            ],
            "personnes_a_charge": []
          }
        ]
      }
    }
  ],
  "variables": ["psoc"]
}
cbenz commented 9 years ago

Pour info : openfisca/openfisca-trace-tool#1

cbenz commented 9 years ago

test YAML ajouté openfisca/openfisca-france@c751d80fb864a877c361a0413b98f2bfc8bf00d5