Closed sandcha closed 6 years ago
Ceci vient résoudre laValueError
obtenue pour l'appel via API :
curl -X POST http://localhost:8000/calculate -H 'Content-Type: application/json' -d @situation.json
Avec le situation.json
suivant :
{
"individus": {
"openjibayiste": {
"salaire_net_a_payer": {
"2017-12": 1225
},
"salaire_imposable" : {
"2017-12": null
}
}
},
"foyers_fiscaux": {
"foyer_fiscal_1": {
"declarants": [
"openjibayiste"
]
}
},
"menages": {
"menage_1": {
"personne_de_reference": [
"openjibayiste"
]
}
}
}
Qui produisait cette erreur côté serveur :
ERROR:openfisca_core.formulas:An error occurred while calling formula salaire_imposable@individu<2017-12> in module openfisca_tunisia.reforms.de_net_a_brut
[2018-01-07 17:01:49,195] ERROR in app: Exception on /calculate [POST]
Traceback (most recent call last):
File "/Users/sch/.local/share/virtualenvs/tnc20/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/Users/sch/.local/share/virtualenvs/tnc20/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/sch/.local/share/virtualenvs/tnc20/lib/python2.7/site-packages/flask_cors/extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/Users/sch/.local/share/virtualenvs/tnc20/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/sch/.local/share/virtualenvs/tnc20/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/sch/.local/share/virtualenvs/tnc20/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/sch/Dev/github/tunisie/openfisca-core/openfisca_web_api_preview/app.py", line 108, in calculate
result = simulation.calculate(variable_name, period).tolist()
File "/Users/sch/Dev/github/tunisie/openfisca-core/openfisca_core/simulations.py", line 116, in calculate
return self.compute(variable_name, period = period, **parameters).array
File "/Users/sch/Dev/github/tunisie/openfisca-core/openfisca_core/simulations.py", line 167, in compute
result = holder.compute(period = period, **parameters)
File "/Users/sch/Dev/github/tunisie/openfisca-core/openfisca_core/holders.py", line 165, in compute
dated_holder = self.formula.compute(period = period, **parameters)
File "/Users/sch/Dev/github/tunisie/openfisca-core/openfisca_core/formulas.py", line 470, in compute
array = self.base_function(simulation, period)
File "/Users/sch/Dev/github/tunisie/openfisca-core/openfisca_core/base_functions.py", line 57, in requested_period_default_value
return formula.exec_function(simulation, period, *extra_params)
File "/Users/sch/Dev/github/tunisie/openfisca-core/openfisca_core/formulas.py", line 558, in exec_function
return function(entity, period)
File "/Users/sch/Dev/github/tunisie/openfisca-tunisia/openfisca_tunisia/reforms/de_net_a_brut.py", line 76, in formula
xtol = 1 / 100 # précision
File "/Users/sch/.local/share/virtualenvs/tnc20/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 146, in fsolve
res = _root_hybr(func, x0, args, jac=fprime, **options)
File "/Users/sch/.local/share/virtualenvs/tnc20/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 212, in _root_hybr
shape, dtype = _check_func('fsolve', 'func', func, x0, args, n, (n,))
File "/Users/sch/.local/share/virtualenvs/tnc20/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 26, in _check_func
res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
File "/Users/sch/Dev/github/tunisie/openfisca-tunisia/openfisca_tunisia/reforms/de_net_a_brut.py", line 69, in innerfunc
return calculate_net_from(essai, individu, period, requested_variable_names) - net
File "/Users/sch/Dev/github/tunisie/openfisca-tunisia/openfisca_tunisia/reforms/de_net_a_brut.py", line 22, in calculate_net_from
holder.array = salaire_imposable
File "/Users/sch/Dev/github/tunisie/openfisca-core/openfisca_core/holders.py", line 95, in array
return self.put_in_cache(array, self.simulation.period)
File "/Users/sch/Dev/github/tunisie/openfisca-core/openfisca_core/holders.py", line 293, in put_in_cache
raise ValueError('A period must be specified to put values in cache, except for variables with ETERNITY as as period_definition.')
ValueError: A period must be specified to put values in cache, except for variables with ETERNITY as as period_definition.
Avec le correctif sur la réforme, la réponse obtenue est la suivante :
{
"foyers_fiscaux": {
"foyer_fiscal_1": {
"declarants": [
"openjibayiste"
]
}
},
"individus": {
"openjibayiste": {
"salaire_imposable": {
"2017-12": 1475.8065185546875
},
"salaire_net_a_payer": {
"2017-12": 1225
}
}
},
"menages": {
"menage_1": {
"personne_de_reference": [
"openjibayiste"
]
}
}
}
Sachant que 1225 * 12 = 14700, le test yaml ajouté par cette PR est censé être identique à l'appel json. Pourtant, le test yaml ne fonctionne pas ; il donne :
AssertionError: salaire_imposable@2017-12: [ 0.] differs from [ 1475.83337402] with an absolute margin [ 1475.83337402] > 0.5
@benjello Verrais-tu pourquoi ?
@benjello le test_yaml.py
ne semblait plus fonctionnel et je n'en vois pas l'utilité du moment qu'on peut préciser la réforme dans le fichier yaml même. tests/base.py
ne me semblait pas utilisé ailleurs. Mais, surtout, dis moi si tu as un usage quelconque de l'un de ces fichiers.
Par ailleurs,
country_template
ne les contient pas.
Avez-vous pu repérer une incompatibilité qui pourrait expliquer pourquoi la réforme ne marche plus sur -france :thinking: ?
@laem pas que je me souvienne mais @sandcha a peut-être une idée.
@laem Peux-tu m'en dire plus sur ce qui ne marche pas côté -france ? J'ai fait un premier test et je ne vois pas d'erreur 🤔
la simulation du net au brut sur /cout-embauche n'a pas supporté la mise à jour. J'obtenais un message d'erreur pas parlant du tout. On a donc désactivé la fonctionnalité qu'on a jugé moins importante que des taux à jour en 2018. Si tu me dis que ça marche, c'est sûrement sur l'interface /formula entre l'appel HTTP du simulateur et OpenFisca que ça plante...
Définir la période de la simulation pour la réforme. Tester la réforme.