openfisca / openfisca-tunisia

Tunisian tax and benefit system for OpenFisca
http://www.openfisca.tn
15 stars 7 forks source link

Corrige le calcul des cotisations #77

Closed sandcha closed 5 years ago

sandcha commented 5 years ago

Suite à la mise à jour vers Core v.24.8.2, make test sur la branche master d'openfisca-tunisia a échoué avec KeyError: 0 tel que ci-dessous :

nosetests tests --exe --with-doctest
....................EE
======================================================================
ERROR: tests.test_simple.test_simple
----------------------------------------------------------------------
... (même erreur que ci-dessous)
======================================================================
ERROR: tests.test_prestations_familiales.test_contribution_frais_creche
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/sch/.local/share/virtualenvs/tar/lib/python3.7/site-packages/nose/case.py", line 198, in runTest
...
    array = formula(entity, period, parameters_at, *extra_params)
  File "/Users/sch/Dev/github/tunisie/openfisca-tunisia/openfisca_tunisia/model/prelevements_obligatoires/cotisations_sociales.py", line 171, in formula
    parameters = parameters
  File "/Users/sch/Dev/github/tunisie/openfisca-tunisia/openfisca_tunisia/model/prelevements_obligatoires/cotisations_sociales.py", line 40, in compute_cotisation
    if 'cotisations_{}'.format(cotisation_type) not in baremes_by_regime[regime.name]:
  File "/Users/sch/Dev/github/openfisca-core/openfisca_core/tracers.py", line 258, in __getitem__
    child = self.parameter_node_at_instant[key]
  File "/Users/sch/Dev/github/openfisca-core/openfisca_core/parameters.py", line 495, in __getitem__
    return self._children[key]
KeyError: 0

----------------------------------------------------------------------
Ran 22 tests in 0.495s

FAILED (errors=2)

La key passée à self._children[key] est donc de type int là où il s'agit d'itérer sur des (noms d') énumérés (cf. baremes_by_regime[regime.name]).

sandcha commented 5 years ago

Avec les modifications de cette PR (et Core v.24.8.2), l'erreur évolue en KeyError: <TypesRegimeSecuriteSociale.rsna: 'Régime des Salariés Non Agricoles'> :

[openfisca-tunisia]$ make test

> Python tests...
nosetests tests --exe --with-doctest
..EEEEE.............EE

======================================================================
ERROR: tests.test_simple.test_simple
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/sch/.local/share/virtualenvs/tar/lib/python3.7/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/sch/Dev/github/tunisie/openfisca-tunisia/tests/test_simple.py", line 13, in test_simple
    assert simulation.calculate('revenu_disponible', period = year) == 0
…

  File "/Users/sch/Dev/github/tunisie/openfisca-tunisia/openfisca_tunisia/model/prelevements_obligatoires/cotisations_sociales.py", line 47, in compute_cotisation
    bareme_of_regime = baremes_by_regime[regime]
  File "/Users/sch/Dev/github/openfisca-core/openfisca_core/tracers.py", line 258, in __getitem__
    child = self.parameter_node_at_instant[key]
  File "/Users/sch/Dev/github/openfisca-core/openfisca_core/parameters.py", line 495, in __getitem__
    return self._children[key]
KeyError: <TypesRegimeSecuriteSociale.rsna: 'Régime des Salariés Non Agricoles'>
----------------------------------------------------------------------
Ran 22 tests in 0.136s

FAILED (errors=7)

Il semble ainsi que self._children[key] ne sache pas plus traiter les énumérés que les int. D'où un début de correctif sur openfisca-core est défini sur la branche core fix-enum-filter. Celui-ci résoud le KeyError. Néanmoins, les tests yaml échouent.


@benjello Reproduis-tu le problème sur master openfisca-tunisia ? Et si oui, que penses-tu du correctif proposé ici ? Il me semble étrange que les tests ne passent plus.

Update : Serait-ce le fait que le correctif propose de renommer des répertoires de paramètres sal en cotisations_salarie... ? 😬 Non, renommage rétabli en local pour tester et ça ne change rien au nombre d'erreurs. 😞 C'est donc la correction du compute_cotisation qui mène à cela.

Morendil commented 5 years ago

@sandcha Problème avec TracingParameterNode et le fancy indexing il me semble ?

benjello commented 5 years ago

@sandcha : je pense que @Morendil n'est pas loin. On n'arrive plus à accéder aux enfants d'un noeud sous forme d'entrée dans un dictionnaire. Mais je n'arrive pas à corriger car je ne comprends pas bien la nouvelle architecture des paramètres ...

sandcha commented 5 years ago

@Morendil Ca me semble corrigé par l'ajout d'une condition sur Enum à cette ligne d'openfisca-core.

benjello commented 5 years ago

@sandcha j'ai rebasé https://github.com/openfisca/openfisca-tunisia/pull/78 mais cela ne passent pas les tests qui ont l'air besoin d'avoir besoin de la contribution de cette PR.

sandcha commented 5 years ago

PR remplacée par la #82