openfisca / openfisca-france-fiscalite-miniere

French mining tax system for OpenFisca
GNU Affero General Public License v3.0
3 stars 2 forks source link

Proposition de mutualisation des redevances communales et departementales #28

Open MichaelBitard opened 2 years ago

MichaelBitard commented 2 years ago

En relisant la Pull request #27 je me rends compte qu'énormément de code est dupilqué entre les classes.

J'ai fais une proposition ici, ou j'ai mis dans le init 3 classes "de base" BaseQuantite BaseRedevanceCommunale et BaseRedevanceDepartementale

Celà permet de ne plus avoir quasiment de duplication dans les fichiers sur les substances.

On se retrouve avec, pour l'antimoine par exemple, un fichier beaucoup plus léger :

from numpy import ndarray

from . import BaseQuantite, BaseRedevanceCommunale, BaseRedevanceDepartementale

class quantite_antimoine_t(BaseQuantite):
    label = "Quantité extraite de minerai d'antimoine (par tonne d'antimoine contenu)"

class redevance_communale_des_mines_antimoine(BaseRedevanceCommunale):
    label = "Redevance communale des mines pour le minerai d'antimoine"

    def formula_2020_01(articles, period, parameters) -> ndarray:
        return BaseRedevanceCommunale.base_formula_2020_01(articles, period, parameters, "antimoine", "t")

class redevance_departementale_des_mines_antimoine(BaseRedevanceDepartementale):
    label = "Redevance départementale des mines pour le minerai d'antimoine"

    def formula_2020_01(articles, period, parameters) -> ndarray:
        return BaseRedevanceDepartementale.base_formula_2020_01(articles, period, parameters, "antimoine", "t")from numpy import ndarray

from . import BaseQuantite, BaseRedevanceCommunale, BaseRedevanceDepartementale

class quantite_antimoine_t(BaseQuantite):
    label = "Quantité extraite de minerai d'antimoine (par tonne d'antimoine contenu)"

class redevance_communale_des_mines_antimoine(BaseRedevanceCommunale):
    label = "Redevance communale des mines pour le minerai d'antimoine"

    def formula_2020_01(articles, period, parameters) -> ndarray:
        return BaseRedevanceCommunale.base_formula_2020_01(articles, period, parameters, "antimoine", "t")

class redevance_departementale_des_mines_antimoine(BaseRedevanceDepartementale):
    label = "Redevance départementale des mines pour le minerai d'antimoine"

    def formula_2020_01(articles, period, parameters) -> ndarray:
        return BaseRedevanceDepartementale.base_formula_2020_01(articles, period, parameters, "antimoine", "t")

C'est juste une proposition, je ne sais pas si avec le framework openfisca ça fonctionne correctement (j'ai vu qu'il y'avait de la magie un peu, basé sur le nom des fonctions)

sandcha commented 2 years ago

Merci @MichaelBitard pour cette proposition ! Nous pouvons reprendre le principe des classes BaseX en considérant que ça fait sens d'un point de vue économique légal puisque jusqu'ici il n'y a qu'un article de loi qui traite de toutes les substances. On doit juste transcrire ça avec une autre syntaxe pour remplacer les BaseRedevanceDepartementale.base_formula_2020_01 par leur équivalent (c'est le socle openfisca qui gère les dates par exemple). Ça nous permettra aussi de conserver la vue arborescente des dépendances entre variables (les "décompositions" qui servent au debug et les explications du calcul).

sandcha commented 2 years ago

@MichaelBitard Est-ce que ça te conviendrait si je poussait les changements de syntaxe directement sur cette branche refactor-proposition ?

MichaelBitard commented 2 years ago

@sandcha Oui bien sûr fait les changements directement sur cette branche,