diff --git a/policyengine_uk/data/dataset_schema.py b/policyengine_uk/data/dataset_schema.py index 1c65194e2..675bef0a0 100644 --- a/policyengine_uk/data/dataset_schema.py +++ b/policyengine_uk/data/dataset_schema.py @@ -1,4 +1,5 @@ import pandas as pd +from policyengine_uk import Microsimulation class UKDataset: @@ -19,6 +20,7 @@ def __init__( self.person = f["person"] self.benunit = f["benunit"] self.household = f["household"] + self.time_period = f["time_period"].iloc[0] else: if person is None or benunit is None or household is None: raise ValueError( @@ -39,6 +41,7 @@ def save(self, file_path: str): f.put( "household", self.household, format="table", data_columns=True ) + f.put("time_period", pd.Series([self.time_period]), format="table") def load(self): data = {} @@ -54,3 +57,25 @@ def copy(self): benunit=self.benunit.copy(), household=self.household.copy(), ) + + @staticmethod + def from_simulation(simulation: Microsimulation, fiscal_year: int = 2025): + entity_dfs = {} + + for entity in ["person", "benunit", "household"]: + input_variables = [ + variable + for variable in simulation.input_variables + if simulation.tax_benefit_system.variables[variable].entity.key + == entity + ] + entity_dfs[entity] = simulation.calculate_dataframe( + input_variables, period=fiscal_year + ) + + return UKDataset( + person=entity_dfs["person"], + benunit=entity_dfs["benunit"], + household=entity_dfs["household"], + fiscal_year=fiscal_year, + ) diff --git a/policyengine_uk/variables/gov/dfe/free_school_fruit_veg.py b/policyengine_uk/variables/gov/dfe/free_school_fruit_veg.py new file mode 100644 index 000000000..874f05ae7 --- /dev/null +++ b/policyengine_uk/variables/gov/dfe/free_school_fruit_veg.py @@ -0,0 +1,9 @@ +from policyengine_uk.model_api import * + + +class free_school_fruit_veg(Variable): + label = "free school fruit and vegetables" + entity = Person + definition_period = YEAR + value_type = float + unit = GBP diff --git a/policyengine_uk/variables/gov/dfe/free_school_meals.py b/policyengine_uk/variables/gov/dfe/free_school_meals.py new file mode 100644 index 000000000..c600b8f7a --- /dev/null +++ b/policyengine_uk/variables/gov/dfe/free_school_meals.py @@ -0,0 +1,9 @@ +from policyengine_uk.model_api import * + + +class free_school_meals(Variable): + label = "free school meals" + entity = Person + definition_period = YEAR + value_type = float + unit = GBP diff --git a/policyengine_uk/variables/gov/dfe/free_school_milk.py b/policyengine_uk/variables/gov/dfe/free_school_milk.py new file mode 100644 index 000000000..434a548b5 --- /dev/null +++ b/policyengine_uk/variables/gov/dfe/free_school_milk.py @@ -0,0 +1,9 @@ +from policyengine_uk.model_api import * + + +class free_school_milk(Variable): + label = "free school milk" + entity = Person + definition_period = YEAR + value_type = float + unit = GBP diff --git a/policyengine_uk/variables/household/income/hbai_household_net_income.py b/policyengine_uk/variables/household/income/hbai_household_net_income.py index 569c6efb3..9605f5200 100644 --- a/policyengine_uk/variables/household/income/hbai_household_net_income.py +++ b/policyengine_uk/variables/household/income/hbai_household_net_income.py @@ -12,7 +12,15 @@ class hbai_household_net_income(Variable): definition_period = YEAR adds = [ - "household_market_income", + "employment_income", + "self_employment_income", + "savings_interest_income", + "dividend_income", + "miscellaneous_income", + "property_income", + "private_pension_income", + "private_transfer_income", + "maintenance_income", "child_benefit", "esa_income", "esa_contrib", @@ -43,6 +51,10 @@ class hbai_household_net_income(Variable): "cost_of_living_support_payment", "winter_fuel_allowance", "tax_free_childcare", + "free_school_meals", + "free_school_fruit_veg", + "free_school_milk", + "tv_licence_discount", # Reference for tax-free-childcare: https://assets.publishing.service.gov.uk/media/5e7b191886650c744175d08b/households-below-average-income-1994-1995-2018-2019.pdf ] subtracts = [