diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 59f5d47..7685282 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -11,7 +11,7 @@ Thanks for contributing to OpenFisca ! Please remove this line, as well as, for These changes _(remove lines which are not relevant to your contribution)_: -- Impact the OpenFisca-France Firms public API (for instance renaming or removing a variable) +- Impact the OpenFisca-France UniteLegales public API (for instance renaming or removing a variable) - Add a new feature (for instance adding a variable) - Fix or improve an already existing calculation. - Change non-functional parts of this repository (for instance editing the README) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b9c0f7..ce2098c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## 1.0.0 - [#1](https://github.com/pzuldp/openfisca-france-firms/pull/1) + +* Tax and benefit system evolution. +* Impacted periods: all. +* Impacted areas: all +* Details: + - Adaptation du template avec la création des entités UniteLegale et Etablissement + - Création du bilan et de ses variables + - Création du compte de résultat et de ses variables + - Création des TICC et TICGN + - Premiers tests ## 0.0.1 - [#0](https://github.com/openfisca/country-template/pull/0) diff --git a/LICENSE b/LICENSE index 1ce8758..ccf4b0c 100644 --- a/LICENSE +++ b/LICENSE @@ -29,7 +29,7 @@ with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. - A secondary benefit of defending all users' freedom is that + A secondaire benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and @@ -143,7 +143,7 @@ same work. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited +conditions are met. This License explicitly afunite_legales your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your @@ -284,7 +284,7 @@ included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation +or unite_legale purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a @@ -449,7 +449,7 @@ Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may +rights granted or afunite_legaleed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that diff --git a/README.md b/README.md index d03d986..13a35d7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# OpenFisca France Firms +# OpenFisca France UniteLegales The country whose law is modelled here has a very simple tax and benefit system. diff --git a/openfisca_france_firms/__init__.py b/openfisca_france_firms/__init__.py index 5404cc7..2e1459d 100644 --- a/openfisca_france_firms/__init__.py +++ b/openfisca_france_firms/__init__.py @@ -35,7 +35,7 @@ def __init__(self): # We define which variable, parameter and simulation example will be used in the OpenAPI specification self.open_api_config = { - "variable_example": "disposable_income", - "parameter_example": "taxes.income_tax_rate", + "variable_example": "example_disposable_income", + "parameter_example": "example_taxes.example_income_tax_rate_flat", "simulation_example": couple, } diff --git a/openfisca_france_firms/entities.py b/openfisca_france_firms/entities.py index 297bed6..7ad032f 100644 --- a/openfisca_france_firms/entities.py +++ b/openfisca_france_firms/entities.py @@ -1,64 +1,58 @@ """ This file defines the entities needed by our legislation. -Taxes and benefits can be calculated for different entities: persons, household, companies, etc. +Taxes and benefits can be calculated for different entities: etablissements, unite_legale, companies, etc. -See https://openfisca.org/doc/key-concepts/person,_entities,_role.html +See https://openfisca.org/doc/key-concepts/etablissement,_entities,_role.html """ from openfisca_core.entities import build_entity -Household = build_entity( - key = "household", - plural = "households", - label = "All the people in a family or group who live together in the same place.", +UniteLegale = build_entity( + key = "unite_legale", + plural = "unite_legales", + label = "All the etablissements in a legal unit defined by a SIREN.", doc = """ - Household is an example of a group entity. - A group entity contains one or more individual·s. - Each individual in a group entity has a role (e.g. parent or children). Some roles can only be held by a limited number of individuals (e.g. a 'first_parent' can only be held by one individual), while others can have an unlimited number of individuals (e.g. 'children'). - - Example: - Housing variables (e.g. housing_tax') are usually defined for a group entity such as 'Household'. + A unite_legale entity contains one or more etablissements. + Each etablissement in a unite_legale has a role (e.g. siege_social or secondaire etablissement). There can only be one siege_social etablissement. Usage: - Check the number of individuals of a specific role (e.g. check if there is a 'second_parent' with household.nb_persons(Household.SECOND_PARENT)). - Calculate a variable applied to each individual of the group entity (e.g. calculate the 'salary' of each member of the 'Household' with salaries = household.members("salary", period = MONTH); sum_salaries = household.sum(salaries)). + Check the number of etablissements of a specific role (e.g. check if there is a unique 'siege_social' etablissement within a unite_legale). For more information, see: https://openfisca.org/doc/coding-the-legislation/50_entities.html """, roles = [ { - "key": "parent", - "plural": "parents", - "label": "Parents", - "max": 2, - "subroles": ["first_parent", "second_parent"], - "doc": "The one or two adults in charge of the household.", + "key": "siege_social", + "plural": "siege_social", + "label": "Siege Social", + "max": 1, + "doc": "The one etablissement that is siege_social to the unite_legale.", }, { - "key": "child", - "plural": "children", - "label": "Child", - "doc": "Other individuals living in the household.", + "key": "secondaire", + "plural": "secondaires", + "label": "Etablissements secondaires", + "doc": "Other etablissements in the unite_legale.", }, ], ) -Person = build_entity( - key = "person", - plural = "persons", - label = "An individual. The minimal legal entity on which a legislation might be applied.", +Etablissement = build_entity( + key = "etablissement", + plural = "etablissements", + label = "An etablissement. The minimal legal entity on which a legislation might be applied.", doc = """ - Variables like 'salary' and 'income_tax' are usually defined for the entity 'Person'. + Variables like 'masse_salariale' and 'consommation_energie' are usually defined for the entity 'Etablissement'. Usage: - Calculate a variable applied to a 'Person' (e.g. access the 'salary' of a specific month with person("salary", "2017-05")). - Check the role of a 'Person' in a group entity (e.g. check if a the 'Person' is a 'first_parent' in a 'Household' entity with person.has_role(Household.FIRST_PARENT)). + Calculate a variable applied to a 'Etablissement' (e.g. access the 'example_salary' of a specific month with etablissement("example_salary", "2017-05")). + Check the role of a 'Etablissement' in a group entity (e.g. check if a the 'Etablissement' is a 'siege_social' in a 'unite_legale' entity with etablissement.has_role(unite_legale.SIEGE_SOCIAL)). For more information, see: https://openfisca.org/doc/coding-the-legislation/50_entities.html """, is_person = True, ) -entities = [Household, Person] +entities = [UniteLegale, Etablissement] diff --git a/openfisca_france_firms/parameters/benefits/basic_income.yaml b/openfisca_france_firms/parameters/example_subsidies/example_basic_income.yaml similarity index 100% rename from openfisca_france_firms/parameters/benefits/basic_income.yaml rename to openfisca_france_firms/parameters/example_subsidies/example_basic_income.yaml diff --git a/openfisca_france_firms/parameters/benefits/housing_allowance.yaml b/openfisca_france_firms/parameters/example_subsidies/example_housing_allowance.yaml similarity index 100% rename from openfisca_france_firms/parameters/benefits/housing_allowance.yaml rename to openfisca_france_firms/parameters/example_subsidies/example_housing_allowance.yaml diff --git a/openfisca_france_firms/parameters/benefits/parenting_allowance/amount.yaml b/openfisca_france_firms/parameters/example_subsidies/example_parenting_allowance/amount.yaml similarity index 78% rename from openfisca_france_firms/parameters/benefits/parenting_allowance/amount.yaml rename to openfisca_france_firms/parameters/example_subsidies/example_parenting_allowance/amount.yaml index 58a9b12..ae29eaa 100644 --- a/openfisca_france_firms/parameters/benefits/parenting_allowance/amount.yaml +++ b/openfisca_france_firms/parameters/example_subsidies/example_parenting_allowance/amount.yaml @@ -1,6 +1,6 @@ description: Parenting allowance amount metadata: - reference: https://law.gov.example/parenting_allowance/amount + reference: https://law.gov.example/example_parenting_allowance/amount unit: currency-EUR values: # This parameter is only defined since the 1st of Dec 2015. diff --git a/openfisca_france_firms/parameters/benefits/parenting_allowance/income_threshold.yaml b/openfisca_france_firms/parameters/example_subsidies/example_parenting_allowance/income_threshold.yaml similarity index 77% rename from openfisca_france_firms/parameters/benefits/parenting_allowance/income_threshold.yaml rename to openfisca_france_firms/parameters/example_subsidies/example_parenting_allowance/income_threshold.yaml index cefcc2c..d38ec67 100644 --- a/openfisca_france_firms/parameters/benefits/parenting_allowance/income_threshold.yaml +++ b/openfisca_france_firms/parameters/example_subsidies/example_parenting_allowance/income_threshold.yaml @@ -1,6 +1,6 @@ description: Parenting allowance income threshold metadata: - reference: https://law.gov.example/parenting_allowance/income_threshold + reference: https://law.gov.example/example_parenting_allowance/income_threshold unit: currency-EUR values: # This parameter is only defined since the 1st of Dec 2015. diff --git a/openfisca_france_firms/parameters/benefits/index.yaml b/openfisca_france_firms/parameters/example_subsidies/index.yaml similarity index 100% rename from openfisca_france_firms/parameters/benefits/index.yaml rename to openfisca_france_firms/parameters/example_subsidies/index.yaml diff --git a/openfisca_france_firms/parameters/taxes/income_tax_rate.yaml b/openfisca_france_firms/parameters/example_taxes/example_income_tax_rate_flat.yaml similarity index 100% rename from openfisca_france_firms/parameters/taxes/income_tax_rate.yaml rename to openfisca_france_firms/parameters/example_taxes/example_income_tax_rate_flat.yaml diff --git a/openfisca_france_firms/parameters/taxes/social_security_contribution.yaml b/openfisca_france_firms/parameters/example_taxes/example_income_tax_rate_progressive.yaml similarity index 100% rename from openfisca_france_firms/parameters/taxes/social_security_contribution.yaml rename to openfisca_france_firms/parameters/example_taxes/example_income_tax_rate_progressive.yaml diff --git a/openfisca_france_firms/parameters/taxation_energies/natural_gas.yaml b/openfisca_france_firms/parameters/taxation_energies/natural_gas.yaml new file mode 100644 index 0000000..5fcc830 --- /dev/null +++ b/openfisca_france_firms/parameters/taxation_energies/natural_gas.yaml @@ -0,0 +1,9 @@ +description: Natural gas consumption rate +values: + # This parameter is only defined since the 1st of Dec 2015. + 2000-01-01: + value: 0.02 +metadata: + reference: + 2000-01-01: + href: https://law.gov.example/basic-income/amount/2015-12 diff --git a/openfisca_france_firms/parameters/taxes/housing_tax.yaml b/openfisca_france_firms/parameters/taxes/housing_tax.yaml deleted file mode 100644 index c0439cc..0000000 --- a/openfisca_france_firms/parameters/taxes/housing_tax.yaml +++ /dev/null @@ -1,15 +0,0 @@ -# One Yaml file can contain nested parameters -description: Housing tax -rate: - description: Housing tax due per square meter. - metadata: - unit: currency-EUR/m2 - values: - 2010-01-01: 10 -minimal_amount: - description: Minimal amount due for the housing tax - metadata: - unit: currency-EUR - values: - 2010-01-01: 200 -documentation: The housing tax, introduced in 2010, is proportional to the surface area of the habitation, with a minimal amount. diff --git a/openfisca_france_firms/reforms/add_dynamic_variable.py b/openfisca_france_firms/reforms/examples/example_add_dynamic_variable.py similarity index 85% rename from openfisca_france_firms/reforms/add_dynamic_variable.py rename to openfisca_france_firms/reforms/examples/example_add_dynamic_variable.py index 521c7b4..dd30677 100644 --- a/openfisca_france_firms/reforms/add_dynamic_variable.py +++ b/openfisca_france_firms/reforms/examples/example_add_dynamic_variable.py @@ -12,7 +12,7 @@ from openfisca_core.variables import Variable # Import the Entities specifically defined for this tax and benefit system -from openfisca_france_firms.entities import Person +from openfisca_france_firms.entities import Etablissement def create_dynamic_variable(name, **variable): @@ -40,13 +40,13 @@ def apply(self): See https://openfisca.org/doc/coding-the-legislation/reforms.html#writing-a-reform """ NewVariable = create_dynamic_variable( - name = "goes_to_school", + name = "is_euets", value_type = bool, - entity = Person, + entity = Etablissement, default_value = True, definition_period = MONTH, - label = "The person goes to school (only relevant for children)", - reference = "https://law.gov.example/goes_to_school", + label = "The etablissement is subject to EUETS", + reference = "https://law.gov.example/is_euets", ) self.add_variable(NewVariable) diff --git a/openfisca_france_firms/reforms/add_new_tax.py b/openfisca_france_firms/reforms/examples/example_add_new_tax.py similarity index 75% rename from openfisca_france_firms/reforms/add_new_tax.py rename to openfisca_france_firms/reforms/examples/example_add_new_tax.py index 1c77784..77a47fe 100644 --- a/openfisca_france_firms/reforms/add_new_tax.py +++ b/openfisca_france_firms/reforms/examples/example_add_new_tax.py @@ -12,36 +12,36 @@ from openfisca_core.variables import Variable # Import the Entities specifically defined for this tax and benefit system -from openfisca_france_firms.entities import Person +from openfisca_france_firms.entities import Etablissement class has_car(Variable): value_type = bool - entity = Person + entity = Etablissement default_value = True definition_period = MONTH - label = "The person has a car" + label = "The etablissement has a car" reference = "https://law.gov.example/new_tax" # Always use the most official source class new_tax(Variable): value_type = float - entity = Person + entity = Etablissement definition_period = MONTH label = "New tax" reference = "https://law.gov.example/new_tax" # Always use the most official source - def formula(person, period, _parameters): + def formula(etablissement, period, _parameters): """ New tax reform. Our reform adds a new variable `new_tax` that is calculated based on - the current `income_tax`, if the person has a car. + the current `income_tax`, if the etablissement has a car. """ - income_tax = person("income_tax", period) - has_car = person("has_car", period) + example_income_tax_flat = etablissement("example_income_tax_flat", period) + has_car = etablissement("has_car", period) - return (income_tax + 100.0) * has_car + return (example_income_tax_flat + 100.0) * has_car class add_new_tax(Reform): diff --git a/openfisca_france_firms/reforms/flat_social_security_contribution.py b/openfisca_france_firms/reforms/examples/example_flat_income_tax.py similarity index 70% rename from openfisca_france_firms/reforms/flat_social_security_contribution.py rename to openfisca_france_firms/reforms/examples/example_flat_income_tax.py index c224fc1..b4c5996 100644 --- a/openfisca_france_firms/reforms/flat_social_security_contribution.py +++ b/openfisca_france_firms/reforms/examples/example_flat_income_tax.py @@ -11,19 +11,19 @@ from openfisca_core.variables import Variable -class social_security_contribution(Variable): +class example_income_tax_flat(Variable): # Variable metadata don't need to be redefined. By default, the reference variable metadatas will be used. - def formula(person, period, _parameters): + def formula(etablissement, period, _parameters): """ Social security contribution reform. - Our reform replaces `social_security_contribution` (the "reference" variable) by the following variable. + Our reform replaces `income_tax_flat` (the "reference" variable) by the following variable. """ - return person("salary", period) * 0.03 + return etablissement("example_salary", period) * 0.03 -class flat_social_security_contribution(Reform): +class example_flatten_income_tax(Reform): def apply(self): """ Apply reform. @@ -31,4 +31,4 @@ def apply(self): A reform always defines an `apply` method that builds the reformed tax and benefit system from the reference one. See https://openfisca.org/doc/coding-the-legislation/reforms.html#writing-a-reform """ - self.update_variable(social_security_contribution) + self.update_variable(example_income_tax_flat) diff --git a/openfisca_france_firms/reforms/modify_social_security_taxation.py b/openfisca_france_firms/reforms/examples/example_modify_income_tax.py similarity index 93% rename from openfisca_france_firms/reforms/modify_social_security_taxation.py rename to openfisca_france_firms/reforms/examples/example_modify_income_tax.py index 7d4099d..0e33dbf 100644 --- a/openfisca_france_firms/reforms/modify_social_security_taxation.py +++ b/openfisca_france_firms/reforms/examples/example_modify_income_tax.py @@ -11,7 +11,7 @@ from openfisca_core.reforms import Reform -class modify_social_security_taxation(Reform): +class modify_income_tax_progressive(Reform): def apply(self): """ Apply reform. @@ -35,7 +35,7 @@ def modify_brackets(parameters): of the YAML parameters. It can be modified and must be returned. """ # Access the right parameter node: - brackets = parameters.taxes.social_security_contribution.brackets + brackets = parameters.example_taxes.example_income_tax_rate_progressive.brackets # Add 0.1 to the rates of the second bracket, keeping the same thresholds: for rate in brackets[1].rate.values_list: diff --git a/openfisca_france_firms/reforms/removal_basic_income.py b/openfisca_france_firms/reforms/examples/example_removal_basic_income.py similarity index 69% rename from openfisca_france_firms/reforms/removal_basic_income.py rename to openfisca_france_firms/reforms/examples/example_removal_basic_income.py index 58de496..8e9bb11 100644 --- a/openfisca_france_firms/reforms/removal_basic_income.py +++ b/openfisca_france_firms/reforms/examples/example_removal_basic_income.py @@ -10,7 +10,7 @@ from openfisca_core.reforms import Reform -class removal_basic_income(Reform): +class removal_example_basic_income(Reform): def apply(self): """ Apply reform. @@ -18,6 +18,6 @@ def apply(self): A reform always defines an `apply` method that builds the reformed tax and benefit system from the reference one. See https://openfisca.org/doc/coding-the-legislation/reforms.html#writing-a-reform - Our reform neutralizes the `basic_income` variable. When this reform is applied, calculating `basic_income` will always return its default value, 0. + Our reform neutralizes the `example_basic_income` variable. When this reform is applied, calculating `example_basic_income` will always return its default value, 0. """ - self.neutralize_variable("basic_income") + self.neutralize_variable("example_basic_income") diff --git a/openfisca_france_firms/situation_examples/couple.json b/openfisca_france_firms/situation_examples/couple.json index e04c75b..c96ca57 100644 --- a/openfisca_france_firms/situation_examples/couple.json +++ b/openfisca_france_firms/situation_examples/couple.json @@ -1,31 +1,32 @@ { - "persons": { + "etablissements": { "Alicia": { - "birth": { + "example_birth": { "ETERNITY": "1980-01-01" }, - "salary": { + "example_salary": { "2017-01": 4000 }, - "disposable_income": { + "example_disposable_income": { "2017-01": null } }, "Javier": { - "birth": { + "example_birth": { "ETERNITY": "1984-01-01" }, - "salary": { + "example_salary": { "2017-01": 2500 }, - "disposable_income": { + "example_disposable_income": { "2017-01": null } } }, - "households": { + "unite_legales": { "_": { - "parents": ["Alicia", "Javier"], + "siege_social": ["Alicia"], + "secondaires" : ["Javier"], "total_benefits": { "2017-01": null }, diff --git a/openfisca_france_firms/situation_examples/housing.json b/openfisca_france_firms/situation_examples/housing.json deleted file mode 100644 index de039a4..0000000 --- a/openfisca_france_firms/situation_examples/housing.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "persons": { - "Alicia": { - "birth": { - "2017-01": null - }, - "disposable_income": { - "2017-01": null - } - } - }, - "households": { - "_": { - "parents": ["Alicia"], - "housing_tax": { - "2017": null - }, - "housing_occupancy_status": { - "2017-01": null - } - } - } -} \ No newline at end of file diff --git a/openfisca_france_firms/situation_examples/single.json b/openfisca_france_firms/situation_examples/single.json index c1ca2bc..13f987f 100644 --- a/openfisca_france_firms/situation_examples/single.json +++ b/openfisca_france_firms/situation_examples/single.json @@ -1,17 +1,17 @@ { - "persons": { + "etablissements": { "Alicia": { - "birth": { + "example_birth": { "2017-01": null }, - "disposable_income": { + "example_disposable_income": { "2017-01": null } } }, - "households": { + "unite_legales": { "_": { - "parents": ["Alicia"] + "siege_social": ["Alicia"] } } } diff --git a/openfisca_france_firms/tests/basic_income.yaml b/openfisca_france_firms/tests/basic_income.yaml deleted file mode 100644 index 8d09eb3..0000000 --- a/openfisca_france_firms/tests/basic_income.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# Test files describe situations and their expected outcomes -# We can run this test on our command line using `openfisca-run-test basic_income.yaml` - -- name: The basic income should be 0 before it was introduced - period: 2015-11 - input: - age: 18 - salary: 0 - output: - basic_income: 0 - -- name: In Dec 2015, an adult with no salary should get a basic income of 600 - period: 2015-12 - input: - salary: 0 - age: 18 - output: - basic_income: 600 - -- name: In Dec 2015, a child with no salary should get no basic income - period: 2015-12 - input: - salary: 0 - age: 17 - output: - basic_income: 0 - -- name: In Dec 2015, an adult with a salary should get no basic income - period: 2015-12 - input: - salary: 1200 - age: 18 - output: - basic_income: 0 - -- name: In Dec 2016, a child with no salary should get no basic income - period: 2016-12 - input: - salary: 0 - age: 17 - output: - basic_income: 0 - -- name: In Dec 2016, an adult with a salary should get a basic income of 600 - period: 2016-12 - input: - salary: 1200 - age: 18 - output: - basic_income: 600 diff --git a/openfisca_france_firms/tests/bilan/actif/actif.yaml b/openfisca_france_firms/tests/bilan/actif/actif.yaml new file mode 100644 index 0000000..a8219fa --- /dev/null +++ b/openfisca_france_firms/tests/bilan/actif/actif.yaml @@ -0,0 +1,106 @@ +- name: actif_brut + period: 2020 + absolute_error_margin: 0.001 + input: + frais_etablissement_bruts: 1000 + frais_developpement_bruts: 1000 + concessions_brevets_droits_bruts: 1000 + fonds_commercial_brut: 1000 + autres_immobilisations_incorporelles_brutes: 1000 + immobilisations_incorporelles_avances_acomptes_bruts: 1000 + terrains_bruts: 1000 + constructions_brutes: 1000 + installations_techniques_brutes: 1000 + autres_immobilisations_corporelles_brutes: 1000 + immobilisations_en_cours_brutes: 1000 + avances_acomptes_bruts: 1000 + participations_mise_equivalence_brutes: 1000 + autres_participations_brutes: 1000 + creances_participations_brutes: 1000 + autres_titres_immobilises_bruts: 1000 + prets_bruts: 1000 + autres_immobilisations_financieres_brutes: 1000 + matieres_premieres_brutes: 1000 + encours_production_biens_bruts: 1000 + encours_production_services_bruts: 1000 + produits_intermediaires_finis_bruts: 1000 + marchandises_brutes: 1000 + creances_clients_comptes_rattaches_brutes: 1000 + autres_creances_brutes: 1000 + capital_souscrit_appele_non_verse_brut: 1000 + valeurs_mobilieres_placement_brutes: 1000 + disponibilites_brutes: 1000 + charges_constatees_avance_brutes: 1000 + frais_emission_emprunt: 1000 + primes_remboursement_obligations: 1000 + ecarts_conversion_actif: 1000 + output: + actif_brut: 32000 + +- name: actif_net + period: 2020 + absolute_error_margin: 0.001 + input: + frais_etablissement_bruts: 1000 + frais_developpement_bruts: 1000 + concessions_brevets_droits_bruts: 1000 + fonds_commercial_brut: 1000 + autres_immobilisations_incorporelles_brutes: 1000 + immobilisations_incorporelles_avances_acomptes_bruts: 1000 + terrains_bruts: 1000 + constructions_brutes: 1000 + installations_techniques_brutes: 1000 + autres_immobilisations_corporelles_brutes: 1000 + immobilisations_en_cours_brutes: 1000 + avances_acomptes_bruts: 1000 + participations_mise_equivalence_brutes: 1000 + autres_participations_brutes: 1000 + creances_participations_brutes: 1000 + autres_titres_immobilises_bruts: 1000 + prets_bruts: 1000 + autres_immobilisations_financieres_brutes: 1000 + matieres_premieres_brutes: 1000 + encours_production_biens_bruts: 1000 + encours_production_services_bruts: 1000 + produits_intermediaires_finis_bruts: 1000 + marchandises_brutes: 1000 + creances_clients_comptes_rattaches_brutes: 1000 + autres_creances_brutes: 1000 + capital_souscrit_appele_non_verse_brut: 1000 + valeurs_mobilieres_placement_brutes: 1000 + disponibilites_brutes: 1000 + charges_constatees_avance_brutes: 1000 + frais_emission_emprunt: 1000 + primes_remboursement_obligations: 1000 + ecarts_conversion_actif: 1000 + frais_etablissement_ar: 10 + frais_developpement_ar: 10 + concessions_brevets_droits_ar: 10 + fonds_commercial_ar: 10 + autres_immobilisations_incorporelles_ar: 10 + immobilisations_incorporelles_avances_acomptes_ar: 10 + terrains_ar: 10 + constructions_ar: 10 + installations_techniques_ar: 10 + autres_immobilisations_corporelles_ar: 10 + immobilisations_en_cours_ar: 10 + avances_acomptes_ar: 10 + participations_mise_equivalence_ar: 10 + autres_participations_ar: 10 + creances_participations_ar: 10 + autres_titres_immobilises_ar: 10 + prets_ar: 10 + autres_immobilisations_financieres_ar: 10 + creances_clients_comptes_rattaches_ar: 10 + autres_creances_ar: 10 + capital_souscrit_appele_non_verse_ar: 10 + valeurs_mobilieres_placement_ar: 10 + disponibilites_ar: 10 + matieres_premieres_ar: 10 + encours_production_biens_ar: 10 + encours_production_services_ar: 10 + produits_intermediaires_finis_ar: 10 + marchandises_ar: 10 + charges_constatees_avance_ar: 10 + output: + actif_net: 31710 diff --git a/openfisca_france_firms/tests/bilan/actif/actif_circulant.yaml b/openfisca_france_firms/tests/bilan/actif/actif_circulant.yaml new file mode 100644 index 0000000..60ccd1a --- /dev/null +++ b/openfisca_france_firms/tests/bilan/actif/actif_circulant.yaml @@ -0,0 +1,229 @@ +- name: matieres_premieres + period: 2020 + absolute_error_margin: 0.001 + input: + matieres_premieres_brutes: 1000 + matieres_premieres_ar: 10 + output: + matieres_premieres_nettes: 990 + +- name: encours_production_biens + period: 2020 + absolute_error_margin: 0.001 + input: + encours_production_biens_bruts: 1000 + encours_production_biens_ar: 10 + output: + encours_production_biens_nets: 990 + +- name: encours_production_services + period: 2020 + absolute_error_margin: 0.001 + input: + encours_production_services_bruts: 1000 + encours_production_services_ar: 10 + output: + encours_production_services_nets: 990 + +- name: produits_intermediaires_finis + period: 2020 + absolute_error_margin: 0.001 + input: + produits_intermediaires_finis_bruts: 1000 + produits_intermediaires_finis_ar: 10 + output: + produits_intermediaires_finis_nets: 990 + +- name: marchandises + period: 2020 + absolute_error_margin: 0.001 + input: + marchandises_brutes: 1000 + marchandises_ar: 10 + output: + marchandises_nettes: 990 + +- name: stocks_bruts + period: 2020 + absolute_error_margin: 0.001 + input: + matieres_premieres_brutes: 1000 + encours_production_biens_bruts: 1000 + encours_production_services_bruts: 1000 + produits_intermediaires_finis_bruts: 1000 + marchandises_brutes: 1000 + output: + stocks_bruts: 5000 + +- name: stocks_ar + period: 2020 + absolute_error_margin: 0.001 + input: + matieres_premieres_ar: 10 + encours_production_biens_ar: 10 + encours_production_services_ar: 10 + produits_intermediaires_finis_ar: 10 + marchandises_ar: 10 + output: + stocks_ar: 50 + +- name: stocks_nets + period: 2020 + absolute_error_margin: 0.001 + input: + matieres_premieres_brutes: 1000 + encours_production_biens_bruts: 1000 + encours_production_services_bruts: 1000 + produits_intermediaires_finis_bruts: 1000 + marchandises_brutes: 1000 + matieres_premieres_ar: 10 + encours_production_biens_ar: 10 + encours_production_services_ar: 10 + produits_intermediaires_finis_ar: 10 + marchandises_ar: 10 + output: + stocks_nets: 4950 + +- name: avances_acomptes_commandes + period: 2020 + absolute_error_margin: 0.001 + input: + avances_acomptes_commandes_bruts: 1000 + avances_acomptes_commandes_ar: 10 + output: + avances_acomptes_commandes_nets: 990 + +- name: creances_clients_comptes_rattaches + period: 2020 + absolute_error_margin: 0.001 + input: + creances_clients_comptes_rattaches_brutes: 1000 + creances_clients_comptes_rattaches_ar: 10 + output: + creances_clients_comptes_rattaches_nettes: 990 + +- name: autres_creances + period: 2020 + absolute_error_margin: 0.001 + input: + autres_creances_brutes: 1000 + autres_creances_ar: 10 + output: + autres_creances_nettes: 990 + +- name: capital_souscrit_appele_non_verse + period: 2020 + absolute_error_margin: 0.001 + input: + capital_souscrit_appele_non_verse_brut: 1000 + capital_souscrit_appele_non_verse_ar: 10 + output: + capital_souscrit_appele_non_verse_net: 990 + +- name: creances_brutes + period: 2020 + absolute_error_margin: 0.001 + input: + creances_clients_comptes_rattaches_brutes: 1000 + autres_creances_brutes: 1000 + capital_souscrit_appele_non_verse_brut: 1000 + output: + creances_brutes: 3000 + +- name: creances_ar + period: 2020 + absolute_error_margin: 0.001 + input: + creances_clients_comptes_rattaches_ar: 10 + autres_creances_ar: 10 + capital_souscrit_appele_non_verse_ar: 10 + output: + creances_ar: 30 + +- name: creances_nettes + period: 2020 + absolute_error_margin: 0.001 + input: + creances_clients_comptes_rattaches_brutes: 1000 + autres_creances_brutes: 1000 + capital_souscrit_appele_non_verse_brut: 1000 + creances_clients_comptes_rattaches_ar: 10 + autres_creances_ar: 10 + capital_souscrit_appele_non_verse_ar: 10 + output: + creances_nettes: 2970 + +- name: valeurs_mobilieres_placement + period: 2020 + absolute_error_margin: 0.001 + input: + valeurs_mobilieres_placement_brutes: 1000 + valeurs_mobilieres_placement_ar: 10 + output: + valeurs_mobilieres_placement_nettes: 990 + +- name: disponibilites + period: 2020 + absolute_error_margin: 0.001 + input: + disponibilites_brutes: 1000 + disponibilites_ar: 10 + output: + disponibilites_nettes: 990 + +- name: actif_circulant_divers_brut + period: 2020 + absolute_error_margin: 0.001 + input: + valeurs_mobilieres_placement_brutes: 1000 + disponibilites_brutes: 1000 + output: + actif_circulant_divers_brut: 2000 + +- name: actif_circulant_divers_ar + period: 2020 + absolute_error_margin: 0.001 + input: + valeurs_mobilieres_placement_ar: 10 + disponibilites_ar: 10 + output: + actif_circulant_divers_ar: 20 + +- name: actif_circulant_divers_net + period: 2020 + absolute_error_margin: 0.001 + input: + valeurs_mobilieres_placement_brutes: 1000 + disponibilites_brutes: 1000 + valeurs_mobilieres_placement_ar: 10 + disponibilites_ar: 10 + output: + actif_circulant_divers_net: 1980 + +- name: actif_circulant_net + period: 2020 + absolute_error_margin: 0.001 + input: + matieres_premieres_brutes: 1000 + encours_production_biens_bruts: 1000 + encours_production_services_bruts: 1000 + produits_intermediaires_finis_bruts: 1000 + marchandises_brutes: 1000 + matieres_premieres_ar: 10 + encours_production_biens_ar: 10 + encours_production_services_ar: 10 + produits_intermediaires_finis_ar: 10 + marchandises_ar: 10 + creances_clients_comptes_rattaches_brutes: 1000 + autres_creances_brutes: 1000 + capital_souscrit_appele_non_verse_brut: 1000 + creances_clients_comptes_rattaches_ar: 10 + autres_creances_ar: 10 + capital_souscrit_appele_non_verse_ar: 10 + valeurs_mobilieres_placement_brutes: 1000 + disponibilites_brutes: 1000 + valeurs_mobilieres_placement_ar: 10 + disponibilites_ar: 10 + output: + actif_circulant_net: 9900 + diff --git a/openfisca_france_firms/tests/bilan/actif/actif_immobilise.yaml b/openfisca_france_firms/tests/bilan/actif/actif_immobilise.yaml new file mode 100644 index 0000000..605aa6a --- /dev/null +++ b/openfisca_france_firms/tests/bilan/actif/actif_immobilise.yaml @@ -0,0 +1,331 @@ +- name: frais_etablissement + period: 2020 + absolute_error_margin: 0.001 + input: + frais_etablissement_bruts: 1000 + frais_etablissement_ar: 10 + output: + frais_etablissement_nets: 990 + +- name: frais_developpement + period: 2020 + absolute_error_margin: 0.001 + input: + frais_developpement_bruts: 1000 + frais_developpement_ar: 10 + output: + frais_developpement_nets: 990 + +- name: concessions_brevets_droits + period: 2020 + absolute_error_margin: 0.001 + input: + concessions_brevets_droits_bruts: 1000 + concessions_brevets_droits_ar: 10 + output: + concessions_brevets_droits_nets: 990 + +- name: fonds_commercial + period: 2020 + absolute_error_margin: 0.001 + input: + fonds_commercial_brut: 1000 + fonds_commercial_ar: 10 + output: + fonds_commercial_net: 990 + +- name: autres_immobilisations_incorporelles + period: 2020 + absolute_error_margin: 0.001 + input: + autres_immobilisations_incorporelles_brutes: 1000 + autres_immobilisations_incorporelles_ar: 10 + output: + autres_immobilisations_incorporelles_nettes: 990 + +- name: immobilisations_incorporelles_brutes + period: 2020 + absolute_error_margin: 0.001 + input: + frais_etablissement_bruts: 1000 + frais_developpement_bruts: 1000 + concessions_brevets_droits_bruts: 1000 + fonds_commercial_brut: 1000 + autres_immobilisations_incorporelles_brutes: 1000 + immobilisations_incorporelles_avances_acomptes_bruts: 1000 + output: + immobilisations_incorporelles_brutes: 6000 + +- name: immobilisations_incorporelles_ar + period: 2020 + absolute_error_margin: 0.001 + input: + frais_etablissement_ar: 10 + frais_developpement_ar: 10 + concessions_brevets_droits_ar: 10 + fonds_commercial_ar: 10 + autres_immobilisations_incorporelles_ar: 10 + immobilisations_incorporelles_avances_acomptes_ar: 10 + output: + immobilisations_incorporelles_ar: 60 + +- name: immobilisations_incorporelles + period: 2020 + absolute_error_margin: 0.001 + input: + frais_etablissement_bruts: 1000 + frais_developpement_bruts: 1000 + concessions_brevets_droits_bruts: 1000 + fonds_commercial_brut: 1000 + autres_immobilisations_incorporelles_brutes: 1000 + immobilisations_incorporelles_avances_acomptes_bruts: 1000 + frais_etablissement_ar: 10 + frais_developpement_ar: 10 + concessions_brevets_droits_ar: 10 + fonds_commercial_ar: 10 + autres_immobilisations_incorporelles_ar: 10 + immobilisations_incorporelles_avances_acomptes_ar: 10 + output: + immobilisations_incorporelles_nettes: 5940 + + +- name: terrains + period: 2020 + absolute_error_margin: 0.001 + input: + terrains_bruts: 1000 + terrains_ar: 10 + output: + terrains_nets: 990 + +- name: constructions + period: 2020 + absolute_error_margin: 0.001 + input: + constructions_brutes: 1000 + constructions_ar: 10 + output: + constructions_nettes: 990 + +- name: installations_techniques + period: 2020 + absolute_error_margin: 0.001 + input: + installations_techniques_brutes: 1000 + installations_techniques_ar: 10 + output: + installations_techniques_nettes: 990 + +- name: autres_immobilisations_corporelles + period: 2020 + absolute_error_margin: 0.001 + input: + autres_immobilisations_corporelles_brutes: 1000 + autres_immobilisations_corporelles_ar: 10 + output: + autres_immobilisations_corporelles_nettes: 990 + +- name: immobilisations_en_cours + period: 2020 + absolute_error_margin: 0.001 + input: + immobilisations_en_cours_brutes: 1000 + immobilisations_en_cours_ar: 10 + output: + immobilisations_en_cours_nettes: 990 + +- name: avances_acomptes + period: 2020 + absolute_error_margin: 0.001 + input: + avances_acomptes_bruts: 1000 + avances_acomptes_ar: 10 + output: + avances_acomptes_nets: 990 + +- name: immobilisations_corporelles_brutes + period: 2020 + absolute_error_margin: 0.001 + input: + terrains_bruts: 1000 + constructions_brutes: 1000 + installations_techniques_brutes: 1000 + autres_immobilisations_corporelles_brutes: 1000 + immobilisations_en_cours_brutes: 1000 + avances_acomptes_bruts: 1000 + output: + immobilisations_corporelles_brutes: 6000 + +- name: immobilisations_corporelles_ar + period: 2020 + absolute_error_margin: 0.001 + input: + terrains_ar: 10 + constructions_ar: 10 + installations_techniques_ar: 10 + autres_immobilisations_corporelles_ar: 10 + immobilisations_en_cours_ar: 10 + avances_acomptes_ar: 10 + output: + immobilisations_corporelles_ar: 60 + +- name: immobilisations_corporelles + period: 2020 + absolute_error_margin: 0.001 + input: + terrains_bruts: 1000 + constructions_brutes: 1000 + installations_techniques_brutes: 1000 + autres_immobilisations_corporelles_brutes: 1000 + immobilisations_en_cours_brutes: 1000 + avances_acomptes_bruts: 1000 + terrains_ar: 10 + constructions_ar: 10 + installations_techniques_ar: 10 + autres_immobilisations_corporelles_ar: 10 + immobilisations_en_cours_ar: 10 + avances_acomptes_ar: 10 + output: + immobilisations_corporelles_nettes: 5940 + +- name: participations_mise_equivalence + period: 2020 + absolute_error_margin: 0.001 + input: + participations_mise_equivalence_brutes: 1000 + participations_mise_equivalence_ar: 10 + output: + participations_mise_equivalence_nettes: 990 + +- name: autres_participations + period: 2020 + absolute_error_margin: 0.001 + input: + autres_participations_brutes: 1000 + autres_participations_ar: 10 + output: + autres_participations_nettes: 990 + +- name: creances_participations + period: 2020 + absolute_error_margin: 0.001 + input: + creances_participations_brutes: 1000 + creances_participations_ar: 10 + output: + creances_participations_nettes: 990 + +- name: autres_titres_immobilises + period: 2020 + absolute_error_margin: 0.001 + input: + autres_titres_immobilises_bruts: 1000 + autres_titres_immobilises_ar: 10 + output: + autres_titres_immobilises_nets: 990 + +- name: prets + period: 2020 + absolute_error_margin: 0.001 + input: + prets_bruts: 1000 + prets_ar: 10 + output: + prets_nets: 990 + +- name: autres_immobilisations_financieres + period: 2020 + absolute_error_margin: 0.001 + input: + autres_immobilisations_financieres_brutes: 1000 + autres_immobilisations_financieres_ar: 10 + output: + autres_immobilisations_financieres_nettes: 990 + +- name: immobilisations_financieres_brutes + period: 2020 + absolute_error_margin: 0.001 + input: + participations_mise_equivalence_brutes: 1000 + autres_participations_brutes: 1000 + creances_participations_brutes: 1000 + autres_titres_immobilises_bruts: 1000 + prets_bruts: 1000 + autres_immobilisations_financieres_brutes: 1000 + output: + immobilisations_financieres_brutes: 6000 + +- name: immobilisations_financieres_ar + period: 2020 + absolute_error_margin: 0.001 + input: + participations_mise_equivalence_ar: 10 + autres_participations_ar: 10 + creances_participations_ar: 10 + autres_titres_immobilises_ar: 10 + prets_ar: 10 + autres_immobilisations_financieres_ar: 10 + output: + immobilisations_financieres_ar: 60 + +- name: immobilisations_financieres + period: 2020 + absolute_error_margin: 0.001 + input: + participations_mise_equivalence_brutes: 1000 + autres_participations_brutes: 1000 + creances_participations_brutes: 1000 + autres_titres_immobilises_bruts: 1000 + prets_bruts: 1000 + autres_immobilisations_financieres_brutes: 1000 + participations_mise_equivalence_ar: 10 + autres_participations_ar: 10 + creances_participations_ar: 10 + autres_titres_immobilises_ar: 10 + prets_ar: 10 + autres_immobilisations_financieres_ar: 10 + output: + immobilisations_financieres_nettes: 5940 + +- name: actif_immobilise + period: 2020 + absolute_error_margin: 0.001 + input: + frais_etablissement_bruts: 1000 + frais_developpement_bruts: 1000 + concessions_brevets_droits_bruts: 1000 + fonds_commercial_brut: 1000 + autres_immobilisations_incorporelles_brutes: 1000 + immobilisations_incorporelles_avances_acomptes_bruts: 1000 + frais_etablissement_ar: 10 + frais_developpement_ar: 10 + concessions_brevets_droits_ar: 10 + fonds_commercial_ar: 10 + autres_immobilisations_incorporelles_ar: 10 + immobilisations_incorporelles_avances_acomptes_ar: 10 + terrains_bruts: 1000 + constructions_brutes: 1000 + installations_techniques_brutes: 1000 + autres_immobilisations_corporelles_brutes: 1000 + immobilisations_en_cours_brutes: 1000 + avances_acomptes_bruts: 1000 + terrains_ar: 10 + constructions_ar: 10 + installations_techniques_ar: 10 + autres_immobilisations_corporelles_ar: 10 + immobilisations_en_cours_ar: 10 + avances_acomptes_ar: 10 + participations_mise_equivalence_brutes: 1000 + autres_participations_brutes: 1000 + creances_participations_brutes: 1000 + autres_titres_immobilises_bruts: 1000 + prets_bruts: 1000 + autres_immobilisations_financieres_brutes: 1000 + participations_mise_equivalence_ar: 10 + autres_participations_ar: 10 + creances_participations_ar: 10 + autres_titres_immobilises_ar: 10 + prets_ar: 10 + autres_immobilisations_financieres_ar: 10 + output: + actif_immobilise_net: 17820 diff --git a/openfisca_france_firms/tests/bilan/actif/comptes_regularisation.yaml b/openfisca_france_firms/tests/bilan/actif/comptes_regularisation.yaml new file mode 100644 index 0000000..07f4199 --- /dev/null +++ b/openfisca_france_firms/tests/bilan/actif/comptes_regularisation.yaml @@ -0,0 +1,37 @@ +- name: charges_constatees_avance + period: 2020 + absolute_error_margin: 0.001 + input: + charges_constatees_avance_brutes: 1000 + charges_constatees_avance_ar: 10 + output: + charges_constatees_avance_nettes: 990 + +- name: actif_total_iii_brut + period: 2020 + absolute_error_margin: 0.001 + input: + actif_circulant_brut: 1000 + charges_constatees_avance_brutes: 1000 + output: + actif_total_iii_brut: 2000 + +- name: actif_total_iii_ar + period: 2020 + absolute_error_margin: 0.001 + input: + actif_circulant_ar: 10 + charges_constatees_avance_ar: 10 + output: + actif_total_iii_ar: 20 + +- name: actif_total_iii_nett + period: 2020 + absolute_error_margin: 0.001 + input: + actif_circulant_brut: 1000 + charges_constatees_avance_brutes: 1000 + actif_circulant_ar: 10 + charges_constatees_avance_ar: 10 + output: + actif_total_iii_net: 1980 diff --git a/openfisca_france_firms/tests/bilan/passif/autres_fonds_propres.yaml b/openfisca_france_firms/tests/bilan/passif/autres_fonds_propres.yaml new file mode 100644 index 0000000..8936e82 --- /dev/null +++ b/openfisca_france_firms/tests/bilan/passif/autres_fonds_propres.yaml @@ -0,0 +1,8 @@ +- name: autres_fonds_propres + period: 2020 + absolute_error_margin: 0.001 + input: + produit_emissions_titres_participatifs: 1000 + avances_conditionnees: 1000 + output: + autres_fonds_propres: 2000 diff --git a/openfisca_france_firms/tests/bilan/passif/capitaux_propres.yaml b/openfisca_france_firms/tests/bilan/passif/capitaux_propres.yaml new file mode 100644 index 0000000..ce4e506 --- /dev/null +++ b/openfisca_france_firms/tests/bilan/passif/capitaux_propres.yaml @@ -0,0 +1,17 @@ +- name: capitaux_propres + period: 2020 + absolute_error_margin: 0.001 + input: + capital_social_individuel: 1000 + primes_emission_fusion_apport: 1000 + ecarts_reevaluation: 1000 + reserve_legale: 1000 + reserves_statutaires_contractuelles: 1000 + reserves_reglementees: 1000 + autres_reserves: 1000 + report_a_nouveau: 1000 + resultat_exercice_di: 1000 + subventions_investissement: 1000 + provisions_reglementees: 1000 + output: + capitaux_propres: 11000 diff --git a/openfisca_france_firms/tests/bilan/passif/dettes.yaml b/openfisca_france_firms/tests/bilan/passif/dettes.yaml new file mode 100644 index 0000000..2110d88 --- /dev/null +++ b/openfisca_france_firms/tests/bilan/passif/dettes.yaml @@ -0,0 +1,15 @@ +- name: dettes + period: 2020 + absolute_error_margin: 0.001 + input: + emprunts_obligatoires_convertibles: 1000 + autres_emprunts_obligatoires: 1000 + emprunts_dettes_etablissement_credit: 1000 + emprunts_dettes_divers: 1000 + avances_acomptes_recus_commandes: 1000 + dettes_fournisseurs: 1000 + dettes_fiscales_sociales: 1000 + dettes_immobilisations: 1000 + autres_dettes: 1000 + output: + dettes: 9000 diff --git a/openfisca_france_firms/tests/bilan/passif/passif.yaml b/openfisca_france_firms/tests/bilan/passif/passif.yaml new file mode 100644 index 0000000..29ba4de --- /dev/null +++ b/openfisca_france_firms/tests/bilan/passif/passif.yaml @@ -0,0 +1,32 @@ +- name: passif + period: 2020 + absolute_error_margin: 0.001 + input: + capital_social_individuel: 1000 + primes_emission_fusion_apport: 1000 + ecarts_reevaluation: 1000 + reserve_legale: 1000 + reserves_statutaires_contractuelles: 1000 + reserves_reglementees: 1000 + autres_reserves: 1000 + report_a_nouveau: 1000 + resultat_exercice_di: 1000 + subventions_investissement: 1000 + provisions_reglementees: 1000 + produit_emissions_titres_participatifs: 1000 + avances_conditionnees: 1000 + provisions_pour_risques: 1000 + provisions_pour_charges: 1000 + emprunts_obligatoires_convertibles: 1000 + autres_emprunts_obligatoires: 1000 + emprunts_dettes_etablissement_credit: 1000 + emprunts_dettes_divers: 1000 + avances_acomptes_recus_commandes: 1000 + dettes_fournisseurs: 1000 + dettes_fiscales_sociales: 1000 + dettes_immobilisations: 1000 + autres_dettes: 1000 + produits_constates_avance: 1000 + ecart_conversion_passif: 1000 + output: + passif: 26000 diff --git a/openfisca_france_firms/tests/consommation_energie/charbon.yaml b/openfisca_france_firms/tests/consommation_energie/charbon.yaml new file mode 100644 index 0000000..de2a611 --- /dev/null +++ b/openfisca_france_firms/tests/consommation_energie/charbon.yaml @@ -0,0 +1,6 @@ +- name: Etablissement level natural gas consumption tax + period: 2015 + input: + consommation_gaz_naturel: 1000 + output: + taxe_interieure_consommation_gaz_naturel_taux_normal: 18.018019 diff --git a/openfisca_france_firms/tests/consommation_energie/gaz_naturel.yaml b/openfisca_france_firms/tests/consommation_energie/gaz_naturel.yaml new file mode 100644 index 0000000..de2a611 --- /dev/null +++ b/openfisca_france_firms/tests/consommation_energie/gaz_naturel.yaml @@ -0,0 +1,6 @@ +- name: Etablissement level natural gas consumption tax + period: 2015 + input: + consommation_gaz_naturel: 1000 + output: + taxe_interieure_consommation_gaz_naturel_taux_normal: 18.018019 diff --git a/openfisca_france_firms/tests/disposable_income.yaml b/openfisca_france_firms/tests/disposable_income.yaml deleted file mode 100644 index 71cbbb2..0000000 --- a/openfisca_france_firms/tests/disposable_income.yaml +++ /dev/null @@ -1,65 +0,0 @@ -# Test files describe situations and their expected outcomes -# We can run this test on our command line using `openfisca-run-test disposable_income.yaml` - -- name: Person earning no salary in Jan 2015 - period: 2015-01 - input: - salary: 0 - output: - disposable_income: 0 - -- name: Person earning 2500 in Jan 2015 - period: 2015-01 - input: - salary: 2500 - output: - disposable_income: 2025 - -- name: Person earning 10000 in Jan 2015 - period: 2015-01 - input: - salary: 10000 - output: - disposable_income: 8100 - -- name: Person earning no salary in Jan 2016 - period: 2016-01 - input: - salary: 0 - output: - disposable_income: 600 - -- name: Person earning 2500 in Jan 2016 - period: 2016-01 - input: - salary: 2500 - output: - disposable_income: 2025 - -- name: Person earning 10000 in Jan 2016 - period: 2016-01 - input: - salary: 10000 - output: - disposable_income: 8100 - -- name: Person earning no salary in Jan 2017 - period: 2017-01 - input: - salary: 0 - output: - disposable_income: 600 - -- name: Person earning 2500 in Jan 2017 - period: 2017-01 - input: - salary: 2500 - output: - disposable_income: 2675 - -- name: Person earning 10000 in Jan 2017 - period: 2017-01 - input: - salary: 10000 - output: - disposable_income: 8740 diff --git a/openfisca_france_firms/tests/age.yaml b/openfisca_france_firms/tests/examples/example_age.yaml similarity index 61% rename from openfisca_france_firms/tests/age.yaml rename to openfisca_france_firms/tests/examples/example_age.yaml index 458ab56..214f05e 100644 --- a/openfisca_france_firms/tests/age.yaml +++ b/openfisca_france_firms/tests/examples/example_age.yaml @@ -1,30 +1,30 @@ # Test files describe situations and their expected outcomes -# We can run this test on our command line using `openfisca-run-test age.yaml` +# We can run this test on our command line using `openfisca-run-test example_age.yaml` -- name: Birthday month is taken into consideration +- name: example_birthday month is taken into consideration period: 2016-01 input: - birth: 1980-02-15 + example_birth: 1980-02-15 output: - age: + example_age: 2015-02: 34 2015-03: 35 - name: Years are taken into consideration period: 2016-01 input: - birth: 1980-12-31 + example_birth: 1980-12-31 output: - age: + example_age: 2015-12: 34 2016-01: 35 -- name: The first year is considered of age 0 +- name: The first year is considered of example_age 0 period: 2016-01 input: - birth: 1980-02-01 + example_birth: 1980-02-01 output: - age: + example_age: 1980-02: 0 1980-03: 0 1981-03: 1 @@ -32,8 +32,8 @@ - name: Leap years are supported period: 2016-01 input: - birth: 1980-02-29 + example_birth: 1980-02-29 output: - age: + example_age: 2015-02: 34 2015-03: 35 diff --git a/openfisca_france_firms/tests/examples/example_basic_income.yaml b/openfisca_france_firms/tests/examples/example_basic_income.yaml new file mode 100644 index 0000000..8e78772 --- /dev/null +++ b/openfisca_france_firms/tests/examples/example_basic_income.yaml @@ -0,0 +1,50 @@ +# Test files describe situations and their expected outcomes +# We can run this test on our command line using `openfisca-run-test example_basic_income.yaml` + +- name: The basic income should be 0 before it was introduced + period: 2015-11 + input: + example_age: 18 + example_salary: 0 + output: + example_basic_income: 0 + +- name: In Dec 2015, an adult with no example_salary should get a basic income of 600 + period: 2015-12 + input: + example_salary: 0 + example_age: 18 + output: + example_basic_income: 600 + +- name: In Dec 2015, a secondaire with no example_salary should get no basic income + period: 2015-12 + input: + example_salary: 0 + example_age: 17 + output: + example_basic_income: 0 + +- name: In Dec 2015, an adult with a example_salary should get no basic income + period: 2015-12 + input: + example_salary: 1200 + example_age: 18 + output: + example_basic_income: 0 + +- name: In Dec 2016, a secondaire with no example_salary should get no basic income + period: 2016-12 + input: + example_salary: 0 + example_age: 17 + output: + example_basic_income: 0 + +- name: In Dec 2016, an adult with a example_salary should get a basic income of 600 + period: 2016-12 + input: + example_salary: 1200 + example_age: 18 + output: + example_basic_income: 600 diff --git a/openfisca_france_firms/tests/examples/example_disposable_income.yaml b/openfisca_france_firms/tests/examples/example_disposable_income.yaml new file mode 100644 index 0000000..7a25227 --- /dev/null +++ b/openfisca_france_firms/tests/examples/example_disposable_income.yaml @@ -0,0 +1,65 @@ +# Test files describe situations and their expected outcomes +# We can run this test on our command line using `openfisca-run-test example_disposable_income.yaml` + +- name: Etablissement earning no example_salary in Jan 2015 + period: 2015-01 + input: + example_salary: 0 + output: + example_disposable_income: 0 + +- name: Etablissement earning 2500 in Jan 2015 + period: 2015-01 + input: + example_salary: 2500 + output: + example_disposable_income: 2025 + +- name: Etablissement earning 10000 in Jan 2015 + period: 2015-01 + input: + example_salary: 10000 + output: + example_disposable_income: 8100 + +- name: Etablissement earning no example_salary in Jan 2016 + period: 2016-01 + input: + example_salary: 0 + output: + example_disposable_income: 600 + +- name: Etablissement earning 2500 in Jan 2016 + period: 2016-01 + input: + example_salary: 2500 + output: + example_disposable_income: 2025 + +- name: Etablissement earning 10000 in Jan 2016 + period: 2016-01 + input: + example_salary: 10000 + output: + example_disposable_income: 8100 + +- name: Etablissement earning no example_salary in Jan 2017 + period: 2017-01 + input: + example_salary: 0 + output: + example_disposable_income: 600 + +- name: Etablissement earning 2500 in Jan 2017 + period: 2017-01 + input: + example_salary: 2500 + output: + example_disposable_income: 2675 + +- name: Etablissement earning 10000 in Jan 2017 + period: 2017-01 + input: + example_salary: 10000 + output: + example_disposable_income: 8740 diff --git a/openfisca_france_firms/tests/housing_allowance.yaml b/openfisca_france_firms/tests/examples/example_housing_allowance.yaml similarity index 59% rename from openfisca_france_firms/tests/housing_allowance.yaml rename to openfisca_france_firms/tests/examples/example_housing_allowance.yaml index 7ed043e..e0fdc11 100644 --- a/openfisca_france_firms/tests/housing_allowance.yaml +++ b/openfisca_france_firms/tests/examples/example_housing_allowance.yaml @@ -1,16 +1,16 @@ # Test files describe situations and their expected outcomes # We can run this test on our command line using `openfisca-run-test housing_allowance.yaml` -- name: In january 2016, a household paying 400 of rent gets an allowance of 100 +- name: In january 2016, a unite_legale paying 400 of rent gets an allowance of 100 period: 2016-01 input: - rent: 400 + example_rent: 400 output: - housing_allowance: 100 + example_housing_allowance: 100 - name: The housing_allowance disappeared in Dec 2016 period: 2016-12 input: - rent: 400 + example_rent: 400 output: - housing_allowance: 0 + example_housing_allowance: 0 diff --git a/openfisca_france_firms/tests/reforms/add_dynamic_variable.yaml b/openfisca_france_firms/tests/examples/reforms/example_add_dynamic_variable.yaml similarity index 56% rename from openfisca_france_firms/tests/reforms/add_dynamic_variable.yaml rename to openfisca_france_firms/tests/examples/reforms/example_add_dynamic_variable.yaml index 849aef4..b443f90 100644 --- a/openfisca_france_firms/tests/reforms/add_dynamic_variable.yaml +++ b/openfisca_france_firms/tests/examples/reforms/example_add_dynamic_variable.yaml @@ -5,8 +5,8 @@ # # Note the `reforms: ` key in the below YAML blocks. -- name: We will dynamically add a new variable "goes_to_school" thanks to a reform - reforms: openfisca_france_firms.reforms.add_dynamic_variable.add_dynamic_variable +- name: We will dynamically add a new variable "is_euets" thanks to a reform + reforms: openfisca_france_firms.reforms.examples.example_add_dynamic_variable.add_dynamic_variable period: 2017-01 output: - goes_to_school: true + is_euets: true diff --git a/openfisca_france_firms/tests/examples/reforms/example_modify_income_tax.yaml b/openfisca_france_firms/tests/examples/reforms/example_modify_income_tax.yaml new file mode 100644 index 0000000..5c3b1c9 --- /dev/null +++ b/openfisca_france_firms/tests/examples/reforms/example_modify_income_tax.yaml @@ -0,0 +1,30 @@ +# Test files describe situations and their expected outcomes +# We can run this test on our command line using `openfisca-run-test modify_social_security_taxation.yaml` + +# This test is a partial adaptation of `social_security_contribution.yaml` to match the modifications introduced by the reform of the same name. + +# Note the `reforms: ` key in the below YAML blocks. + +- name: No social security contribution on small example_salaries + reforms: openfisca_france_firms.reforms.examples.example_modify_income_tax.modify_income_tax_progressive + period: 2017-01 + input: + example_salary: 2000 + output: + example_income_tax_progressive: 0 + +- name: Increased social security contribution on medium example_salaries + reforms: openfisca_france_firms.reforms.examples.example_modify_income_tax.modify_income_tax_progressive + period: 2017-01 + input: + example_salary: 15000 + output: + example_income_tax_progressive: 1336 + +- name: High social security contribution on high example_salaries + reforms: openfisca_france_firms.reforms.examples.example_modify_income_tax.modify_income_tax_progressive + period: 2017-01 + input: + example_salary: 50000 + output: + example_income_tax_progressive: 8336 diff --git a/openfisca_france_firms/tests/reforms/add_new_tax.yaml b/openfisca_france_firms/tests/examples/reforms/example_test_add_new_tax.yaml similarity index 62% rename from openfisca_france_firms/tests/reforms/add_new_tax.yaml rename to openfisca_france_firms/tests/examples/reforms/example_test_add_new_tax.yaml index 7547d5a..35330ec 100644 --- a/openfisca_france_firms/tests/reforms/add_new_tax.yaml +++ b/openfisca_france_firms/tests/examples/reforms/example_test_add_new_tax.yaml @@ -6,21 +6,21 @@ # Note the `reforms: ` key in the below YAML blocks. - name: The new tax applies to car-holding people - reforms: openfisca_france_firms.reforms.add_new_tax.add_new_tax + reforms: openfisca_france_firms.reforms.examples.example_add_new_tax.add_new_tax period: 2017-01 input: - salary: 2000 + example_salary: 2000 has_car: true output: - income_tax: 300 + example_income_tax_flat: 300 new_tax: 400 - name: The new tax does not apply otherwise - reforms: openfisca_france_firms.reforms.add_new_tax.add_new_tax + reforms: openfisca_france_firms.reforms.examples.example_add_new_tax.add_new_tax period: 2017-01 input: - salary: 2000 + example_salary: 2000 has_car: false output: - income_tax: 300 + example_income_tax_flat: 300 new_tax: 0 diff --git a/openfisca_france_firms/tests/examples/situations/example_income_tax.yaml b/openfisca_france_firms/tests/examples/situations/example_income_tax.yaml new file mode 100644 index 0000000..9149e35 --- /dev/null +++ b/openfisca_france_firms/tests/examples/situations/example_income_tax.yaml @@ -0,0 +1,28 @@ +# You can also use test files to describe complex situations with different entities +# We can run this test on our command line using `openfisca-run-test tests/situations/income_tax.yaml` + +- name: Income tax for a single siege_social and a secondaire + description: Income tax should get properly computed across all members of a unite_legale + period: 2017-01 + absolute_error_margin: 0 + input: + unite_legale: + siege_social: [ Alicia ] + secondaires: [ Michael ] + example_accommodation_size: 100 + example_housing_occupancy_status: tenant + etablissements: + Alicia: + example_birth: 1961-01-15 + example_salary: + 2017-01: 2400 + Michael: + example_birth: 2002-01-15 + example_salary: + 2016: 0 + output: + etablissements: + Alicia: + example_income_tax_flat: 360 + Michael: + example_income_tax_flat: 0 diff --git a/openfisca_france_firms/tests/examples/situations/example_parenting_allowance.yaml b/openfisca_france_firms/tests/examples/situations/example_parenting_allowance.yaml new file mode 100644 index 0000000..77b70d4 --- /dev/null +++ b/openfisca_france_firms/tests/examples/situations/example_parenting_allowance.yaml @@ -0,0 +1,33 @@ +# You can also use test files to describe complex situations with different entities +# We can run this test on our command line using `openfisca-run-test tests/situations/example_income_tax_flat.yaml` + +- name: Parenting allowance for a two siege_social unite_legale with little income + description: Parenting allowance relies on the incomes on the siege_social and ages of the secondaires + period: 2020-01 + absolute_error_margin: 0 + input: + unite_legale: + siege_social: [Phil] + secondaires: [Caz, Eille, Nimasay, Saz] + etablissements: + Phil: + example_birth: 1981-01-15 + example_salary: + 2017-01: 250 + 2018-01: 250 + Saz: + example_birth: 1982-01-15 + example_salary: + 2017-01: 250 + 2018-01: 251 + Caz: + example_birth: 2010-01-15 + Eille: + example_birth: 2012-01-15 + Nimasay: + example_birth: 2018-01-15 + output: + unite_legale: + example_parenting_allowance: + 2017-01: 600 + 2018-01: 0 diff --git a/openfisca_france_firms/tests/housing_tax.yaml b/openfisca_france_firms/tests/housing_tax.yaml deleted file mode 100644 index c3bde40..0000000 --- a/openfisca_france_firms/tests/housing_tax.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Test files describe situations and their expected outcomes -# We can run this test on our command line using `openfisca-run-test housing_tax.yaml` - -- name: Tenant living in a 40 sq. metres accommodation - period: 2017 - input: - accommodation_size: - 2017-01: 40 - housing_occupancy_status: - 2017-01: tenant - output: - housing_tax: 400 - -- name: Free lodgers living in a 40 sq. metres accommodation - period: 2017 - input: - accommodation_size: - 2017-01: 40 - housing_occupancy_status: - 2017-01: free_lodger - output: - housing_tax: 0 - -- name: Household living in a 100 sq. metres accommodation - period: 2017 - input: - accommodation_size: - 2017-01: 100 - output: - housing_tax: 1000 - housing_occupancy_status: - 2017-01: tenant diff --git a/openfisca_france_firms/tests/income_tax.yaml b/openfisca_france_firms/tests/income_tax.yaml deleted file mode 100644 index d38f626..0000000 --- a/openfisca_france_firms/tests/income_tax.yaml +++ /dev/null @@ -1,9 +0,0 @@ -# Test files describe situations and their expected outcomes -# We can run this test on our command line using `openfisca-run-test income_tax.yaml` - -- name: Someone making 10000 should pay 1500 of taxes - period: 2017-01 - input: - salary: 10000 - output: - income_tax: 1500 diff --git a/openfisca_france_firms/tests/reforms/modify_social_security_taxation.yaml b/openfisca_france_firms/tests/reforms/modify_social_security_taxation.yaml deleted file mode 100644 index f3627f2..0000000 --- a/openfisca_france_firms/tests/reforms/modify_social_security_taxation.yaml +++ /dev/null @@ -1,30 +0,0 @@ -# Test files describe situations and their expected outcomes -# We can run this test on our command line using `openfisca-run-test modify_social_security_taxation.yaml` - -# This test is a partial adaptation of `social_security_contribution.yaml` to match the modifications introduced by the reform of the same name. - -# Note the `reforms: ` key in the below YAML blocks. - -- name: No social security contribution on small salaries - reforms: openfisca_france_firms.reforms.modify_social_security_taxation.modify_social_security_taxation - period: 2017-01 - input: - salary: 2000 - output: - social_security_contribution: 0 - -- name: Increased social security contribution on medium salaries - reforms: openfisca_france_firms.reforms.modify_social_security_taxation.modify_social_security_taxation - period: 2017-01 - input: - salary: 15000 - output: - social_security_contribution: 1336 - -- name: High social security contribution on high salaries - reforms: openfisca_france_firms.reforms.modify_social_security_taxation.modify_social_security_taxation - period: 2017-01 - input: - salary: 50000 - output: - social_security_contribution: 8336 diff --git a/openfisca_france_firms/tests/situations/income_tax.yaml b/openfisca_france_firms/tests/situations/income_tax.yaml deleted file mode 100644 index a1c08d8..0000000 --- a/openfisca_france_firms/tests/situations/income_tax.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# You can also use test files to describe complex situations with different entities -# We can run this test on our command line using `openfisca-run-test tests/situations/income_tax.yaml` - -- name: Income tax for a single parent and a child - description: Income tax should get properly computed across all members of a household - period: 2017-01 - absolute_error_margin: 0 - input: - household: - parents: [ Alicia ] - children: [ Michael ] - accommodation_size: 100 - housing_occupancy_status: tenant - persons: - Alicia: - birth: 1961-01-15 - salary: - 2017-01: 2400 - Michael: - birth: 2002-01-15 - salary: - 2016: 0 - output: - persons: - Alicia: - income_tax: 360 - Michael: - income_tax: 0 - household: - housing_tax: - 2017: 1000 diff --git a/openfisca_france_firms/tests/situations/parenting_allowance.yaml b/openfisca_france_firms/tests/situations/parenting_allowance.yaml deleted file mode 100644 index bce6d59..0000000 --- a/openfisca_france_firms/tests/situations/parenting_allowance.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# You can also use test files to describe complex situations with different entities -# We can run this test on our command line using `openfisca-run-test tests/situations/income_tax.yaml` - -- name: Parenting allowance for a two parent household with little income - description: Parenting allowance relies on the incomes on the parents and ages of the children - period: 2020-01 - absolute_error_margin: 0 - input: - household: - parents: [Phil, Saz] - children: [Caz, Eille, Nimasay] - persons: - Phil: - birth: 1981-01-15 - salary: - 2017-01: 250 - 2018-01: 250 - Saz: - birth: 1982-01-15 - salary: - 2017-01: 250 - 2018-01: 251 - Caz: - birth: 2010-01-15 - Eille: - birth: 2012-01-15 - Nimasay: - birth: 2018-01-15 - output: - household: - parenting_allowance: - 2017-01: 600 - 2018-01: 0 diff --git a/openfisca_france_firms/tests/social_security_contribution.yaml b/openfisca_france_firms/tests/social_security_contribution.yaml deleted file mode 100644 index 2c8c83f..0000000 --- a/openfisca_france_firms/tests/social_security_contribution.yaml +++ /dev/null @@ -1,44 +0,0 @@ -# Test files describe situations and their expected outcomes -# We can run this test on our command line using `openfisca-run-test social_security_contribution.yaml` - -- name: Person earning 2000 in 2013-01 - period: 2013-01 - input: - salary: 2000 - output: - social_security_contribution: 60 - -- name: Person earning 15000 in 2013-01 - period: 2013-01 - input: - salary: 15000 - output: - social_security_contribution: 660 - -- name: Person earning 2000 in 2015-01 - period: 2015-01 - input: - salary: 2000 - output: - social_security_contribution: 80 - -- name: Person earning 15000 in 2015-01 - period: 2015-01 - input: - salary: 15000 - output: - social_security_contribution: 824 - -- name: Person earning 2000 in 2017-01 - period: 2017-01 - input: - salary: 2000 - output: - social_security_contribution: 40 - -- name: Person earning 15000 in 2017-01 - period: 2017-01 - input: - salary: 15000 - output: - social_security_contribution: 816 diff --git a/openfisca_france_firms/tests/taxes/taxes_energies/ticc.yaml b/openfisca_france_firms/tests/taxes/taxes_energies/ticc.yaml new file mode 100644 index 0000000..de2a611 --- /dev/null +++ b/openfisca_france_firms/tests/taxes/taxes_energies/ticc.yaml @@ -0,0 +1,6 @@ +- name: Etablissement level natural gas consumption tax + period: 2015 + input: + consommation_gaz_naturel: 1000 + output: + taxe_interieure_consommation_gaz_naturel_taux_normal: 18.018019 diff --git a/openfisca_france_firms/tests/taxes/taxes_energies/ticc_euets.yaml b/openfisca_france_firms/tests/taxes/taxes_energies/ticc_euets.yaml new file mode 100644 index 0000000..de2a611 --- /dev/null +++ b/openfisca_france_firms/tests/taxes/taxes_energies/ticc_euets.yaml @@ -0,0 +1,6 @@ +- name: Etablissement level natural gas consumption tax + period: 2015 + input: + consommation_gaz_naturel: 1000 + output: + taxe_interieure_consommation_gaz_naturel_taux_normal: 18.018019 diff --git a/openfisca_france_firms/tests/taxes/taxes_energies/ticgn.yaml b/openfisca_france_firms/tests/taxes/taxes_energies/ticgn.yaml new file mode 100644 index 0000000..5932578 --- /dev/null +++ b/openfisca_france_firms/tests/taxes/taxes_energies/ticgn.yaml @@ -0,0 +1,6 @@ +- name: Etablissement level natural gas consumption tax + period: 2015 + input: + assiette_ticgn: 1000 + output: + taxe_interieure_consommation_gaz_naturel_taux_normal: 18.018019 diff --git a/openfisca_france_firms/tests/taxes/taxes_energies/ticgn_euets.yaml b/openfisca_france_firms/tests/taxes/taxes_energies/ticgn_euets.yaml new file mode 100644 index 0000000..de2a611 --- /dev/null +++ b/openfisca_france_firms/tests/taxes/taxes_energies/ticgn_euets.yaml @@ -0,0 +1,6 @@ +- name: Etablissement level natural gas consumption tax + period: 2015 + input: + consommation_gaz_naturel: 1000 + output: + taxe_interieure_consommation_gaz_naturel_taux_normal: 18.018019 diff --git a/openfisca_france_firms/variables/__init__.py b/openfisca_france_firms/variables/__init__.py index 718ad20..3e90e32 100644 --- a/openfisca_france_firms/variables/__init__.py +++ b/openfisca_france_firms/variables/__init__.py @@ -1,7 +1,7 @@ """ This sub-package is used to define variables. -A variable is a property of an Entity such as a Person, a Household… +A variable is a property of an Entity such as a Etablissement, a UniteLegale… See https://openfisca.org/doc/key-concepts/variables.html """ diff --git a/openfisca_france_firms/variables/benefits.py b/openfisca_france_firms/variables/benefits.py deleted file mode 100644 index 8880031..0000000 --- a/openfisca_france_firms/variables/benefits.py +++ /dev/null @@ -1,134 +0,0 @@ -""" -This file defines variables for the modelled legislation. - -A variable is a property of an Entity such as a Person, a Household… - -See https://openfisca.org/doc/key-concepts/variables.html -""" - -# Import from openfisca-core the Python objects used to code the legislation in OpenFisca -from openfisca_core.periods import MONTH -from openfisca_core.variables import Variable - -# Import the Entities specifically defined for this tax and benefit system -from openfisca_france_firms.entities import Household, Person - - -class basic_income(Variable): - value_type = float - entity = Person - definition_period = MONTH - label = "Basic income provided to adults" - reference = "https://law.gov.example/basic_income" # Always use the most official source - - def formula_2016_12(person, period, parameters): - """ - Basic income provided to adults. - - Since Dec 1st 2016, the basic income is provided to any adult, without considering their income. - """ - age_condition = person("age", period) >= parameters(period).general.age_of_majority - return age_condition * parameters(period).benefits.basic_income # This '*' is a vectorial 'if'. See https://openfisca.org/doc/coding-the-legislation/25_vectorial_computing.html#control-structures - - def formula_2015_12(person, period, parameters): - """ - Basic income provided to adults. - - From Dec 1st 2015 to Nov 30 2016, the basic income is provided to adults who have no income. - Before Dec 1st 2015, the basic income does not exist in the law, and calculating it returns its default value, which is 0. - """ - age_condition = person("age", period) >= parameters(period).general.age_of_majority - salary_condition = person("salary", period) == 0 - return age_condition * salary_condition * parameters(period).benefits.basic_income # The '*' is also used as a vectorial 'and'. See https://openfisca.org/doc/coding-the-legislation/25_vectorial_computing.html#boolean-operations - - -class housing_allowance(Variable): - value_type = float - entity = Household - definition_period = MONTH - label = "Housing allowance" - reference = "https://law.gov.example/housing_allowance" # Always use the most official source - end = "2016-11-30" # This allowance was removed on the 1st of Dec 2016. Calculating it before this date will always return the variable default value, 0. - unit = "currency-EUR" - documentation = """ - This allowance was introduced on the 1st of Jan 1980. - It disappeared in Dec 2016. - """ - - def formula_1980(household, period, parameters): - """ - Housing allowance. - - This allowance was introduced on the 1st of Jan 1980. - Calculating it before this date will always return the variable default value, 0. - - To compute this allowance, the 'rent' value must be provided for the same month, - but 'housing_occupancy_status' is not necessary. - """ - return household("rent", period) * parameters(period).benefits.housing_allowance - - -# By default, you can use utf-8 characters in a variable. OpenFisca web API manages utf-8 encoding. -class pension(Variable): - value_type = float - entity = Person - definition_period = MONTH - label = "Pension for the elderly. Pension attribuée aux personnes âgées. تقاعد." - reference = ["https://fr.wikipedia.org/wiki/Retraite_(économie)", "https://ar.wikipedia.org/wiki/تقاعد"] - - def formula(person, period, parameters): - """ - Pension for the elderly. - - A person's pension depends on their birth date. - In French: retraite selon l'âge. - In Arabic: تقاعد. - """ - age_condition = person("age", period) >= parameters(period).general.age_of_retirement - return age_condition - - -class parenting_allowance(Variable): - value_type = float - entity = Household - definition_period = MONTH - label = "Allowance for low income people with children to care for." - documentation = "Loosely based on the Australian parenting pension." - reference = "https://www.servicesaustralia.gov.au/individuals/services/centrelink/parenting-payment/who-can-get-it" - - def formula(household, period, parameters): - """ - Parenting allowance for households. - - A person's parenting allowance depends on how many dependents they have, - how much they, and their partner, earn - if they are single with a child under 8 - or if they are partnered with a child under 6. - """ - parenting_allowance = parameters(period).benefits.parenting_allowance - - household_income = household("household_income", period) - income_threshold = parenting_allowance.income_threshold - income_condition = household_income <= income_threshold - - is_single = household.nb_persons(Household.PARENT) == 1 - ages = household.members("age", period) - under_8 = household.any(ages < 8) - under_6 = household.any(ages < 6) - - allowance_condition = income_condition * ((is_single * under_8) + under_6) - allowance_amount = parenting_allowance.amount - - return allowance_condition * allowance_amount - - -class household_income(Variable): - value_type = float - entity = Household - definition_period = MONTH - label = "The sum of the salaries of those living in a household" - - def formula(household, period, _parameters): - """A household's income.""" - salaries = household.members("salary", period) - return household.sum(salaries) diff --git a/openfisca_france_firms/variables/bilan/actif/actif.py b/openfisca_france_firms/variables/bilan/actif/actif.py new file mode 100644 index 0000000..5979fbd --- /dev/null +++ b/openfisca_france_firms/variables/bilan/actif/actif.py @@ -0,0 +1,54 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class actif_brut(Variable): + value_type = int + # cerfa_field = "CO" + unit = 'currency' + entity = UniteLegale + label = "Actif brut (Total général I à VI)" + definition_period = YEAR + + def formula(UniteLegale, period): + total_i = UniteLegale("capital_souscrit_non_appele_brut", period) + total_ii = UniteLegale("actif_immobilise_brut", period) + total_iii = UniteLegale("actif_total_iii_brut", period) + total_iv = UniteLegale("frais_emission_emprunt", period) + total_v = UniteLegale("primes_remboursement_obligations", period) + total_vi = UniteLegale("ecarts_conversion_actif", period) + total_general = (total_i + total_ii + total_iii + total_iv + total_v + total_vi) + + return total_general + + +class actif_ar(Variable): + cerfa_field = "1A" + value_type = int + unit = 'currency' + entity = UniteLegale + label = " : amortissements, provisions" + definition_period = YEAR + + def formula(UniteLegale, period): + total_ii = UniteLegale("actif_immobilise_ar", period) + total_iii = UniteLegale("actif_total_iii_ar", period) + total_general = (total_ii + total_iii) + + return total_general + + +class actif_net(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Actif net" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("actif_brut", period) + ar = UniteLegale("actif_ar", period) + + return brut - ar diff --git a/openfisca_france_firms/variables/bilan/actif/actif_circulant.py b/openfisca_france_firms/variables/bilan/actif/actif_circulant.py new file mode 100644 index 0000000..137e5e9 --- /dev/null +++ b/openfisca_france_firms/variables/bilan/actif/actif_circulant.py @@ -0,0 +1,559 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class matieres_premieres_brutes(Variable): + cerfa_field = "BL" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Matières premières brutes" + definition_period = YEAR + + +class matieres_premieres_ar(Variable): + cerfa_field = "BM" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Matières premières : amortissements, provisions" + definition_period = YEAR + + +class matieres_premieres_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Matières premières nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("matieres_premieres_brutes", period) + ar = UniteLegale("matieres_premieres_ar", period) + + return brut - ar + + +class encours_production_biens_bruts(Variable): + cerfa_field = "BN" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "En cours de production de biens bruts" + definition_period = YEAR + + +class encours_production_biens_ar(Variable): + cerfa_field = "BO" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "En cours de production de biens : amortissements, provisions" + definition_period = YEAR + + +class encours_production_biens_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "En cours de production de biens nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("encours_production_biens_bruts", period) + ar = UniteLegale("encours_production_biens_ar", period) + + return brut - ar + + +class encours_production_services_bruts(Variable): + cerfa_field = "BP" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "En cours de production de services bruts" + definition_period = YEAR + + +class encours_production_services_ar(Variable): + cerfa_field = "" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "En cours de production de services : amortissements, provisions" + definition_period = YEAR + + +class encours_production_services_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "En cours de production de services nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("encours_production_services_bruts", period) + ar = UniteLegale("encours_production_services_ar", period) + + return brut - ar + + +class produits_intermediaires_finis_bruts(Variable): + cerfa_field = "BR" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits intermédiaires et finis bruts" + definition_period = YEAR + + +class produits_intermediaires_finis_ar(Variable): + cerfa_field = "BS" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits intermédiaires et finis : amortissements, provisions" + definition_period = YEAR + + +class produits_intermediaires_finis_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits intermédiaires et finis nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("produits_intermediaires_finis_bruts", period) + ar = UniteLegale("produits_intermediaires_finis_ar", period) + + return brut - ar + + +class marchandises_brutes(Variable): + cerfa_field = "BT" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Marchandises brutes" + definition_period = YEAR + + +class marchandises_ar(Variable): + cerfa_field = "" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Marchandises : amortissements, provisions" + definition_period = YEAR + + +class marchandises_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Marchandises nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("marchandises_brutes", period) + ar = UniteLegale("marchandises_ar", period) + + return brut - ar + + +class stocks_bruts(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Stocks bruts" + definition_period = YEAR + + def formula(UniteLegale, period): + matieres_premieres = UniteLegale("matieres_premieres_brutes", period) + encours_production_biens = UniteLegale("encours_production_biens_bruts", period) + encours_production_services = UniteLegale("encours_production_services_bruts", period) + produits_inter = UniteLegale("produits_intermediaires_finis_bruts", period) + marchandises = UniteLegale("marchandises_brutes", period) + + stocks = (matieres_premieres + encours_production_biens + encours_production_services + produits_inter + marchandises) + + return stocks + + +class stocks_ar(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Stocks : amortissements, provisions" + definition_period = YEAR + + def formula(UniteLegale, period): + matieres_premieres = UniteLegale("matieres_premieres_ar", period) + encours_production_biens = UniteLegale("encours_production_biens_ar", period) + encours_production_services = UniteLegale("encours_production_services_ar", period) + produits_inter = UniteLegale("produits_intermediaires_finis_ar", period) + marchandises = UniteLegale("marchandises_ar", period) + + stocks = (matieres_premieres + encours_production_biens + encours_production_services + produits_inter + marchandises) + + return stocks + + +class stocks_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Stocks nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("stocks_bruts", period) + ar = UniteLegale("stocks_ar", period) + + return brut - ar + + +class avances_acomptes_commandes_bruts(Variable): + cerfa_field = "BV" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances et acomptes versés sur commandes bruts" + definition_period = YEAR + + +class avances_acomptes_commandes_ar(Variable): + cerfa_field = "BW" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances et acomptes versés sur commandes : amortissements, provisions" + definition_period = YEAR + + +class avances_acomptes_commandes_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances et acomptes versés sur commandes nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("avances_acomptes_commandes_bruts", period) + ar = UniteLegale("avances_acomptes_commandes_ar", period) + + return brut - ar + + +class creances_clients_comptes_rattaches_brutes(Variable): + cerfa_field = "BX" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Créances clients et comptes rattachés bruts" + definition_period = YEAR + + +class creances_clients_comptes_rattaches_ar(Variable): + cerfa_field = "BY" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Créances clients et comptes rattachés : amortissements, provisions" + definition_period = YEAR + + +class creances_clients_comptes_rattaches_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Créances clients et comptes rattachés nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("creances_clients_comptes_rattaches_brutes", period) + ar = UniteLegale("creances_clients_comptes_rattaches_ar", period) + + return brut - ar + + +class autres_creances_brutes(Variable): + cerfa_field = "BZ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres créances brutes" + definition_period = YEAR + + +class autres_creances_ar(Variable): + cerfa_field = "CA" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres créances : amortissements, provisions" + definition_period = YEAR + + +class autres_creances_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres créances nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("autres_creances_brutes", period) + ar = UniteLegale("autres_creances_ar", period) + + return brut - ar + + +class capital_souscrit_appele_non_verse_brut(Variable): + cerfa_field = "CB" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Capital souscrit et appelé, non versé, brut" + definition_period = YEAR + + +class capital_souscrit_appele_non_verse_ar(Variable): + cerfa_field = "CC" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Capital souscrit et appelé, non versé : amortissements, provisions" + definition_period = YEAR + + +class capital_souscrit_appele_non_verse_net(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Capital souscrit et appelé, non versé, net" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("capital_souscrit_appele_non_verse_brut", period) + ar = UniteLegale("capital_souscrit_appele_non_verse_ar", period) + + return brut - ar + + +class creances_brutes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Créances brutes" + definition_period = YEAR + + def formula(UniteLegale, period): + + creances_clients = UniteLegale("creances_clients_comptes_rattaches_brutes", period) + autres = UniteLegale("autres_creances_brutes", period) + capital_souscrit_appele = UniteLegale("capital_souscrit_appele_non_verse_brut", period) + + creances = (creances_clients + autres + capital_souscrit_appele) + + return creances + + +class creances_ar(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Créances : amortissements, provisions" + definition_period = YEAR + + def formula(UniteLegale, period): + + creances_clients = UniteLegale("creances_clients_comptes_rattaches_ar", period) + autres = UniteLegale("autres_creances_ar", period) + capital_souscrit_appele = UniteLegale("capital_souscrit_appele_non_verse_ar", period) + + creances = (creances_clients + autres + capital_souscrit_appele) + + return creances + + +class creances_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Créances nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("creances_brutes", period) + ar = UniteLegale("creances_ar", period) + + return brut - ar + + +class valeurs_mobilieres_placement_brutes(Variable): + cerfa_field = "CD" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Valeurs mobilières de placement (dont actions propres) brutes" + definition_period = YEAR + + +class valeurs_mobilieres_placement_ar(Variable): + cerfa_field = "CE" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Valeurs mobilières de placement (dont actions propres) : amortissements, provisions" + definition_period = YEAR + + +class valeurs_mobilieres_placement_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Valeurs mobilières de placement (dont actions propres) nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("valeurs_mobilieres_placement_brutes", period) + ar = UniteLegale("valeurs_mobilieres_placement_ar", period) + + return brut - ar + + +class disponibilites_brutes(Variable): + cerfa_field = "CF" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Disponibilités brutes" + definition_period = YEAR + + +class disponibilites_ar(Variable): + cerfa_field = "CG" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Disponibilités : amortissements, provisions" + definition_period = YEAR + + +class disponibilites_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Disponibilités nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("disponibilites_brutes", period) + ar = UniteLegale("disponibilites_ar", period) + + return brut - ar + + +class actif_circulant_divers_brut(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Actif circulant divers brut" + definition_period = YEAR + + def formula(UniteLegale, period): + valeurs_mobilieres = UniteLegale("valeurs_mobilieres_placement_brutes", period) + disponibilites = UniteLegale("disponibilites_brutes", period) + + divers = valeurs_mobilieres + disponibilites + + return divers + + +class actif_circulant_divers_ar(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Actif circulant divers : amortissements, provisions" + definition_period = YEAR + + def formula(UniteLegale, period): + valeurs_mobilieres = UniteLegale("valeurs_mobilieres_placement_ar", period) + disponibilites = UniteLegale("disponibilites_ar", period) + + divers = valeurs_mobilieres + disponibilites + + return divers + + +class actif_circulant_divers_net(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Actif circulant divers net" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("actif_circulant_divers_brut", period) + ar = UniteLegale("actif_circulant_divers_ar", period) + + return brut - ar + + +class actif_circulant_brut(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Actif circulant brut" + definition_period = YEAR + + def formula(UniteLegale, period): + stocks = UniteLegale("stocks_bruts", period) + avances_acomptes_commandes = UniteLegale("avances_acomptes_commandes_bruts", period) + creances = UniteLegale("creances_brutes", period) + divers = UniteLegale("actif_circulant_divers_brut", period) + + actif_circulant = ( + stocks + + avances_acomptes_commandes + + creances + + divers + ) + + return actif_circulant + + +class actif_circulant_ar(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Actif circulant : amortissements, provisions" + definition_period = YEAR + + def formula(UniteLegale, period): + stocks = UniteLegale("stocks_ar", period) + avances_acomptes_commandes = UniteLegale("avances_acomptes_commandes_ar", period) + creances = UniteLegale("creances_ar", period) + divers = UniteLegale("actif_circulant_divers_ar", period) + + actif_circulant = (stocks + avances_acomptes_commandes + creances + divers) + + return actif_circulant + + +class actif_circulant_net(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Actif circulant net" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("actif_circulant_brut", period) + ar = UniteLegale("actif_circulant_ar", period) + + return brut - ar diff --git a/openfisca_france_firms/variables/bilan/actif/actif_immobilise.py b/openfisca_france_firms/variables/bilan/actif/actif_immobilise.py new file mode 100644 index 0000000..30c6b30 --- /dev/null +++ b/openfisca_france_firms/variables/bilan/actif/actif_immobilise.py @@ -0,0 +1,789 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class frais_etablissement_bruts(Variable): + cerfa_field = "AB" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Frais d'établissement bruts" + definition_period = YEAR + + +class frais_etablissement_ar(Variable): + cerfa_field = "AC" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Frais d'établissement : amortissements, provisions" + definition_period = YEAR + + +class frais_etablissement_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Frais d'établissement nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("frais_etablissement_bruts", period) + ar = UniteLegale("frais_etablissement_ar", period) + + return brut - ar + + +class frais_developpement_bruts(Variable): + cerfa_field = "CX" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Frais de développement bruts" + definition_period = YEAR + + +class frais_developpement_ar(Variable): + cerfa_field = "CQ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Frais de développement : amortissements, provisions" + definition_period = YEAR + + +class frais_developpement_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Frais de développement nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("frais_developpement_bruts", period) + ar = UniteLegale("frais_developpement_ar", period) + + return brut - ar + + +class concessions_brevets_droits_bruts(Variable): + cerfa_field = "AF" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Concessions, brevets, et droits similaires bruts" + definition_period = YEAR + + +class concessions_brevets_droits_ar(Variable): + cerfa_field = "AG" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Concessions, brevets, et droits similaires : amortissements, provisions" + definition_period = YEAR + + +class concessions_brevets_droits_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Concessions, brevets, et droits similaires nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("concessions_brevets_droits_bruts", period) + ar = UniteLegale("concessions_brevets_droits_ar", period) + + return brut - ar + + +class fonds_commercial_brut(Variable): + cerfa_field = "AH" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Fonds commercial" + definition_period = YEAR + + +class fonds_commercial_ar(Variable): + cerfa_field = "AI" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Fonds commercial : amortissements, provisions" + definition_period = YEAR + + +class fonds_commercial_net(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Fonds commercial net" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("fonds_commercial_brut", period) + ar = UniteLegale("fonds_commercial_ar", period) + + return brut - ar + + +class autres_immobilisations_incorporelles_brutes(Variable): + cerfa_field = "AJ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres immobilisations incorporelles brutes" + definition_period = YEAR + + +class autres_immobilisations_incorporelles_ar(Variable): + cerfa_field = "AK" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres immobilisations incorporelles brutes : amortissements, provisions" + definition_period = YEAR + + +class autres_immobilisations_incorporelles_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres immobilisations incorporelles nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("autres_immobilisations_incorporelles_brutes", period) + ar = UniteLegale("autres_immobilisations_incorporelles_ar", period) + + return brut - ar + + +class immobilisations_incorporelles_avances_acomptes_bruts(Variable): + cerfa_field = "AL" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances et acomptes sur immobilisations incorporelles bruts" + definition_period = YEAR + + +class immobilisations_incorporelles_avances_acomptes_ar(Variable): + cerfa_field = "AM" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances et acomptes sur immobilisations incorporelles : amortissements, provisions" + definition_period = YEAR + + +class immobilisations_incorporelles_avances_acomptes_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances et acomptes sur immobilisations incorporelles nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("immobilisations_incorporelles_avances_acomptes_bruts", period) + ar = UniteLegale("immobilisations_incorporelles_avances_acomptes_ar", period) + + return brut - ar + + +class immobilisations_incorporelles_brutes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations incorporelles brutes" + definition_period = YEAR + + def formula(UniteLegale, period): + frais_etab = UniteLegale("frais_etablissement_bruts", period) + frais_dev = UniteLegale("frais_developpement_bruts", period) + concessions_brevets = UniteLegale("concessions_brevets_droits_bruts", period) + fonds_comm = UniteLegale("fonds_commercial_brut", period) + autres = UniteLegale("autres_immobilisations_incorporelles_brutes", period) + avances_acomptes = UniteLegale("immobilisations_incorporelles_avances_acomptes_bruts", period) + + immo_incorp = (frais_etab + frais_dev + concessions_brevets + fonds_comm + autres + avances_acomptes) + + return immo_incorp + + +class immobilisations_incorporelles_ar(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations incorporelles : amortissements, provisions" + definition_period = YEAR + + def formula(UniteLegale, period): + frais_etab = UniteLegale("frais_etablissement_ar", period) + frais_dev = UniteLegale("frais_developpement_ar", period) + concessions_brevets = UniteLegale("concessions_brevets_droits_ar", period) + fonds_comm = UniteLegale("fonds_commercial_ar", period) + autres = UniteLegale("autres_immobilisations_incorporelles_ar", period) + avances_acomptes = UniteLegale("immobilisations_incorporelles_avances_acomptes_ar", period) + + immo_incorp = (frais_etab + frais_dev + concessions_brevets + fonds_comm + autres + avances_acomptes) + + return immo_incorp + + +class immobilisations_incorporelles_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations incorporelles nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("immobilisations_incorporelles_brutes", period) + ar = UniteLegale("immobilisations_incorporelles_ar", period) + + return brut - ar + + +class terrains_bruts(Variable): + cerfa_field = "AN" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Terrains bruts" + definition_period = YEAR + + +class terrains_ar(Variable): + cerfa_field = "AO" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Terrains : amortissements, provisions" + definition_period = YEAR + + +class terrains_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Terrains" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("terrains_bruts", period) + ar = UniteLegale("terrains_ar", period) + + return brut - ar + + +class constructions_brutes(Variable): + cerfa_field = "AP" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Constructions brutes" + definition_period = YEAR + + +class constructions_ar(Variable): + cerfa_field = "AQ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Constructions : amortissements, provisions" + definition_period = YEAR + + +class constructions_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Constructions nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("constructions_brutes", period) + ar = UniteLegale("constructions_ar", period) + + return brut - ar + + +class installations_techniques_brutes(Variable): + cerfa_field = "AR" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Installations techniques, matériel et outillage industriels bruts" + definition_period = YEAR + + +class installations_techniques_ar(Variable): + cerfa_field = "AS" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Installations techniques, matériel et outillage industriels : amortissements, provisions" + definition_period = YEAR + + +class installations_techniques_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Installations techniques, matériel et outillage industriels nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("installations_techniques_brutes", period) + ar = UniteLegale("installations_techniques_ar", period) + + return brut - ar + + +class autres_immobilisations_corporelles_brutes(Variable): + cerfa_field = "AT" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres immobilisations corporelles brutes" + definition_period = YEAR + + +class autres_immobilisations_corporelles_ar(Variable): + cerfa_field = "AU" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres immobilisations corporelles : amortissements, provisions" + definition_period = YEAR + + +class autres_immobilisations_corporelles_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres immobilisations corporelles nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("autres_immobilisations_corporelles_brutes", period) + ar = UniteLegale("autres_immobilisations_corporelles_ar", period) + + return brut - ar + + +class immobilisations_en_cours_brutes(Variable): + cerfa_field = "AV" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations en cours brutes" + definition_period = YEAR + + +class immobilisations_en_cours_ar(Variable): + cerfa_field = "AW" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations en cours : amortissements, provisions" + definition_period = YEAR + + +class immobilisations_en_cours_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations en cours nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("immobilisations_en_cours_brutes", period) + ar = UniteLegale("immobilisations_en_cours_ar", period) + + return brut - ar + + +class avances_acomptes_bruts(Variable): + cerfa_field = "AX" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances et acomptes bruts" + definition_period = YEAR + + +class avances_acomptes_ar(Variable): + cerfa_field = "AY" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances et acomptes : amortissements, provisions" + definition_period = YEAR + + +class avances_acomptes_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances et acomptes nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("avances_acomptes_bruts", period) + ar = UniteLegale("avances_acomptes_ar", period) + + return brut - ar + + +class immobilisations_corporelles_brutes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations corporelles brutes" + definition_period = YEAR + + def formula(UniteLegale, period): + terrains = UniteLegale("terrains_bruts", period) + constructions = UniteLegale("constructions_brutes", period) + installations_techniques = UniteLegale("installations_techniques_brutes", period) + autres = UniteLegale("autres_immobilisations_corporelles_brutes", period) + immo_en_cours = UniteLegale("immobilisations_en_cours_brutes", period) + avances_acomptes = UniteLegale("avances_acomptes_bruts", period) + + immo_corp = (terrains + constructions + installations_techniques + autres + immo_en_cours + avances_acomptes) + + return immo_corp + + +class immobilisations_corporelles_ar(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations corporelles : amortissements, provisions" + definition_period = YEAR + + def formula(UniteLegale, period): + terrains = UniteLegale("terrains_ar", period) + constructions = UniteLegale("constructions_ar", period) + installations_techniques = UniteLegale("installations_techniques_ar", period) + autres = UniteLegale("autres_immobilisations_corporelles_ar", period) + immo_en_cours = UniteLegale("immobilisations_en_cours_ar", period) + avances_acomptes = UniteLegale("avances_acomptes_ar", period) + + immo_corp = (terrains + constructions + installations_techniques + autres + immo_en_cours + avances_acomptes) + + return immo_corp + + +class immobilisations_corporelles_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations corporelles nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("immobilisations_corporelles_brutes", period) + ar = UniteLegale("immobilisations_corporelles_ar", period) + + return brut - ar + + +class participations_mise_equivalence_brutes(Variable): + cerfa_field = "CS" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Paricipations évaluées selon la méthode de mise en équivalence brutes" + definition_period = YEAR + + +class participations_mise_equivalence_ar(Variable): + cerfa_field = "CT" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Paricipations évaluées selon la méthode de mise en équivalence : amortissements, provisions" + definition_period = YEAR + + +class participations_mise_equivalence_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Paricipations évaluées selon la méthode de mise en équivalence nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("participations_mise_equivalence_brutes", period) + ar = UniteLegale("participations_mise_equivalence_ar", period) + + return brut - ar + + +class autres_participations_brutes(Variable): + cerfa_field = "CU" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres participations brutes" + definition_period = YEAR + + +class autres_participations_ar(Variable): + cerfa_field = "CV" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres participations : amortissements, provisions" + definition_period = YEAR + + +class autres_participations_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres participations nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("autres_participations_brutes", period) + ar = UniteLegale("autres_participations_ar", period) + + return brut - ar + + +class creances_participations_brutes(Variable): + cerfa_field = "BB" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Créances rattachées à des participations brutes" + definition_period = YEAR + + +class creances_participations_ar(Variable): + cerfa_field = "BC" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Créances rattachées à des participations : amortissements, provisions" + definition_period = YEAR + + +class creances_participations_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Créances rattachées à des participations nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("creances_participations_brutes", period) + ar = UniteLegale("creances_participations_ar", period) + + return brut - ar + + +class autres_titres_immobilises_bruts(Variable): + cerfa_field = "BD" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres titres immobilisés bruts" + definition_period = YEAR + + +class autres_titres_immobilises_ar(Variable): + cerfa_field = "BE" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres titres immobilisés : amortissements, provisions" + definition_period = YEAR + + +class autres_titres_immobilises_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres titres immobilisés nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("autres_titres_immobilises_bruts", period) + ar = UniteLegale("autres_titres_immobilises_ar", period) + + return brut - ar + + +class prets_bruts(Variable): + cerfa_field = "BF" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Prêts bruts" + definition_period = YEAR + + +class prets_ar(Variable): + cerfa_field = "BG" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Prêts : amortissements, provisions" + definition_period = YEAR + + +class prets_nets(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Prêts nets" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("prets_bruts", period) + ar = UniteLegale("prets_ar", period) + + return brut - ar + + +class autres_immobilisations_financieres_brutes(Variable): + cerfa_field = "BH" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres immobilisations financières brutes" + definition_period = YEAR + + +class autres_immobilisations_financieres_ar(Variable): + cerfa_field = "BI" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres immobilisations financières : amortissements, provisions" + definition_period = YEAR + + +class autres_immobilisations_financieres_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres immobilisations financières nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("autres_immobilisations_financieres_brutes", period) + ar = UniteLegale("autres_immobilisations_financieres_ar", period) + + return brut - ar + + +class immobilisations_financieres_brutes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations financières brutes" + definition_period = YEAR + + def formula(UniteLegale, period): + participations = UniteLegale("participations_mise_equivalence_brutes", period) + autres_participations = UniteLegale("autres_participations_brutes", period) + creances = UniteLegale("creances_participations_brutes", period) + autres_titres = UniteLegale("autres_titres_immobilises_bruts", period) + prets = UniteLegale("prets_bruts", period) + autres = UniteLegale("autres_immobilisations_financieres_brutes", period) + + immo_fin = (participations + autres_participations + creances + autres_titres + prets + autres) + + return immo_fin + + +class immobilisations_financieres_ar(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations financières : amortissements, provisions" + definition_period = YEAR + + def formula(UniteLegale, period): + participations = UniteLegale("participations_mise_equivalence_ar", period) + autres_participations = UniteLegale("autres_participations_ar", period) + creances = UniteLegale("creances_participations_ar", period) + autres_titres = UniteLegale("autres_titres_immobilises_ar", period) + prets = UniteLegale("prets_ar", period) + autres = UniteLegale("autres_immobilisations_financieres_ar", period) + + immo_fin = (participations + autres_participations + creances + autres_titres + prets + autres) + + return immo_fin + + +class immobilisations_financieres_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Immobilisations financières nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("immobilisations_financieres_brutes", period) + ar = UniteLegale("immobilisations_financieres_ar", period) + + return brut - ar + + +class actif_immobilise_brut(Variable): + cerfa_field = "BJ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Actif immobilise brut" + definition_period = YEAR + + def formula(UniteLegale, period): + immo_incorporelles = UniteLegale("immobilisations_incorporelles_brutes", period) + immo_corporelles = UniteLegale("immobilisations_corporelles_brutes", period) + immo_financieres = UniteLegale("immobilisations_financieres_brutes", period) + + return immo_incorporelles + immo_corporelles + immo_financieres + + +class actif_immobilise_ar(Variable): + cerfa_field = "BK" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Actif immobilise : amortissements, provisions" + definition_period = YEAR + + def formula(UniteLegale, period): + immo_incorporelles = UniteLegale("immobilisations_incorporelles_ar", period) + immo_corporelles = UniteLegale("immobilisations_corporelles_ar", period) + immo_financieres = UniteLegale("immobilisations_financieres_ar", period) + + return immo_incorporelles + immo_corporelles + immo_financieres + + +class actif_immobilise_net(Variable): + cerfa_field = "BK" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Actif immobilise net" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("actif_immobilise_brut", period) + ar = UniteLegale("actif_immobilise_ar", period) + + return brut - ar diff --git a/openfisca_france_firms/variables/bilan/actif/capital_souscrit_non_appele.py b/openfisca_france_firms/variables/bilan/actif/capital_souscrit_non_appele.py new file mode 100644 index 0000000..9f0edf9 --- /dev/null +++ b/openfisca_france_firms/variables/bilan/actif/capital_souscrit_non_appele.py @@ -0,0 +1,13 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class capital_souscrit_non_appele_brut(Variable): + cerfa_field = "AA" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Capital souscrit non appelé" + definition_period = YEAR diff --git a/openfisca_france_firms/variables/bilan/actif/comptes_regularisation.py b/openfisca_france_firms/variables/bilan/actif/comptes_regularisation.py new file mode 100644 index 0000000..d4ccfa2 --- /dev/null +++ b/openfisca_france_firms/variables/bilan/actif/comptes_regularisation.py @@ -0,0 +1,110 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class charges_constatees_avance_brutes(Variable): + cerfa_field = "CH" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Charges constatées d'avance brutes" + definition_period = YEAR + + +class charges_constatees_avance_ar(Variable): + cerfa_field = "CI" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Charges constatées d'avance : amortissements, provisions" + definition_period = YEAR + + +class charges_constatees_avance_nettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Charges constatées d'avance nettes" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("charges_constatees_avance_brutes", period) + ar = UniteLegale("charges_constatees_avance_ar", period) + + return brut - ar + + +class actif_total_iii_brut(Variable): + cerfa_field = "CJ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Total (III) brut" + definition_period = YEAR + + def formula(UniteLegale, period): + + actif_circulant = UniteLegale("actif_circulant_brut", period) + charges_constatees_avance = UniteLegale("charges_constatees_avance_brutes", period) + total = actif_circulant + charges_constatees_avance + + return total + + +class actif_total_iii_ar(Variable): + cerfa_field = "CK" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Total (III) : amortissements, provisions" + definition_period = YEAR + + def formula(UniteLegale, period): + actif_circulant = UniteLegale("actif_circulant_ar", period) + charges_constatees_avance = UniteLegale("charges_constatees_avance_ar", period) + total = actif_circulant + charges_constatees_avance + + return total + + +class actif_total_iii_net(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Total (III) net" + definition_period = YEAR + + def formula(UniteLegale, period): + brut = UniteLegale("actif_total_iii_brut", period) + ar = UniteLegale("actif_total_iii_ar", period) + + return brut - ar + + +class frais_emission_emprunt(Variable): + cerfa_field = "CW" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Frais d'émission d'emprunt à étaler (IV)" + definition_period = YEAR + + +class primes_remboursement_obligations(Variable): + cerfa_field = "CM" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Primes de remboursement des obligations (V)" + definition_period = YEAR + + +class ecarts_conversion_actif(Variable): + cerfa_field = "CN" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Ecarts de conversion actif (VI)" + definition_period = YEAR diff --git a/openfisca_france_firms/variables/bilan/passif/autres_fonds_propres.py b/openfisca_france_firms/variables/bilan/passif/autres_fonds_propres.py new file mode 100644 index 0000000..af1d257 --- /dev/null +++ b/openfisca_france_firms/variables/bilan/passif/autres_fonds_propres.py @@ -0,0 +1,39 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class produit_emissions_titres_participatifs(Variable): + cerfa_field = "DM" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produit des émissions de titres participatifs" + definition_period = YEAR + + +class avances_conditionnees(Variable): + cerfa_field = "DN" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances conditionnees" + definition_period = YEAR + + +class autres_fonds_propres(Variable): + cerfa_field = "DO" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres fonds propres (total II)" + definition_period = YEAR + + def formula(UniteLegale, period): + produit_emissions_titres_participatifs = UniteLegale("produit_emissions_titres_participatifs", period) + avances_conditionnees = UniteLegale("avances_conditionnees", period) + + autres_fonds_propres = (produit_emissions_titres_participatifs + avances_conditionnees) + + return autres_fonds_propres diff --git a/openfisca_france_firms/variables/bilan/passif/capitaux_propres.py b/openfisca_france_firms/variables/bilan/passif/capitaux_propres.py new file mode 100644 index 0000000..5953f93 --- /dev/null +++ b/openfisca_france_firms/variables/bilan/passif/capitaux_propres.py @@ -0,0 +1,155 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class capital_social_individuel(Variable): + cerfa_field = "DA" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Capital social ou individuel" + definition_period = YEAR + + +class primes_emission_fusion_apport(Variable): + cerfa_field = "DB" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Primes d'émission, fusion et apport" + definition_period = YEAR + + +class ecarts_reevaluation(Variable): + cerfa_field = "DC" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Ecarts de réévaluation" + definition_period = YEAR + + +class ecarts_reevaluation_equivalence(Variable): + cerfa_field = "EK" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Ecarts de réévaluation : écarts d'équivalence" + definition_period = YEAR + + +class reserve_legale(Variable): + cerfa_field = "DD" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Réservele légale" + definition_period = YEAR + + +class reserves_statutaires_contractuelles(Variable): + cerfa_field = "DE" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Réserves statutaires ou contractuelles" + definition_period = YEAR + + +class reserves_reglementees(Variable): + cerfa_field = "DF" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Réserves réglementées" + definition_period = YEAR + + +class reserve_speciale_fluctuation_cours(Variable): + cerfa_field = "B1" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Réserve spéciale des provisions pour fluctuation des cours" + definition_period = YEAR + + +class autres_reserves(Variable): + cerfa_field = "DG" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres réserves" + definition_period = YEAR + + +class reserve_achat_oeuvres_originales(Variable): + cerfa_field = "EJ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Réserve relative à l'achat d'oeuvres originales d'artistes vivants" + definition_period = YEAR + + +class report_a_nouveau(Variable): + cerfa_field = "DH" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Report à nouveau" + definition_period = YEAR + + +class resultat_exercice_di(Variable): + cerfa_field = "DI" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Résultat de l'exercice" + definition_period = YEAR + + +class subventions_investissement(Variable): + cerfa_field = "DJ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Subventions d'investissement" + definition_period = YEAR + + +class provisions_reglementees(Variable): + cerfa_field = "DK" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Provisions réglementées" + definition_period = YEAR + + +class capitaux_propres(Variable): + cerfa_field = "DL" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Capitaux propres (total I)" + definition_period = YEAR + + def formula(UniteLegale, period): + capital_social_individuel = UniteLegale("capital_social_individuel", period) + primes_emission_fusion_apport = UniteLegale("primes_emission_fusion_apport", period) + ecarts_reevaluation = UniteLegale("ecarts_reevaluation", period) + reserve_legale = UniteLegale("reserve_legale", period) + reserves_statutaires_contractuelles = UniteLegale("reserves_statutaires_contractuelles", period) + reserves_reglementees = UniteLegale("reserves_reglementees", period) + autres_reserves = UniteLegale("autres_reserves", period) + report_a_nouveau = UniteLegale("report_a_nouveau", period) + resultat_exercice_di = UniteLegale("resultat_exercice_di", period) + subventions_investissement = UniteLegale("subventions_investissement", period) + provisions_reglementees = UniteLegale("provisions_reglementees", period) + capitaux_propres = (capital_social_individuel + primes_emission_fusion_apport + ecarts_reevaluation + reserve_legale + reserves_statutaires_contractuelles + reserves_reglementees + autres_reserves + report_a_nouveau + resultat_exercice_di + subventions_investissement + provisions_reglementees) + + return capitaux_propres diff --git a/openfisca_france_firms/variables/bilan/passif/compte_regularisation.py b/openfisca_france_firms/variables/bilan/passif/compte_regularisation.py new file mode 100644 index 0000000..410f2af --- /dev/null +++ b/openfisca_france_firms/variables/bilan/passif/compte_regularisation.py @@ -0,0 +1,13 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class produits_constates_avance(Variable): + cerfa_field = "EB" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits constatés d'avance" + definition_period = YEAR diff --git a/openfisca_france_firms/variables/bilan/passif/dettes.py b/openfisca_france_firms/variables/bilan/passif/dettes.py new file mode 100644 index 0000000..1e5757e --- /dev/null +++ b/openfisca_france_firms/variables/bilan/passif/dettes.py @@ -0,0 +1,117 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class emprunts_obligatoires_convertibles(Variable): + cerfa_field = "DS" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Emprunts obligatoires convertibles" + definition_period = YEAR + + +class autres_emprunts_obligatoires(Variable): + cerfa_field = "DT" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres emprunts obligatoires" + definition_period = YEAR + + +class emprunts_dettes_etablissement_credit(Variable): + cerfa_field = "DU" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Emprunts et dettes auprès des établissements de crédit" + definition_period = YEAR + + +class emprunts_dettes_divers(Variable): + cerfa_field = "DV" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Emprunts et dettes financières divers" + definition_period = YEAR + + +class emprunts_participatifs(Variable): + cerfa_field = "EI" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Emprunts participatifs" + definition_period = YEAR + + +class avances_acomptes_recus_commandes(Variable): + cerfa_field = "DW" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Avances et acomptes reçus sur commandes en cours" + definition_period = YEAR + + +class dettes_fournisseurs(Variable): + cerfa_field = "DX" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dettes fournisseurs et comptes rattachés" + definition_period = YEAR + + +class dettes_fiscales_sociales(Variable): + cerfa_field = "DY" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dettes fiscales et sociales" + definition_period = YEAR + + +class dettes_immobilisations(Variable): + cerfa_field = "DZ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dettes sur immobilisations et comptes rattachés" + definition_period = YEAR + + +class autres_dettes(Variable): + cerfa_field = "EA" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres dettes" + definition_period = YEAR + + +class dettes(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dettes" + definition_period = YEAR + + def formula(UniteLegale, period): + emprunts_obligatoires_convertibles = UniteLegale("emprunts_obligatoires_convertibles", period) + autres_emprunts_obligatoires = UniteLegale("autres_emprunts_obligatoires", period) + emprunts_dettes_etablissement_credit = UniteLegale("emprunts_dettes_etablissement_credit", period) + emprunts_dettes_divers = UniteLegale("emprunts_dettes_divers", period) + avances_acomptes_recus_commandes = UniteLegale("avances_acomptes_recus_commandes", period) + dettes_fournisseurs = UniteLegale("dettes_fournisseurs", period) + dettes_fiscales_sociales = UniteLegale("dettes_fiscales_sociales", period) + dettes_immobilisations = UniteLegale("dettes_immobilisations", period) + autres_dettes = UniteLegale("autres_dettes", period) + + dettes = (emprunts_obligatoires_convertibles + autres_emprunts_obligatoires + emprunts_dettes_etablissement_credit + emprunts_dettes_divers + avances_acomptes_recus_commandes + dettes_fournisseurs + dettes_fiscales_sociales + dettes_immobilisations + autres_dettes) + + return dettes diff --git a/openfisca_france_firms/variables/bilan/passif/passif.py b/openfisca_france_firms/variables/bilan/passif/passif.py new file mode 100644 index 0000000..5dccaf1 --- /dev/null +++ b/openfisca_france_firms/variables/bilan/passif/passif.py @@ -0,0 +1,50 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class passif_total_iv(Variable): + cerfa_field = "EC" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Total (IV)" + definition_period = YEAR + + def formula(UniteLegale, period): + dettes = UniteLegale("dettes", period) + produits_constates_avance = UniteLegale("produits_constates_avance", period) + + passif_total_iv = (dettes + produits_constates_avance) + + return passif_total_iv + + +class ecart_conversion_passif(Variable): + cerfa_field = "ED" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Ecart de conversion passif (Total IV)" + definition_period = YEAR + + +class passif(Variable): + cerfa_field = "EE" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Passif" + definition_period = YEAR + + def formula(UniteLegale, period): + total_i = UniteLegale("capitaux_propres", period) + total_ii = UniteLegale("autres_fonds_propres", period) + total_iii = UniteLegale("provisions_pour_risques_charges", period) + total_iv = UniteLegale("passif_total_iv", period) + total_v = UniteLegale("ecart_conversion_passif", period) + + passif = (total_i + total_ii + total_iii + total_iv + total_v) + + return passif diff --git a/openfisca_france_firms/variables/bilan/passif/provisions_pour_risques_charges.py b/openfisca_france_firms/variables/bilan/passif/provisions_pour_risques_charges.py new file mode 100644 index 0000000..d9d7646 --- /dev/null +++ b/openfisca_france_firms/variables/bilan/passif/provisions_pour_risques_charges.py @@ -0,0 +1,39 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class provisions_pour_risques(Variable): + cerfa_field = "DP" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Provisions pour risques" + definition_period = YEAR + + +class provisions_pour_charges(Variable): + cerfa_field = "DQ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Provisions pour charges" + definition_period = YEAR + + +class provisions_pour_risques_charges(Variable): + cerfa_field = "DR" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Provisions pour risques et charges (total III)" + definition_period = YEAR + + def formula(UniteLegale, period): + risques = UniteLegale("provisions_pour_risques", period) + charges = UniteLegale("provisions_pour_charges", period) + + provisions = (risques + charges) + + return provisions diff --git a/openfisca_france_firms/variables/bilan/passif/renvois.py b/openfisca_france_firms/variables/bilan/passif/renvois.py new file mode 100644 index 0000000..147ab70 --- /dev/null +++ b/openfisca_france_firms/variables/bilan/passif/renvois.py @@ -0,0 +1,67 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale # noqa F401 + + +class ecart_reevaluation(Variable): + cerfa_field = "1B" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "ECart de réévaluation incorporé au capital" + definition_period = YEAR + + +class reserve_speciale_reevaluation(Variable): + cerfa_field = "1C" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Réserve spéciale de réévaluation (1959)" + definition_period = YEAR + + +class ecart_reevaluation_libre(Variable): + cerfa_field = "1D" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Ecart de réévaluation libre" + definition_period = YEAR + + +class rerserve_reevaluation(Variable): + cerfa_field = "1E" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Réserve de réévaluation (1976)" + definition_period = YEAR + + +class reserve_speciale_pv_long_terme(Variable): + cerfa_field = "EF" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Réserve spéciale des plus-values à long terme" + definition_period = YEAR + + +class dettes_produits_constates_avance_moins_un_an(Variable): + cerfa_field = "EG" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dettes et produits constatés d'avance à moins d'un an" + definition_period = YEAR + + +class concours_bancaires_courants(Variable): + cerfa_field = "EH" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Concours bancaires courants, et soldes créditeurs de banques et CCP" + definition_period = YEAR diff --git a/openfisca_france_firms/variables/caracteristiques_etablissement.py b/openfisca_france_firms/variables/caracteristiques_etablissement.py new file mode 100644 index 0000000..351ea94 --- /dev/null +++ b/openfisca_france_firms/variables/caracteristiques_etablissement.py @@ -0,0 +1,84 @@ +""" +This file defines variables for the modelled legislation. + +A variable is a property of an Entity such as a Etablissement, a UniteLegale… + +See https://openfisca.org/doc/key-concepts/variables.html +""" + +# Import from openfisca-core the Python objects used to code the legislation in OpenFisca +from openfisca_core.indexed_enums import Enum +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_core.model_api import * + +# Import the Entities specifically defined for this tax and benefit system +from openfisca_france_firms.entities import UniteLegale, Etablissement + + +class apet(Variable): + value_type = str + entity = Etablissement + label = "Secteur NAF de l'établissement" + definition_period = YEAR + set_input = set_input_dispatch_by_period + + +class postal_code(Variable): + value_type = str + max_length = 5 + entity = Etablissement + definition_period = MONTH + label = "Postal code of the etablissement" + + +class effectif_3112_et(Variable): + value_type = float + entity = Etablissement + label = "Effectifs en fin d'année, ETP" + definition_period = YEAR + set_input = set_input_dispatch_by_period + + +class installation_cogeneration(Variable): + value_type = bool + entity = Etablissement + label = "Installation de cogénération pour la production combinée de chaleur et d'électricité" + definition_period = YEAR + + +class installation_euets(Variable): + value_type = bool + entity = Etablissement + label = "Installation soumise au système européen de quotas carbone" + definition_period = YEAR + + +class installation_electrointensive(Variable): + value_type = bool + entity = Etablissement + label = "Installation électrointensive" + definition_period = YEAR + + def formula_2014_01_01(etablissement, period): + + return True + + def formula_2021_01_01(etablissement, period): + + return True + + +class installation_grande_consommatrice(Variable): + value_type = bool + entity = Etablissement + label = "Installation grande consommatrice d'énergie" + definition_period = YEAR + + def formula_2014_01_01(etablissement, period): + + return True + + def formula_2021_01_01(etablissement, period): + + return True diff --git a/openfisca_france_firms/variables/caracteristiques_unite_legale.py b/openfisca_france_firms/variables/caracteristiques_unite_legale.py new file mode 100644 index 0000000..fc353ef --- /dev/null +++ b/openfisca_france_firms/variables/caracteristiques_unite_legale.py @@ -0,0 +1,57 @@ +""" +This file defines variables for the modelled legislation. + +A variable is a property of an Entity such as a Etablissement, a UniteLegale… + +See https://openfisca.org/doc/key-concepts/variables.html +""" + +# Import from openfisca-core the Python objects used to code the legislation in OpenFisca +from openfisca_core.indexed_enums import Enum +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_core.model_api import * + +# Import the Entities specifically defined for this tax and benefit system +from openfisca_france_firms.entities import UniteLegale, Etablissement + + +class apen(Enum): + value_type = str + max_length = 5 + entity = UniteLegale + definition_period = MONTH + label = "Sector of the unite_legale" + set_input = set_input_dispatch_by_period + + +class postal_code_unite_legale(Variable): + value_type = str + max_length = 5 + entity = UniteLegale + definition_period = MONTH + label = "Postal code of the unite_legale" + + """ + We define the unite_legale's postal code as the unite_legale's siege_social etablissement's postal code. + """ + + def formula(unite_legale, period): + hq = unite_legale.members(has_role ="siege_social") + + return hq("postal_code", period) + + +class entreprises_risque_de_fuite_carbone(Variable): + value_type = bool + entity = UniteLegale + label = "Entreprise exposée au risque de fuite carbone" + definition_period = YEAR + + def formula_2014_01_01(unite_legale, period): + + return True + + def formula_2021_01_01(unite_legale, period): + + return True diff --git a/openfisca_france_firms/variables/compte_resultat/charges_exceptionnelles.py b/openfisca_france_firms/variables/compte_resultat/charges_exceptionnelles.py new file mode 100644 index 0000000..7835719 --- /dev/null +++ b/openfisca_france_firms/variables/compte_resultat/charges_exceptionnelles.py @@ -0,0 +1,49 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale, Etablissement # noqa F401 + + +class charges_ex_operations_gestion(Variable): + cerfa_field = "HE" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Charges exceptionnelles sur opérations de gestion" + definition_period = YEAR + + +class charges_ex_operations_capital(Variable): + cerfa_field = "HF" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Charges exceptionnelles sur opérations en capital" + definition_period = YEAR + + +class charges_ex_reprises_ar(Variable): + cerfa_field = "HG" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dotations exceptionnelles aux amortissements et provisions" + definition_period = YEAR + + +class charges_exceptionnelles(Variable): + cerfa_field = "HH" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Charges exceptionnelles" + definition_period = YEAR + + def formula(UniteLegale, period): + charges_ex_operations_capital = UniteLegale("charges_ex_operations_capital", period) + charges_ex_operations_gestion = UniteLegale("charges_ex_operations_gestion", period) + charges_ex_reprises_ar = UniteLegale("charges_ex_reprises_ar", period) + + charges_ex = (charges_ex_operations_capital + charges_ex_operations_gestion + charges_ex_reprises_ar) + + return charges_ex diff --git a/openfisca_france_firms/variables/compte_resultat/charges_exploitation.py b/openfisca_france_firms/variables/compte_resultat/charges_exploitation.py new file mode 100644 index 0000000..5a2d331 --- /dev/null +++ b/openfisca_france_firms/variables/compte_resultat/charges_exploitation.py @@ -0,0 +1,178 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale, Etablissement # noqa F401 + + +class achats_marchandises(Variable): + cerfa_field = "FS" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Achats de marchandises (y compris droits de douane)" + definition_period = YEAR + + +class variations_stocks_marchandises(Variable): + cerfa_field = "FT" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Variations de stocks (marchandises)" + definition_period = YEAR + + +class achats_matieres_premieres(Variable): + cerfa_field = "FU" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Achats de matières premières et autres approvisionnements (y compris droits de douane)" + definition_period = YEAR + + +class variations_stocks_mp(Variable): + cerfa_field = "FV" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Variations de stocks (matières premières et approvisionnements)" + definition_period = YEAR + + +class autres_achats(Variable): + cerfa_field = "FW" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres achats et charges externes" + definition_period = YEAR + + +class impots_taxes(Variable): + cerfa_field = "FX" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Impôts, taxes et versements assimilés" + definition_period = YEAR + + +class salaires_traitements(Variable): + cerfa_field = "FY" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Salaires et traitements" + definition_period = YEAR + + +class charges_sociales(Variable): + cerfa_field = "FZ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Charges sociales" + definition_period = YEAR + + +class dotations_immobilisations_amortissements(Variable): + cerfa_field = "GA" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dotations sur immobilisations : aux amortissements" + definition_period = YEAR + + +class dotations_immobilisations_provisions(Variable): + cerfa_field = "GB" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dotations sur immobilisations : aux provisions" + definition_period = YEAR + + +class dotations_immobilisations(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dotations d'exploitation sur immobilisations" + definition_period = YEAR + + def formula(UniteLegale, period): + amortissements = UniteLegale("dotations_immobilisations_amortissements", period) + provisions = UniteLegale("dotations_immobilisations_provisions", period) + + dotations = amortissements + provisions + + return dotations + + +class dotations_actif_circulant(Variable): + cerfa_field = "GC" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dotations sur actif circulant : dotations aux provisions" + definition_period = YEAR + + +class dotations_risques_charges(Variable): + cerfa_field = "GD" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dotations pour risques et charges : dotations aux provisions" + definition_period = YEAR + + +class dotations_exploitation(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dotations d'exploitation" + definition_period = YEAR + + def formula(UniteLegale, period): + immobilisations = UniteLegale("dotations_immobilisations", period) + actif_circulant = UniteLegale("dotations_actif_circulant", period) + risques_charges = UniteLegale("dotations_risques_charges", period) + + dotations = (immobilisations + actif_circulant + risques_charges) + + return dotations + + +class autres_charges(Variable): + cerfa_field = "GE" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres charges" + definition_period = YEAR + + +class charges_exploitation(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Charges d'exploitation" + definition_period = YEAR + + def formula(UniteLegale, period): + achats_marchandises = UniteLegale("achats_marchandises", period) + variations_stocks_marchandises = UniteLegale("variations_stocks_marchandises", period) + achats_matieres_premieres = UniteLegale("achats_matieres_premieres", period) + variations_stocks_mp = UniteLegale("variations_stocks_mp", period) + autres_achats = UniteLegale("autres_achats", period) + impots_taxes = UniteLegale("impots_taxes", period) + salaires_traitements = UniteLegale("salaires_traitements", period) + charges_sociales = UniteLegale("charges_sociales", period) + dotations_exploitation = UniteLegale("dotations_exploitation", period) + autres_charges = UniteLegale("autres_charges", period) + + charges = (achats_marchandises + variations_stocks_marchandises + achats_matieres_premieres + variations_stocks_mp + autres_achats + impots_taxes + salaires_traitements + charges_sociales + dotations_exploitation + autres_charges) + + return charges diff --git a/openfisca_france_firms/variables/compte_resultat/charges_financieres.py b/openfisca_france_firms/variables/compte_resultat/charges_financieres.py new file mode 100644 index 0000000..7592d0b --- /dev/null +++ b/openfisca_france_firms/variables/compte_resultat/charges_financieres.py @@ -0,0 +1,59 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale, Etablissement # noqa F401 + + +class dotations_financieres_ar(Variable): + cerfa_field = "GQ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dotations financières aux amortissements et provisions" + definition_period = YEAR + + +class interets_charges(Variable): + cerfa_field = "GR" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Intérêts et charges assimilés" + definition_period = YEAR + + +class differences_negatives_change(Variable): + cerfa_field = "GS" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Différences négatives de change" + definition_period = YEAR + + +class charges_nettes_cessions(Variable): + cerfa_field = "GT" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Charges nettes sur cessions de valeurs mobilières de placement" + definition_period = YEAR + + +class charges_financieres(Variable): + cerfa_field = "" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "" + definition_period = YEAR + + def formula(UniteLegale, period): + dotations_financieres_ar = UniteLegale("dotations_financieres_ar", period) + interets_charges = UniteLegale("interets_charges", period) + differences_negatives_change = UniteLegale("differences_negatives_change", period) + charges_nettes_cessions = UniteLegale("charges_nettes_cessions", period) + + charges = (dotations_financieres_ar + interets_charges + differences_negatives_change + charges_nettes_cessions) + + return charges diff --git a/openfisca_france_firms/variables/compte_resultat/operations_en_commun.py b/openfisca_france_firms/variables/compte_resultat/operations_en_commun.py new file mode 100644 index 0000000..1f8c66b --- /dev/null +++ b/openfisca_france_firms/variables/compte_resultat/operations_en_commun.py @@ -0,0 +1,38 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale, Etablissement # noqa F401 + + +class benefice_attribue(Variable): + cerfa_field = "GH" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Bénéfice attribuée ou perte transférée" + definition_period = YEAR + + +class perte_supportee(Variable): + cerfa_field = "GI" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Perte supportée ou bénéfice transféré" + definition_period = YEAR + + +class operations_en_commun(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Opérations en commun" + definition_period = YEAR + + def formula(UniteLegale, period): + benefice_attribue = UniteLegale("benefice_attribue", period) + perte_supportee = UniteLegale("perte_supportee", period) + + operations = benefice_attribue - perte_supportee + + return operations diff --git a/openfisca_france_firms/variables/compte_resultat/produits_exceptionnels.py b/openfisca_france_firms/variables/compte_resultat/produits_exceptionnels.py new file mode 100644 index 0000000..f30199a --- /dev/null +++ b/openfisca_france_firms/variables/compte_resultat/produits_exceptionnels.py @@ -0,0 +1,49 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale, Etablissement # noqa F401 + + +class produits_ex_operations_gestion(Variable): + cerfa_field = "HA" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits exceptionnels sur opérations de gestion" + definition_period = YEAR + + +class produits_ex_operations_capital(Variable): + cerfa_field = "HB" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits exceptionnels sur opérations en capital" + definition_period = YEAR + + +class produits_ex_reprises_provisions(Variable): + cerfa_field = "HC" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Reprises sur provisions et transferts de charges (produits exceptionnels)" + definition_period = YEAR + + +class produits_exceptionnels(Variable): + cerfa_field = "HD" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits exceptionnels" + definition_period = YEAR + + def formula(UniteLegale, period): + produits_ex_operations_capital = UniteLegale("produits_ex_operations_capital", period) + produits_ex_operations_gestion = UniteLegale("produits_ex_operations_gestion", period) + produits_ex_reprises_provisions = UniteLegale("produits_ex_reprises_provisions", period) + + produits_ex = (produits_ex_operations_capital + produits_ex_operations_gestion + produits_ex_reprises_provisions) + + return produits_ex diff --git a/openfisca_france_firms/variables/compte_resultat/produits_exploitation.py b/openfisca_france_firms/variables/compte_resultat/produits_exploitation.py new file mode 100644 index 0000000..3d4596a --- /dev/null +++ b/openfisca_france_firms/variables/compte_resultat/produits_exploitation.py @@ -0,0 +1,212 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale, Etablissement # noqa F401 + + +class ventes_marchandises_fr(Variable): + cerfa_field = "FA" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Ventes de marchandises en France" + definition_period = YEAR + + +class ventes_marchandises_ue(Variable): + cerfa_field = "FB" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Ventes de marchandises - Exportations et livraisons intracommunautaires" + definition_period = YEAR + + +class ventes_marchandises(Variable): + cerfa_field = "FC" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Ventes de marchandises - Total" + definition_period = YEAR + + def formula(UniteLegale, period): + val_fr = UniteLegale("ventes_marchandises_fr", period) + val_ue = UniteLegale("ventes_marchandises_ue", period) + + total = val_fr + val_ue + + return total + + +class production_vendue_biens_fr(Variable): + cerfa_field = "FD" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Production de biens vendue en France" + definition_period = YEAR + + +class production_vendue_biens_ue(Variable): + cerfa_field = "FE" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Production de biens vendue - Exportations et livraisons intracommunautaires" + definition_period = YEAR + + +class production_vendue_biens(Variable): + cerfa_field = "FF" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Production de biens vendue - Total" + definition_period = YEAR + + def formula(UniteLegale, period): + val_fr = UniteLegale("production_vendue_biens_fr", period) + val_ue = UniteLegale("production_vendue_biens_ue", period) + + total = val_fr + val_ue + + return total + + +class production_vendue_services_fr(Variable): + cerfa_field = "FG" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Production de services vendue en France" + definition_period = YEAR + + +class production_vendue_services_ue(Variable): + cerfa_field = "FH" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Production de services vendue - Exportations et livraisons intracommunautaires" + definition_period = YEAR + + +class production_vendue_services(Variable): + cerfa_field = "FI" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Production de services vendue - Total" + definition_period = YEAR + + def formula(UniteLegale, period): + val_fr = UniteLegale("production_vendue_services_fr", period) + val_ue = UniteLegale("production_vendue_services_ue", period) + + total = val_fr + val_ue + + return total + + +class chiffres_affaires_nets_fr(Variable): + cerfa_field = "FJ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Chiffres d'affaires nets - France" + definition_period = YEAR + + +class chiffres_affaires_nets_ue(Variable): + cerfa_field = "FK" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Chiffres d'affaires nets - Exportations et livraisons intracommunautaires" + definition_period = YEAR + + +class chiffres_affaires_nets(Variable): + cerfa_field = "FL" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Chiffres d'affaires nets - Total" + definition_period = YEAR + + def formula(UniteLegale, period): + val_fr = UniteLegale("chiffres_affaires_nets_fr", period) + val_ue = UniteLegale("chiffres_affaires_nets_ue", period) + + total = val_fr + val_ue + + return total + + +class production_stockee(Variable): + cerfa_field = "FM" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Production stockée" + definition_period = YEAR + + +class production_immobilisee(Variable): + cerfa_field = "FN" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Production immobilisée" + definition_period = YEAR + + +class subventions_exploitation(Variable): + cerfa_field = "FO" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Subventions d'exploitation" + definition_period = YEAR + + +class reprises_amortissements_provisions(Variable): + cerfa_field = "FP" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Reprises sur amortissements et provisions, transferts de charge" + definition_period = YEAR + + +class autres_produits(Variable): + cerfa_field = "FQ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres produits" + definition_period = YEAR + + +class produits_exploitation(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits d'exploitation (Total II)" + definition_period = YEAR + + def formula(UniteLegale, period): + ventes_marchandises = UniteLegale("ventes_marchandises", period) + production_vendue_biens = UniteLegale("production_vendue_biens", period) + production_vendue_services = UniteLegale("production_vendue_services", period) + chiffres_affaires_nets = UniteLegale("chiffres_affaires_nets", period) + production_stockee = UniteLegale("production_stockee", period) + production_immobilisee = UniteLegale("production_immobilisee", period) + subventions_exploitation = UniteLegale("subventions_exploitation", period) + reprises_amortissements_provisions = UniteLegale("reprises_amortissements_provisions", period) + autres_produits = UniteLegale("autres_produits", period) + + total = (ventes_marchandises + production_vendue_biens + production_vendue_services + chiffres_affaires_nets + production_stockee + production_immobilisee + subventions_exploitation + reprises_amortissements_provisions + autres_produits) + + return total diff --git a/openfisca_france_firms/variables/compte_resultat/produits_financiers.py b/openfisca_france_firms/variables/compte_resultat/produits_financiers.py new file mode 100644 index 0000000..9a69775 --- /dev/null +++ b/openfisca_france_firms/variables/compte_resultat/produits_financiers.py @@ -0,0 +1,78 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale, Etablissement # noqa F401 + + +class produits_participations(Variable): + cerfa_field = "GJ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits financiers de participations" + definition_period = YEAR + + +class produits_valeurs_mobilieres(Variable): + cerfa_field = "GK" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits des autres valeurs mobilières et créances de l'actif immobilier" + definition_period = YEAR + + +class autres_interets(Variable): + cerfa_field = "GL" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Autres intérêts et produits assimilés" + definition_period = YEAR + + +class reprises_provisions(Variable): + cerfa_field = "GM" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Reprises sur provisions et transferts de charges" + definition_period = YEAR + + +class differences_positives_change(Variable): + cerfa_field = "GN" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Différences positives de change" + definition_period = YEAR + + +class produits_nets_cessions(Variable): + cerfa_field = "GO" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits nets sur cessions de valeurs mobilières de placement" + definition_period = YEAR + + +class produits_financiers(Variable): + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits nets sur cessions de valeurs mobilières de placement" + definition_period = YEAR + + def formula(UniteLegale, period): + produits_participations = UniteLegale("produits_participations", period) + produits_valeurs_mobilieres = UniteLegale("produits_valeurs_mobilieres", period) + autres_interets = UniteLegale("autres_interets", period) + reprises_provisions = UniteLegale("reprises_provisions", period) + differences_positives_change = UniteLegale("differences_positives_change", period) + produits_nets_cessions = UniteLegale("produits_nets_cessions", period) + + produits_financiers = (produits_participations + produits_valeurs_mobilieres + autres_interets + reprises_provisions + differences_positives_change + produits_nets_cessions) + + return produits_financiers diff --git a/openfisca_france_firms/variables/compte_resultat/renvois.py b/openfisca_france_firms/variables/compte_resultat/renvois.py new file mode 100644 index 0000000..711071f --- /dev/null +++ b/openfisca_france_firms/variables/compte_resultat/renvois.py @@ -0,0 +1,184 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale, Etablissement # noqa F401 + + +class produits_nets_partiels_operations_lt(Variable): + cerfa_field = "HO" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits nets partiels sur opérations à long terme" + definition_period = YEAR + + +class produits_locations_immobilieres(Variable): + cerfa_field = "HY" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits de locations immobilières" + definition_period = YEAR + + +class produits_exploitation_exercices_anterieurs(Variable): + cerfa_field = "1G" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits d'exploitation afférents à des exercices antérieurs" + definition_period = YEAR + + +class credit_bail_mobilier(Variable): + cerfa_field = "HP" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Crédit-bail mobilier" + definition_period = YEAR + + +class credit_bail_immobilier(Variable): + cerfa_field = "HQ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Crédit-bail immobilier" + definition_period = YEAR + + +class charges_exploitation_exercices_anterieurs(Variable): + cerfa_field = "1H" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Charges d'exploitation afférentes à des exercices antérieurs" + definition_period = YEAR + + +class produits_entreprises_liees(Variable): + cerfa_field = "1J" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Produits concernant les entreprises liées" + definition_period = YEAR + + +class interets_entreprises_liees(Variable): + cerfa_field = "1K" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Intérêts concernant les entreprises liées" + definition_period = YEAR + + +class dons_organismes_ig(Variable): + cerfa_field = "HX" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Dons faits aux organismes d'intérêt général (article 238 bis du CGI)" + definition_period = YEAR + + +class amortissements_souscriptions_pme_innovantes(Variable): + cerfa_field = "RC" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Amortissements des souscriptions dans des PME innovantes (art. 217 octies du CGI)" + definition_period = YEAR + + +class amortissements_exeptionnels_constructions_nouvelles(Variable): + cerfa_field = "RD" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Amortissements exceptionnels de 25% des constructions nouvelles (art. 39 quinquies du D du CGI)" + definition_period = YEAR + + +class transfert_de_charges(Variable): + cerfa_field = "A1" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Transfert de charges" + definition_period = YEAR + + +class cotisations_personnelles_exploitant(Variable): + cerfa_field = "A2" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Cotisations personnelles de l'exploitant" + definition_period = YEAR + + +class cotisations_sociales_obligatoires_exploitant(Variable): + cerfa_field = "A5" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Cotisations personnelles de l'exploitant : Montant des cotisations sociales obligatoires hors CSG/CRDS" + definition_period = YEAR + + +class redevances_concessions_brevets_produits(Variable): + cerfa_field = "A3" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Redevances pour concessions de brevets, de licences (produits)" + definition_period = YEAR + + +class redevances_concessions_brevets_charges(Variable): + cerfa_field = "A4" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Redevances pour concessions de brevets, de licences (charges)" + definition_period = YEAR + + +class primes_cotisations_comp_perso_facultatives(Variable): + cerfa_field = "A6" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Primes et cotisations complémentaires personnes facultatives" + definition_period = YEAR + + +class cotisations_madelin(Variable): + cerfa_field = "A7" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Cotisations facultatives Madelin" + definition_period = YEAR + + +class cotisations_plan_epargne_retraite(Variable): + cerfa_field = "A8" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Cotisations facultatives aux nouveaux plans d'épargne retraite" + definition_period = YEAR + + +class primes_cotisations_comp_perso_obligatoires(Variable): + cerfa_field = "A9" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Primes et cotisations complémentaires personnes obligatoires" + definition_period = YEAR diff --git a/openfisca_france_firms/variables/compte_resultat/resultats.py b/openfisca_france_firms/variables/compte_resultat/resultats.py new file mode 100644 index 0000000..9c2b0a0 --- /dev/null +++ b/openfisca_france_firms/variables/compte_resultat/resultats.py @@ -0,0 +1,149 @@ +from openfisca_core.model_api import * +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable +from openfisca_france_firms.entities import UniteLegale, Etablissement # noqa F401 + + +class resultat_exploitation(Variable): + cerfa_field = "GG" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Résultat d'exploitation (I - II)" + definition_period = YEAR + + def formula(UniteLegale, period): + produits_exploitation = UniteLegale("produits_exploitation", period) + charges_exploitation = UniteLegale("charges_exploitation", period) + + resultat = produits_exploitation - charges_exploitation + + return resultat + + +class resultat_financier(Variable): + cerfa_field = "GV" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Résultat financier (V - VI)" + definition_period = YEAR + + def formula(UniteLegale, period): + produits_financiers = UniteLegale("produits_financiers", period) + charges_financieres = UniteLegale("charges_financieres", period) + + resultat = produits_financiers - charges_financieres + + return resultat + + +class resultat_courant_avant_impot(Variable): + cerfa_field = "GW" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Résultat courant avant impôt (I - II + III - IV + V - VI)" + definition_period = YEAR + + def formula(UniteLegale, period): + produits_exploitation = UniteLegale("produits_exploitation", period) + charges_exploitation = UniteLegale("charges_exploitation", period) + benefice_attribue = UniteLegale("benefice_attribue", period) + perte_supportee = UniteLegale("perte_supportee", period) + produits_financiers = UniteLegale("produits_financiers", period) + charges_financieres = UniteLegale("charges_financieres", period) + + resultat = (produits_exploitation + charges_exploitation + benefice_attribue + perte_supportee + produits_financiers + charges_financieres) + + return resultat + + +class resultat_exceptionnel(Variable): + cerfa_field = "HI" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Résultat exceptionnel (VII - VIII)" + definition_period = YEAR + + def formula(UniteLegale, period): + produits_exceptionnels = UniteLegale("produits_exceptionnels", period) + charges_exceptionnelles = UniteLegale("charges_exceptionnelles", period) + + resultat = produits_exceptionnels - charges_exceptionnelles + + return resultat + + +class participation_salaries(Variable): + cerfa_field = "HJ" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Participation des salariés aux résultats de l'entreprise" + definition_period = YEAR + + +class impot_benefices(Variable): + cerfa_field = "HK" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Impôts sur les bénéfices" + definition_period = YEAR + + +class produits(Variable): + cerfa_field = "HL" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Total des produits (I + III + V + VII" + definition_period = YEAR + + def formula(UniteLegale, period): + produits_exploitation = UniteLegale("produits_exploitation", period) + produits_financiers = UniteLegale("produits_financiers", period) + benefice_attribue = UniteLegale("benefice_attribue", period) + produits_exceptionnels = UniteLegale("produits_exceptionnels", period) + + produits = (produits_exploitation + produits_financiers + benefice_attribue + produits_exceptionnels) + + return produits + + +class charges(Variable): + cerfa_field = "HM" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Total des produits (I + III + V + VII" + definition_period = YEAR + + def formula(UniteLegale, period): + charges_exploitation = UniteLegale("charges_exploitation", period) + charges_financieres = UniteLegale("charges_financieres", period) + perte_supportee = UniteLegale("perte_supportee", period) + charges_exceptionnelles = UniteLegale("charges_exceptionnelles", period) + + charges = (charges_exploitation + charges_financieres + perte_supportee + charges_exceptionnelles) + + return charges + + +class resultat_exercice(Variable): + cerfa_field = "HN" + value_type = int + unit = 'currency' + entity = UniteLegale + label = "Résultat de l'exercice (bénéfice ou perte)" + definition_period = YEAR + + def formula(UniteLegale, period): + produits = UniteLegale("produits", period) + charges = UniteLegale("charges", period) + + resultat = produits - charges + + return resultat diff --git a/openfisca_france_firms/variables/consommation_energie/autres_produits.py b/openfisca_france_firms/variables/consommation_energie/autres_produits.py new file mode 100644 index 0000000..e69de29 diff --git a/openfisca_france_firms/variables/consommation_energie/charbon.py b/openfisca_france_firms/variables/consommation_energie/charbon.py new file mode 100644 index 0000000..9d37aba --- /dev/null +++ b/openfisca_france_firms/variables/consommation_energie/charbon.py @@ -0,0 +1,210 @@ +from openfisca_core.model_api import * +from openfisca_france_firms.entities import Etablissement # noqa F401 +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable + + +class consommation_charbon(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Coal consumption of the etablissement" + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + def formula(etablissement, period): + conso_non_combustible = etablissement("consommation_charbon_non_combustible", period) + conso_double_usage = etablissement("consommation_charbon_double_usage", period) + conso_di26 = etablissement("consommation_charbon_di26", period) + conso_combustible = etablissement("consommation_charbon_combustible", period) + + return (conso_non_combustible + conso_double_usage + conso_di26 + conso_combustible) + + +class consommation_charbon_non_combustible(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé autrement que comme combustible" + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + def formula(etablissement, period): + conso_carburant = etablissement("consommation_charbon_carburant", period) + conso_non_combustible_non_carburant = etablissement("consommation_charbon_non_combustible_non_carburant", period) + + return conso_carburant + conso_non_combustible_non_carburant + + +class consommation_charbon_non_combustible_non_carburant(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé autrement que carburant ou combustible" + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 + + +class consommation_charbon_carburant(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé comme carburant" + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 + + +class consommation_charbon_double_usage(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé à double usage" + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + def formula_2007_01_01(etablissement, period): + conso_double = etablissement("consommation_charbon_double_usage_reductionchimique", period) + return conso_double + + def formula_2009_01_01(etablissement, period): + conso_double = etablissement("consommation_charbon_double_usage_265C", period) + return conso_double + + +class consommation_charbon_double_usage_reductionchimique(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé à double usage, [...] notamment [...] [utilisé] dans des procédés métallurgiques ou de réduction chimique." + definition_period = YEAR + + +class consommation_charbon_double_usage_265C(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé à double usage au sens du 2° du I de l'article 265 C" + definition_period = YEAR + + +class consommation_charbon_di26(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé dans un procédé de fabrication de produits minéraux non métalliques classé dans la nomenclature statistique des activités économiques dans la Communauté européenne (NACE), telle qu'elle résulte du règlement (CEE) n° 3037/90 du Conseil, du 9 octobre 1990, sous la rubrique DI 26" + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + +class consommation_charbon_combustible(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé comme combustible" + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + def formula(etablissement, period): + conso_combustible_interne = etablissement("consommation_charbon_combustible_interne", period) + conso_combustible_prodelec = etablissement("consommation_charbon_combustible_electricite", period) + conso_combustible_extraction = etablissement("consommation_charbon_combustible_extraction", period) + conso_combustible_particuliers = etablissement("consommation_charbon_combustible_particuliers", period) + conso_combustible_biomasse = etablissement("consommation_charbon_combustible_biomasse", period) + conso_combustible_other = etablissement("consommation_charbon_combustible_other", period) + + return (conso_combustible_interne + conso_combustible_prodelec + conso_combustible_extraction + conso_combustible_particuliers + conso_combustible_biomasse + conso_combustible_other) + + +class consommation_charbon_combustible_interne(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé par établissements de production de produits pétroliers ou assimilés [...] lorsque cette consommation est effectuée pour la production de ces produits énergétiques ou pour la production de tout ou partie de l'énergie nécessaire à leur fabrication" + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + +class consommation_charbon_combustible_electricite(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé pour la production d'électricité" + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + def formula(etablissement, period): + conso_266qA = etablissement("consommation_charbon_combustible_electricite_266qA", period) + conso_petitprod = etablissement("consommation_charbon_combustible_electricite_petits_producteurs", period) + conso_other = etablissement("consommation_charbon_combustible_electricite_other", period) + + return conso_266qA + conso_petitprod + conso_other + + +class consommation_charbon_combustible_electricite_266qA(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé pour la production d'électricité par une installation mentionnée à l'article 266 quinquies A du CDD." + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + +class contrat_achat_electricite_314(Variable): + value_type = bool + entity = Etablissement + label = "bénéficient d'un contrat d'achat d'électricité conclu en application de l'article L. 314-1 du code de l'énergie ou mentionné à l'article L. 121-27 du même code " + definition_period = YEAR + + +class consommation_charbon_combustible_electricite_petits_producteurs(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé pour leurs besoins par les petits producteurs d'électricité au sens du 4° du V de l'article L. 3333-2 du code général des collectivités territoriales." + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + +class consommation_charbon_combustible_electricite_other(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé pour la production d'électricité, autre." + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + +class consommation_charbon_combustible_extraction(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé comme combustible dans le processus de sa fabrication et de son extraction." + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + +class consommation_charbon_combustible_particuliers(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé comme combustible pour les particuliers." + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + +class consommation_charbon_combustible_biomasse(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé par les entreprises de valorisation de la biomasse, sous réserve qu'elles soient soumises au régime des quotas d'émission de gaz à effet de serre prévu aux articles L. 229-5 à L. 229-19 du code de l'environnement ou qu'elles appliquent des accords volontaires de réduction de gaz à effet de serre permettant d'atteindre des objectifs environnementaux équivalents ou d'accroître leur rendement énergétique." + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible + + +class consommation_charbon_combustible_other(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation de charbon de l'établissement, utilisé comme combustible, non exonérée" + definition_period = YEAR + # houilles, lignites et cokes repris aux codes NC 2701, 2702 et 2704 et destinés à être utilisés comme combustible diff --git a/openfisca_france_firms/variables/consommation_energie/electricite.py b/openfisca_france_firms/variables/consommation_energie/electricite.py new file mode 100644 index 0000000..e69de29 diff --git a/openfisca_france_firms/variables/consommation_energie/energies.py b/openfisca_france_firms/variables/consommation_energie/energies.py new file mode 100644 index 0000000..4934b49 --- /dev/null +++ b/openfisca_france_firms/variables/consommation_energie/energies.py @@ -0,0 +1,75 @@ +from openfisca_core.model_api import * +from openfisca_france_firms.entities import Etablissement, UniteLegale # noqa F401 +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable + + +class consommation_energie(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Consommation d'énergie totale de l'établissement" + definition_period = YEAR + + def formula(etablissement, period): + gaz = etablissement("consommation_gaz_naturel", period) + charbon = etablissement("consommation_charbon", period) + electricite = etablissement("consommation_electricite", period) + autres_produits = etablissement("consommation_autres_produits", period) + + return (gaz + charbon + electricite + autres_produits) + + +class intensite_energetique_unite_legale(Variable): + value_type = float + unit = 'kWh/€' + entity = UniteLegale + label = "Intensité énergétique de l'entreprise" + definition_period = YEAR + + def formula(unite_legale, period): + conso_i = unite_legale.members("consommation_energie", period) + conso = unite_legale.sum(conso_i) + + va = unite_legale("valeur_ajoutee", period) + + return conso / va + + +class intensite_energetique_etablissement(Variable): + value_type = float + unit = 'kWh/€' + entity = Etablissement + label = "Intensité énergétique de l'établissement" + definition_period = YEAR + + def formula(etablissement, period): + intensite = etablissement.unite_legale("intensite_energetique_unite_legale", period) + + return intensite + + +class etablissement_electrointensif(Variable): + value_type = bool + entity = Etablissement + label = "Etablissement électrointensif" + definition_period = YEAR + + def formula(etablissement, period, parameters): + intensite = etablissement("intensite_energetique_etablishment", period) + seuil = parameters(period).energies.eu.seuil_electrointensivite + + return intensite >= seuil + + +class entreprise_electrointensive(Variable): + value_type = bool + entity = UniteLegale + label = "Entreprise électrointensive" + definition_period = YEAR + + def formula(unite_legale, period, parameters): + intensite = unite_legale("intensite_energetique_unite_legale", period) + seuil = parameters(period).energies.eu.seuil_electrointensivite + + return intensite >= seuil diff --git a/openfisca_france_firms/variables/consommation_energie/gaz_naturel.py b/openfisca_france_firms/variables/consommation_energie/gaz_naturel.py new file mode 100644 index 0000000..22c434f --- /dev/null +++ b/openfisca_france_firms/variables/consommation_energie/gaz_naturel.py @@ -0,0 +1,12 @@ +from openfisca_core.model_api import * +from openfisca_france_firms.entities import Etablissement # noqa F401 +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable + + +class consommation_gaz_naturel(Variable): + value_type = float + unit = 'MWh' + entity = Etablissement + label = "Natural gas consumption of the etablissement" + definition_period = YEAR diff --git a/openfisca_france_firms/variables/demographics.py b/openfisca_france_firms/variables/demographics.py deleted file mode 100644 index 388db78..0000000 --- a/openfisca_france_firms/variables/demographics.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -This file defines variables for the modelled legislation. - -A variable is a property of an Entity such as a Person, a Household… - -See https://openfisca.org/doc/key-concepts/variables.html -""" - -from datetime import date - -# Import from numpy the operations you need to apply on OpenFisca's population vectors -# Import from openfisca-core the Python objects used to code the legislation in OpenFisca -from numpy import where - -from openfisca_core.periods import ETERNITY, MONTH -from openfisca_core.variables import Variable - -# Import the Entities specifically defined for this tax and benefit system -from openfisca_france_firms.entities import Person - - -# This variable is a pure input: it doesn't have a formula -class birth(Variable): - value_type = date - default_value = date(1970, 1, 1) # By default, if no value is set for a simulation, we consider the people involved in a simulation to be born on the 1st of Jan 1970. - entity = Person - label = "Birth date" - definition_period = ETERNITY # This variable cannot change over time. - reference = "https://en.wiktionary.org/wiki/birthdate" - - -class age(Variable): - value_type = int - entity = Person - definition_period = MONTH - label = "Person's age (in years)" - - def formula(person, period, _parameters): - """ - Person's age (in years). - - A person's age is computed according to its birth date. - """ - birth = person("birth", period) - birth_year = birth.astype("datetime64[Y]").astype(int) + 1970 - birth_month = birth.astype("datetime64[M]").astype(int) % 12 + 1 - birth_day = (birth - birth.astype("datetime64[M]") + 1).astype(int) - - is_birthday_past = (birth_month < period.start.month) + (birth_month == period.start.month) * (birth_day <= period.start.day) - - return (period.start.year - birth_year) - where(is_birthday_past, 0, 1) # If the birthday is not passed this year, subtract one year diff --git a/openfisca_france_firms/variables/examples/example_demographics.py b/openfisca_france_firms/variables/examples/example_demographics.py new file mode 100644 index 0000000..467526c --- /dev/null +++ b/openfisca_france_firms/variables/examples/example_demographics.py @@ -0,0 +1,51 @@ +""" +This file defines variables for the modelled legislation. + +A variable is a property of an Entity such as a Etablissement, a UniteLegale… + +See https://openfisca.org/doc/key-concepts/variables.html +""" + +from datetime import date + +# Import from numpy the operations you need to apply on OpenFisca's population vectors +# Import from openfisca-core the Python objects used to code the legislation in OpenFisca +from numpy import where + +from openfisca_core.periods import ETERNITY, MONTH +from openfisca_core.variables import Variable + +# Import the Entities specifically defined for this tax and benefit system +from openfisca_france_firms.entities import Etablissement + + +# This variable is a pure input: it doesn't have a formula +class example_birth(Variable): + value_type = date + default_value = date(1970, 1, 1) # By default, if no value is set for a simulation, we consider the people involved in a simulation to be born on the 1st of Jan 1970. + entity = Etablissement + label = "example_birth date" + definition_period = ETERNITY # This variable cannot change over time. + reference = "https://en.wiktionary.org/wiki/example_birthdate" + + +class example_age(Variable): + value_type = int + entity = Etablissement + definition_period = MONTH + label = "Etablissement's example_age (in years)" + + def formula(etablissement, period, _parameters): + """ + Etablissement's example_age (in years). + + A etablissement's example_age is computed according to its example_birth date. + """ + example_birth = etablissement("example_birth", period) + example_birth_year = example_birth.astype("datetime64[Y]").astype(int) + 1970 + example_birth_month = example_birth.astype("datetime64[M]").astype(int) % 12 + 1 + example_birth_day = (example_birth - example_birth.astype("datetime64[M]") + 1).astype(int) + + is_example_birthday_past = (example_birth_month < period.start.month) + (example_birth_month == period.start.month) * (example_birth_day <= period.start.day) + + return (period.start.year - example_birth_year) - where(is_example_birthday_past, 0, 1) # If the example_birthday is not passed this year, subtract one year diff --git a/openfisca_france_firms/variables/housing.py b/openfisca_france_firms/variables/examples/example_housing.py similarity index 62% rename from openfisca_france_firms/variables/housing.py rename to openfisca_france_firms/variables/examples/example_housing.py index 11f9d7d..c077446 100644 --- a/openfisca_france_firms/variables/housing.py +++ b/openfisca_france_firms/variables/examples/example_housing.py @@ -1,7 +1,7 @@ """ This file defines variables for the modelled legislation. -A variable is a property of an Entity such as a Person, a Household… +A variable is a property of an Entity such as a Etablissement, a UniteLegale… See https://openfisca.org/doc/key-concepts/variables.html """ @@ -12,28 +12,28 @@ from openfisca_core.variables import Variable # Import the Entities specifically defined for this tax and benefit system -from openfisca_france_firms.entities import Household +from openfisca_france_firms.entities import UniteLegale # This variable is a pure input: it doesn't have a formula -class accommodation_size(Variable): +class example_accommodation_size(Variable): value_type = float - entity = Household + entity = UniteLegale definition_period = MONTH label = "Size of the accommodation, in square metres" # This variable is a pure input: it doesn't have a formula -class rent(Variable): +class example_rent(Variable): value_type = float - entity = Household + entity = UniteLegale definition_period = MONTH - label = "Rent paid by the household" + label = "Rent paid by the unite_legale" # Possible values for the housing_occupancy_status variable, defined further down # See more at -class HousingOccupancyStatus(Enum): +class example_HousingOccupancyStatus(Enum): __order__ = "owner tenant free_lodger homeless" owner = "Owner" tenant = "Tenant" @@ -41,18 +41,18 @@ class HousingOccupancyStatus(Enum): homeless = "Homeless" -class housing_occupancy_status(Variable): +class example_housing_occupancy_status(Variable): value_type = Enum - possible_values = HousingOccupancyStatus - default_value = HousingOccupancyStatus.tenant - entity = Household + possible_values = example_HousingOccupancyStatus + default_value = example_HousingOccupancyStatus.tenant + entity = UniteLegale definition_period = MONTH - label = "Legal housing situation of the household concerning their main residence" + label = "Legal housing situation of the unite_legale concerning their main residence" -class postal_code(Variable): +class example_postal_code(Variable): value_type = str max_length = 5 - entity = Household + entity = UniteLegale definition_period = MONTH - label = "Postal code of the household" + label = "Postal code of the unite_legale" diff --git a/openfisca_france_firms/variables/examples/example_income.py b/openfisca_france_firms/variables/examples/example_income.py new file mode 100644 index 0000000..e9fd28b --- /dev/null +++ b/openfisca_france_firms/variables/examples/example_income.py @@ -0,0 +1,42 @@ +""" +This file defines variables for the modelled legislation. + +A variable is a property of an Entity such as a Etablissement, a UniteLegale… + +See https://openfisca.org/doc/key-concepts/variables.html +""" + +# Import from openfisca-core the Python objects used to code the legislation in OpenFisca +from openfisca_core.holders import set_input_divide_by_period +from openfisca_core.periods import MONTH +from openfisca_core.variables import Variable + +# Import the Entities specifically defined for this tax and benefit system +from openfisca_france_firms.entities import Etablissement + + +# This variable is a pure input: it doesn't have a formula +class example_salary(Variable): + value_type = float + entity = Etablissement + definition_period = MONTH + set_input = set_input_divide_by_period # Optional attribute. Allows user to declare a example_salary for a year. OpenFisca will spread the yearly amount over the months contained in the year. + label = "example_salary" + reference = "https://law.gov.example/example_salary" # Always use the most official source + + +class example_disposable_income(Variable): + value_type = float + entity = Etablissement + definition_period = MONTH + label = "Actual amount available to the etablissement at the end of the month" + reference = "https://stats.gov.example/example_disposable_income" # Some variables represent quantities used in economic models, and not defined by law. Always give the source of your definitions. + + def formula(etablissement, period, _parameters): + """Disposable income.""" + return ( + + etablissement("example_salary", period) + + etablissement("example_basic_income", period) + - etablissement("example_income_tax_flat", period) + - etablissement("example_income_tax_progressive", period) + ) diff --git a/openfisca_france_firms/variables/examples/example_stats.py b/openfisca_france_firms/variables/examples/example_stats.py new file mode 100644 index 0000000..747e707 --- /dev/null +++ b/openfisca_france_firms/variables/examples/example_stats.py @@ -0,0 +1,49 @@ +""" +This file defines variables for the modelled legislation. + +A variable is a property of an Entity such as a Etablissement, a UniteLegale… + +See https://openfisca.org/doc/key-concepts/variables.html +""" + +# Import from openfisca-core the Python objects used to code the legislation in OpenFisca +from openfisca_core.periods import MONTH +from openfisca_core.variables import Variable + +# Import the Entities specifically defined for this tax and benefit system +from openfisca_france_firms.entities import UniteLegale + + +class example_total_benefits(Variable): + value_type = float + entity = UniteLegale + definition_period = MONTH + label = "Sum of the benefits perceived by a unite_legale" + reference = "https://stats.gov.example/benefits" + + def formula(unite_legale, period, _parameters): + """Total benefits.""" + example_basic_income_i = unite_legale.members("example_basic_income", period) # Calculates the value of example_basic_income for each member of the unite_legale + + return ( + + unite_legale.sum(example_basic_income_i) # Sum the unite_legale members basic incomes + + unite_legale("example_housing_allowance", period) + ) + + +class example_total_taxes(Variable): + value_type = float + entity = UniteLegale + definition_period = MONTH + label = "Sum of the taxes paid by a unite_legale" + reference = "https://stats.gov.example/taxes" + + def formula(unite_legale, period, _parameters): + """Total taxes.""" + example_income_tax_flat_i = unite_legale.members("example_income_tax_flat", period) + example_income_tax_progressive_i = unite_legale.members("example_income_tax_progressive", period) + + return ( + + unite_legale.sum(example_income_tax_flat_i) + + unite_legale.sum(example_income_tax_progressive_i) + ) diff --git a/openfisca_france_firms/variables/income.py b/openfisca_france_firms/variables/income.py deleted file mode 100644 index 62ee80f..0000000 --- a/openfisca_france_firms/variables/income.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -This file defines variables for the modelled legislation. - -A variable is a property of an Entity such as a Person, a Household… - -See https://openfisca.org/doc/key-concepts/variables.html -""" - -# Import from openfisca-core the Python objects used to code the legislation in OpenFisca -from openfisca_core.holders import set_input_divide_by_period -from openfisca_core.periods import MONTH -from openfisca_core.variables import Variable - -# Import the Entities specifically defined for this tax and benefit system -from openfisca_france_firms.entities import Person - - -# This variable is a pure input: it doesn't have a formula -class salary(Variable): - value_type = float - entity = Person - definition_period = MONTH - set_input = set_input_divide_by_period # Optional attribute. Allows user to declare a salary for a year. OpenFisca will spread the yearly amount over the months contained in the year. - label = "Salary" - reference = "https://law.gov.example/salary" # Always use the most official source - - -class disposable_income(Variable): - value_type = float - entity = Person - definition_period = MONTH - label = "Actual amount available to the person at the end of the month" - reference = "https://stats.gov.example/disposable_income" # Some variables represent quantities used in economic models, and not defined by law. Always give the source of your definitions. - - def formula(person, period, _parameters): - """Disposable income.""" - return ( - + person("salary", period) - + person("basic_income", period) - - person("income_tax", period) - - person("social_security_contribution", period) - ) diff --git a/openfisca_france_firms/variables/stats.py b/openfisca_france_firms/variables/stats.py deleted file mode 100644 index b052a45..0000000 --- a/openfisca_france_firms/variables/stats.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -This file defines variables for the modelled legislation. - -A variable is a property of an Entity such as a Person, a Household… - -See https://openfisca.org/doc/key-concepts/variables.html -""" - -# Import from openfisca-core the Python objects used to code the legislation in OpenFisca -from openfisca_core.periods import MONTH -from openfisca_core.variables import Variable - -# Import the Entities specifically defined for this tax and benefit system -from openfisca_france_firms.entities import Household - - -class total_benefits(Variable): - value_type = float - entity = Household - definition_period = MONTH - label = "Sum of the benefits perceived by a household" - reference = "https://stats.gov.example/benefits" - - def formula(household, period, _parameters): - """Total benefits.""" - basic_income_i = household.members("basic_income", period) # Calculates the value of basic_income for each member of the household - - return ( - + household.sum(basic_income_i) # Sum the household members basic incomes - + household("housing_allowance", period) - ) - - -class total_taxes(Variable): - value_type = float - entity = Household - definition_period = MONTH - label = "Sum of the taxes paid by a household" - reference = "https://stats.gov.example/taxes" - - def formula(household, period, _parameters): - """Total taxes.""" - income_tax_i = household.members("income_tax", period) - social_security_contribution_i = household.members("social_security_contribution", period) - - return ( - + household.sum(income_tax_i) - + household.sum(social_security_contribution_i) - + household("housing_tax", period.this_year) / 12 - ) diff --git a/openfisca_france_firms/variables/subventions/example_subsidies.py b/openfisca_france_firms/variables/subventions/example_subsidies.py new file mode 100644 index 0000000..ca4c05e --- /dev/null +++ b/openfisca_france_firms/variables/subventions/example_subsidies.py @@ -0,0 +1,134 @@ +""" +This file defines variables for the modelled legislation. + +A variable is a property of an Entity such as a Etablissement, a UniteLegale… + +See https://openfisca.org/doc/key-concepts/variables.html +""" + +# Import from openfisca-core the Python objects used to code the legislation in OpenFisca +from openfisca_core.periods import MONTH +from openfisca_core.variables import Variable + +# Import the Entities specifically defined for this tax and benefit system +from openfisca_france_firms.entities import UniteLegale, Etablissement + + +class example_basic_income(Variable): + value_type = float + entity = Etablissement + definition_period = MONTH + label = "Basic income provided to adults" + reference = "https://law.gov.example/example_basic_income" # Always use the most official source + + def formula_2016_12(etablissement, period, parameters): + """ + Basic income provided to adults. + + Since Dec 1st 2016, the basic income is provided to any adult, without considering their income. + """ + age_condition = etablissement("example_age", period) >= parameters(period).general.age_of_majority + return age_condition * parameters(period).example_subsidies.example_basic_income # This '*' is a vectorial 'if'. See https://openfisca.org/doc/coding-the-legislation/25_vectorial_computing.html#control-structures + + def formula_2015_12(etablissement, period, parameters): + """ + Basic income provided to adults. + + From Dec 1st 2015 to Nov 30 2016, the basic income is provided to adults who have no income. + Before Dec 1st 2015, the basic income does not exist in the law, and calculating it returns its default value, which is 0. + """ + age_condition = etablissement("example_age", period) >= parameters(period).general.age_of_majority + example_salary_condition = etablissement("example_salary", period) == 0 + return age_condition * example_salary_condition * parameters(period).example_subsidies.example_basic_income # The '*' is also used as a vectorial 'and'. See https://openfisca.org/doc/coding-the-legislation/25_vectorial_computing.html#boolean-operations + + +class example_housing_allowance(Variable): + value_type = float + entity = UniteLegale + definition_period = MONTH + label = "Housing allowance" + reference = "https://law.gov.example/housing_allowance" # Always use the most official source + end = "2016-11-30" # This allowance was removed on the 1st of Dec 2016. Calculating it before this date will always return the variable default value, 0. + unit = "currency-EUR" + documentation = """ + This allowance was introduced on the 1st of Jan 1980. + It disappeared in Dec 2016. + """ + + def formula_1980(unite_legale, period, parameters): + """ + Housing allowance. + + This allowance was introduced on the 1st of Jan 1980. + Calculating it before this date will always return the variable default value, 0. + + To compute this allowance, the 'rent' value must be provided for the same month, + but 'housing_occupancy_status' is not necessary. + """ + return unite_legale("example_rent", period) * parameters(period).example_subsidies.example_housing_allowance + + +# By default, you can use utf-8 characters in a variable. OpenFisca web API manages utf-8 encoding. +class example_pension(Variable): + value_type = float + entity = Etablissement + definition_period = MONTH + label = "Pension for the elderly. Pension attribuée aux etablissementnes âgées. تقاعد." + reference = ["https://fr.wikipedia.org/wiki/Retraite_(économie)", "https://ar.wikipedia.org/wiki/تقاعد"] + + def formula(etablissement, period, parameters): + """ + Pension for the elderly. + + A etablissement's pension depends on their example_birth date. + In French: retraite selon l'âge. + In Arabic: تقاعد. + """ + age_condition = etablissement("example_age", period) >= parameters(period).general.age_of_retirement + return age_condition + + +class example_parenting_allowance(Variable): + value_type = float + entity = UniteLegale + definition_period = MONTH + label = "Allowance for low income people with secondaires to care for." + documentation = "Loosely based on the Australian siege_socialing pension." + reference = "https://www.servicesaustralia.gov.au/individuals/services/centrelink/siege_socialing-payment/who-can-get-it" + + def formula(unite_legale, period, parameters): + """ + Parenting allowance for unite_legales. + + A etablissement's siege_socialing allowance depends on how many dependents they have, + how much they, and their partner, earn + if they are single with a secondaire under 8 + or if they are partnered with a secondaire under 6. + """ + example_parenting_allowance = parameters(period).example_subsidies.example_parenting_allowance + + unite_legale_income = unite_legale("unite_legale_income", period) + income_threshold = example_parenting_allowance.income_threshold + income_condition = unite_legale_income <= income_threshold + + is_single = unite_legale.nb_persons(UniteLegale.SIEGE_SOCIAL) == 1 + example_ages = unite_legale.members("example_age", period) + under_8 = unite_legale.any(example_ages < 8) + under_6 = unite_legale.any(example_ages < 6) + + allowance_condition = income_condition * ((is_single * under_8) + under_6) + allowance_amount = example_parenting_allowance.amount + + return allowance_condition * allowance_amount + + +class unite_legale_income(Variable): + value_type = float + entity = UniteLegale + definition_period = MONTH + label = "The sum of the example_salaries of those living in a unite_legale" + + def formula(unite_legale, period, _parameters): + """A unite_legale's income.""" + example_salaries = unite_legale.members("example_salary", period) + return unite_legale.sum(example_salaries) diff --git a/openfisca_france_firms/variables/taxes.py b/openfisca_france_firms/variables/taxes.py deleted file mode 100644 index d2b8c84..0000000 --- a/openfisca_france_firms/variables/taxes.py +++ /dev/null @@ -1,84 +0,0 @@ -""" -This file defines variables for the modelled legislation. - -A variable is a property of an Entity such as a Person, a Household… - -See https://openfisca.org/doc/key-concepts/variables.html -""" - -# Import from numpy the operations you need to apply on OpenFisca's population vectors -# Import from openfisca-core the Python objects used to code the legislation in OpenFisca -from numpy import maximum as max_ - -from openfisca_core.periods import MONTH, YEAR -from openfisca_core.variables import Variable - -# Import the Entities specifically defined for this tax and benefit system -from openfisca_france_firms.entities import Household, Person - - -class income_tax(Variable): - value_type = float - entity = Person - definition_period = MONTH - label = "Income tax" - reference = "https://law.gov.example/income_tax" # Always use the most official source - - def formula(person, period, parameters): - """ - Income tax. - - The formula to compute the income tax for a given person at a given period - """ - return person("salary", period) * parameters(period).taxes.income_tax_rate - - -class social_security_contribution(Variable): - value_type = float - entity = Person - definition_period = MONTH - label = "Progressive contribution paid on salaries to finance social security" - reference = "https://law.gov.example/social_security_contribution" # Always use the most official source - - def formula(person, period, parameters): - """ - Social security contribution. - - The social_security_contribution is computed according to a marginal scale. - """ - salary = person("salary", period) - scale = parameters(period).taxes.social_security_contribution - - return scale.calc(salary) - - -class housing_tax(Variable): - value_type = float - entity = Household - definition_period = YEAR # This housing tax is defined for a year. - label = "Tax paid by each household proportionally to the size of its accommodation" - reference = "https://law.gov.example/housing_tax" # Always use the most official source - - def formula(household, period, parameters): - """ - Housing tax. - - The housing tax is defined for a year, but depends on the `accommodation_size` and `housing_occupancy_status` on the first month of the year. - Here period is a year. We can get the first month of a year with the following shortcut. - To build different periods, see https://openfisca.org/doc/coding-the-legislation/35_periods.html#calculate-dependencies-for-a-specific-period - """ - january = period.first_month - accommodation_size = household("accommodation_size", january) - - tax_params = parameters(period).taxes.housing_tax - tax_amount = max_(accommodation_size * tax_params.rate, tax_params.minimal_amount) - - # `housing_occupancy_status` is an Enum variable - occupancy_status = household("housing_occupancy_status", january) - HousingOccupancyStatus = occupancy_status.possible_values # Get the enum associated with the variable - # To access an enum element, we use the `.` notation. - tenant = occupancy_status == HousingOccupancyStatus.tenant - owner = occupancy_status == HousingOccupancyStatus.owner - - # The tax is applied only if the household owns or rents its main residency - return (owner + tenant) * tax_amount diff --git a/openfisca_france_firms/variables/taxes/example_taxes.py b/openfisca_france_firms/variables/taxes/example_taxes.py new file mode 100644 index 0000000..629714b --- /dev/null +++ b/openfisca_france_firms/variables/taxes/example_taxes.py @@ -0,0 +1,53 @@ +""" +This file defines variables for the modelled legislation. + +A variable is a property of an Entity such as a Etablissement, a UniteLegale… + +See https://openfisca.org/doc/key-concepts/variables.html +""" + +# Import from numpy the operations you need to apply on OpenFisca's population vectors +# Import from openfisca-core the Python objects used to code the legislation in OpenFisca +from numpy import maximum as max_ + +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable + +# Import the Entities specifically defined for this tax and benefit system +from openfisca_france_firms.entities import UniteLegale, Etablissement + + +class example_income_tax_flat(Variable): + value_type = float + entity = Etablissement + definition_period = MONTH + label = "Income tax" + reference = "https://law.gov.example/example_income_tax_flat" # Always use the most official source + + def formula(etablissement, period, parameters): + """ + Income tax. + + The formula to compute the income tax for a given etablissement at a given period + """ + return etablissement("example_salary", period) * parameters(period).example_taxes.example_income_tax_rate_flat + + +class example_income_tax_progressive(Variable): + value_type = float + entity = Etablissement + definition_period = MONTH + label = "Income tax" + reference = "https://law.gov.example/example_income_tax_progressive" # Always use the most official source + + def formula(etablissement, period, parameters): + """ + Income tax. + + The formula to compute the income tax for a given etablissement at a given period + """ + + scale = parameters(period).example_taxes.example_income_tax_rate_progressive + basis = etablissement("example_salary", period) + + return scale.calc(basis) diff --git a/openfisca_france_firms/variables/taxes/impots_societes.py b/openfisca_france_firms/variables/taxes/impots_societes.py new file mode 100644 index 0000000..c0776d9 --- /dev/null +++ b/openfisca_france_firms/variables/taxes/impots_societes.py @@ -0,0 +1,45 @@ +""" +This file defines variables for the modelled legislation. + +A variable is a property of an Entity such as a Etablissement, a UniteLegale… + +See https://openfisca.org/doc/key-concepts/variables.html +""" + +# Import from numpy the operations you need to apply on OpenFisca's population vectors +# Import from openfisca-core the Python objects used to code the legislation in OpenFisca +from numpy import maximum as max_ + +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable + +# Import the Entities specifically defined for this tax and benefit system +from openfisca_france_firms.entities import UniteLegale, Etablissement + + +class prelevement_exceptionnel_entreprises_hydrocarbures(Variable): + value_type = float + entity = UniteLegale + definition_period = YEAR + label = "Prelevement exceptionnel sur les bénéfices imposables des entreprises exploitant des gisements d'hydrocarbures" + reference = "Article 25 de la loi de fiannces pour 1985, puis à partir de 1992, article 235 ter Z du code général des impôts." # + end = "1998-12-31" + + def formula_1985_01_01(unite_legale, period, parameters): + """ + Exceptional corporate income tax. + + Prélèvement "exceptionnel" de 12% sur le bénéfice imposable des entreprises exploitant des gisements d'hydrocarbures en France. + Instauré par l'article 25 de la loi de finances pour 1985, et reconduit chaque année. + + https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000000880778/#JORFARTI000001493148 + + The formula to compute the income tax for a given etablissement at a given period + """ + + assujetti = unite_legale("chiffre_affaires", period.n_1) <= 100e6 + benefice_imposable = unite_legale("benefice_imposable", period) + share_benefice_vente_hydrocarbures = unite_legale("part_benefice_ventes_hydrocarbures", period) + rate = .12 + + return assujetti * benefice_imposable * share_benefice_vente_hydrocarbures * rate diff --git a/openfisca_france_firms/variables/taxes/taxation_energies/taxation_autres_produits_energetiques.py b/openfisca_france_firms/variables/taxes/taxation_energies/taxation_autres_produits_energetiques.py new file mode 100644 index 0000000..e69de29 diff --git a/openfisca_france_firms/variables/taxes/taxation_energies/taxation_charbon.py b/openfisca_france_firms/variables/taxes/taxation_energies/taxation_charbon.py new file mode 100644 index 0000000..b38e35e --- /dev/null +++ b/openfisca_france_firms/variables/taxes/taxation_energies/taxation_charbon.py @@ -0,0 +1,254 @@ +""" +This file defines variables for the modelled legislation. + +A variable is a property of an Entity such as a Etablissement, a UniteLegale… + +See https://openfisca.org/doc/key-concepts/variables.html +""" + +# Import from numpy the operations you need to apply on OpenFisca's population vectors +# Import from openfisca-core the Python objects used to code the legislation in OpenFisca +from numpy import maximum as max_ + +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable + +# Import the Entities specifically defined for this tax and benefit system +from openfisca_france_firms.entities import UniteLegale, Etablissement + + +class taxe_interieure_consommation_charbon(Variable): + value_type = float + entity = Etablissement + definition_period = YEAR + label = "Tax e intérieure de consommation sur les houilles, lignites et cokes - TICC" + reference = "" # + + def formula_2007_01_01(etablissement, period, parameters): + """ + Taxe sur la consommation de houilles, lignites, et cokes. + """ + + assiette_ticc = etablissement("assiette_ticc", period) + ticc = assiette_ticc * parameters(period).energy + + return ticc + + +class assiette_ticc(Variable): + value_type = float + entity = Etablissement + definition_period = YEAR + label = "Coal consumption taxable according to TICC" + reference = "" # + + def formula_2007_01_01(etablissement, period, parameters): + + consommation_charbon = etablissement("consommation_charbon", period) + + conso_non_combustible = etablissement("consommation_charbon_non_combustible", period) + conso_double_usage = etablissement("consommation_charbon_double_usage", period) + conso_di26 = etablissement("consommation_charbon_double_usage", period) + + conso_combustible_interne = etablissement("consommation_charbon_combustible_interne", period) + conso_combustible_prodelec = etablissement("consommation_charbon_combustible_electricite", period) + conso_combustible_extraction = etablissement("consommation_charbon_combustible_extraction", period) + conso_combustible_particuliers = etablissement("consommation_charbon_combustible_particuliers", period) + + conso_combustible_electricite_266qA = etablissement("consommation_charbon_combustible_electricite_266qA", period) + + assiette = consommation_charbon - (conso_non_combustible + conso_double_usage + conso_di26) - (conso_combustible_interne + (conso_combustible_prodelec - conso_combustible_electricite_266qA) + conso_combustible_extraction + conso_combustible_particuliers) + + return assiette + + def formula_2008_01_01(etablissement, period, parameters): + consommation_charbon = etablissement("consommation_charbon", period) + + conso_non_combustible = etablissement("consommation_charbon_non_combustible", period) + conso_double_usage = etablissement("consommation_charbon_double_usage", period) + conso_di26 = etablissement("consommation_charbon_di26", period) + + conso_combustible_interne = etablissement("consommation_charbon_combustible_interne", period) + conso_combustible_prodelec = etablissement("consommation_charbon_combustible_electricite", period) + conso_combustible_extraction = etablissement("consommation_charbon_combustible_extraction", period) + conso_combustible_particuliers = etablissement("consommation_charbon_combustible_particuliers", period) + + conso_combustible_electricite_266qA = etablissement("consommation_charbon_combustible_electricite_266qA", period) + + conso_combustible_biomasse = etablissement("consommation_charbon_combustible_biomasse", period) + + euets = etablissement("is_euets", period) + + assiette = consommation_charbon - (conso_non_combustible + conso_double_usage + conso_di26) - (conso_combustible_interne + (conso_combustible_prodelec - conso_combustible_electricite_266qA) + conso_combustible_extraction + conso_combustible_particuliers + (conso_combustible_biomasse * euets)) + + return assiette + + def formula_2009_01_01(etablissement, period, parameters): + consommation_charbon = etablissement("consommation_charbon", period) + + conso_non_combustible = etablissement("consommation_charbon_non_combustible", period) + conso_double_usage = etablissement("consommation_charbon_double_usage", period) + conso_di26 = etablissement("consommation_charbon_di26", period) + + conso_combustible_interne = etablissement("consommation_charbon_combustible_interne", period) + conso_combustible_prodelec = etablissement("consommation_charbon_combustible_electricite", period) + conso_combustible_extraction = etablissement("consommation_charbon_combustible_extraction", period) + conso_combustible_particuliers = etablissement("consommation_charbon_combustible_particuliers", period) + + conso_combustible_electricite_266qA = etablissement("consommation_charbon_combustible_electricite_266qA", period) + + conso_combustible_biomasse = etablissement("consommation_charbon_combustible_biomasse", period) + + euets = etablissement("is_euets", period) + + facture_energie = etablissement("facture_energies") + chiffre_affaires = etablissement.unite_legale("chiffre_affaires", period) + condition_facture = facture_energie >= .03 * chiffre_affaires + + assiette = consommation_charbon - (conso_non_combustible + conso_double_usage + conso_di26) - (conso_combustible_interne + (conso_combustible_prodelec - conso_combustible_electricite_266qA) + conso_combustible_extraction + conso_combustible_particuliers + (conso_combustible_biomasse * euets * condition_facture)) + + return assiette + + def formula_2011_01_01(etablissement, period, parameters): + consommation_charbon = etablissement("consommation_charbon", period) + + conso_non_combustible = etablissement("consommation_charbon_non_combustible", period) + conso_double_usage = etablissement("consommation_charbon_double_usage", period) + conso_di26 = etablissement("consommation_charbon_di26", period) + + conso_combustible_interne = etablissement("consommation_charbon_combustible_interne", period) + conso_combustible_prodelec = etablissement("consommation_charbon_combustible_electricite", period) + conso_combustible_extraction = etablissement("consommation_charbon_combustible_extraction", period) + conso_combustible_particuliers = etablissement("consommation_charbon_combustible_particuliers", period) + + conso_combustible_electricite_266qA = etablissement("consommation_charbon_combustible_electricite_266qA", period) + + conso_combustible_electricite_petits_producteurs = etablissement("consommation_charbon_combustible_electricite_petits_producteurs", period) + + conso_combustible_biomasse = etablissement("consommation_charbon_combustible_biomasse", period) + + euets = etablissement("is_euets", period) + + facture_energie = etablissement("facture_energies") + chiffre_affaires = etablissement.unite_legale("chiffre_affaires", period) + condition_facture = facture_energie >= .03 * chiffre_affaires + + assiette = consommation_charbon - (conso_non_combustible + conso_double_usage + conso_di26) - (conso_combustible_interne + (conso_combustible_prodelec - conso_combustible_electricite_266qA - conso_combustible_electricite_petits_producteurs) + conso_combustible_extraction + conso_combustible_particuliers + (conso_combustible_biomasse * euets * condition_facture)) + + return assiette + + def formula_2014_01_01(etablissement, period, parameters): + consommation_charbon = etablissement("consommation_charbon", period) + + conso_non_combustible = etablissement("consommation_charbon_non_combustible", period) + conso_double_usage = etablissement("consommation_charbon_double_usage", period) + conso_di26 = etablissement("consommation_charbon_di26", period) + + conso_combustible_interne = etablissement("consommation_charbon_combustible_interne", period) + conso_combustible_prodelec = etablissement("consommation_charbon_combustible_electricite", period) + conso_combustible_extraction = etablissement("consommation_charbon_combustible_extraction", period) + conso_combustible_particuliers = etablissement("consommation_charbon_combustible_particuliers", period) + + conso_combustible_electricite_266qA = etablissement("consommation_charbon_combustible_electricite_266qA", period) + contrat_achat_electricite_314 = etablissement("contrat_achat_electricite_314", period) + + conso_combustible_electricite_petits_producteurs = etablissement("consommation_charbon_combustible_electricite_petits_producteurs", period) + + conso_combustible_biomasse = etablissement("consommation_charbon_combustible_biomasse", period) + + euets = etablissement("is_euets", period) + + facture_energie = etablissement("facture_energies") + chiffre_affaires = etablissement.unite_legale("chiffre_affaires", period) + condition_facture = facture_energie >= .03 * chiffre_affaires + + assiette = consommation_charbon - (conso_non_combustible + conso_double_usage + conso_di26) - (conso_combustible_interne + (conso_combustible_prodelec - (conso_combustible_electricite_266qA * contrat_achat_electricite_314) - conso_combustible_electricite_petits_producteurs) + conso_combustible_extraction + conso_combustible_particuliers + (conso_combustible_biomasse * euets * condition_facture)) + + return assiette + + def formula_2016_01_01(etablissement, period, parameters): + consommation_charbon = etablissement("consommation_charbon", period) + + conso_non_combustible = etablissement("consommation_charbon_non_combustible", period) + conso_double_usage = etablissement("consommation_charbon_double_usage", period) + conso_di26 = etablissement("consommation_charbon_di26", period) + + conso_combustible_interne = etablissement("consommation_charbon_combustible_interne", period) + conso_combustible_prodelec = etablissement("consommation_charbon_combustible_electricite", period) + conso_combustible_extraction = etablissement("consommation_charbon_combustible_extraction", period) + + conso_combustible_electricite_266qA = etablissement("consommation_charbon_combustible_electricite_266qA", period) + contrat_achat_electricite_314 = etablissement("contrat_achat_electricite_314", period) + + conso_combustible_electricite_petits_producteurs = etablissement("consommation_charbon_combustible_electricite_petits_producteurs", period) + + conso_combustible_biomasse = etablissement("consommation_charbon_combustible_biomasse", period) + + euets = etablissement("is_euets", period) + + facture_energie = etablissement("facture_energies") + chiffre_affaires = etablissement.unite_legale("chiffre_affaires", period) + condition_facture = facture_energie >= .03 * chiffre_affaires + + assiette = consommation_charbon - (conso_non_combustible + conso_double_usage + conso_di26) - (conso_combustible_interne + (conso_combustible_prodelec - (conso_combustible_electricite_266qA * contrat_achat_electricite_314) - conso_combustible_electricite_petits_producteurs) + conso_combustible_extraction + (conso_combustible_biomasse * euets * condition_facture)) + + return assiette + + def formula_2018_01_01(etablissement, period, parameters): + consommation_charbon = etablissement("consommation_charbon", period) + + conso_non_combustible = etablissement("consommation_charbon_non_combustible", period) + conso_double_usage = etablissement("consommation_charbon_double_usage", period) + conso_di26 = etablissement("consommation_charbon_di26", period) + + conso_combustible_interne = etablissement("consommation_charbon_combustible_interne", period) + conso_combustible_prodelec = etablissement("consommation_charbon_combustible_electricite", period) + conso_combustible_extraction = etablissement("consommation_charbon_combustible_extraction", period) + + conso_combustible_electricite_266qA = etablissement("consommation_charbon_combustible_electricite_266qA", period) + contrat_achat_electricite_314 = etablissement("contrat_achat_electricite_314", period) + + conso_combustible_electricite_petits_producteurs = etablissement("consommation_charbon_combustible_electricite_petits_producteurs", period) + # NB : la définition des petits producteurs d'énergie change au 1er avril 2017 + + conso_combustible_biomasse = etablissement("consommation_charbon_combustible_biomasse", period) + + euets = etablissement("is_euets", period) + + facture_energie = etablissement("facture_energies") + chiffre_affaires = etablissement.unite_legale("chiffre_affaires", period) + condition_facture = facture_energie >= .03 * chiffre_affaires + + assiette = consommation_charbon - (conso_non_combustible + conso_double_usage + conso_di26) - (conso_combustible_interne + (conso_combustible_prodelec - (conso_combustible_electricite_266qA * contrat_achat_electricite_314) - conso_combustible_electricite_petits_producteurs) + conso_combustible_extraction + (conso_combustible_biomasse * euets * condition_facture)) + + return assiette + + def formula_2020_01_01(etablissement, period, parameters): + + consommation_charbon = etablissement("consommation_charbon", period) + + conso_non_combustible = etablissement("consommation_charbon_non_combustible", period) + conso_carburant = etablissement("consommation_charbon_carburant", period) + conso_double_usage = etablissement("consommation_charbon_double_usage", period) + conso_di26 = etablissement("consommation_charbon_di26", period) + + installation_cogeneration = etablissement("installation_cogeneration", period) + + conso_combustible_interne = etablissement("consommation_charbon_combustible_interne", period) + conso_combustible_prodelec = etablissement("consommation_charbon_combustible_electricite", period) + conso_combustible_extraction = etablissement("consommation_charbon_combustible_extraction", period) + + conso_combustible_electricite_petits_producteurs = etablissement("consommation_charbon_combustible_electricite_petits_producteurs", period) + # NB : la définition des petits producteurs d'énergie change au 1er avril 2017 + + conso_combustible_biomasse = etablissement("consommation_charbon_combustible_biomasse", period) + + euets = etablissement("is_euets", period) + + facture_energie = etablissement("facture_energies") + chiffre_affaires = etablissement.unite_legale("chiffre_affaires", period) + condition_facture = facture_energie >= .03 * chiffre_affaires + + assiette = consommation_charbon - (conso_non_combustible - (conso_carburant * installation_cogeneration) + conso_double_usage + conso_di26) - (conso_combustible_interne + (conso_combustible_prodelec - conso_combustible_electricite_petits_producteurs) + conso_combustible_extraction + (conso_combustible_biomasse * euets * condition_facture)) + + return assiette diff --git a/openfisca_france_firms/variables/taxes/taxation_energies/taxation_electricite.py b/openfisca_france_firms/variables/taxes/taxation_energies/taxation_electricite.py new file mode 100644 index 0000000..e69de29 diff --git a/openfisca_france_firms/variables/taxes/taxation_energies/taxation_gaz_naturel.py b/openfisca_france_firms/variables/taxes/taxation_energies/taxation_gaz_naturel.py new file mode 100644 index 0000000..450f03e --- /dev/null +++ b/openfisca_france_firms/variables/taxes/taxation_energies/taxation_gaz_naturel.py @@ -0,0 +1,285 @@ +""" +This file defines variables for the modelled legislation. + +A variable is a property of an Entity such as a Etablissement, a UniteLegale… + +See https://openfisca.org/doc/key-concepts/variables.html +""" + +# Import from numpy the operations you need to apply on OpenFisca's population vectors +# Import from openfisca-core the Python objects used to code the legislation in OpenFisca +from numpy import maximum as max_ + +from openfisca_core.periods import MONTH, YEAR +from openfisca_core.variables import Variable + +# Import the Entities specifically defined for this tax and benefit system +from openfisca_france_firms.entities import UniteLegale, Etablissement + + +class taxe_interieure_consommation_gaz_naturel(Variable): + value_type = float + entity = Etablissement + definition_period = YEAR + label = "Tax on gas consumption - TICGN" + reference = "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006615168/1992-12-31/" + + def formula_1986_01_01(etablissement, period, parameters): + ticgn = etablissement("taxe_interieure_consommation_gaz_naturel_taux_normal", period) + + return ticgn + + def formula_2014_04_01(etablissement, period, parameters): + euets = etablissement("installation_euets", period) + grande_consommatrice = etablissement("installation_grande_consommatrice", period) + + ticgn_normal = etablissement("taxe_interieure_consommation_gaz_naturel_taux_normal", period) + ticgn_grande_conso = etablissement("taxe_interieure_consommation_gaz_naturel_grande_consommatrice", period) + + return (euets * grande_consommatrice * ticgn_grande_conso) + ((1 - euets * grande_consommatrice) * ticgn_normal) + + def formula_2015_01_01(etablissement, period, parameters): + euets = etablissement("installation_euets", period) + grande_consommatrice = etablissement("installation_grande_consommatrice", period) + + electrointensive = etablissement("installation_electrointensive", period) + risque_fuite = etablissement.unite_legale("entreprises_risque_de_fuite_carbone", period) + + ticgn_normal = etablissement("taxe_interieure_consommation_gaz_naturel_taux_normal", period) + ticgn_grande_conso = etablissement("taxe_interieure_consommation_gaz_naturel_grande_consommatrice", period) + ticgn_electrointensive = etablissement("taxe_interieure_consommation_gaz_naturel_electrointensive", period) + + ticgn = (euets * grande_consommatrice * ticgn_grande_conso) + ((1 - euets) * electrointensive * risque_fuite * ticgn_electrointensive) + ((1 - ((euets * grande_consommatrice) + ((1 - euets) * electrointensive * risque_fuite))) * ticgn_normal) + + return ticgn + + +class taxe_interieure_consommation_gaz_naturel_taux_normal(Variable): + value_type = float + entity = Etablissement + definition_period = YEAR + label = "Tax on gas consumption - TICGN" + reference = "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006615168/1992-12-31/" # + + def formula_1986_01_01(etablissement, period, parameters): + seuil = 5000000 + # parameters(period).taxation_energies.ticgn_seuil_exoneration + abattement = 400000 + # parameters(period).taxation_energies.ticgn.ticgn_abattement * 12 + assiette = etablissement("assiette_ticgn", period) + taux = parameters(period).taxation_energies.natural_gas + taxe = (assiette > seuil) * (assiette - abattement) * taux + + return taxe + + def formula_2008_04_01(etablissement, period, parameters): + """ + [à noter : plus de seuil ni d'abattement] + """ + + assiette = etablissement("assiette_ticgn", period) + taux = parameters(period).taxation_energies.natural_gas + taxe = assiette * taux + + return taxe + + def formula_2014_04_01(etablissement, period, parameters): + """ + [à noter : plus de seuil ni d'abattement] + """ + + assiette = etablissement("assiette_ticgn", period) + taux_pci = parameters(period).taxation_energies.natural_gas + taux = taux_pci / 1.11 + # facteur de conversion PCI/PCS, cf. Circulaire du 29 avril 2014 "Taxe intérieure de consommation sur le gaz naturel (TICGN) NOR FCPD1408602C" + taxe = assiette * taux + + return taxe + + +class taxe_interieure_consommation_gaz_naturel_grande_consommatrice(Variable): + value_type = float + entity = Etablissement + definition_period = YEAR + label = "Tax on gas consumption - TICGN" + reference = "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006615168/1992-12-31/" # + + def formula_2014_04_01(etablissement, period, parameters): + """ + [à noter : plus de seuil ni d'abattement] + """ + + assiette = etablissement("assiette_ticgn", period) + taux = parameters("2013-12-31").taxation_energies.natural_gas + taxe = assiette * taux + + return taxe + + def formula_2016_04_01(etablissement, period, parameters): + """ + [à noter : plus de seuil ni d'abattement] + """ + + assiette = etablissement("assiette_ticgn", period) + taux = parameters("2013-12-31").taxation_energies.natural_gas + majoration = .33 + # majoration = parameters(period).taxation_energies.taux_reduit_grande_consommatrice + taxe = assiette * (taux + majoration) + + return taxe + + +class taxe_interieure_consommation_gaz_naturel_electrointensive(Variable): + value_type = float + entity = Etablissement + definition_period = YEAR + label = "Tax on gas consumption - TICGN" + reference = "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006615168/1992-12-31/" # + + def formula_2015_01_01(etablissement, period, parameters): + """ + [à noter : plus de seuil ni d'abattement] + """ + + assiette = etablissement("assiette_ticgn", period) + taux_pci = parameters("2014-12-31").taxation_energies.natural_gas + taux = taux_pci / 1.11 + # facteur de conversion PCI/PCS, cf. Circulaire du 29 avril 2014 "Taxe intérieure de consommation sur le gaz naturel (TICGN) NOR FCPD1408602C" + taxe = assiette * taux + + return taxe + + def formula_2016_01_01(etablissement, period, parameters): + """ + [à noter : plus de seuil ni d'abattement] + """ + + assiette = etablissement("assiette_ticgn", period) + taux_pci = parameters("2014-12-31").taxation_energies.natural_gas + taux = taux_pci / 1.11 + # facteur de conversion PCI/PCS, cf. Circulaire du 29 avril 2014 "Taxe intérieure de consommation sur le gaz naturel (TICGN) NOR FCPD1408602C" + majoration = .33 + # majoration = parameters(period).taxation_energies.taux_reduit_grande_consommatrice + taxe = assiette * (taux + majoration) + + return taxe + + +class assiette_ticgn(Variable): + value_type = float + entity = Etablissement + definition_period = YEAR + label = "Tax on gas consumption - TICGN" + reference = "https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006615168/1992-12-31/" # + + def formula_1986_01_01(etablissement, period, parameters): + """ + Taxe sur la consommation de gaz naturel. + TODO: + Le gaz consommé : + - comme matière première + - comme combustible pour la fabrication d'huiles minérales + - à destination du chauffage des immeubles d'habitation + est exonéré. + """ + + conso = etablissement("consommation_gaz_naturel", period) + + return conso + + def formula_2007_01_01(etablissement, period, parameters): + """ + (en plus de précédemment,) + TODO: + Le gaz utilisé pour la production d'électricité est exonéré. + -> séparer les types de consommations dans ../energy_consumption/ + """ + + conso = etablissement("consommation_gaz_naturel", period) + + return conso + + def formula_2008_04_01(etablissement, period, parameters): + """ + [à noter : plus de seuil ni d'abattement] + TODO: + Le gaz consommé : + - autrement que comme combustible + - à un double usage + - dans un procédé de fabrication de produits minéraux non métalliques + - dans les conditions prévues au III de l'article 265 C du CDD + - pour la production d'électricité + * sauf pour les installations visées à l'article 266 quinquies A + ++ sauf quand celles-ci ne bénéficient pas d'un tarif d'achat d'électricité dans le cadre l'article 10 de la loi n° 2000-108 du 10 février 2000 + - pour les besoins de l'extraction et de la production de gaz naturel + - pour la consommation des particuliers + - pour la consommation des autorités régionales et locales ou des autres organismes de droit public pour les activités ou opérations qu'ils accomplissent en tant qu'autorités publiques jusqu'au 1er janvier 2009 + """ + + conso = etablissement("consommation_gaz_naturel", period) + + return conso + + def formula_2009_01_01(etablissement, period, parameters): + """ + TODO: + (par rapport à précédemment, ) + la consommation des autorités régionales et locales ou des autres organismes de droit public pour les activités ou opérations qu'ils accomplissent en tant qu'autorités publiques + n'est plus exonérée à partir du 1er janvier 2009. + """ + + conso = etablissement("consommation_gaz_naturel", period) + + return conso + + def formula_2011_01_01(etablissement, period, parameters): + """ + TODO: + (par rapport à précédemment, ) + la consommation du gaz utilisé pour la production d'électricité par les petits producteurs d'électricité au sens du 4° du V de l'article L. 3333-2 du code général des collectivités territoriales. + n'est plus exonérée à partir du 1er janvier 2011. + """ + + conso = etablissement("consommation_gaz_naturel", period) + + return conso + + def formula_2019_01_01(etablissement, period, parameters): + """ + TODO: + (par rapport à précédemment, ) + Le tarif de la taxe applicable au produit consommé pour déshydrater les légumes et plantes aromatiques, autres que les pommes de terres, les champignons et les truffes, par les entreprises pour lesquelles cette consommation est supérieure à 800 wattheures par euro de valeur ajoutée, est fixé à 1,6 € par mégawattheure. + """ + + conso = etablissement("consommation_gaz_naturel", period) + + return conso + + def formula_2020_01_01(etablissement, period, parameters): + """ + TODO: + (par rapport à précédemment, ) + Réintégration des usages carburants dans le champ de la TICGN ? + https://www.legifrance.gouv.fr/codes/section_lc/LEGITEXT000006071570/LEGISCTA000006122062/1993-01-01/?anchor=LEGIARTI000006615168#LEGIARTI000006615168 + """ + + conso = etablissement("consommation_gaz_naturel", period) + + return conso + + +class taxe_interieure_consommation_gaz_naturel_ifp(Variable): + value_type = float + entity = Etablissement + definition_period = YEAR + label = "Tax on gas consumption for the benefit of the French Institute for Petroleum" + reference = "" # Always use the most official source + + def formula(etablissement, period, parameters): + """ + Income tax. + + The formula to compute the income tax for a given etablissement at a given period + """ + + return etablissement("consommation_gaz_naturel", period) * parameters(period).taxation_energies.natural_gas diff --git a/pyproject.toml b/pyproject.toml index 83ccbdf..b2d2cf2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "openfisca_france_firms" -version = "0.0.1" -description = "OpenFisca Rules as Code model for France Firms." +version = "1.0.0" +description = "OpenFisca Rules as Code model for France UniteLegales." readme = "README.md" keywords = ["microsimulation", "tax", "benefit", "rac", "rules-as-code"] authors = []