diff --git a/devtools/debug-ferc1-etl.ipynb b/devtools/debug-ferc1-etl.ipynb index 3b633f7582..1b179ea812 100644 --- a/devtools/debug-ferc1-etl.ipynb +++ b/devtools/debug-ferc1-etl.ipynb @@ -99,7 +99,7 @@ }, "outputs": [], "source": [ - "ferc1_xbrl_raw_dfs[\"core_ferc1__yearly_fuel\"][\"duration\"].report_year" + "ferc1_xbrl_raw_dfs[\"core_ferc1__yearly_steam_plants_fuel_sched402\"][\"duration\"].report_year" ] }, { @@ -206,7 +206,7 @@ "metadata": {}, "outputs": [], "source": [ - "table_name = \"core_ferc1__yearly_other_regulatory_liabilities\"\n", + "table_name = \"core_ferc1__yearly_other_regulatory_liabilities_sched278\"\n", "TRANSFORMER = transformers[table_name] # add a table here" ] }, @@ -326,8 +326,8 @@ "source": [ "transformed_tables = {}\n", "for table_name, transformer in transformers.items():\n", - " if table_name == \"core_ferc1__yearly_plants_steam\":\n", - " # core_ferc1__yearly_plants_steam is a special case. It depends on the transformed core_ferc1__yearly_fuel table.\n", + " if table_name == \"core_ferc1__yearly_steam_plants_sched402\":\n", + " # core_ferc1__yearly_steam_plants_sched402 is a special case. It depends on the transformed core_ferc1__yearly_steam_plants_fuel_sched402 table.\n", " continue\n", " transformed_tables[transformer.table_id.value] = transformer.transform(\n", " raw_dbf=ferc1_dbf_raw_dfs[transformer.table_id.value],\n", @@ -345,13 +345,13 @@ }, "outputs": [], "source": [ - "# Handle special case for \"core_ferc1__yearly_plants_steam\"\n", - "transformer = transformers[\"core_ferc1__yearly_plants_steam\"]\n", + "# Handle special case for \"core_ferc1__yearly_steam_plants_sched402\"\n", + "transformer = transformers[\"core_ferc1__yearly_steam_plants_sched402\"]\n", "transformed_tables[transformer.table_id.value] = transformer.transform(\n", " raw_dbf=ferc1_dbf_raw_dfs[transformer.table_id.value],\n", " raw_xbrl_instant=ferc1_xbrl_raw_dfs[transformer.table_id.value][\"instant\"],\n", " raw_xbrl_duration=ferc1_xbrl_raw_dfs[transformer.table_id.value][\"duration\"],\n", - " transformed_fuel=transformed_tables[\"core_ferc1__yearly_fuel\"],\n", + " transformed_fuel=transformed_tables[\"core_ferc1__yearly_steam_plants_fuel_sched402\"],\n", ")" ] } diff --git a/devtools/ferc1-eia-glue/training_data/create_FERC1-EIA_manual_mapping_spreadsheets.ipynb b/devtools/ferc1-eia-glue/training_data/create_FERC1-EIA_manual_mapping_spreadsheets.ipynb index c45e2e008f..c73ff0e8d9 100644 --- a/devtools/ferc1-eia-glue/training_data/create_FERC1-EIA_manual_mapping_spreadsheets.ipynb +++ b/devtools/ferc1-eia-glue/training_data/create_FERC1-EIA_manual_mapping_spreadsheets.ipynb @@ -43,7 +43,7 @@ "# Local libraries\n", "import pudl\n", "from pudl.workspace.setup import PudlPaths\n", - "from pudl.analysis.ferc1_eia_train import *" + "from pudl.analysis.eia_ferc1_train import *" ] }, { diff --git a/devtools/ferc1-eia-glue/training_data/validate_and_integrate_FERC1-EIA_manually_mapped_records.ipynb b/devtools/ferc1-eia-glue/training_data/validate_and_integrate_FERC1-EIA_manually_mapped_records.ipynb index 22149567ec..72a5b63e01 100644 --- a/devtools/ferc1-eia-glue/training_data/validate_and_integrate_FERC1-EIA_manually_mapped_records.ipynb +++ b/devtools/ferc1-eia-glue/training_data/validate_and_integrate_FERC1-EIA_manually_mapped_records.ipynb @@ -44,7 +44,7 @@ "# Local libraries\n", "import pudl\n", "from pudl.workspace.setup import PudlPaths\n", - "from pudl.analysis.ferc1_eia_train import *" + "from pudl.analysis.eia_ferc1_train import *" ] }, { @@ -188,7 +188,7 @@ "outputs": [], "source": [ "current_training_df = pd.read_csv(\n", - " importlib.resources.files(\"pudl.package_data.glue\").joinpath(\"ferc1_eia_train.csv\")\n", + " importlib.resources.files(\"pudl.package_data.glue\").joinpath(\"eia_ferc1_train.csv\")\n", ")\n", "path_to_overrides = \"./add_to_training/\"\n", "override_files = [\n", @@ -326,10 +326,10 @@ "# Get paths to CSVs.\n", "from importlib import resources\n", "one_to_many = path_to_one_to_many=resources.files(\"pudl.package_data.glue\").joinpath(\n", - " \"ferc1_eia_one_to_many.csv\",\n", + " \"eia_ferc1_one_to_many.csv\",\n", " )\n", "nulls = path_to_one_to_many=resources.files(\"pudl.package_data.glue\").joinpath(\n", - " \"ferc1_eia_null.csv\",\n", + " \"eia_ferc1_null.csv\",\n", " )" ] }, diff --git a/docs/release_notes.rst b/docs/release_notes.rst index 8f31a87267..bc71ef9190 100644 --- a/docs/release_notes.rst +++ b/docs/release_notes.rst @@ -84,31 +84,33 @@ Data Coverage To see which DBF and XBRL tables the following PUDL tables are derived from, refer to :py:const:`pudl.extract.ferc1.TABLE_NAME_MAP` - * :ref:`core_ferc1__yearly_electric_energy_sources`, see issue :issue:`1819` & PR + * :ref:`core_ferc1__yearly_energy_sources_sched401`, see issue :issue:`1819` & PR :pr:`2094`. - * :ref:`core_ferc1__yearly_electric_energy_dispositions`, see issue :issue:`1819` & + * :ref:`core_ferc1__yearly_energy_dispositions_sched401`, see issue :issue:`1819` & PR :pr:`2100`. - * :ref:`core_ferc1__yearly_transmission_statistics`, see issue :issue:`1822` & PR + * :ref:`core_ferc1__yearly_transmission_lines_sched422`, see issue :issue:`1822` & PR :pr:`2103` - * :ref:`core_ferc1__yearly_utility_plant_summary`, see issue :issue:`1806` & PR - :pr:`2105`. - * :ref:`core_ferc1__yearly_balance_sheet_assets`, see issue :issue:`1805` & PRs - :pr:`2112,2127`. - * :ref:`core_ferc1__yearly_balance_sheet_liabilities`, see issue :issue:`1810` & PR - :pr:`2134`. - * :ref:`core_ferc1__yearly_depreciation_amortization_summary`, see issue :issue:`1816` + * :ref:`core_ferc1__yearly_utility_plant_summary_sched200`, see issue + :issue:`1806` & PR :pr:`2105`. + * :ref:`core_ferc1__yearly_balance_sheet_assets_sched110`, see issue :issue:`1805` & + PRs :pr:`2112,2127`. + * :ref:`core_ferc1__yearly_balance_sheet_liabilities_sched110`, see issue + :issue:`1810` & PR :pr:`2134`. + * :ref:`core_ferc1__yearly_depreciation_summary_sched336`, see issue :issue:`1816` & PR :pr:`2143`. - * :ref:`core_ferc1__yearly_income_statement`, see issue :issue:`1813` & PR :pr:`2147`. - * :ref:`core_ferc1__yearly_electric_plant_depreciation_changes` see issue + * :ref:`core_ferc1__yearly_income_statements_sched114`, see issue :issue:`1813` & PR + :pr:`2147`. + * :ref:`core_ferc1__yearly_depreciation_changes_sched219` see issue :issue:`1808` & :pr:`2119`. - * :ref:`core_ferc1__yearly_electric_plant_depreciation_functional` see issue + * :ref:`core_ferc1__yearly_depreciation_by_function_sched219` see issue :issue:`1808` & PR :pr:`2183`. - * :ref:`core_ferc1__yearly_electric_operating_expenses`, see issue :issue:`1817` & PR + * :ref:`core_ferc1__yearly_operating_expenses_sched320`, see issue :issue:`1817` & PR :pr:`2162`. - * :ref:`core_ferc1__yearly_retained_earnings`, see issue :issue:`1811` & PR + * :ref:`core_ferc1__yearly_retained_earnings_sched118`, see issue :issue:`1811` & PR :pr:`2155`. - * :ref:`core_ferc1__yearly_cash_flow`, see issue :issue:`1821` & PR :pr:`2184` - * :ref:`core_ferc1__yearly_electricity_sales_by_rate_schedule`, see issue + * :ref:`core_ferc1__yearly_cash_flows_sched120`, see issue :issue:`1821` & PR + :pr:`2184`. + * :ref:`core_ferc1__yearly_sales_by_rate_schedules_sched304`, see issue :issue:`1823` & PR :pr:`2205`. * Harvested owner utilities from the EIA 860 ownership table which are now included in @@ -190,7 +192,7 @@ Data Coverage granularly connects EPA CAMD with EIA. Thanks to :user:`grgmiller` for his contribution to this process. See :issue:`2456` & :pr:`2491`. -* Added new table :ref:`out__yearly_plants_all_ferc1_plant_parts_eia` which links FERC1 +* Added new table :ref:`out_pudl__yearly_assn_eia_ferc1_plant_parts` which links FERC1 records from :ref:`out_ferc1__yearly_all_plants` and :ref:`out_eia__yearly_plant_parts`. @@ -228,27 +230,27 @@ Data Cleaning with boilers in the :ref:`core_eia__entity_boilers` table. See issue :issue:`2349` & PR :pr:`2362`. * Fixed column naming issues in the - :ref:`core_ferc1__yearly_electric_operating_revenues` table. + :ref:`core_ferc1__yearly_operating_revenues_sched300` table. * Made minor calculation fixes in the metadata for - :ref:`core_ferc1__yearly_income_statement`, - :ref:`core_ferc1__yearly_utility_plant_summary`, - :ref:`core_ferc1__yearly_electric_operating_revenues`, - :ref:`core_ferc1__yearly_balance_sheet_assets`, - :ref:`core_ferc1__yearly_balance_sheet_liabilities`, and - :ref:`core_ferc1__yearly_electric_operating_expenses`, - :ref:`core_ferc1__yearly_electric_plant_depreciation_changes` and - :ref:`core_ferc1__yearly_electric_plant_depreciation_functional`. See :issue:`2016`, + :ref:`core_ferc1__yearly_income_statements_sched114`, + :ref:`core_ferc1__yearly_utility_plant_summary_sched200`, + :ref:`core_ferc1__yearly_operating_revenues_sched300`, + :ref:`core_ferc1__yearly_balance_sheet_assets_sched110`, + :ref:`core_ferc1__yearly_balance_sheet_liabilities_sched110`, and + :ref:`core_ferc1__yearly_operating_expenses_sched320`, + :ref:`core_ferc1__yearly_depreciation_changes_sched219` and + :ref:`core_ferc1__yearly_depreciation_by_function_sched219`. See :issue:`2016`, :pr:`2563`, :pr:`2662` and :pr:`2687`. -* Changed the :ref:`core_ferc1__yearly_retained_earnings` table transform to restore - factoids for previous year balances, and added calculation metadata. See +* Changed the :ref:`core_ferc1__yearly_retained_earnings_sched118` table transform to + restore factoids for previous year balances, and added calculation metadata. See :issue:`1811`, :issue:`2016`, and :pr:`2645`. * Added "correction" records to many FERC Form 1 tables where the reported totals do not match the outcomes of calculations specified in XBRL metadata (even after cleaning up the often incorrect calculation specifications!). See :issue:`2957` and :pr:`2620`. * Flip the sign of some erroneous negative values in the - :ref:`core_ferc1__yearly_plant_in_service` and - :ref:`core_ferc1__yearly_utility_plant_summary` tables. See :issue:`2599`, and - :pr:`2647`. + :ref:`core_ferc1__yearly_plant_in_service_sched204` and + :ref:`core_ferc1__yearly_utility_plant_summary_sched200` tables. See + :issue:`2599`, and :pr:`2647`. Analysis ^^^^^^^^ diff --git a/migrations/versions/1fef7b82e48b_wipe_schema_and_ferc1_name_transition.py b/migrations/versions/1fef7b82e48b_wipe_schema_and_ferc1_name_transition.py new file mode 100644 index 0000000000..d43a703aa4 --- /dev/null +++ b/migrations/versions/1fef7b82e48b_wipe_schema_and_ferc1_name_transition.py @@ -0,0 +1,26851 @@ +"""wipe schema and FERC1 name transition + +Revision ID: 1fef7b82e48b +Revises: +Create Date: 2023-11-01 11:29:53.509898 + +""" +import sqlalchemy as sa +from alembic import op +from sqlalchemy.dialects import sqlite + +# revision identifiers, used by Alembic. +revision = "1fef7b82e48b" +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table( + "core_eia861__assn_balancing_authority", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "balancing_authority_id_eia", + sa.Integer(), + nullable=False, + comment="EIA balancing authority ID. This is often (but not always!) the same as the utility ID associated with the same legal entity.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "state", + sa.Text(), + nullable=False, + comment="Two letter US state abbreviation.", + ), + sa.PrimaryKeyConstraint( + "report_date", + "balancing_authority_id_eia", + "utility_id_eia", + "state", + name=op.f("pk_core_eia861__assn_balancing_authority"), + ), + ) + op.create_table( + "core_eia861__assn_utility", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "state", + sa.Text(), + nullable=False, + comment="Two letter US state abbreviation.", + ), + sa.PrimaryKeyConstraint( + "report_date", + "utility_id_eia", + "state", + name=op.f("pk_core_eia861__assn_utility"), + ), + ) + op.create_table( + "core_eia861__yearly_balancing_authority", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "balancing_authority_id_eia", + sa.Integer(), + nullable=False, + comment="EIA balancing authority ID. This is often (but not always!) the same as the utility ID associated with the same legal entity.", + ), + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "balancing_authority_name_eia", + sa.Text(), + nullable=True, + comment="Name of the balancing authority.", + ), + sa.PrimaryKeyConstraint( + "report_date", + "balancing_authority_id_eia", + name=op.f("pk_core_eia861__yearly_balancing_authority"), + ), + ) + op.create_table( + "core_eia__codes_averaging_periods", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_averaging_periods") + ), + ) + op.create_table( + "core_eia__codes_balancing_authorities", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_balancing_authorities") + ), + ) + op.create_table( + "core_eia__codes_boiler_generator_assn_types", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_boiler_generator_assn_types") + ), + ) + op.create_table( + "core_eia__codes_boiler_status", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_boiler_status")), + ) + op.create_table( + "core_eia__codes_boiler_types", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_boiler_types")), + ) + op.create_table( + "core_eia__codes_coalmine_types", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_coalmine_types")), + ) + op.create_table( + "core_eia__codes_contract_types", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_contract_types")), + ) + op.create_table( + "core_eia__codes_emission_control_equipment_types", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_emission_control_equipment_types") + ), + ) + op.create_table( + "core_eia__codes_energy_sources", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "fuel_units", + sa.Enum("barrels", "mcf", "mwh", "short_tons"), + nullable=True, + comment="Reported unit of measure for fuel.", + ), + sa.Column( + "min_fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Minimum heat content per physical unit of fuel in MMBtu.", + ), + sa.Column( + "max_fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Maximum heat content per physical unit of fuel in MMBtu.", + ), + sa.Column( + "fuel_group_eia", + sa.Enum("fossil", "other", "renewable"), + nullable=True, + comment="High level fuel group defined in the 2021-2023 EIA Form 860 instructions, Table 28.", + ), + sa.Column( + "fuel_derived_from", + sa.Enum("biomass", "coal", "gas", "other", "petroleum"), + nullable=True, + comment="Original fuel from which this refined fuel was derived.", + ), + sa.Column( + "fuel_phase", + sa.Enum("gas", "liquid", "solid"), + nullable=True, + comment="Physical phase of matter of the fuel.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_energy_sources")), + ) + op.create_table( + "core_eia__codes_environmental_equipment_manufacturers", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", + name=op.f("pk_core_eia__codes_environmental_equipment_manufacturers"), + ), + ) + op.create_table( + "core_eia__codes_firing_types", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_firing_types")), + ) + op.create_table( + "core_eia__codes_fuel_transportation_modes", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_fuel_transportation_modes") + ), + ) + op.create_table( + "core_eia__codes_fuel_types_aer", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_fuel_types_aer")), + ) + op.create_table( + "core_eia__codes_mercury_compliance_strategies", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_mercury_compliance_strategies") + ), + ) + op.create_table( + "core_eia__codes_momentary_interruptions", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_momentary_interruptions") + ), + ) + op.create_table( + "core_eia__codes_nox_compliance_strategies", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_nox_compliance_strategies") + ), + ) + op.create_table( + "core_eia__codes_nox_control_status", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_nox_control_status") + ), + ) + op.create_table( + "core_eia__codes_nox_units", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_nox_units")), + ) + op.create_table( + "core_eia__codes_operational_status", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_operational_status") + ), + ) + op.create_table( + "core_eia__codes_particulate_compliance_strategies", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_particulate_compliance_strategies") + ), + ) + op.create_table( + "core_eia__codes_particulate_units", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_particulate_units") + ), + ) + op.create_table( + "core_eia__codes_prime_movers", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_prime_movers")), + ) + op.create_table( + "core_eia__codes_regulations", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_regulations")), + ) + op.create_table( + "core_eia__codes_reporting_frequencies", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_reporting_frequencies") + ), + ) + op.create_table( + "core_eia__codes_sector_consolidated", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_sector_consolidated") + ), + ) + op.create_table( + "core_eia__codes_so2_compliance_strategies", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_so2_compliance_strategies") + ), + ) + op.create_table( + "core_eia__codes_so2_units", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_so2_units")), + ) + op.create_table( + "core_eia__codes_steam_plant_types", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_eia__codes_steam_plant_types") + ), + ) + op.create_table( + "core_eia__codes_wet_dry_bottom", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint("code", name=op.f("pk_core_eia__codes_wet_dry_bottom")), + ) + op.create_table( + "core_eia__entity_plants", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column("city", sa.Text(), nullable=True), + sa.Column("county", sa.Text(), nullable=True, comment="County name."), + sa.Column( + "latitude", + sa.Float(), + nullable=True, + comment="Latitude of the plant's location, in degrees.", + ), + sa.Column( + "longitude", + sa.Float(), + nullable=True, + comment="Longitude of the plant's location, in degrees.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("street_address", sa.Text(), nullable=True), + sa.Column( + "zip_code", sa.Text(), nullable=True, comment="Five digit US Zip Code." + ), + sa.Column( + "timezone", + sa.Enum( + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Timbuktu", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/ComodRivadavia", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Atka", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Coral_Harbour", + "America/Cordoba", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Ensenada", + "America/Fort_Nelson", + "America/Fort_Wayne", + "America/Fortaleza", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indianapolis", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Jujuy", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Knox_IN", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Louisville", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Mendoza", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montreal", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nipigon", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Nuuk", + "America/Ojinaga", + "America/Panama", + "America/Pangnirtung", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Acre", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Rosario", + "America/Santa_Isabel", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Shiprock", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Thunder_Bay", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Virgin", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "America/Yellowknife", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/South_Pole", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Ashkhabad", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Calcutta", + "Asia/Chita", + "Asia/Choibalsan", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Colombo", + "Asia/Dacca", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Harbin", + "Asia/Hebron", + "Asia/Ho_Chi_Minh", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Istanbul", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kashgar", + "Asia/Kathmandu", + "Asia/Katmandu", + "Asia/Khandyga", + "Asia/Kolkata", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macao", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Rangoon", + "Asia/Riyadh", + "Asia/Saigon", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Tel_Aviv", + "Asia/Thimbu", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ujung_Pandang", + "Asia/Ulaanbaatar", + "Asia/Ulan_Bator", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yangon", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faeroe", + "Atlantic/Faroe", + "Atlantic/Jan_Mayen", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/ACT", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Canberra", + "Australia/Currie", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/LHI", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/NSW", + "Australia/North", + "Australia/Perth", + "Australia/Queensland", + "Australia/South", + "Australia/Sydney", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/West", + "Australia/Yancowinna", + "Brazil/Acre", + "Brazil/DeNoronha", + "Brazil/East", + "Brazil/West", + "CET", + "CST6CDT", + "Canada/Atlantic", + "Canada/Central", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Canada/Saskatchewan", + "Canada/Yukon", + "Chile/Continental", + "Chile/EasterIsland", + "Cuba", + "EET", + "EST", + "EST5EDT", + "Egypt", + "Eire", + "Etc/GMT", + "Etc/GMT+0", + "Etc/GMT+1", + "Etc/GMT+10", + "Etc/GMT+11", + "Etc/GMT+12", + "Etc/GMT+2", + "Etc/GMT+3", + "Etc/GMT+4", + "Etc/GMT+5", + "Etc/GMT+6", + "Etc/GMT+7", + "Etc/GMT+8", + "Etc/GMT+9", + "Etc/GMT-0", + "Etc/GMT-1", + "Etc/GMT-10", + "Etc/GMT-11", + "Etc/GMT-12", + "Etc/GMT-13", + "Etc/GMT-14", + "Etc/GMT-2", + "Etc/GMT-3", + "Etc/GMT-4", + "Etc/GMT-5", + "Etc/GMT-6", + "Etc/GMT-7", + "Etc/GMT-8", + "Etc/GMT-9", + "Etc/GMT0", + "Etc/Greenwich", + "Etc/UCT", + "Etc/UTC", + "Etc/Universal", + "Etc/Zulu", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belfast", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kiev", + "Europe/Kirov", + "Europe/Kyiv", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Nicosia", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Tiraspol", + "Europe/Ulyanovsk", + "Europe/Uzhgorod", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zaporozhye", + "Europe/Zurich", + "GB", + "GB-Eire", + "GMT", + "GMT+0", + "GMT-0", + "GMT0", + "Greenwich", + "HST", + "Hongkong", + "Iceland", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Iran", + "Israel", + "Jamaica", + "Japan", + "Kwajalein", + "Libya", + "MET", + "MST", + "MST7MDT", + "Mexico/BajaNorte", + "Mexico/BajaSur", + "Mexico/General", + "NZ", + "NZ-CHAT", + "Navajo", + "PRC", + "PST8PDT", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Chuuk", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Enderbury", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Johnston", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Pohnpei", + "Pacific/Ponape", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Samoa", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Truk", + "Pacific/Wake", + "Pacific/Wallis", + "Pacific/Yap", + "Poland", + "Portugal", + "ROC", + "ROK", + "Singapore", + "Turkey", + "UCT", + "US/Alaska", + "US/Aleutian", + "US/Arizona", + "US/Central", + "US/East-Indiana", + "US/Eastern", + "US/Hawaii", + "US/Indiana-Starke", + "US/Michigan", + "US/Mountain", + "US/Pacific", + "US/Samoa", + "UTC", + "Universal", + "W-SU", + "WET", + "Zulu", + ), + nullable=True, + comment="IANA timezone name", + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", name=op.f("pk_core_eia__entity_plants") + ), + ) + op.create_table( + "core_eia__entity_utilities", + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.PrimaryKeyConstraint( + "utility_id_eia", name=op.f("pk_core_eia__entity_utilities") + ), + ) + op.create_table( + "core_eia__yearly_fuel_receipts_costs_aggs", + sa.Column( + "fuel_agg", + sa.Text(), + nullable=False, + comment="Category of fuel aggregation in EIA bulk electricity data.", + ), + sa.Column( + "geo_agg", + sa.Text(), + nullable=False, + comment="Category of geographic aggregation in EIA bulk electricity data.", + ), + sa.Column( + "sector_agg", + sa.Text(), + nullable=False, + comment="Category of sectoral aggregation in EIA bulk electricity data.", + ), + sa.Column( + "temporal_agg", + sa.Text(), + nullable=False, + comment="Category of temporal aggregation in EIA bulk electricity data.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "fuel_received_mmbtu", + sa.Float(), + nullable=True, + comment="Aggregated fuel receipts, in MMBtu, in EIA bulk electricity data.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.PrimaryKeyConstraint( + "fuel_agg", + "geo_agg", + "sector_agg", + "temporal_agg", + "report_date", + name=op.f("pk_core_eia__yearly_fuel_receipts_costs_aggs"), + ), + ) + op.create_table( + "core_epa__assn_epacamd_eia_subplant_ids", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_epa", + sa.Integer(), + nullable=True, + comment="The ORISPL ID used by EPA to refer to the plant. Usually but not always the same as plant_id_eia.", + ), + sa.Column( + "subplant_id", + sa.Integer(), + nullable=True, + comment="Sub-plant ID links EPA CEMS emissions units to EIA units.", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "emissions_unit_id_epa", + sa.Text(), + nullable=True, + comment="Emissions (smokestack) unit monitored by EPA CEMS.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=True, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + ) + op.create_table( + "core_ferc1__codes_power_purchase_types", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "label", + sa.Text(), + nullable=True, + comment="Longer human-readable code using snake_case", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_ferc1__codes_power_purchase_types") + ), + ) + op.create_table( + "core_ferc714__respondent_id", + sa.Column("respondent_id_ferc714", sa.Integer(), nullable=False), + sa.Column("respondent_name_ferc714", sa.Text(), nullable=True), + sa.Column("eia_code", sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint( + "respondent_id_ferc714", name=op.f("pk_core_ferc714__respondent_id") + ), + ) + op.create_table( + "core_ferc__codes_accounts", + sa.Column( + "ferc_account_id", + sa.Text(), + nullable=False, + comment="Account identifier from FERC's Uniform System of Accounts for Electric Plant. Includes higher level labeled categories.", + ), + sa.Column("ferc_account_description", sa.Text(), nullable=True), + sa.PrimaryKeyConstraint( + "ferc_account_id", name=op.f("pk_core_ferc__codes_accounts") + ), + ) + op.create_table( + "core_pudl__codes_data_maturities", + sa.Column( + "code", sa.Text(), nullable=False, comment="Originally reported short code." + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.PrimaryKeyConstraint( + "code", name=op.f("pk_core_pudl__codes_data_maturities") + ), + ) + op.create_table( + "core_pudl__codes_datasources", + sa.Column( + "datasource", + sa.Enum( + "censusdp1tract", + "eia176", + "eia860", + "eia860m", + "eia861", + "eia923", + "eia_bulk_elec", + "eiawater", + "epacems", + "core_epa__assn_epacamd_eia", + "ferc1", + "ferc2", + "ferc6", + "ferc60", + "ferc714", + "ferceqr", + "mshamines", + "phmsagas", + "pudl", + ), + nullable=False, + comment="Code identifying a dataset available within PUDL.", + ), + sa.Column( + "partitions", + sa.Text(), + nullable=True, + comment="The data parititions used to generate this instance of the database.", + ), + sa.Column( + "doi", + sa.Text(), + nullable=True, + comment="Unique digitial object identifier of Zenodo archive.", + ), + sa.Column( + "pudl_version", + sa.Text(), + nullable=True, + comment="The version of PUDL used to generate this database.", + ), + sa.PrimaryKeyConstraint( + "datasource", name=op.f("pk_core_pudl__codes_datasources") + ), + ) + op.create_table( + "core_pudl__codes_subdivisions", + sa.Column( + "country_code", + sa.Enum("USA", "CAN"), + nullable=False, + comment="Three letter ISO-3166 country code (e.g. USA or CAN).", + ), + sa.Column( + "country_name", + sa.Text(), + nullable=True, + comment="Full country name (e.g. United States of America).", + ), + sa.Column( + "subdivision_code", + sa.Enum( + "AS", + "ID", + "UT", + "IL", + "OH", + "AL", + "KY", + "NH", + "NT", + "ND", + "KS", + "MN", + "MI", + "OR", + "CO", + "QC", + "AB", + "MP", + "WI", + "BC", + "AZ", + "SD", + "RI", + "ME", + "MO", + "NC", + "GA", + "YT", + "ON", + "CA", + "DE", + "FL", + "NE", + "NM", + "VA", + "WA", + "NJ", + "DC", + "MS", + "GU", + "WV", + "CT", + "AK", + "WY", + "TN", + "TX", + "PR", + "SC", + "MD", + "IN", + "NB", + "NS", + "LA", + "OK", + "SK", + "VI", + "NV", + "MT", + "IA", + "NY", + "PA", + "MB", + "MA", + "VT", + "AR", + "PE", + "NU", + "HI", + "NL", + ), + nullable=False, + comment="Two-letter ISO-3166 political subdivision code (e.g. US state or Canadian provice abbreviations like CA or AB).", + ), + sa.Column( + "subdivision_name", + sa.Text(), + nullable=True, + comment="Full name of political subdivision (e.g. US state or Canadian province names like California or Alberta.", + ), + sa.Column( + "subdivision_type", + sa.Text(), + nullable=True, + comment="ISO-3166 political subdivision type. E.g. state, province, outlying_area.", + ), + sa.Column( + "timezone_approx", + sa.Enum( + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Timbuktu", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/ComodRivadavia", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Atka", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Coral_Harbour", + "America/Cordoba", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Ensenada", + "America/Fort_Nelson", + "America/Fort_Wayne", + "America/Fortaleza", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indianapolis", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Jujuy", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Knox_IN", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Louisville", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Mendoza", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montreal", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nipigon", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Nuuk", + "America/Ojinaga", + "America/Panama", + "America/Pangnirtung", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Acre", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Rosario", + "America/Santa_Isabel", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Shiprock", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Thunder_Bay", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Virgin", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "America/Yellowknife", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/South_Pole", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Ashkhabad", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Calcutta", + "Asia/Chita", + "Asia/Choibalsan", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Colombo", + "Asia/Dacca", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Harbin", + "Asia/Hebron", + "Asia/Ho_Chi_Minh", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Istanbul", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kashgar", + "Asia/Kathmandu", + "Asia/Katmandu", + "Asia/Khandyga", + "Asia/Kolkata", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macao", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Rangoon", + "Asia/Riyadh", + "Asia/Saigon", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Tel_Aviv", + "Asia/Thimbu", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ujung_Pandang", + "Asia/Ulaanbaatar", + "Asia/Ulan_Bator", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yangon", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faeroe", + "Atlantic/Faroe", + "Atlantic/Jan_Mayen", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/ACT", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Canberra", + "Australia/Currie", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/LHI", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/NSW", + "Australia/North", + "Australia/Perth", + "Australia/Queensland", + "Australia/South", + "Australia/Sydney", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/West", + "Australia/Yancowinna", + "Brazil/Acre", + "Brazil/DeNoronha", + "Brazil/East", + "Brazil/West", + "CET", + "CST6CDT", + "Canada/Atlantic", + "Canada/Central", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Canada/Saskatchewan", + "Canada/Yukon", + "Chile/Continental", + "Chile/EasterIsland", + "Cuba", + "EET", + "EST", + "EST5EDT", + "Egypt", + "Eire", + "Etc/GMT", + "Etc/GMT+0", + "Etc/GMT+1", + "Etc/GMT+10", + "Etc/GMT+11", + "Etc/GMT+12", + "Etc/GMT+2", + "Etc/GMT+3", + "Etc/GMT+4", + "Etc/GMT+5", + "Etc/GMT+6", + "Etc/GMT+7", + "Etc/GMT+8", + "Etc/GMT+9", + "Etc/GMT-0", + "Etc/GMT-1", + "Etc/GMT-10", + "Etc/GMT-11", + "Etc/GMT-12", + "Etc/GMT-13", + "Etc/GMT-14", + "Etc/GMT-2", + "Etc/GMT-3", + "Etc/GMT-4", + "Etc/GMT-5", + "Etc/GMT-6", + "Etc/GMT-7", + "Etc/GMT-8", + "Etc/GMT-9", + "Etc/GMT0", + "Etc/Greenwich", + "Etc/UCT", + "Etc/UTC", + "Etc/Universal", + "Etc/Zulu", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belfast", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kiev", + "Europe/Kirov", + "Europe/Kyiv", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Nicosia", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Tiraspol", + "Europe/Ulyanovsk", + "Europe/Uzhgorod", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zaporozhye", + "Europe/Zurich", + "GB", + "GB-Eire", + "GMT", + "GMT+0", + "GMT-0", + "GMT0", + "Greenwich", + "HST", + "Hongkong", + "Iceland", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Iran", + "Israel", + "Jamaica", + "Japan", + "Kwajalein", + "Libya", + "MET", + "MST", + "MST7MDT", + "Mexico/BajaNorte", + "Mexico/BajaSur", + "Mexico/General", + "NZ", + "NZ-CHAT", + "Navajo", + "PRC", + "PST8PDT", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Chuuk", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Enderbury", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Johnston", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Pohnpei", + "Pacific/Ponape", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Samoa", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Truk", + "Pacific/Wake", + "Pacific/Wallis", + "Pacific/Yap", + "Poland", + "Portugal", + "ROC", + "ROK", + "Singapore", + "Turkey", + "UCT", + "US/Alaska", + "US/Aleutian", + "US/Arizona", + "US/Central", + "US/East-Indiana", + "US/Eastern", + "US/Hawaii", + "US/Indiana-Starke", + "US/Michigan", + "US/Mountain", + "US/Pacific", + "US/Samoa", + "UTC", + "Universal", + "W-SU", + "WET", + "Zulu", + ), + nullable=True, + comment="IANA timezone name of the timezone which encompasses the largest portion of the population in the associated geographic area.", + ), + sa.Column( + "state_id_fips", + sa.Text(), + nullable=True, + comment="Two digit state FIPS code.", + ), + sa.Column( + "division_name_us_census", + sa.Text(), + nullable=True, + comment="Longer human readable name describing the US Census division.", + ), + sa.Column( + "division_code_us_census", + sa.Enum( + "ESC", "MTN", "PCN", "ENC", "SAT", "PCC", "WNC", "MAT", "NEW", "WSC" + ), + nullable=True, + comment="Three-letter US Census division code as it appears in the bulk electricity data published by the EIA. Note that EIA splits the Pacific division into distinct contiguous (CA, OR, WA) and non-contiguous (AK, HI) states. For reference see this US Census region and division map: https://www2.census.gov/geo/pdfs/maps-data/maps/reference/us_regdiv.pdf", + ), + sa.Column( + "region_name_us_census", + sa.Text(), + nullable=True, + comment="Human-readable name of a US Census region.", + ), + sa.Column( + "is_epacems_state", + sa.Boolean(), + nullable=True, + comment="Indicates whether the associated state reports data within the EPA's Continuous Emissions Monitoring System.", + ), + sa.PrimaryKeyConstraint( + "country_code", + "subdivision_code", + name=op.f("pk_core_pudl__codes_subdivisions"), + ), + ) + op.create_table( + "core_pudl__entity_plants_pudl", + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=False, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "plant_name_pudl", + sa.Text(), + nullable=True, + comment="Plant name, chosen arbitrarily from the several possible plant names available in the plant matching process. Included for human readability only.", + ), + sa.PrimaryKeyConstraint( + "plant_id_pudl", name=op.f("pk_core_pudl__entity_plants_pudl") + ), + ) + op.create_table( + "core_pudl__entity_utilities_pudl", + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=False, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_pudl", + sa.Text(), + nullable=True, + comment="Utility name, chosen arbitrarily from the several possible utility names available in the utility matching process. Included for human readability only.", + ), + sa.PrimaryKeyConstraint( + "utility_id_pudl", name=op.f("pk_core_pudl__entity_utilities_pudl") + ), + ) + op.create_table( + "out_eia861__compiled_geometry_balancing_authorities", + sa.Column( + "county_id_fips", + sa.Text(), + nullable=False, + comment="County ID from the Federal Information Processing Standard Publication 6-4.", + ), + sa.Column( + "county_name_census", + sa.Text(), + nullable=True, + comment="County name as specified in Census DP1 Data.", + ), + sa.Column( + "population", + sa.Float(), + nullable=True, + comment="County population, sourced from Census DP1 data.", + ), + sa.Column("area_km2", sa.Float(), nullable=True, comment="County area in km2."), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "balancing_authority_id_eia", + sa.Integer(), + nullable=False, + comment="EIA balancing authority ID. This is often (but not always!) the same as the utility ID associated with the same legal entity.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("county", sa.Text(), nullable=False, comment="County name."), + sa.Column( + "state_id_fips", + sa.Text(), + nullable=True, + comment="Two digit state FIPS code.", + ), + sa.PrimaryKeyConstraint( + "balancing_authority_id_eia", + "report_date", + "county_id_fips", + "county", + name=op.f("pk_out_eia861__compiled_geometry_balancing_authorities"), + ), + ) + op.create_table( + "out_eia861__compiled_geometry_utilities", + sa.Column( + "county_id_fips", + sa.Text(), + nullable=False, + comment="County ID from the Federal Information Processing Standard Publication 6-4.", + ), + sa.Column( + "county_name_census", + sa.Text(), + nullable=True, + comment="County name as specified in Census DP1 Data.", + ), + sa.Column( + "population", + sa.Float(), + nullable=True, + comment="County population, sourced from Census DP1 data.", + ), + sa.Column("area_km2", sa.Float(), nullable=True, comment="County area in km2."), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("county", sa.Text(), nullable=True, comment="County name."), + sa.Column( + "state_id_fips", + sa.Text(), + nullable=True, + comment="Two digit state FIPS code.", + ), + sa.PrimaryKeyConstraint( + "utility_id_eia", + "report_date", + "county_id_fips", + name=op.f("pk_out_eia861__compiled_geometry_utilities"), + ), + ) + op.create_table( + "out_ferc714__hourly_predicted_state_demand", + sa.Column( + "state_id_fips", + sa.Text(), + nullable=False, + comment="Two digit state FIPS code.", + ), + sa.Column("utc_datetime", sqlite.DATETIME(), nullable=False), + sa.Column("demand_mwh", sa.Float(), nullable=True), + sa.Column( + "scaled_demand_mwh", + sa.Float(), + nullable=True, + comment="Estimated electricity demand scaled by the total sales within a state.", + ), + sa.PrimaryKeyConstraint( + "state_id_fips", + "utc_datetime", + name=op.f("pk_out_ferc714__hourly_predicted_state_demand"), + ), + ) + op.create_table( + "_out_eia__monthly_heat_rate_by_unit", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=False, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk__out_eia__monthly_heat_rate_by_unit_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "unit_id_pudl", + name=op.f("pk__out_eia__monthly_heat_rate_by_unit"), + ), + ) + op.create_table( + "core_eia860__scd_emissions_control_equipment", + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "emission_control_id_pudl", + sa.Float(), + nullable=False, + comment="A PUDL-generated ID used to distinguish emission control units in the same report year and plant id. This ID should not be used to track units over time or between plants.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.Column( + "emission_control_equipment_type_code", + sa.Text(), + nullable=True, + comment="Short code indicating the type of emission control equipment installed.", + ), + sa.Column( + "operational_status_code", + sa.Text(), + nullable=True, + comment="The operating status of the asset.", + ), + sa.Column( + "mercury_control_id_eia", + sa.Text(), + nullable=True, + comment="Mercury control identification number. This ID is not a unique identifier.", + ), + sa.Column( + "nox_control_id_eia", + sa.Text(), + nullable=True, + comment="Nitrogen oxide control identification number. This ID is not a unique identifier.", + ), + sa.Column( + "particulate_control_id_eia", + sa.Text(), + nullable=True, + comment="Particulate matter control identification number. This ID is not a unique identifier.", + ), + sa.Column( + "so2_control_id_eia", + sa.Text(), + nullable=True, + comment="Sulfur dioxide control identification number. This ID is not a unique identifier.", + ), + sa.Column( + "acid_gas_control", + sa.Boolean(), + nullable=True, + comment="Indicates whether the emissions control equipment controls acid (HCl) gas.", + ), + sa.Column( + "emission_control_equipment_cost", + sa.Float(), + nullable=True, + comment="The total cost to install a piece of emission control equipment.", + ), + sa.Column( + "emission_control_operating_date", + sa.Date(), + nullable=True, + comment="The date a piece of emissions control equipment began operating. Derived from month and year columns in the raw data.", + ), + sa.Column( + "emission_control_retirement_date", + sa.Date(), + nullable=True, + comment="The expected or actual retirement date for a piece of emissions control equipment. Derived from month and year columns in the raw data.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia860__scd_emissions_control_equipment_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["emission_control_equipment_type_code"], + ["core_eia__codes_emission_control_equipment_types.code"], + name=op.f( + "fk_core_eia860__scd_emissions_control_equipment_emission_control_equipment_type_code_core_eia__codes_emission_control_equipment_types" + ), + ), + sa.ForeignKeyConstraint( + ["operational_status_code"], + ["core_eia__codes_operational_status.code"], + name=op.f( + "fk_core_eia860__scd_emissions_control_equipment_operational_status_code_core_eia__codes_operational_status" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_core_eia860__scd_emissions_control_equipment_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.PrimaryKeyConstraint( + "report_year", + "plant_id_eia", + "emission_control_id_pudl", + name=op.f("pk_core_eia860__scd_emissions_control_equipment"), + ), + ) + op.create_table( + "core_eia860__scd_utilities", + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column("street_address", sa.Text(), nullable=True), + sa.Column("city", sa.Text(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "zip_code", sa.Text(), nullable=True, comment="Five digit US Zip Code." + ), + sa.Column( + "plants_reported_owner", + sa.Boolean(), + nullable=True, + comment="Is the reporting entity an owner of power plants reported on Schedule 2 of the form?", + ), + sa.Column( + "plants_reported_operator", + sa.Boolean(), + nullable=True, + comment="Is the reporting entity an operator of power plants reported on Schedule 2 of the form?", + ), + sa.Column( + "plants_reported_asset_manager", + sa.Boolean(), + nullable=True, + comment="Is the reporting entity an asset manager of power plants reported on Schedule 2 of the form?", + ), + sa.Column( + "plants_reported_other_relationship", + sa.Boolean(), + nullable=True, + comment="Does the reporting entity have any other relationship to the power plants reported on Schedule 2 of the form?", + ), + sa.Column( + "entity_type", + sa.Text(), + nullable=True, + comment="Entity type of principal owner.", + ), + sa.Column("attention_line", sa.Text(), nullable=True), + sa.Column("address_2", sa.Text(), nullable=True), + sa.Column( + "zip_code_4", + sa.Text(), + nullable=True, + comment="Four digit US Zip Code suffix.", + ), + sa.Column( + "contact_firstname", + sa.Text(), + nullable=True, + comment="First name of utility contact 1.", + ), + sa.Column( + "contact_lastname", + sa.Text(), + nullable=True, + comment="Last name of utility contact 1.", + ), + sa.Column( + "contact_title", + sa.Text(), + nullable=True, + comment="Title of of utility contact 1.", + ), + sa.Column( + "phone_number", + sa.Text(), + nullable=True, + comment="Phone number for utility contact 1.", + ), + sa.Column( + "phone_extension", + sa.Text(), + nullable=True, + comment="Phone extension for utility contact 1", + ), + sa.Column( + "contact_firstname_2", + sa.Text(), + nullable=True, + comment="First name of utility contact 2.", + ), + sa.Column( + "contact_lastname_2", + sa.Text(), + nullable=True, + comment="Last name of utility contact 2.", + ), + sa.Column( + "contact_title_2", + sa.Text(), + nullable=True, + comment="Title of utility contact 2.", + ), + sa.Column( + "phone_number_2", + sa.Text(), + nullable=True, + comment="Phone number for utility contact 2.", + ), + sa.Column( + "phone_extension_2", + sa.Text(), + nullable=True, + comment="Phone extension for utility contact 2", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia860__scd_utilities_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_core_eia860__scd_utilities_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_eia", "report_date", name=op.f("pk_core_eia860__scd_utilities") + ), + ) + op.create_table( + "core_eia861__yearly_advanced_metering_infrastructure", + sa.Column("advanced_metering_infrastructure", sa.Integer(), nullable=True), + sa.Column("automated_meter_reading", sa.Integer(), nullable=True), + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=False, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "customer_class", + sa.Enum( + "commercial", + "industrial", + "direct_connection", + "other", + "residential", + "total", + "transportation", + ), + nullable=False, + comment="High level categorization of customer type.", + ), + sa.Column("daily_digital_access_customers", sa.Integer(), nullable=True), + sa.Column("direct_load_control_customers", sa.Integer(), nullable=True), + sa.Column("energy_served_ami_mwh", sa.Float(), nullable=True), + sa.Column( + "entity_type", + sa.Text(), + nullable=True, + comment="Entity type of principal owner.", + ), + sa.Column("home_area_network", sa.Integer(), nullable=True), + sa.Column("non_amr_ami", sa.Integer(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=False, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_advanced_metering_infrastructure_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.PrimaryKeyConstraint( + "balancing_authority_code_eia", + "customer_class", + "report_date", + "state", + "utility_id_eia", + name=op.f("pk_core_eia861__yearly_advanced_metering_infrastructure"), + ), + ) + op.create_table( + "core_eia861__yearly_demand_response", + sa.Column("actual_peak_demand_savings_mw", sa.Float(), nullable=True), + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=False, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "customer_class", + sa.Enum( + "commercial", + "industrial", + "direct_connection", + "other", + "residential", + "total", + "transportation", + ), + nullable=False, + comment="High level categorization of customer type.", + ), + sa.Column("customer_incentives_cost", sa.Float(), nullable=True), + sa.Column( + "customers", sa.Float(), nullable=True, comment="Number of customers." + ), + sa.Column("energy_savings_mwh", sa.Float(), nullable=True), + sa.Column("other_costs", sa.Float(), nullable=True), + sa.Column("potential_peak_demand_savings_mw", sa.Float(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=False, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_demand_response_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.PrimaryKeyConstraint( + "balancing_authority_code_eia", + "customer_class", + "report_date", + "state", + "utility_id_eia", + name=op.f("pk_core_eia861__yearly_demand_response"), + ), + ) + op.create_table( + "core_eia861__yearly_demand_response_water_heater", + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=False, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "state", + sa.Text(), + nullable=False, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column("water_heater", sa.Integer(), nullable=True), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_demand_response_water_heater_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.PrimaryKeyConstraint( + "balancing_authority_code_eia", + "report_date", + "state", + "utility_id_eia", + name=op.f("pk_core_eia861__yearly_demand_response_water_heater"), + ), + ) + op.create_table( + "core_eia861__yearly_demand_side_management_ee_dr", + sa.Column("annual_indirect_program_cost", sa.Float(), nullable=True), + sa.Column("annual_total_cost", sa.Float(), nullable=True), + sa.Column( + "customer_class", + sa.Enum( + "commercial", + "industrial", + "direct_connection", + "other", + "residential", + "total", + "transportation", + ), + nullable=True, + comment="High level categorization of customer type.", + ), + sa.Column( + "energy_efficiency_annual_actual_peak_reduction_mw", + sa.Float(), + nullable=True, + ), + sa.Column("energy_efficiency_annual_cost", sa.Float(), nullable=True), + sa.Column("energy_efficiency_annual_effects_mwh", sa.Float(), nullable=True), + sa.Column( + "energy_efficiency_annual_incentive_payment", sa.Float(), nullable=True + ), + sa.Column( + "energy_efficiency_incremental_actual_peak_reduction_mw", + sa.Float(), + nullable=True, + ), + sa.Column( + "energy_efficiency_incremental_effects_mwh", sa.Float(), nullable=True + ), + sa.Column( + "load_management_annual_actual_peak_reduction_mw", sa.Float(), nullable=True + ), + sa.Column("load_management_annual_cost", sa.Float(), nullable=True), + sa.Column("load_management_annual_effects_mwh", sa.Float(), nullable=True), + sa.Column( + "load_management_annual_incentive_payment", sa.Float(), nullable=True + ), + sa.Column( + "load_management_annual_potential_peak_reduction_mw", + sa.Float(), + nullable=True, + ), + sa.Column( + "load_management_incremental_actual_peak_reduction_mw", + sa.Float(), + nullable=True, + ), + sa.Column("load_management_incremental_effects_mwh", sa.Float(), nullable=True), + sa.Column( + "load_management_incremental_potential_peak_reduction_mw", + sa.Float(), + nullable=True, + ), + sa.Column( + "nerc_region", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + comment="NERC region in which the plant is located", + ), + sa.Column("price_responsiveness_customers", sa.Integer(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("time_responsiveness_customers", sa.Integer(), nullable=True), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_demand_side_management_ee_dr_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_demand_side_management_misc", + sa.Column( + "energy_savings_estimates_independently_verified", + sa.Boolean(), + nullable=True, + ), + sa.Column("energy_savings_independently_verified", sa.Boolean(), nullable=True), + sa.Column( + "entity_type", + sa.Text(), + nullable=True, + comment="Entity type of principal owner.", + ), + sa.Column("major_program_changes", sa.Boolean(), nullable=True), + sa.Column( + "nerc_region", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + comment="NERC region in which the plant is located", + ), + sa.Column("price_responsive_programs", sa.Boolean(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column("reported_as_another_company", sa.Text(), nullable=True), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("time_responsive_programs", sa.Boolean(), nullable=True), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_demand_side_management_misc_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_demand_side_management_sales", + sa.Column( + "nerc_region", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + comment="NERC region in which the plant is located", + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column("sales_for_resale_mwh", sa.Float(), nullable=True), + sa.Column("sales_to_ultimate_consumers_mwh", sa.Float(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_demand_side_management_sales_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_distributed_generation_fuel", + sa.Column( + "estimated_or_actual_fuel_data", + sa.Enum("estimated", "actual"), + nullable=True, + ), + sa.Column( + "fuel_class", + sa.Enum("gas", "oil", "other", "renewable", "water", "wind", "wood"), + nullable=True, + ), + sa.Column("fuel_pct", sa.Float(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_distributed_generation_fuel_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_distributed_generation_misc", + sa.Column("backup_capacity_mw", sa.Float(), nullable=True), + sa.Column( + "distributed_generation_owned_capacity_mw", sa.Float(), nullable=True + ), + sa.Column( + "estimated_or_actual_capacity_data", + sa.Enum("estimated", "actual"), + nullable=True, + ), + sa.Column("generators_num_less_1_mw", sa.Float(), nullable=True), + sa.Column("generators_number", sa.Float(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("total_capacity_less_1_mw", sa.Float(), nullable=True), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_distributed_generation_misc_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_distributed_generation_tech", + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "estimated_or_actual_tech_data", + sa.Enum("estimated", "actual"), + nullable=True, + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "tech_class", + sa.Enum( + "backup", + "chp_cogen", + "combustion_turbine", + "fuel_cell", + "hydro", + "internal_combustion", + "other", + "pv", + "steam", + "storage_pv", + "all_storage", + "total", + "virtual_pv", + "wind", + ), + nullable=True, + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_distributed_generation_tech_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_distribution_systems", + sa.Column("circuits_with_voltage_optimization", sa.Integer(), nullable=True), + sa.Column("distribution_circuits", sa.Integer(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_distribution_systems_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_dynamic_pricing", + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column("critical_peak_pricing", sa.Boolean(), nullable=True), + sa.Column("critical_peak_rebate", sa.Boolean(), nullable=True), + sa.Column( + "customer_class", + sa.Enum( + "commercial", + "industrial", + "direct_connection", + "other", + "residential", + "total", + "transportation", + ), + nullable=True, + comment="High level categorization of customer type.", + ), + sa.Column( + "customers", sa.Float(), nullable=True, comment="Number of customers." + ), + sa.Column("real_time_pricing", sa.Boolean(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("time_of_use_pricing", sa.Boolean(), nullable=True), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column("variable_peak_pricing", sa.Boolean(), nullable=True), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_dynamic_pricing_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_energy_efficiency", + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "customer_class", + sa.Enum( + "commercial", + "industrial", + "direct_connection", + "other", + "residential", + "total", + "transportation", + ), + nullable=True, + comment="High level categorization of customer type.", + ), + sa.Column("customer_incentives_incremental_cost", sa.Float(), nullable=True), + sa.Column( + "customer_incentives_incremental_life_cycle_cost", sa.Float(), nullable=True + ), + sa.Column( + "customer_other_costs_incremental_life_cycle_cost", + sa.Float(), + nullable=True, + ), + sa.Column("incremental_energy_savings_mwh", sa.Float(), nullable=True), + sa.Column( + "incremental_life_cycle_energy_savings_mwh", sa.Float(), nullable=True + ), + sa.Column( + "incremental_life_cycle_peak_reduction_mwh", sa.Float(), nullable=True + ), + sa.Column("incremental_peak_reduction_mw", sa.Float(), nullable=True), + sa.Column("other_costs_incremental_cost", sa.Float(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column("weighted_average_life_years", sa.Float(), nullable=True), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_energy_efficiency_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_green_pricing", + sa.Column( + "customer_class", + sa.Enum( + "commercial", + "industrial", + "direct_connection", + "other", + "residential", + "total", + "transportation", + ), + nullable=True, + comment="High level categorization of customer type.", + ), + sa.Column( + "customers", sa.Float(), nullable=True, comment="Number of customers." + ), + sa.Column("green_pricing_revenue", sa.Float(), nullable=True), + sa.Column("rec_revenue", sa.Float(), nullable=True), + sa.Column("rec_sales_mwh", sa.Float(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "sales_mwh", + sa.Float(), + nullable=True, + comment="Quantity of electricity sold in MWh.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_green_pricing_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_mergers", + sa.Column( + "entity_type", + sa.Text(), + nullable=True, + comment="Entity type of principal owner.", + ), + sa.Column("merge_address", sa.Text(), nullable=True), + sa.Column("merge_city", sa.Text(), nullable=True), + sa.Column("merge_company", sa.Text(), nullable=True), + sa.Column("merge_date", sa.Date(), nullable=True), + sa.Column( + "merge_state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviations and three letter ISO-3166-1 country codes for international mines.", + ), + sa.Column("new_parent", sa.Text(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "zip_code", sa.Text(), nullable=True, comment="Five digit US Zip Code." + ), + sa.Column( + "zip_code_4", + sa.Text(), + nullable=True, + comment="Four digit US Zip Code suffix.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_mergers_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_net_metering_customer_fuel_class", + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "customer_class", + sa.Enum( + "commercial", + "industrial", + "direct_connection", + "other", + "residential", + "total", + "transportation", + ), + nullable=True, + comment="High level categorization of customer type.", + ), + sa.Column( + "customers", sa.Float(), nullable=True, comment="Number of customers." + ), + sa.Column("energy_displaced_mwh", sa.Float(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column("sold_to_utility_mwh", sa.Float(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "tech_class", + sa.Enum( + "backup", + "chp_cogen", + "combustion_turbine", + "fuel_cell", + "hydro", + "internal_combustion", + "other", + "pv", + "steam", + "storage_pv", + "all_storage", + "total", + "virtual_pv", + "wind", + ), + nullable=True, + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_net_metering_customer_fuel_class_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_net_metering_misc", + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column("pv_current_flow_type", sa.Enum("AC", "DC"), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_net_metering_misc_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_non_net_metering_customer_fuel_class", + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "customer_class", + sa.Enum( + "commercial", + "industrial", + "direct_connection", + "other", + "residential", + "total", + "transportation", + ), + nullable=True, + comment="High level categorization of customer type.", + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "tech_class", + sa.Enum( + "backup", + "chp_cogen", + "combustion_turbine", + "fuel_cell", + "hydro", + "internal_combustion", + "other", + "pv", + "steam", + "storage_pv", + "all_storage", + "total", + "virtual_pv", + "wind", + ), + nullable=True, + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_non_net_metering_customer_fuel_class_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_non_net_metering_misc", + sa.Column("backup_capacity_mw", sa.Float(), nullable=True), + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column("generators_number", sa.Float(), nullable=True), + sa.Column("pv_current_flow_type", sa.Enum("AC", "DC"), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column("utility_owned_capacity_mw", sa.Float(), nullable=True), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_non_net_metering_misc_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_operational_data_misc", + sa.Column("consumed_by_facility_mwh", sa.Float(), nullable=True), + sa.Column( + "consumed_by_respondent_without_charge_mwh", sa.Float(), nullable=True + ), + sa.Column( + "data_observed", + sa.Boolean(), + nullable=True, + comment="Is the value observed (True) or imputed (False).", + ), + sa.Column( + "entity_type", + sa.Text(), + nullable=True, + comment="Entity type of principal owner.", + ), + sa.Column("exchange_energy_delivered_mwh", sa.Float(), nullable=True), + sa.Column("exchange_energy_received_mwh", sa.Float(), nullable=True), + sa.Column("furnished_without_charge_mwh", sa.Float(), nullable=True), + sa.Column( + "nerc_region", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + comment="NERC region in which the plant is located", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column("net_power_exchanged_mwh", sa.Float(), nullable=True), + sa.Column("net_wheeled_power_mwh", sa.Float(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column("retail_sales_mwh", sa.Float(), nullable=True), + sa.Column("sales_for_resale_mwh", sa.Float(), nullable=True), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("summer_peak_demand_mw", sa.Float(), nullable=True), + sa.Column("total_disposition_mwh", sa.Float(), nullable=True), + sa.Column("total_energy_losses_mwh", sa.Float(), nullable=True), + sa.Column("total_sources_mwh", sa.Float(), nullable=True), + sa.Column("transmission_by_other_losses_mwh", sa.Float(), nullable=True), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column("wheeled_power_delivered_mwh", sa.Float(), nullable=True), + sa.Column("wheeled_power_received_mwh", sa.Float(), nullable=True), + sa.Column("wholesale_power_purchases_mwh", sa.Float(), nullable=True), + sa.Column("winter_peak_demand_mw", sa.Float(), nullable=True), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_operational_data_misc_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_operational_data_revenue", + sa.Column( + "nerc_region", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + comment="NERC region in which the plant is located", + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column("revenue", sa.Float(), nullable=True), + sa.Column( + "revenue_class", + sa.Enum( + "credits_or_adjustments", + "delivery_customers", + "other", + "retail_sales", + "sales_for_resale", + "total", + "transmission", + "unbundled", + ), + nullable=True, + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_operational_data_revenue_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_reliability", + sa.Column( + "caidi_w_major_event_days_minus_loss_of_service_minutes", + sa.Float(), + nullable=True, + ), + sa.Column("caidi_w_major_event_days_minutes", sa.Float(), nullable=True), + sa.Column("caidi_wo_major_event_days_minutes", sa.Float(), nullable=True), + sa.Column( + "customers", sa.Float(), nullable=True, comment="Number of customers." + ), + sa.Column( + "entity_type", + sa.Text(), + nullable=True, + comment="Entity type of principal owner.", + ), + sa.Column("highest_distribution_voltage_kv", sa.Float(), nullable=True), + sa.Column("inactive_accounts_included", sa.Boolean(), nullable=True), + sa.Column("momentary_interruption_definition", sa.Text(), nullable=True), + sa.Column("outages_recorded_automatically", sa.Boolean(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "saidi_w_major_event_days_minus_loss_of_service_minutes", + sa.Float(), + nullable=True, + ), + sa.Column("saidi_w_major_event_days_minutes", sa.Float(), nullable=True), + sa.Column("saidi_wo_major_event_days_minutes", sa.Float(), nullable=True), + sa.Column("saifi_w_major_event_days_customers", sa.Float(), nullable=True), + sa.Column( + "saifi_w_major_event_days_minus_loss_of_service_customers", + sa.Float(), + nullable=True, + ), + sa.Column("saifi_wo_major_event_days_customers", sa.Float(), nullable=True), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "standard", sa.Enum("ieee_standard", "other_standard"), nullable=True + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_reliability_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["momentary_interruption_definition"], + ["core_eia__codes_momentary_interruptions.code"], + name=op.f( + "fk_core_eia861__yearly_reliability_momentary_interruption_definition_core_eia__codes_momentary_interruptions" + ), + ), + ) + op.create_table( + "core_eia861__yearly_sales", + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "state", + sa.Text(), + nullable=False, + comment="Two letter US state abbreviation.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=False, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "customer_class", + sa.Enum( + "commercial", + "industrial", + "direct_connection", + "other", + "residential", + "total", + "transportation", + ), + nullable=False, + comment="High level categorization of customer type.", + ), + sa.Column( + "business_model", sa.Enum("retail", "energy_services"), nullable=False + ), + sa.Column( + "data_observed", + sa.Boolean(), + nullable=True, + comment="Is the value observed (True) or imputed (False).", + ), + sa.Column( + "entity_type", + sa.Text(), + nullable=True, + comment="Entity type of principal owner.", + ), + sa.Column( + "service_type", sa.Enum("bundled", "energy", "delivery"), nullable=False + ), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "customers", sa.Float(), nullable=True, comment="Number of customers." + ), + sa.Column( + "sales_mwh", + sa.Float(), + nullable=True, + comment="Quantity of electricity sold in MWh.", + ), + sa.Column( + "sales_revenue", + sa.Float(), + nullable=True, + comment="Revenue from electricity sold.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_sales_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_eia", + "state", + "report_date", + "balancing_authority_code_eia", + "customer_class", + "business_model", + "service_type", + name=op.f("pk_core_eia861__yearly_sales"), + ), + ) + op.create_table( + "core_eia861__yearly_service_territory", + sa.Column("county", sa.Text(), nullable=True, comment="County name."), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "state_id_fips", + sa.Text(), + nullable=True, + comment="Two digit state FIPS code.", + ), + sa.Column( + "county_id_fips", + sa.Text(), + nullable=False, + comment="County ID from the Federal Information Processing Standard Publication 6-4.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_service_territory_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "utility_id_eia", + "county_id_fips", + name=op.f("pk_core_eia861__yearly_service_territory"), + ), + ) + op.create_table( + "core_eia861__yearly_utility_data_misc", + sa.Column("alternative_fuel_vehicle_2_activity", sa.Boolean(), nullable=True), + sa.Column("alternative_fuel_vehicle_activity", sa.Boolean(), nullable=True), + sa.Column("bundled_activity", sa.Boolean(), nullable=True), + sa.Column("buying_distribution_activity", sa.Boolean(), nullable=True), + sa.Column("buying_transmission_activity", sa.Boolean(), nullable=True), + sa.Column("distribution_activity", sa.Boolean(), nullable=True), + sa.Column( + "entity_type", + sa.Text(), + nullable=True, + comment="Entity type of principal owner.", + ), + sa.Column("generation_activity", sa.Boolean(), nullable=True), + sa.Column( + "nerc_region", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + comment="NERC region in which the plant is located", + ), + sa.Column("operates_generating_plant", sa.Boolean(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column("retail_marketing_activity", sa.Boolean(), nullable=True), + sa.Column("short_form", sa.Boolean(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("transmission_activity", sa.Boolean(), nullable=True), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column("wholesale_marketing_activity", sa.Boolean(), nullable=True), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_utility_data_misc_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_utility_data_nerc", + sa.Column( + "nerc_region", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + comment="NERC region in which the plant is located", + ), + sa.Column( + "nerc_regions_of_operation", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_utility_data_nerc_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia861__yearly_utility_data_rto", + sa.Column( + "nerc_region", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + comment="NERC region in which the plant is located", + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "rtos_of_operation", + sa.Enum("caiso", "ercot", "isone", "miso", "nyiso", "other", "pjm", "spp"), + nullable=True, + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia861__yearly_utility_data_rto_data_maturity_core_pudl__codes_data_maturities" + ), + ), + ) + op.create_table( + "core_eia923__entity_coalmine", + sa.Column( + "mine_id_pudl", + sa.Integer(), + nullable=False, + comment="Dynamically assigned PUDL mine identifier.", + ), + sa.Column("mine_name", sa.Text(), nullable=True, comment="Coal mine name."), + sa.Column( + "mine_type_code", sa.Text(), nullable=True, comment="Type of coal mine." + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "county_id_fips", + sa.Text(), + nullable=True, + comment="County ID from the Federal Information Processing Standard Publication 6-4.", + ), + sa.Column( + "mine_id_msha", + sa.Integer(), + nullable=True, + comment="MSHA issued mine identifier.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia923__entity_coalmine_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["mine_type_code"], + ["core_eia__codes_coalmine_types.code"], + name=op.f( + "fk_core_eia923__entity_coalmine_mine_type_code_core_eia__codes_coalmine_types" + ), + ), + sa.PrimaryKeyConstraint( + "mine_id_pudl", name=op.f("pk_core_eia923__entity_coalmine") + ), + ) + op.create_table( + "core_eia923__monthly_generation_fuel", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_type_code_aer", + sa.Text(), + nullable=True, + comment="A partial aggregation of the reported fuel type codes into larger categories used by EIA in, for example, the Annual Energy Review (AER). Two or three letter alphanumeric.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_units", + sa.Float(), + nullable=True, + comment="Consumption for electric generation of the fuel type in physical unit.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia923__monthly_generation_fuel_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia923__monthly_generation_fuel_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["fuel_type_code_aer"], + ["core_eia__codes_fuel_types_aer.code"], + name=op.f( + "fk_core_eia923__monthly_generation_fuel_fuel_type_code_aer_core_eia__codes_fuel_types_aer" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_core_eia923__monthly_generation_fuel_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_core_eia923__monthly_generation_fuel_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "report_date", + "prime_mover_code", + "energy_source_code", + name=op.f("pk_core_eia923__monthly_generation_fuel"), + ), + ) + op.create_table( + "core_eia923__monthly_generation_fuel_nuclear", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "nuclear_unit_id", + sa.Text(), + nullable=False, + comment="For nuclear plants only, the unit number .One digit numeric. Nuclear plants are the only type of plants for which data are shown explicitly at the generating unit level.", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_type_code_aer", + sa.Text(), + nullable=True, + comment="A partial aggregation of the reported fuel type codes into larger categories used by EIA in, for example, the Annual Energy Review (AER). Two or three letter alphanumeric.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_units", + sa.Float(), + nullable=True, + comment="Consumption for electric generation of the fuel type in physical unit.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia923__monthly_generation_fuel_nuclear_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia923__monthly_generation_fuel_nuclear_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["fuel_type_code_aer"], + ["core_eia__codes_fuel_types_aer.code"], + name=op.f( + "fk_core_eia923__monthly_generation_fuel_nuclear_fuel_type_code_aer_core_eia__codes_fuel_types_aer" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_core_eia923__monthly_generation_fuel_nuclear_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_core_eia923__monthly_generation_fuel_nuclear_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "report_date", + "nuclear_unit_id", + "energy_source_code", + "prime_mover_code", + name=op.f("pk_core_eia923__monthly_generation_fuel_nuclear"), + ), + ) + op.create_table( + "core_eia__entity_boilers", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column( + "boiler_manufacturer", + sa.Text(), + nullable=True, + comment="Name of boiler manufacturer.", + ), + sa.Column( + "boiler_manufacturer_code", + sa.Text(), + nullable=True, + comment="EIA short code for boiler manufacturer.", + ), + sa.ForeignKeyConstraint( + ["boiler_manufacturer_code"], + ["core_eia__codes_environmental_equipment_manufacturers.code"], + name=op.f( + "fk_core_eia__entity_boilers_boiler_manufacturer_code_core_eia__codes_environmental_equipment_manufacturers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_core_eia__entity_boilers_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", "boiler_id", name=op.f("pk_core_eia__entity_boilers") + ), + ) + op.create_table( + "core_eia__entity_generators", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "duct_burners", + sa.Boolean(), + nullable=True, + comment="Indicates whether the unit has duct-burners for supplementary firing of the turbine exhaust gas", + ), + sa.Column( + "generator_operating_date", + sa.Date(), + nullable=True, + comment="Date the generator began commercial operation.", + ), + sa.Column( + "topping_bottoming_code", + sa.Text(), + nullable=True, + comment="If the generator is associated with a combined heat and power system, indicates whether the generator is part of a topping cycle or a bottoming cycle", + ), + sa.Column( + "solid_fuel_gasification", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator is part of a solid fuel gasification system", + ), + sa.Column( + "pulverized_coal_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses pulverized coal technology", + ), + sa.Column( + "fluidized_bed_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses fluidized bed technology", + ), + sa.Column( + "subcritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses subcritical technology", + ), + sa.Column( + "supercritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses supercritical technology", + ), + sa.Column( + "ultrasupercritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses ultra-supercritical technology", + ), + sa.Column( + "stoker_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses stoker technology", + ), + sa.Column( + "other_combustion_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses other combustion technologies", + ), + sa.Column( + "bypass_heat_recovery", + sa.Boolean(), + nullable=True, + comment="Can this generator operate while bypassing the heat recovery steam generator?", + ), + sa.Column( + "rto_iso_lmp_node_id", + sa.Text(), + nullable=True, + comment="The designation used to identify the price node in RTO/ISO Locational Marginal Price reports", + ), + sa.Column( + "rto_iso_location_wholesale_reporting_id", + sa.Text(), + nullable=True, + comment="The designation used to report ths specific location of the wholesale sales transactions to FERC for the Electric Quarterly Report", + ), + sa.Column( + "associated_combined_heat_power", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator is associated with a combined heat and power system", + ), + sa.Column( + "original_planned_generator_operating_date", + sa.Date(), + nullable=True, + comment="The date the generator was originally scheduled to be operational", + ), + sa.Column( + "operating_switch", + sa.Text(), + nullable=True, + comment="Indicates whether the fuel switching generator can switch when operating", + ), + sa.Column( + "previously_canceled", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator was previously reported as indefinitely postponed or canceled", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_core_eia__entity_generators_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", "generator_id", name=op.f("pk_core_eia__entity_generators") + ), + ) + op.create_table( + "core_ferc714__hourly_demand_pa", + sa.Column("respondent_id_ferc714", sa.Integer(), nullable=False), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column("utc_datetime", sqlite.DATETIME(), nullable=False), + sa.Column( + "timezone", + sa.Enum( + "America/New_York", + "America/Chicago", + "America/Denver", + "America/Los_Angeles", + "America/Anchorage", + "Pacific/Honolulu", + ), + nullable=True, + comment="IANA timezone name", + ), + sa.Column("demand_mwh", sa.Float(), nullable=True), + sa.ForeignKeyConstraint( + ["respondent_id_ferc714"], + ["core_ferc714__respondent_id.respondent_id_ferc714"], + name=op.f( + "fk_core_ferc714__hourly_demand_pa_respondent_id_ferc714_core_ferc714__respondent_id" + ), + ), + sa.PrimaryKeyConstraint( + "respondent_id_ferc714", + "utc_datetime", + name=op.f("pk_core_ferc714__hourly_demand_pa"), + ), + ) + op.create_table( + "core_pudl__assn_plants_eia", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_core_pudl__assn_plants_eia_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", name=op.f("pk_core_pudl__assn_plants_eia") + ), + ) + op.create_table( + "core_pudl__assn_utilities_eia", + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_core_pudl__assn_utilities_eia_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_eia", name=op.f("pk_core_pudl__assn_utilities_eia") + ), + ) + op.create_table( + "core_pudl__assn_utilities_ferc1", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_core_pudl__assn_utilities_ferc1_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", name=op.f("pk_core_pudl__assn_utilities_ferc1") + ), + ) + op.create_table( + "core_pudl__assn_utilities_plants", + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=False, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=False, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_core_pudl__assn_utilities_plants_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_core_pudl__assn_utilities_plants_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_pudl", + "plant_id_pudl", + name=op.f("pk_core_pudl__assn_utilities_plants"), + ), + ) + op.create_table( + "out_eia860__yearly_emissions_control_equipment", + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "emission_control_id_pudl", + sa.Float(), + nullable=False, + comment="A PUDL-generated ID used to distinguish emission control units in the same report year and plant id. This ID should not be used to track units over time or between plants.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.Column( + "emission_control_equipment_type_code", + sa.Text(), + nullable=True, + comment="Short code indicating the type of emission control equipment installed.", + ), + sa.Column( + "operational_status_code", + sa.Text(), + nullable=True, + comment="The operating status of the asset.", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.Column( + "mercury_control_id_eia", + sa.Text(), + nullable=True, + comment="Mercury control identification number. This ID is not a unique identifier.", + ), + sa.Column( + "nox_control_id_eia", + sa.Text(), + nullable=True, + comment="Nitrogen oxide control identification number. This ID is not a unique identifier.", + ), + sa.Column( + "particulate_control_id_eia", + sa.Text(), + nullable=True, + comment="Particulate matter control identification number. This ID is not a unique identifier.", + ), + sa.Column( + "so2_control_id_eia", + sa.Text(), + nullable=True, + comment="Sulfur dioxide control identification number. This ID is not a unique identifier.", + ), + sa.Column( + "acid_gas_control", + sa.Boolean(), + nullable=True, + comment="Indicates whether the emissions control equipment controls acid (HCl) gas.", + ), + sa.Column( + "emission_control_equipment_cost", + sa.Float(), + nullable=True, + comment="The total cost to install a piece of emission control equipment.", + ), + sa.Column( + "emission_control_operating_date", + sa.Date(), + nullable=True, + comment="The date a piece of emissions control equipment began operating. Derived from month and year columns in the raw data.", + ), + sa.Column( + "emission_control_retirement_date", + sa.Date(), + nullable=True, + comment="The expected or actual retirement date for a piece of emissions control equipment. Derived from month and year columns in the raw data.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_out_eia860__yearly_emissions_control_equipment_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["emission_control_equipment_type_code"], + ["core_eia__codes_emission_control_equipment_types.code"], + name=op.f( + "fk_out_eia860__yearly_emissions_control_equipment_emission_control_equipment_type_code_core_eia__codes_emission_control_equipment_types" + ), + ), + sa.ForeignKeyConstraint( + ["operational_status_code"], + ["core_eia__codes_operational_status.code"], + name=op.f( + "fk_out_eia860__yearly_emissions_control_equipment_operational_status_code_core_eia__codes_operational_status" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_out_eia860__yearly_emissions_control_equipment_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia860__yearly_emissions_control_equipment_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia860__yearly_emissions_control_equipment_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia860__yearly_emissions_control_equipment_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "report_year", + "plant_id_eia", + "emission_control_id_pudl", + name=op.f("pk_out_eia860__yearly_emissions_control_equipment"), + ), + ) + op.create_table( + "out_eia923__fuel_receipts_costs", + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "contract_type_code", + sa.Enum("S", "C", "NC", "T"), + nullable=True, + comment="Purchase type under which receipts occurred in the reporting month. C: Contract, NC: New Contract, S: Spot Purchase, T: Tolling Agreement.", + ), + sa.Column( + "contract_expiration_date", + sa.Date(), + nullable=True, + comment="Date contract expires.Format: MMYY.", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=True, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_group_code", + sa.Enum("petroleum", "other_gas", "petroleum_coke", "natural_gas", "coal"), + nullable=True, + comment="Fuel groups used in the Electric Power Monthly", + ), + sa.Column( + "supplier_name", + sa.Text(), + nullable=True, + comment="Company that sold the fuel to the plant or, in the case of Natural Gas, pipline owner.", + ), + sa.Column( + "fuel_received_units", + sa.Float(), + nullable=True, + comment="Quanity of fuel received in tons, barrel, or Mcf.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "bulk_agg_fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Fuel cost per mmbtu reported in the EIA bulk electricity data. This is an aggregate average fuel price for a whole state, region, month, sector, etc. Used to fill in missing fuel prices.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "sulfur_content_pct", + sa.Float(), + nullable=True, + comment="Sulfur content percentage by weight to the nearest 0.01 percent.", + ), + sa.Column( + "ash_content_pct", + sa.Float(), + nullable=True, + comment="Ash content percentage by weight to the nearest 0.1 percent.", + ), + sa.Column( + "mercury_content_ppm", + sa.Float(), + nullable=True, + comment="Mercury content in parts per million (ppm) to the nearest 0.001 ppm.", + ), + sa.Column( + "primary_transportation_mode_code", + sa.Text(), + nullable=True, + comment="Transportation mode for the longest distance transported.", + ), + sa.Column( + "secondary_transportation_mode_code", + sa.Text(), + nullable=True, + comment="Transportation mode for the second longest distance transported.", + ), + sa.Column( + "natural_gas_transport_code", + sa.Enum("firm", "interruptible"), + nullable=True, + comment="Contract type for natural gas transportation service.", + ), + sa.Column( + "natural_gas_delivery_contract_type_code", + sa.Enum("firm", "interruptible"), + nullable=True, + comment="Contract type for natrual gas delivery service:", + ), + sa.Column("moisture_content_pct", sa.Float(), nullable=True), + sa.Column("chlorine_content_ppm", sa.Float(), nullable=True), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.Column( + "mine_id_msha", + sa.Integer(), + nullable=True, + comment="MSHA issued mine identifier.", + ), + sa.Column("mine_name", sa.Text(), nullable=True, comment="Coal mine name."), + sa.Column( + "mine_state", + sa.Text(), + nullable=True, + comment="State where the coal mine is located. Two letter abbreviation.", + ), + sa.Column( + "coalmine_county_id_fips", + sa.Text(), + nullable=True, + comment="County ID from the Federal Information Processing Standard Publication 6-4. This is the county where the coal mine is located.", + ), + sa.Column( + "mine_type_code", sa.Text(), nullable=True, comment="Type of coal mine." + ), + sa.ForeignKeyConstraint( + ["contract_type_code"], + ["core_eia__codes_contract_types.code"], + name=op.f( + "fk_out_eia923__fuel_receipts_costs_contract_type_code_core_eia__codes_contract_types" + ), + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_out_eia923__fuel_receipts_costs_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia923__fuel_receipts_costs_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["mine_type_code"], + ["core_eia__codes_coalmine_types.code"], + name=op.f( + "fk_out_eia923__fuel_receipts_costs_mine_type_code_core_eia__codes_coalmine_types" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_out_eia923__fuel_receipts_costs_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__fuel_receipts_costs_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["primary_transportation_mode_code"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia923__fuel_receipts_costs_primary_transportation_mode_code_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["secondary_transportation_mode_code"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia923__fuel_receipts_costs_secondary_transportation_mode_code_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia923__fuel_receipts_costs_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__fuel_receipts_costs_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + ) + op.create_table( + "out_eia923__generation_fuel_combined", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_type_code_aer", + sa.Text(), + nullable=True, + comment="A partial aggregation of the reported fuel type codes into larger categories used by EIA in, for example, the Annual Energy Review (AER). Two or three letter alphanumeric.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_units", + sa.Float(), + nullable=True, + comment="Consumption for electric generation of the fuel type in physical unit.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_out_eia923__generation_fuel_combined_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia923__generation_fuel_combined_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["fuel_type_code_aer"], + ["core_eia__codes_fuel_types_aer.code"], + name=op.f( + "fk_out_eia923__generation_fuel_combined_fuel_type_code_aer_core_eia__codes_fuel_types_aer" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_out_eia923__generation_fuel_combined_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__generation_fuel_combined_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia923__generation_fuel_combined_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia923__generation_fuel_combined_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__generation_fuel_combined_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "report_date", + "prime_mover_code", + "energy_source_code", + name=op.f("pk_out_eia923__generation_fuel_combined"), + ), + ) + op.create_table( + "out_eia923__monthly_fuel_receipts_costs", + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_received_units", + sa.Float(), + nullable=True, + comment="Quanity of fuel received in tons, barrel, or Mcf.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "sulfur_content_pct", + sa.Float(), + nullable=True, + comment="Sulfur content percentage by weight to the nearest 0.01 percent.", + ), + sa.Column( + "ash_content_pct", + sa.Float(), + nullable=True, + comment="Ash content percentage by weight to the nearest 0.1 percent.", + ), + sa.Column( + "mercury_content_ppm", + sa.Float(), + nullable=True, + comment="Mercury content in parts per million (ppm) to the nearest 0.001 ppm.", + ), + sa.Column("moisture_content_pct", sa.Float(), nullable=True), + sa.Column("chlorine_content_ppm", sa.Float(), nullable=True), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_out_eia923__monthly_fuel_receipts_costs_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__monthly_fuel_receipts_costs_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia923__monthly_fuel_receipts_costs_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__monthly_fuel_receipts_costs_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + ) + op.create_table( + "out_eia923__monthly_generation_fuel_combined", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_units", + sa.Float(), + nullable=True, + comment="Consumption for electric generation of the fuel type in physical unit.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_combined_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_combined_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_combined_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_combined_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_combined_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_combined_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "report_date", + "prime_mover_code", + "energy_source_code", + name=op.f("pk_out_eia923__monthly_generation_fuel_combined"), + ), + ) + op.create_table( + "out_ferc714__respondents_with_fips", + sa.Column("eia_code", sa.Integer(), nullable=True), + sa.Column( + "respondent_type", sa.Enum("utility", "balancing_authority"), nullable=True + ), + sa.Column("respondent_id_ferc714", sa.Integer(), nullable=True), + sa.Column("respondent_name_ferc714", sa.Text(), nullable=True), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "balancing_authority_id_eia", + sa.Integer(), + nullable=True, + comment="EIA balancing authority ID. This is often (but not always!) the same as the utility ID associated with the same legal entity.", + ), + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "balancing_authority_name_eia", + sa.Text(), + nullable=True, + comment="Name of the balancing authority.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("county", sa.Text(), nullable=True, comment="County name."), + sa.Column( + "state_id_fips", + sa.Text(), + nullable=True, + comment="Two digit state FIPS code.", + ), + sa.Column( + "county_id_fips", + sa.Text(), + nullable=True, + comment="County ID from the Federal Information Processing Standard Publication 6-4.", + ), + sa.ForeignKeyConstraint( + ["respondent_id_ferc714"], + ["core_ferc714__respondent_id.respondent_id_ferc714"], + name=op.f( + "fk_out_ferc714__respondents_with_fips_respondent_id_ferc714_core_ferc714__respondent_id" + ), + ), + ) + op.create_table( + "out_ferc714__summarized_demand", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column("respondent_id_ferc714", sa.Integer(), nullable=False), + sa.Column("demand_annual_mwh", sa.Float(), nullable=True), + sa.Column( + "population", + sa.Float(), + nullable=True, + comment="County population, sourced from Census DP1 data.", + ), + sa.Column("area_km2", sa.Float(), nullable=True, comment="County area in km2."), + sa.Column( + "population_density_km2", + sa.Float(), + nullable=True, + comment="Average population per sq. km area of a service territory.", + ), + sa.Column( + "demand_annual_per_capita_mwh", + sa.Float(), + nullable=True, + comment="Per-capita annual demand, averaged using Census county-level population estimates.", + ), + sa.Column( + "demand_density_mwh_km2", + sa.Float(), + nullable=True, + comment="Annual demand per km2 of a given service territory.", + ), + sa.Column("eia_code", sa.Integer(), nullable=True), + sa.Column( + "respondent_type", sa.Enum("utility", "balancing_authority"), nullable=True + ), + sa.Column("respondent_name_ferc714", sa.Text(), nullable=True), + sa.Column( + "balancing_authority_id_eia", + sa.Integer(), + nullable=True, + comment="EIA balancing authority ID. This is often (but not always!) the same as the utility ID associated with the same legal entity.", + ), + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "balancing_authority_name_eia", + sa.Text(), + nullable=True, + comment="Name of the balancing authority.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.ForeignKeyConstraint( + ["respondent_id_ferc714"], + ["core_ferc714__respondent_id.respondent_id_ferc714"], + name=op.f( + "fk_out_ferc714__summarized_demand_respondent_id_ferc714_core_ferc714__respondent_id" + ), + ), + sa.PrimaryKeyConstraint( + "respondent_id_ferc714", + "report_date", + name=op.f("pk_out_ferc714__summarized_demand"), + ), + ) + op.create_table( + "_out_eia__monthly_capacity_factor_by_generator", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk__out_eia__monthly_capacity_factor_by_generator_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk__out_eia__monthly_capacity_factor_by_generator"), + ), + ) + op.create_table( + "_out_eia__monthly_derived_generator_attributes", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "total_mmbtu", + sa.Float(), + nullable=True, + comment="Total annual heat content of fuel consumed by a plant part record in the plant parts list.", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk__out_eia__monthly_derived_generator_attributes_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk__out_eia__monthly_derived_generator_attributes"), + ), + ) + op.create_table( + "_out_eia__monthly_fuel_cost_by_generator", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "fuel_type_count", + sa.Integer(), + nullable=True, + comment="A count of how many different simple energy sources there are associated with a generator.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk__out_eia__monthly_fuel_cost_by_generator_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk__out_eia__monthly_fuel_cost_by_generator_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk__out_eia__monthly_fuel_cost_by_generator_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk__out_eia__monthly_fuel_cost_by_generator_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk__out_eia__monthly_fuel_cost_by_generator"), + ), + ) + op.create_table( + "_out_eia__monthly_heat_rate_by_generator", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_type_count", + sa.Integer(), + nullable=True, + comment="A count of how many different simple energy sources there are associated with a generator.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk__out_eia__monthly_heat_rate_by_generator_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk__out_eia__monthly_heat_rate_by_generator_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk__out_eia__monthly_heat_rate_by_generator"), + ), + ) + op.create_table( + "core_eia860__scd_plants", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "ash_impoundment", + sa.Boolean(), + nullable=True, + comment="Is there an ash impoundment (e.g. pond, reservoir) at the plant?", + ), + sa.Column( + "ash_impoundment_lined", + sa.Boolean(), + nullable=True, + comment="If there is an ash impoundment at the plant, is the impoundment lined?", + ), + sa.Column( + "ash_impoundment_status", + sa.Text(), + nullable=True, + comment="If there is an ash impoundment at the plant, the ash impoundment status as of December 31 of the reporting year.", + ), + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "balancing_authority_name_eia", + sa.Text(), + nullable=True, + comment="Name of the balancing authority.", + ), + sa.Column( + "datum", + sa.Text(), + nullable=True, + comment="Geodetic coordinate system identifier (e.g. NAD27, NAD83, or WGS84).", + ), + sa.Column( + "energy_storage", + sa.Boolean(), + nullable=True, + comment="Indicates if the facility has energy storage capabilities.", + ), + sa.Column( + "ferc_cogen_docket_no", + sa.Text(), + nullable=True, + comment="The docket number relating to the FERC cogenerator status. See FERC Form 556.", + ), + sa.Column( + "ferc_cogen_status", + sa.Boolean(), + nullable=True, + comment="Indicates whether the plant has FERC qualifying facility cogenerator status. See FERC Form 556.", + ), + sa.Column( + "ferc_exempt_wholesale_generator_docket_no", + sa.Text(), + nullable=True, + comment="The docket number relating to the FERC qualifying facility exempt wholesale generator status.", + ), + sa.Column( + "ferc_exempt_wholesale_generator", + sa.Boolean(), + nullable=True, + comment="Indicates whether the plant has FERC qualifying facility exempt wholesale generator status", + ), + sa.Column( + "ferc_small_power_producer_docket_no", + sa.Text(), + nullable=True, + comment="The docket number relating to the FERC qualifying facility small power producer status. See FERC Form 556.", + ), + sa.Column( + "ferc_small_power_producer", + sa.Boolean(), + nullable=True, + comment="Indicates whether the plant has FERC qualifying facility small power producer status. See FERC Form 556.", + ), + sa.Column( + "ferc_qualifying_facility_docket_no", + sa.Text(), + nullable=True, + comment="The docket number relating to the FERC qualifying facility cogenerator status. See FERC Form 556.", + ), + sa.Column( + "grid_voltage_1_kv", + sa.Float(), + nullable=True, + comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities", + ), + sa.Column( + "grid_voltage_2_kv", + sa.Float(), + nullable=True, + comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities", + ), + sa.Column( + "grid_voltage_3_kv", + sa.Float(), + nullable=True, + comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities", + ), + sa.Column( + "iso_rto_code", + sa.Text(), + nullable=True, + comment="The code of the plant's ISO or RTO. NA if not reported in that year.", + ), + sa.Column( + "liquefied_natural_gas_storage", + sa.Boolean(), + nullable=True, + comment="Indicates if the facility have the capability to store the natural gas in the form of liquefied natural gas.", + ), + sa.Column( + "natural_gas_local_distribution_company", + sa.Text(), + nullable=True, + comment="Names of Local Distribution Company (LDC), connected to natural gas burning power plants.", + ), + sa.Column( + "natural_gas_storage", + sa.Boolean(), + nullable=True, + comment="Indicates if the facility have on-site storage of natural gas.", + ), + sa.Column( + "natural_gas_pipeline_name_1", + sa.Text(), + nullable=True, + comment="The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.", + ), + sa.Column( + "natural_gas_pipeline_name_2", + sa.Text(), + nullable=True, + comment="The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.", + ), + sa.Column( + "natural_gas_pipeline_name_3", + sa.Text(), + nullable=True, + comment="The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.", + ), + sa.Column( + "nerc_region", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + comment="NERC region in which the plant is located", + ), + sa.Column( + "net_metering", + sa.Boolean(), + nullable=True, + comment="Did this plant have a net metering agreement in effect during the reporting year? (Only displayed for facilities that report the sun or wind as an energy source). This field was only reported up until 2015", + ), + sa.Column( + "pipeline_notes", + sa.Text(), + nullable=True, + comment="Additional owner or operator of natural gas pipeline.", + ), + sa.Column( + "primary_purpose_id_naics", + sa.Integer(), + nullable=True, + comment="North American Industry Classification System (NAICS) code that best describes the primary purpose of the reporting plant", + ), + sa.Column( + "regulatory_status_code", + sa.Text(), + nullable=True, + comment="Indicates whether the plant is regulated or non-regulated.", + ), + sa.Column( + "reporting_frequency_code", + sa.Enum("A", "AM", "M"), + nullable=True, + comment="Code that specifies what time period data has to be reported (i.e. monthly data or annual totals) and how often the power plant reports this data to EIA. See reporting_frequencies_eia for more details.", + ), + sa.Column( + "sector_id_eia", + sa.Integer(), + nullable=True, + comment="EIA assigned sector ID, corresponding to high level NAICS sector, designated by the primary purpose, regulatory status and plant-level combined heat and power status", + ), + sa.Column( + "sector_name_eia", + sa.Text(), + nullable=True, + comment="EIA assigned sector name, corresponding to high level NAICS sector, designated by the primary purpose, regulatory status and plant-level combined heat and power status", + ), + sa.Column( + "service_area", + sa.Text(), + nullable=True, + comment="Service area in which plant is located; for unregulated companies, it's the electric utility with which plant is interconnected", + ), + sa.Column( + "transmission_distribution_owner_id", + sa.Integer(), + nullable=True, + comment="EIA-assigned code for owner of transmission/distribution system to which the plant is interconnected.", + ), + sa.Column( + "transmission_distribution_owner_name", + sa.Text(), + nullable=True, + comment="Name of the owner of the transmission or distribution system to which the plant is interconnected.", + ), + sa.Column( + "transmission_distribution_owner_state", + sa.Text(), + nullable=True, + comment="State location for owner of transmission/distribution system to which the plant is interconnected.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "water_source", + sa.Text(), + nullable=True, + comment="Name of water source associated with the plant.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["balancing_authority_code_eia"], + ["core_eia__codes_balancing_authorities.code"], + name=op.f( + "fk_core_eia860__scd_plants_balancing_authority_code_eia_core_eia__codes_balancing_authorities" + ), + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia860__scd_plants_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_core_eia860__scd_plants_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.ForeignKeyConstraint( + ["reporting_frequency_code"], + ["core_eia__codes_reporting_frequencies.code"], + name=op.f( + "fk_core_eia860__scd_plants_reporting_frequency_code_core_eia__codes_reporting_frequencies" + ), + ), + sa.ForeignKeyConstraint( + ["sector_id_eia"], + ["core_eia__codes_sector_consolidated.code"], + name=op.f( + "fk_core_eia860__scd_plants_sector_id_eia_core_eia__codes_sector_consolidated" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_core_eia860__scd_plants_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", "report_date", name=op.f("pk_core_eia860__scd_plants") + ), + ) + op.create_table( + "core_eia923__monthly_boiler_fuel", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "sulfur_content_pct", + sa.Float(), + nullable=True, + comment="Sulfur content percentage by weight to the nearest 0.01 percent.", + ), + sa.Column( + "ash_content_pct", + sa.Float(), + nullable=True, + comment="Ash content percentage by weight to the nearest 0.1 percent.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia923__monthly_boiler_fuel_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id"], + [ + "core_eia__entity_boilers.plant_id_eia", + "core_eia__entity_boilers.boiler_id", + ], + name=op.f( + "fk_core_eia923__monthly_boiler_fuel_plant_id_eia_core_eia__entity_boilers" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_core_eia923__monthly_boiler_fuel_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "boiler_id", + "energy_source_code", + "prime_mover_code", + "report_date", + name=op.f("pk_core_eia923__monthly_boiler_fuel"), + ), + ) + op.create_table( + "core_eia923__monthly_fuel_receipts_costs", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "contract_type_code", + sa.Enum("S", "C", "NC", "T"), + nullable=True, + comment="Purchase type under which receipts occurred in the reporting month. C: Contract, NC: New Contract, S: Spot Purchase, T: Tolling Agreement.", + ), + sa.Column( + "contract_expiration_date", + sa.Date(), + nullable=True, + comment="Date contract expires.Format: MMYY.", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=True, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_group_code", + sa.Enum("petroleum", "other_gas", "petroleum_coke", "natural_gas", "coal"), + nullable=True, + comment="Fuel groups used in the Electric Power Monthly", + ), + sa.Column( + "mine_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL mine identifier.", + ), + sa.Column( + "supplier_name", + sa.Text(), + nullable=True, + comment="Company that sold the fuel to the plant or, in the case of Natural Gas, pipline owner.", + ), + sa.Column( + "fuel_received_units", + sa.Float(), + nullable=True, + comment="Quanity of fuel received in tons, barrel, or Mcf.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "sulfur_content_pct", + sa.Float(), + nullable=True, + comment="Sulfur content percentage by weight to the nearest 0.01 percent.", + ), + sa.Column( + "ash_content_pct", + sa.Float(), + nullable=True, + comment="Ash content percentage by weight to the nearest 0.1 percent.", + ), + sa.Column( + "mercury_content_ppm", + sa.Float(), + nullable=True, + comment="Mercury content in parts per million (ppm) to the nearest 0.001 ppm.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "primary_transportation_mode_code", + sa.Text(), + nullable=True, + comment="Transportation mode for the longest distance transported.", + ), + sa.Column( + "secondary_transportation_mode_code", + sa.Text(), + nullable=True, + comment="Transportation mode for the second longest distance transported.", + ), + sa.Column( + "natural_gas_transport_code", + sa.Enum("firm", "interruptible"), + nullable=True, + comment="Contract type for natural gas transportation service.", + ), + sa.Column( + "natural_gas_delivery_contract_type_code", + sa.Enum("firm", "interruptible"), + nullable=True, + comment="Contract type for natrual gas delivery service:", + ), + sa.Column("moisture_content_pct", sa.Float(), nullable=True), + sa.Column("chlorine_content_ppm", sa.Float(), nullable=True), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["contract_type_code"], + ["core_eia__codes_contract_types.code"], + name=op.f( + "fk_core_eia923__monthly_fuel_receipts_costs_contract_type_code_core_eia__codes_contract_types" + ), + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia923__monthly_fuel_receipts_costs_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia923__monthly_fuel_receipts_costs_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["mine_id_pudl"], + ["core_eia923__entity_coalmine.mine_id_pudl"], + name=op.f( + "fk_core_eia923__monthly_fuel_receipts_costs_mine_id_pudl_core_eia923__entity_coalmine" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia"], + ["core_eia__entity_plants.plant_id_eia"], + name=op.f( + "fk_core_eia923__monthly_fuel_receipts_costs_plant_id_eia_core_eia__entity_plants" + ), + ), + sa.ForeignKeyConstraint( + ["primary_transportation_mode_code"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_core_eia923__monthly_fuel_receipts_costs_primary_transportation_mode_code_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["secondary_transportation_mode_code"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_core_eia923__monthly_fuel_receipts_costs_secondary_transportation_mode_code_core_eia__codes_fuel_transportation_modes" + ), + ), + ) + op.create_table( + "core_eia923__monthly_generation", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia923__monthly_generation_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk_core_eia923__monthly_generation_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "generator_id", + "report_date", + name=op.f("pk_core_eia923__monthly_generation"), + ), + ) + op.create_table( + "core_epa__assn_epacamd_eia", + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "plant_id_epa", + sa.Integer(), + nullable=True, + comment="The ORISPL ID used by EPA to refer to the plant. Usually but not always the same as plant_id_eia.", + ), + sa.Column( + "emissions_unit_id_epa", + sa.Text(), + nullable=True, + comment="Emissions (smokestack) unit monitored by EPA CEMS.", + ), + sa.Column( + "generator_id_epa", + sa.Text(), + nullable=True, + comment="Generator ID used by the EPA.", + ), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=True, comment="Alphanumeric boiler ID." + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=True, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id"], + [ + "core_eia__entity_boilers.plant_id_eia", + "core_eia__entity_boilers.boiler_id", + ], + name=op.f( + "fk_core_epa__assn_epacamd_eia_plant_id_eia_core_eia__entity_boilers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk_core_epa__assn_epacamd_eia_plant_id_eia_core_eia__entity_generators" + ), + ), + ) + op.create_table( + "core_ferc1__yearly_balance_sheet_assets_sched110", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "asset_type", + sa.Text(), + nullable=False, + comment="Type of asset being reported to the core_ferc1__yearly_balance_sheet_assets_sched110 table.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "starting_balance", + sa.Float(), + nullable=True, + comment="Account balance at beginning of year.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_balance_sheet_assets_sched110_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "asset_type", + name=op.f("pk_core_ferc1__yearly_balance_sheet_assets_sched110"), + ), + ) + op.create_table( + "core_ferc1__yearly_balance_sheet_liabilities_sched110", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "starting_balance", + sa.Float(), + nullable=True, + comment="Account balance at beginning of year.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "liability_type", + sa.Text(), + nullable=False, + comment="Type of liability being reported to the core_ferc1__yearly_balance_sheet_liabilities_sched110 table.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_balance_sheet_liabilities_sched110_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "liability_type", + name=op.f("pk_core_ferc1__yearly_balance_sheet_liabilities_sched110"), + ), + ) + op.create_table( + "core_ferc1__yearly_cash_flows_sched120", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "amount_type", + sa.Text(), + nullable=False, + comment="Label describing the type of amount being reported. This could be a balance or a change in value.", + ), + sa.Column( + "amount", + sa.Float(), + nullable=True, + comment="Reported amount of dollars. This could be a balance or a change in value.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_cash_flows_sched120_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "amount_type", + name=op.f("pk_core_ferc1__yearly_cash_flows_sched120"), + ), + ) + op.create_table( + "core_ferc1__yearly_depreciation_by_function_sched219", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "depreciation_type", + sa.Text(), + nullable=True, + comment="Type of depreciation provision within FERC Account 108, including cost ofremoval, depreciation expenses, salvage, cost of retired plant, etc.", + ), + sa.Column( + "plant_function", + sa.Text(), + nullable=False, + comment="Functional role played by utility plant (steam production, nuclear production, distribution, transmission, etc.).", + ), + sa.Column( + "plant_status", + sa.Text(), + nullable=False, + comment="Utility plant financial status (in service, future, leased, total).", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=False, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_depreciation_by_function_sched219_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "plant_function", + "plant_status", + "utility_type", + name=op.f("pk_core_ferc1__yearly_depreciation_by_function_sched219"), + ), + ) + op.create_table( + "core_ferc1__yearly_depreciation_changes_sched219", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "depreciation_type", + sa.Text(), + nullable=False, + comment="Type of depreciation provision within FERC Account 108, including cost ofremoval, depreciation expenses, salvage, cost of retired plant, etc.", + ), + sa.Column( + "plant_status", + sa.Text(), + nullable=False, + comment="Utility plant financial status (in service, future, leased, total).", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=False, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_depreciation_changes_sched219_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "depreciation_type", + "plant_status", + "utility_type", + name=op.f("pk_core_ferc1__yearly_depreciation_changes_sched219"), + ), + ) + op.create_table( + "core_ferc1__yearly_depreciation_summary_sched336", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "plant_function", + sa.Text(), + nullable=False, + comment="Functional role played by utility plant (steam production, nuclear production, distribution, transmission, etc.).", + ), + sa.Column( + "ferc_account_label", + sa.Text(), + nullable=False, + comment="Long FERC account identifier derived from values reported in the XBRL taxonomies. May also refer to aggregations of individual FERC accounts.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=True, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_depreciation_summary_sched336_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "plant_function", + "ferc_account_label", + name=op.f("pk_core_ferc1__yearly_depreciation_summary_sched336"), + ), + ) + op.create_table( + "core_ferc1__yearly_energy_dispositions_sched401", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "energy_disposition_type", + sa.Text(), + nullable=False, + comment="Type of energy disposition reported in the core_ferc1__yearly_energy_dispositions_sched401. Dispositions include sales to customers, re-sales of energy, energy used internally, losses, etc.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.Column( + "energy_mwh", + sa.Float(), + nullable=True, + comment="Sources and uses of energy in MWh.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_energy_dispositions_sched401_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "energy_disposition_type", + name=op.f("pk_core_ferc1__yearly_energy_dispositions_sched401"), + ), + ) + op.create_table( + "core_ferc1__yearly_energy_sources_sched401", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "energy_source_type", + sa.Text(), + nullable=False, + comment="Type of energy source reported in the core_ferc1__yearly_energy_sources_sched401 table. There are three groups of energy sources: generation, power exchanges and transmission.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.Column( + "energy_mwh", + sa.Float(), + nullable=True, + comment="Sources and uses of energy in MWh.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_energy_sources_sched401_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "energy_source_type", + name=op.f("pk_core_ferc1__yearly_energy_sources_sched401"), + ), + ) + op.create_table( + "core_ferc1__yearly_income_statements_sched114", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=False, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "income_type", + sa.Text(), + nullable=False, + comment="Type of income reported in income_statement_ferc1 table.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_income_statements_sched114_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "utility_type", + "income_type", + name=op.f("pk_core_ferc1__yearly_income_statements_sched114"), + ), + ) + op.create_table( + "core_ferc1__yearly_operating_expenses_sched320", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "expense_type", sa.Text(), nullable=False, comment="The type of expense." + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=True, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_operating_expenses_sched320_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "expense_type", + name=op.f("pk_core_ferc1__yearly_operating_expenses_sched320"), + ), + ) + op.create_table( + "core_ferc1__yearly_operating_revenues_sched300", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "revenue_type", + sa.Text(), + nullable=False, + comment="Label describing types of revenues.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "sales_mwh", + sa.Float(), + nullable=True, + comment="Quantity of electricity sold in MWh.", + ), + sa.Column( + "avg_customers_per_month", + sa.Float(), + nullable=True, + comment="Average number of customers per month.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=True, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_operating_revenues_sched300_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "revenue_type", + name=op.f("pk_core_ferc1__yearly_operating_revenues_sched300"), + ), + ) + op.create_table( + "core_ferc1__yearly_other_regulatory_liabilities_sched278", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "starting_balance", + sa.Float(), + nullable=True, + comment="Account balance at beginning of year.", + ), + sa.Column( + "increase_in_other_regulatory_liabilities", + sa.Float(), + nullable=True, + comment="The increase during the reporting period of other regulatory liabilities.", + ), + sa.Column( + "account_detail", + sa.Text(), + nullable=True, + comment="Description of the account number credited from making debit adjustment to other regulatory liabilities.", + ), + sa.Column( + "decrease_in_other_regulatory_liabilities", + sa.Float(), + nullable=True, + comment="The decrease during the reporting period of other regulatory liabilities.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_other_regulatory_liabilities_sched278_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + ) + op.create_table( + "core_ferc1__yearly_plant_in_service_sched204", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "ferc_account_label", + sa.Text(), + nullable=False, + comment="Long FERC account identifier derived from values reported in the XBRL taxonomies. May also refer to aggregations of individual FERC accounts.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.Column( + "starting_balance", + sa.Float(), + nullable=True, + comment="Account balance at beginning of year.", + ), + sa.Column( + "additions", + sa.Float(), + nullable=True, + comment="Cost of acquisition of items classified within the account.", + ), + sa.Column( + "retirements", + sa.Float(), + nullable=True, + comment="Cost of disposal of items classified within the account.", + ), + sa.Column( + "adjustments", + sa.Float(), + nullable=True, + comment="Cost of adjustments to the account.", + ), + sa.Column( + "transfers", + sa.Float(), + nullable=True, + comment="Cost of transfers into (out of) the account.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=True, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_plant_in_service_sched204_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "ferc_account_label", + name=op.f("pk_core_ferc1__yearly_plant_in_service_sched204"), + ), + ) + op.create_table( + "core_ferc1__yearly_purchased_power_and_exchanges_sched326", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "seller_name", + sa.Text(), + nullable=True, + comment="Name of the seller, or the other party in an exchange transaction.", + ), + sa.Column( + "purchase_type_code", + sa.Text(), + nullable=True, + comment="Categorization based on the original contractual terms and conditions of the service. Must be one of 'requirements', 'long_firm', 'intermediate_firm', 'short_firm', 'long_unit', 'intermediate_unit', 'electricity_exchange', 'other_service', or 'adjustment'. Requirements service is ongoing high reliability service, with load integrated into system resource planning. 'Long term' means 5+ years. 'Intermediate term' is 1-5 years. 'Short term' is less than 1 year. 'Firm' means not interruptible for economic reasons. 'unit' indicates service from a particular designated generating unit. 'exchange' is an in-kind transaction.", + ), + sa.Column( + "tariff", + sa.Text(), + nullable=True, + comment="FERC Rate Schedule Number or Tariff. (Note: may be incomplete if originally reported on multiple lines.)", + ), + sa.Column( + "billing_demand_mw", + sa.Float(), + nullable=True, + comment="Monthly average billing demand (for requirements purchases, and any transactions involving demand charges). In megawatts.", + ), + sa.Column( + "non_coincident_peak_demand_mw", + sa.Float(), + nullable=True, + comment="Average monthly non-coincident peak (NCP) demand (for requirements purhcases, and any transactions involving demand charges). Monthly NCP demand is the maximum metered hourly (60-minute integration) demand in a month. In megawatts.", + ), + sa.Column( + "coincident_peak_demand_mw", + sa.Float(), + nullable=True, + comment="Average monthly coincident peak (CP) demand (for requirements purchases, and any transactions involving demand charges). Monthly CP demand is the metered demand during the hour (60-minute integration) in which the supplier's system reaches its monthly peak. In megawatts.", + ), + sa.Column( + "purchased_mwh", + sa.Float(), + nullable=True, + comment="Megawatt-hours shown on bills rendered to the respondent. Includes both electricity purchased for storage and non-storage purposes, which were lumped together prior to 2021.", + ), + sa.Column( + "purchased_storage_mwh", + sa.Float(), + nullable=True, + comment="Number of megawatt hours purchased during the period for energy storage.", + ), + sa.Column( + "purchased_other_than_storage_mwh", + sa.Float(), + nullable=True, + comment="Number of megawatt hours purchased during the period for other than energy storage.", + ), + sa.Column( + "received_mwh", + sa.Float(), + nullable=True, + comment="Gross megawatt-hours received in power exchanges and used as the basis for settlement.", + ), + sa.Column( + "delivered_mwh", + sa.Float(), + nullable=True, + comment="Gross megawatt-hours delivered in power exchanges and used as the basis for settlement.", + ), + sa.Column( + "demand_charges", sa.Float(), nullable=True, comment="Demand charges (USD)." + ), + sa.Column( + "energy_charges", sa.Float(), nullable=True, comment="Energy charges (USD)." + ), + sa.Column( + "other_charges", + sa.Float(), + nullable=True, + comment="Other charges, including out-of-period adjustments (USD).", + ), + sa.Column( + "total_settlement", + sa.Float(), + nullable=True, + comment="Sum of demand, energy, and other charges (USD). For power exchanges, the settlement amount for the net receipt of energy. If more energy was delivered than received, this amount is negative.", + ), + sa.ForeignKeyConstraint( + ["purchase_type_code"], + ["core_ferc1__codes_power_purchase_types.code"], + name=op.f( + "fk_core_ferc1__yearly_purchased_power_and_exchanges_sched326_purchase_type_code_core_ferc1__codes_power_purchase_types" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_purchased_power_and_exchanges_sched326_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + ) + op.create_table( + "core_ferc1__yearly_retained_earnings_sched118", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "earnings_type", + sa.Text(), + nullable=False, + comment="Label describing types of earnings.", + ), + sa.Column( + "starting_balance", + sa.Float(), + nullable=True, + comment="Account balance at beginning of year.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_retained_earnings_sched118_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "earnings_type", + name=op.f("pk_core_ferc1__yearly_retained_earnings_sched118"), + ), + ) + op.create_table( + "core_ferc1__yearly_sales_by_rate_schedules_sched304", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "rate_schedule_type", + sa.Text(), + nullable=True, + comment="Categorization of rate schedule type.", + ), + sa.Column( + "billing_status", + sa.Text(), + nullable=True, + comment="Whether an amount is billed, unbilled, or both. Billed amounts pertain to the exchange of energy and unbilled amounts pertain to other sources of revenue such as contracts with peaker plants to keep them on standby or charging rent to host cell antennas on transmission towers.", + ), + sa.Column( + "rate_schedule_description", + sa.Text(), + nullable=True, + comment="Free-form description of what the rate schedule name is. Not standardized. Often a sub-category of rate_schedule_type.", + ), + sa.Column( + "sales_mwh", + sa.Float(), + nullable=True, + comment="Quantity of electricity sold in MWh.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "avg_customers_per_month", + sa.Float(), + nullable=True, + comment="Average number of customers per month.", + ), + sa.Column( + "kwh_per_customer", sa.Float(), nullable=True, comment="kwh per customer." + ), + sa.Column("revenue_per_kwh", sa.Float(), nullable=True), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_sales_by_rate_schedules_sched304_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + ) + op.create_table( + "core_ferc1__yearly_transmission_lines_sched422", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "start_point", + sa.Text(), + nullable=True, + comment="The starting point of a transmission line.", + ), + sa.Column( + "end_point", + sa.Text(), + nullable=True, + comment="The end point of a transmission line.", + ), + sa.Column( + "operating_voltage_kv", + sa.Float(), + nullable=True, + comment="The operating voltage, expressed kilo-volts, for three-phase 60 cycle alternative current transmission lines.", + ), + sa.Column( + "designed_voltage_kv", + sa.Float(), + nullable=True, + comment="Manufactured (Designed) voltage, expressed in kilo-volts, for three-phase 60 cycle alternative current transmission lines", + ), + sa.Column( + "supporting_structure_type", + sa.Text(), + nullable=True, + comment="Supporting structure of the transmission line.", + ), + sa.Column( + "transmission_line_length_miles", + sa.Float(), + nullable=True, + comment="Length (in pole miles or circuit miles (if transmission lines are underground)) for lines that are stand alone structures (whose cost are reported on a stand-alone basis).", + ), + sa.Column( + "transmission_line_and_structures_length_miles", + sa.Float(), + nullable=True, + comment="Length (in pole miles or circuit miles (if transmission lines are underground)) for lines that are agrregated with other lines / structures (whose cost are aggregated and combined with other structures).", + ), + sa.Column( + "num_transmission_circuits", + sa.Integer(), + nullable=True, + comment="Number of circuits in a transmission line.", + ), + sa.Column( + "conductor_size_and_material", + sa.Text(), + nullable=True, + comment="Size of transmission conductor and material of the transmission line.", + ), + sa.Column( + "capex_land", + sa.Float(), + nullable=True, + comment="Cost of Land and land rights for the transmission line.", + ), + sa.Column( + "capex_other", + sa.Float(), + nullable=True, + comment="Construction and other costs for the transmission line.", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total costs for the transmission line.", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Operating expenses for the transmission line.", + ), + sa.Column( + "opex_maintenance", + sa.Float(), + nullable=True, + comment="Maintenance expenses for the transmission line.", + ), + sa.Column( + "opex_rents", + sa.Float(), + nullable=True, + comment="Rent expenses for the transmission line.", + ), + sa.Column( + "opex_total", + sa.Float(), + nullable=True, + comment="Overall expenses for the transmission line.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_transmission_lines_sched422_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + ) + op.create_table( + "core_ferc1__yearly_utility_plant_summary_sched200", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=False, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "utility_type_other", + sa.Text(), + nullable=True, + comment="Freeform description of type of utility reported in one of the other three other utility_type sections in the core_ferc1__yearly_utility_plant_summary_sched200 table. This field is reported only in the DBF reporting years (1994-2020).", + ), + sa.Column( + "utility_plant_asset_type", + sa.Text(), + nullable=False, + comment="Type of utility plant asset reported in the core_ferc1__yearly_utility_plant_summary_sched200 table. Assets include those leased to others, held for future use, construction work-in-progress and details of accumulated depreciation.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_ferc1__yearly_utility_plant_summary_sched200_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "utility_type", + "utility_plant_asset_type", + name=op.f("pk_core_ferc1__yearly_utility_plant_summary_sched200"), + ), + ) + op.create_table( + "core_pudl__assn_plants_ferc1", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=False, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_core_pudl__assn_plants_ferc1_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_pudl__assn_plants_ferc1_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "plant_name_ferc1", + name=op.f("pk_core_pudl__assn_plants_ferc1"), + ), + ) + op.create_table( + "core_pudl__assn_utilities_ferc1_dbf", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_ferc1_dbf", + sa.Integer(), + nullable=False, + comment="FERC-assigned respondent_id from DBF reporting years, identifying the reporting entity. Stable from year to year.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_pudl__assn_utilities_ferc1_dbf_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1_dbf", name=op.f("pk_core_pudl__assn_utilities_ferc1_dbf") + ), + ) + op.create_table( + "core_pudl__assn_utilities_ferc1_xbrl", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_ferc1_xbrl", + sa.Text(), + nullable=False, + comment="FERC-assigned entity_id from XBRL reporting years, identifying the reporting entity. Stable from year to year.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_core_pudl__assn_utilities_ferc1_xbrl_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1_xbrl", + name=op.f("pk_core_pudl__assn_utilities_ferc1_xbrl"), + ), + ) + op.create_table( + "out_eia923__boiler_fuel", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "sulfur_content_pct", + sa.Float(), + nullable=True, + comment="Sulfur content percentage by weight to the nearest 0.01 percent.", + ), + sa.Column( + "ash_content_pct", + sa.Float(), + nullable=True, + comment="Ash content percentage by weight to the nearest 0.1 percent.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia923__boiler_fuel_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id"], + [ + "core_eia__entity_boilers.plant_id_eia", + "core_eia__entity_boilers.boiler_id", + ], + name=op.f( + "fk_out_eia923__boiler_fuel_plant_id_eia_core_eia__entity_boilers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__boiler_fuel_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia923__boiler_fuel_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia923__boiler_fuel_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__boiler_fuel_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "boiler_id", + "energy_source_code", + "prime_mover_code", + "report_date", + name=op.f("pk_out_eia923__boiler_fuel"), + ), + ) + op.create_table( + "out_eia923__generation", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_out_eia923__generation_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk_out_eia923__generation_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__generation_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia923__generation_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__generation_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "generator_id", + "report_date", + name=op.f("pk_out_eia923__generation"), + ), + ) + op.create_table( + "out_eia923__monthly_boiler_fuel", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "sulfur_content_pct", + sa.Float(), + nullable=True, + comment="Sulfur content percentage by weight to the nearest 0.01 percent.", + ), + sa.Column( + "ash_content_pct", + sa.Float(), + nullable=True, + comment="Ash content percentage by weight to the nearest 0.1 percent.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia923__monthly_boiler_fuel_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id"], + [ + "core_eia__entity_boilers.plant_id_eia", + "core_eia__entity_boilers.boiler_id", + ], + name=op.f( + "fk_out_eia923__monthly_boiler_fuel_plant_id_eia_core_eia__entity_boilers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__monthly_boiler_fuel_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia923__monthly_boiler_fuel_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia923__monthly_boiler_fuel_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__monthly_boiler_fuel_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "boiler_id", + "energy_source_code", + "prime_mover_code", + "report_date", + name=op.f("pk_out_eia923__monthly_boiler_fuel"), + ), + ) + op.create_table( + "out_eia923__monthly_generation", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk_out_eia923__monthly_generation_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__monthly_generation_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia923__monthly_generation_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__monthly_generation_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "generator_id", + "report_date", + name=op.f("pk_out_eia923__monthly_generation"), + ), + ) + op.create_table( + "out_eia923__monthly_generation_fuel_by_generator", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_by_generator_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_by_generator_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_by_generator_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_by_generator_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk_out_eia923__monthly_generation_fuel_by_generator"), + ), + ) + op.create_table( + "out_eia923__monthly_generation_fuel_by_generator_energy_source", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "energy_source_code_num", + sa.Enum( + "energy_source_code_1", + "energy_source_code_2", + "energy_source_code_3", + "energy_source_code_4", + "energy_source_code_5", + "energy_source_code_6", + "energy_source_code_7", + "energy_source_code_8", + ), + nullable=True, + comment="Name of the energy_source_code_N column that this energy source code was reported in for the generator referenced in the same record.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_by_generator_energy_source_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_by_generator_energy_source_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia923__monthly_generation_fuel_by_generator_energy_source_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + "prime_mover_code", + "energy_source_code", + name=op.f( + "pk_out_eia923__monthly_generation_fuel_by_generator_energy_source" + ), + ), + ) + op.create_table( + "out_eia__monthly_generators", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "technology_description", + sa.Text(), + nullable=True, + comment="High level description of the technology used by the generator to produce electricity.", + ), + sa.Column( + "energy_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the generator.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "generator_operating_date", + sa.Date(), + nullable=True, + comment="Date the generator began commercial operation.", + ), + sa.Column( + "generator_retirement_date", + sa.Date(), + nullable=True, + comment="Date of the scheduled or effected retirement of the generator.", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "planned_generator_retirement_date", + sa.Date(), + nullable=True, + comment="Planned effective date of the scheduled retirement of the generator.", + ), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "total_mmbtu", + sa.Float(), + nullable=True, + comment="Total annual heat content of fuel consumed by a plant part record in the plant parts list.", + ), + sa.Column( + "associated_combined_heat_power", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator is associated with a combined heat and power system", + ), + sa.Column( + "bga_source", + sa.Text(), + nullable=True, + comment="The source from where the unit_id_pudl is compiled. The unit_id_pudl comes directly from EIA 860, or string association (which looks at all the boilers and generators that are not associated with a unit and tries to find a matching string in the respective collection of boilers or generator), or from a unit connection (where the unit_id_eia is employed to find additional boiler generator connections).", + ), + sa.Column( + "bypass_heat_recovery", + sa.Boolean(), + nullable=True, + comment="Can this generator operate while bypassing the heat recovery steam generator?", + ), + sa.Column( + "carbon_capture", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses carbon capture technology.", + ), + sa.Column("city", sa.Text(), nullable=True), + sa.Column( + "cofire_fuels", + sa.Boolean(), + nullable=True, + comment="Can the generator co-fire fuels?.", + ), + sa.Column("county", sa.Text(), nullable=True, comment="County name."), + sa.Column( + "current_planned_generator_operating_date", + sa.Date(), + nullable=True, + comment="The most recently updated effective date on which the generator is scheduled to start operation", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.Column( + "deliver_power_transgrid", + sa.Boolean(), + nullable=True, + comment="Indicate whether the generator can deliver power to the transmission grid.", + ), + sa.Column( + "distributed_generation", + sa.Boolean(), + nullable=True, + comment="Whether the generator is considered distributed generation", + ), + sa.Column( + "duct_burners", + sa.Boolean(), + nullable=True, + comment="Indicates whether the unit has duct-burners for supplementary firing of the turbine exhaust gas", + ), + sa.Column( + "energy_source_1_transport_1", + sa.Text(), + nullable=True, + comment="Primary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_1_transport_2", + sa.Text(), + nullable=True, + comment="Secondary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_1_transport_3", + sa.Text(), + nullable=True, + comment="Tertiary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_2_transport_1", + sa.Text(), + nullable=True, + comment="Primary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_2_transport_2", + sa.Text(), + nullable=True, + comment="Secondary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_2_transport_3", + sa.Text(), + nullable=True, + comment="Tertiary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_code_2", + sa.Text(), + nullable=True, + comment="The code representing the second most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_3", + sa.Text(), + nullable=True, + comment="The code representing the third most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_4", + sa.Text(), + nullable=True, + comment="The code representing the fourth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_5", + sa.Text(), + nullable=True, + comment="The code representing the fifth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_6", + sa.Text(), + nullable=True, + comment="The code representing the sixth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_storage_capacity_mwh", + sa.Float(), + nullable=True, + comment="Energy storage capacity in MWh (e.g. for batteries).", + ), + sa.Column( + "ferc_qualifying_facility", + sa.Boolean(), + nullable=True, + comment="Indicatates whether or not a generator is a qualifying FERC cogeneation facility.", + ), + sa.Column( + "fluidized_bed_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses fluidized bed technology", + ), + sa.Column( + "fuel_type_count", + sa.Integer(), + nullable=True, + comment="A count of how many different simple energy sources there are associated with a generator.", + ), + sa.Column( + "latitude", + sa.Float(), + nullable=True, + comment="Latitude of the plant's location, in degrees.", + ), + sa.Column( + "longitude", + sa.Float(), + nullable=True, + comment="Longitude of the plant's location, in degrees.", + ), + sa.Column( + "minimum_load_mw", + sa.Float(), + nullable=True, + comment="The minimum load at which the generator can operate at continuosuly.", + ), + sa.Column( + "multiple_fuels", + sa.Boolean(), + nullable=True, + comment="Can the generator burn multiple fuels?", + ), + sa.Column( + "nameplate_power_factor", + sa.Float(), + nullable=True, + comment="The nameplate power factor of the generator.", + ), + sa.Column( + "net_capacity_mwdc", + sa.Float(), + nullable=True, + comment="Generation capacity in megawatts of direct current that is subject to a net metering agreement. Typically used for behind-the-meter solar PV.", + ), + sa.Column( + "operating_switch", + sa.Text(), + nullable=True, + comment="Indicates whether the fuel switching generator can switch when operating", + ), + sa.Column( + "operational_status_code", + sa.Text(), + nullable=True, + comment="The operating status of the asset.", + ), + sa.Column( + "original_planned_generator_operating_date", + sa.Date(), + nullable=True, + comment="The date the generator was originally scheduled to be operational", + ), + sa.Column( + "other_combustion_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses other combustion technologies", + ), + sa.Column( + "other_modifications_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter commercial operation after any other planned modification is complete.", + ), + sa.Column( + "other_planned_modifications", + sa.Boolean(), + nullable=True, + comment="Indicates whether there are there other modifications planned for the generator.", + ), + sa.Column( + "owned_by_non_utility", + sa.Boolean(), + nullable=True, + comment="Whether any part of generator is owned by a nonutilty", + ), + sa.Column( + "ownership_code", + sa.Text(), + nullable=True, + comment="Identifies the ownership for each generator.", + ), + sa.Column( + "planned_derate_date", + sa.Date(), + nullable=True, + comment="Planned effective month that the generator is scheduled to enter operation after the derate modification.", + ), + sa.Column( + "planned_energy_source_code_1", + sa.Text(), + nullable=True, + comment="New energy source code for the planned repowered generator.", + ), + sa.Column( + "planned_modifications", + sa.Boolean(), + nullable=True, + comment="Indicates whether there are any planned capacity uprates/derates, repowering, other modifications, or generator retirements scheduled for the next 5 years.", + ), + sa.Column( + "planned_net_summer_capacity_derate_mw", + sa.Float(), + nullable=True, + comment="Decrease in summer capacity expected to be realized from the derate modification to the equipment.", + ), + sa.Column( + "planned_net_summer_capacity_uprate_mw", + sa.Float(), + nullable=True, + comment="Increase in summer capacity expected to be realized from the modification to the equipment.", + ), + sa.Column( + "planned_net_winter_capacity_derate_mw", + sa.Float(), + nullable=True, + comment="Decrease in winter capacity expected to be realized from the derate modification to the equipment.", + ), + sa.Column( + "planned_net_winter_capacity_uprate_mw", + sa.Float(), + nullable=True, + comment="Increase in winter capacity expected to be realized from the uprate modification to the equipment.", + ), + sa.Column( + "planned_new_capacity_mw", + sa.Float(), + nullable=True, + comment="The expected new namplate capacity for the generator.", + ), + sa.Column( + "planned_new_prime_mover_code", + sa.Text(), + nullable=True, + comment="New prime mover for the planned repowered generator.", + ), + sa.Column( + "planned_repower_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter operation after the repowering is complete.", + ), + sa.Column( + "planned_uprate_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter operation after the uprate modification.", + ), + sa.Column( + "previously_canceled", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator was previously reported as indefinitely postponed or canceled", + ), + sa.Column( + "pulverized_coal_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses pulverized coal technology", + ), + sa.Column( + "reactive_power_output_mvar", + sa.Float(), + nullable=True, + comment="Reactive Power Output (MVAr)", + ), + sa.Column( + "rto_iso_lmp_node_id", + sa.Text(), + nullable=True, + comment="The designation used to identify the price node in RTO/ISO Locational Marginal Price reports", + ), + sa.Column( + "rto_iso_location_wholesale_reporting_id", + sa.Text(), + nullable=True, + comment="The designation used to report ths specific location of the wholesale sales transactions to FERC for the Electric Quarterly Report", + ), + sa.Column( + "solid_fuel_gasification", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator is part of a solid fuel gasification system", + ), + sa.Column( + "startup_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_2", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_3", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_4", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "stoker_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses stoker technology", + ), + sa.Column("street_address", sa.Text(), nullable=True), + sa.Column( + "subcritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses subcritical technology", + ), + sa.Column( + "summer_capacity_estimate", + sa.Boolean(), + nullable=True, + comment="Whether the summer capacity value was an estimate", + ), + sa.Column( + "summer_capacity_mw", + sa.Float(), + nullable=True, + comment="The net summer capacity.", + ), + sa.Column( + "summer_estimated_capability_mw", + sa.Float(), + nullable=True, + comment="EIA estimated summer capacity (in MWh).", + ), + sa.Column( + "supercritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses supercritical technology", + ), + sa.Column( + "switch_oil_gas", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator switch between oil and natural gas.", + ), + sa.Column( + "syncronized_transmission_grid", + sa.Boolean(), + nullable=True, + comment="Indicates whether standby generators (SB status) can be synchronized to the grid.", + ), + sa.Column( + "time_cold_shutdown_full_load_code", + sa.Text(), + nullable=True, + comment="The minimum amount of time required to bring the unit to full load from shutdown.", + ), + sa.Column( + "timezone", + sa.Enum( + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Timbuktu", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/ComodRivadavia", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Atka", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Coral_Harbour", + "America/Cordoba", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Ensenada", + "America/Fort_Nelson", + "America/Fort_Wayne", + "America/Fortaleza", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indianapolis", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Jujuy", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Knox_IN", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Louisville", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Mendoza", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montreal", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nipigon", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Nuuk", + "America/Ojinaga", + "America/Panama", + "America/Pangnirtung", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Acre", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Rosario", + "America/Santa_Isabel", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Shiprock", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Thunder_Bay", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Virgin", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "America/Yellowknife", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/South_Pole", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Ashkhabad", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Calcutta", + "Asia/Chita", + "Asia/Choibalsan", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Colombo", + "Asia/Dacca", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Harbin", + "Asia/Hebron", + "Asia/Ho_Chi_Minh", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Istanbul", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kashgar", + "Asia/Kathmandu", + "Asia/Katmandu", + "Asia/Khandyga", + "Asia/Kolkata", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macao", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Rangoon", + "Asia/Riyadh", + "Asia/Saigon", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Tel_Aviv", + "Asia/Thimbu", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ujung_Pandang", + "Asia/Ulaanbaatar", + "Asia/Ulan_Bator", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yangon", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faeroe", + "Atlantic/Faroe", + "Atlantic/Jan_Mayen", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/ACT", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Canberra", + "Australia/Currie", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/LHI", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/NSW", + "Australia/North", + "Australia/Perth", + "Australia/Queensland", + "Australia/South", + "Australia/Sydney", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/West", + "Australia/Yancowinna", + "Brazil/Acre", + "Brazil/DeNoronha", + "Brazil/East", + "Brazil/West", + "CET", + "CST6CDT", + "Canada/Atlantic", + "Canada/Central", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Canada/Saskatchewan", + "Canada/Yukon", + "Chile/Continental", + "Chile/EasterIsland", + "Cuba", + "EET", + "EST", + "EST5EDT", + "Egypt", + "Eire", + "Etc/GMT", + "Etc/GMT+0", + "Etc/GMT+1", + "Etc/GMT+10", + "Etc/GMT+11", + "Etc/GMT+12", + "Etc/GMT+2", + "Etc/GMT+3", + "Etc/GMT+4", + "Etc/GMT+5", + "Etc/GMT+6", + "Etc/GMT+7", + "Etc/GMT+8", + "Etc/GMT+9", + "Etc/GMT-0", + "Etc/GMT-1", + "Etc/GMT-10", + "Etc/GMT-11", + "Etc/GMT-12", + "Etc/GMT-13", + "Etc/GMT-14", + "Etc/GMT-2", + "Etc/GMT-3", + "Etc/GMT-4", + "Etc/GMT-5", + "Etc/GMT-6", + "Etc/GMT-7", + "Etc/GMT-8", + "Etc/GMT-9", + "Etc/GMT0", + "Etc/Greenwich", + "Etc/UCT", + "Etc/UTC", + "Etc/Universal", + "Etc/Zulu", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belfast", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kiev", + "Europe/Kirov", + "Europe/Kyiv", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Nicosia", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Tiraspol", + "Europe/Ulyanovsk", + "Europe/Uzhgorod", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zaporozhye", + "Europe/Zurich", + "GB", + "GB-Eire", + "GMT", + "GMT+0", + "GMT-0", + "GMT0", + "Greenwich", + "HST", + "Hongkong", + "Iceland", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Iran", + "Israel", + "Jamaica", + "Japan", + "Kwajalein", + "Libya", + "MET", + "MST", + "MST7MDT", + "Mexico/BajaNorte", + "Mexico/BajaSur", + "Mexico/General", + "NZ", + "NZ-CHAT", + "Navajo", + "PRC", + "PST8PDT", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Chuuk", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Enderbury", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Johnston", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Pohnpei", + "Pacific/Ponape", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Samoa", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Truk", + "Pacific/Wake", + "Pacific/Wallis", + "Pacific/Yap", + "Poland", + "Portugal", + "ROC", + "ROK", + "Singapore", + "Turkey", + "UCT", + "US/Alaska", + "US/Aleutian", + "US/Arizona", + "US/Central", + "US/East-Indiana", + "US/Eastern", + "US/Hawaii", + "US/Indiana-Starke", + "US/Michigan", + "US/Mountain", + "US/Pacific", + "US/Samoa", + "UTC", + "Universal", + "W-SU", + "WET", + "Zulu", + ), + nullable=True, + comment="IANA timezone name", + ), + sa.Column( + "topping_bottoming_code", + sa.Text(), + nullable=True, + comment="If the generator is associated with a combined heat and power system, indicates whether the generator is part of a topping cycle or a bottoming cycle", + ), + sa.Column( + "turbines_inverters_hydrokinetics", + sa.Integer(), + nullable=True, + comment="Number of wind turbines, or hydrokinetic buoys.", + ), + sa.Column( + "turbines_num", + sa.Integer(), + nullable=True, + comment="Number of wind turbines, or hydrokinetic buoys.", + ), + sa.Column( + "ultrasupercritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses ultra-supercritical technology", + ), + sa.Column( + "uprate_derate_completed_date", + sa.Date(), + nullable=True, + comment="The date when the uprate or derate was completed.", + ), + sa.Column( + "uprate_derate_during_year", + sa.Boolean(), + nullable=True, + comment="Was an uprate or derate completed on this generator during the reporting year?", + ), + sa.Column( + "winter_capacity_estimate", + sa.Boolean(), + nullable=True, + comment="Whether the winter capacity value was an estimate", + ), + sa.Column( + "winter_capacity_mw", + sa.Float(), + nullable=True, + comment="The net winter capacity.", + ), + sa.Column( + "winter_estimated_capability_mw", + sa.Float(), + nullable=True, + comment="EIA estimated winter capacity (in MWh).", + ), + sa.Column( + "zip_code", sa.Text(), nullable=True, comment="Five digit US Zip Code." + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_out_eia__monthly_generators_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_1"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_1_transport_1_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_2"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_1_transport_2_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_3"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_1_transport_3_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_1"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_2_transport_1_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_2"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_2_transport_2_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_3"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_2_transport_3_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_2"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_code_2_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_3"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_code_3_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_4"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_code_4_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_5"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_code_5_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_6"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_energy_source_code_6_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["operational_status_code"], + ["core_eia__codes_operational_status.code"], + name=op.f( + "fk_out_eia__monthly_generators_operational_status_code_core_eia__codes_operational_status" + ), + ), + sa.ForeignKeyConstraint( + ["planned_energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_planned_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["planned_new_prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia__monthly_generators_planned_new_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk_out_eia__monthly_generators_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia__monthly_generators_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia__monthly_generators_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_startup_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_2"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_startup_source_code_2_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_3"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_startup_source_code_3_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_4"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__monthly_generators_startup_source_code_4_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia"], + ["core_eia__entity_utilities.utility_id_eia"], + name=op.f( + "fk_out_eia__monthly_generators_utility_id_eia_core_eia__entity_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia__monthly_generators_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk_out_eia__monthly_generators"), + ), + ) + op.create_table( + "out_eia__yearly_utilities", + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column("street_address", sa.Text(), nullable=True), + sa.Column("city", sa.Text(), nullable=True), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "zip_code", sa.Text(), nullable=True, comment="Five digit US Zip Code." + ), + sa.Column( + "plants_reported_owner", + sa.Boolean(), + nullable=True, + comment="Is the reporting entity an owner of power plants reported on Schedule 2 of the form?", + ), + sa.Column( + "plants_reported_operator", + sa.Boolean(), + nullable=True, + comment="Is the reporting entity an operator of power plants reported on Schedule 2 of the form?", + ), + sa.Column( + "plants_reported_asset_manager", + sa.Boolean(), + nullable=True, + comment="Is the reporting entity an asset manager of power plants reported on Schedule 2 of the form?", + ), + sa.Column( + "plants_reported_other_relationship", + sa.Boolean(), + nullable=True, + comment="Does the reporting entity have any other relationship to the power plants reported on Schedule 2 of the form?", + ), + sa.Column( + "entity_type", + sa.Text(), + nullable=True, + comment="Entity type of principal owner.", + ), + sa.Column("attention_line", sa.Text(), nullable=True), + sa.Column("address_2", sa.Text(), nullable=True), + sa.Column( + "zip_code_4", + sa.Text(), + nullable=True, + comment="Four digit US Zip Code suffix.", + ), + sa.Column( + "contact_firstname", + sa.Text(), + nullable=True, + comment="First name of utility contact 1.", + ), + sa.Column( + "contact_lastname", + sa.Text(), + nullable=True, + comment="Last name of utility contact 1.", + ), + sa.Column( + "contact_title", + sa.Text(), + nullable=True, + comment="Title of of utility contact 1.", + ), + sa.Column( + "phone_number", + sa.Text(), + nullable=True, + comment="Phone number for utility contact 1.", + ), + sa.Column( + "phone_extension", + sa.Text(), + nullable=True, + comment="Phone extension for utility contact 1", + ), + sa.Column( + "contact_firstname_2", + sa.Text(), + nullable=True, + comment="First name of utility contact 2.", + ), + sa.Column( + "contact_lastname_2", + sa.Text(), + nullable=True, + comment="Last name of utility contact 2.", + ), + sa.Column( + "contact_title_2", + sa.Text(), + nullable=True, + comment="Title of utility contact 2.", + ), + sa.Column( + "phone_number_2", + sa.Text(), + nullable=True, + comment="Phone number for utility contact 2.", + ), + sa.Column( + "phone_extension_2", + sa.Text(), + nullable=True, + comment="Phone extension for utility contact 2", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_out_eia__yearly_utilities_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia__yearly_utilities_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia__yearly_utilities_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_eia", "report_date", name=op.f("pk_out_eia__yearly_utilities") + ), + ) + op.create_table( + "out_ferc1__yearly_balance_sheet_assets_sched110", + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "asset_type", + sa.Text(), + nullable=False, + comment="Type of asset being reported to the core_ferc1__yearly_balance_sheet_assets_sched110 table.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.Column( + "starting_balance", + sa.Float(), + nullable=True, + comment="Account balance at beginning of year.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_balance_sheet_assets_sched110_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_balance_sheet_assets_sched110_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "asset_type", + name=op.f("pk_out_ferc1__yearly_balance_sheet_assets_sched110"), + ), + ) + op.create_table( + "out_ferc1__yearly_balance_sheet_liabilities_sched110", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "starting_balance", + sa.Float(), + nullable=True, + comment="Account balance at beginning of year.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "liability_type", + sa.Text(), + nullable=False, + comment="Type of liability being reported to the core_ferc1__yearly_balance_sheet_liabilities_sched110 table.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_balance_sheet_liabilities_sched110_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_balance_sheet_liabilities_sched110_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "liability_type", + name=op.f("pk_out_ferc1__yearly_balance_sheet_liabilities_sched110"), + ), + ) + op.create_table( + "out_ferc1__yearly_cash_flows_sched120", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "amount_type", + sa.Text(), + nullable=False, + comment="Label describing the type of amount being reported. This could be a balance or a change in value.", + ), + sa.Column( + "amount", + sa.Float(), + nullable=True, + comment="Reported amount of dollars. This could be a balance or a change in value.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_cash_flows_sched120_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_cash_flows_sched120_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "amount_type", + name=op.f("pk_out_ferc1__yearly_cash_flows_sched120"), + ), + ) + op.create_table( + "out_ferc1__yearly_depreciation_by_function_sched219", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "depreciation_type", + sa.Text(), + nullable=True, + comment="Type of depreciation provision within FERC Account 108, including cost ofremoval, depreciation expenses, salvage, cost of retired plant, etc.", + ), + sa.Column( + "plant_function", + sa.Text(), + nullable=False, + comment="Functional role played by utility plant (steam production, nuclear production, distribution, transmission, etc.).", + ), + sa.Column( + "plant_status", + sa.Text(), + nullable=False, + comment="Utility plant financial status (in service, future, leased, total).", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=False, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_depreciation_by_function_sched219_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_depreciation_by_function_sched219_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "plant_function", + "plant_status", + "utility_type", + name=op.f("pk_out_ferc1__yearly_depreciation_by_function_sched219"), + ), + ) + op.create_table( + "out_ferc1__yearly_depreciation_changes_sched219", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "depreciation_type", + sa.Text(), + nullable=False, + comment="Type of depreciation provision within FERC Account 108, including cost ofremoval, depreciation expenses, salvage, cost of retired plant, etc.", + ), + sa.Column( + "plant_status", + sa.Text(), + nullable=False, + comment="Utility plant financial status (in service, future, leased, total).", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=False, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_depreciation_changes_sched219_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_depreciation_changes_sched219_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "depreciation_type", + "plant_status", + "utility_type", + name=op.f("pk_out_ferc1__yearly_depreciation_changes_sched219"), + ), + ) + op.create_table( + "out_ferc1__yearly_depreciation_summary_sched336", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "plant_function", + sa.Text(), + nullable=False, + comment="Functional role played by utility plant (steam production, nuclear production, distribution, transmission, etc.).", + ), + sa.Column( + "ferc_account_label", + sa.Text(), + nullable=False, + comment="Long FERC account identifier derived from values reported in the XBRL taxonomies. May also refer to aggregations of individual FERC accounts.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=True, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_depreciation_summary_sched336_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_depreciation_summary_sched336_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "plant_function", + "ferc_account_label", + name=op.f("pk_out_ferc1__yearly_depreciation_summary_sched336"), + ), + ) + op.create_table( + "out_ferc1__yearly_energy_dispositions_sched401", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "energy_disposition_type", + sa.Text(), + nullable=False, + comment="Type of energy disposition reported in the core_ferc1__yearly_energy_dispositions_sched401. Dispositions include sales to customers, re-sales of energy, energy used internally, losses, etc.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.Column( + "energy_mwh", + sa.Float(), + nullable=True, + comment="Sources and uses of energy in MWh.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_energy_dispositions_sched401_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_energy_dispositions_sched401_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "energy_disposition_type", + name=op.f("pk_out_ferc1__yearly_energy_dispositions_sched401"), + ), + ) + op.create_table( + "out_ferc1__yearly_energy_sources_sched401", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "energy_source_type", + sa.Text(), + nullable=False, + comment="Type of energy source reported in the core_ferc1__yearly_energy_sources_sched401 table. There are three groups of energy sources: generation, power exchanges and transmission.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.Column( + "energy_mwh", + sa.Float(), + nullable=True, + comment="Sources and uses of energy in MWh.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_energy_sources_sched401_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_energy_sources_sched401_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "energy_source_type", + name=op.f("pk_out_ferc1__yearly_energy_sources_sched401"), + ), + ) + op.create_table( + "out_ferc1__yearly_income_statements_sched114", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=False, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "income_type", + sa.Text(), + nullable=False, + comment="Type of income reported in income_statement_ferc1 table.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_income_statements_sched114_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_income_statements_sched114_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "utility_type", + "income_type", + name=op.f("pk_out_ferc1__yearly_income_statements_sched114"), + ), + ) + op.create_table( + "out_ferc1__yearly_operating_expenses_sched320", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "expense_type", sa.Text(), nullable=False, comment="The type of expense." + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=True, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_operating_expenses_sched320_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_operating_expenses_sched320_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "expense_type", + name=op.f("pk_out_ferc1__yearly_operating_expenses_sched320"), + ), + ) + op.create_table( + "out_ferc1__yearly_operating_revenues_sched300", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "revenue_type", + sa.Text(), + nullable=False, + comment="Label describing types of revenues.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "sales_mwh", + sa.Float(), + nullable=True, + comment="Quantity of electricity sold in MWh.", + ), + sa.Column( + "avg_customers_per_month", + sa.Float(), + nullable=True, + comment="Average number of customers per month.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=True, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_operating_revenues_sched300_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_operating_revenues_sched300_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "revenue_type", + name=op.f("pk_out_ferc1__yearly_operating_revenues_sched300"), + ), + ) + op.create_table( + "out_ferc1__yearly_other_regulatory_liabilities_sched278", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "description", + sa.Text(), + nullable=True, + comment="Long human-readable description of the meaning of a code/label.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "starting_balance", + sa.Float(), + nullable=True, + comment="Account balance at beginning of year.", + ), + sa.Column( + "increase_in_other_regulatory_liabilities", + sa.Float(), + nullable=True, + comment="The increase during the reporting period of other regulatory liabilities.", + ), + sa.Column( + "account_detail", + sa.Text(), + nullable=True, + comment="Description of the account number credited from making debit adjustment to other regulatory liabilities.", + ), + sa.Column( + "decrease_in_other_regulatory_liabilities", + sa.Float(), + nullable=True, + comment="The decrease during the reporting period of other regulatory liabilities.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_other_regulatory_liabilities_sched278_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_other_regulatory_liabilities_sched278_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + ) + op.create_table( + "out_ferc1__yearly_plant_in_service_sched204", + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=True, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "additions", + sa.Float(), + nullable=True, + comment="Cost of acquisition of items classified within the account.", + ), + sa.Column( + "adjustments", + sa.Float(), + nullable=True, + comment="Cost of adjustments to the account.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "ferc_account_label", + sa.Text(), + nullable=False, + comment="Long FERC account identifier derived from values reported in the XBRL taxonomies. May also refer to aggregations of individual FERC accounts.", + ), + sa.Column( + "retirements", + sa.Float(), + nullable=True, + comment="Cost of disposal of items classified within the account.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.Column( + "starting_balance", + sa.Float(), + nullable=True, + comment="Account balance at beginning of year.", + ), + sa.Column( + "transfers", + sa.Float(), + nullable=True, + comment="Cost of transfers into (out of) the account.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_plant_in_service_sched204_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_plant_in_service_sched204_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "ferc_account_label", + name=op.f("pk_out_ferc1__yearly_plant_in_service_sched204"), + ), + ) + op.create_table( + "out_ferc1__yearly_purchased_power_and_exchanges_sched326", + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "seller_name", + sa.Text(), + nullable=True, + comment="Name of the seller, or the other party in an exchange transaction.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "billing_demand_mw", + sa.Float(), + nullable=True, + comment="Monthly average billing demand (for requirements purchases, and any transactions involving demand charges). In megawatts.", + ), + sa.Column( + "coincident_peak_demand_mw", + sa.Float(), + nullable=True, + comment="Average monthly coincident peak (CP) demand (for requirements purchases, and any transactions involving demand charges). Monthly CP demand is the metered demand during the hour (60-minute integration) in which the supplier's system reaches its monthly peak. In megawatts.", + ), + sa.Column( + "delivered_mwh", + sa.Float(), + nullable=True, + comment="Gross megawatt-hours delivered in power exchanges and used as the basis for settlement.", + ), + sa.Column( + "demand_charges", sa.Float(), nullable=True, comment="Demand charges (USD)." + ), + sa.Column( + "energy_charges", sa.Float(), nullable=True, comment="Energy charges (USD)." + ), + sa.Column( + "non_coincident_peak_demand_mw", + sa.Float(), + nullable=True, + comment="Average monthly non-coincident peak (NCP) demand (for requirements purhcases, and any transactions involving demand charges). Monthly NCP demand is the maximum metered hourly (60-minute integration) demand in a month. In megawatts.", + ), + sa.Column( + "other_charges", + sa.Float(), + nullable=True, + comment="Other charges, including out-of-period adjustments (USD).", + ), + sa.Column( + "purchase_type_code", + sa.Text(), + nullable=True, + comment="Categorization based on the original contractual terms and conditions of the service. Must be one of 'requirements', 'long_firm', 'intermediate_firm', 'short_firm', 'long_unit', 'intermediate_unit', 'electricity_exchange', 'other_service', or 'adjustment'. Requirements service is ongoing high reliability service, with load integrated into system resource planning. 'Long term' means 5+ years. 'Intermediate term' is 1-5 years. 'Short term' is less than 1 year. 'Firm' means not interruptible for economic reasons. 'unit' indicates service from a particular designated generating unit. 'exchange' is an in-kind transaction.", + ), + sa.Column( + "purchased_mwh", + sa.Float(), + nullable=True, + comment="Megawatt-hours shown on bills rendered to the respondent. Includes both electricity purchased for storage and non-storage purposes, which were lumped together prior to 2021.", + ), + sa.Column( + "purchased_storage_mwh", + sa.Float(), + nullable=True, + comment="Number of megawatt hours purchased during the period for energy storage.", + ), + sa.Column( + "purchased_other_than_storage_mwh", + sa.Float(), + nullable=True, + comment="Number of megawatt hours purchased during the period for other than energy storage.", + ), + sa.Column( + "received_mwh", + sa.Float(), + nullable=True, + comment="Gross megawatt-hours received in power exchanges and used as the basis for settlement.", + ), + sa.Column( + "tariff", + sa.Text(), + nullable=True, + comment="FERC Rate Schedule Number or Tariff. (Note: may be incomplete if originally reported on multiple lines.)", + ), + sa.Column( + "total_settlement", + sa.Float(), + nullable=True, + comment="Sum of demand, energy, and other charges (USD). For power exchanges, the settlement amount for the net receipt of energy. If more energy was delivered than received, this amount is negative.", + ), + sa.ForeignKeyConstraint( + ["purchase_type_code"], + ["core_ferc1__codes_power_purchase_types.code"], + name=op.f( + "fk_out_ferc1__yearly_purchased_power_and_exchanges_sched326_purchase_type_code_core_ferc1__codes_power_purchase_types" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_purchased_power_and_exchanges_sched326_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_purchased_power_and_exchanges_sched326_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + ) + op.create_table( + "out_ferc1__yearly_retained_earnings_sched118", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "earnings_type", + sa.Text(), + nullable=False, + comment="Label describing types of earnings.", + ), + sa.Column( + "starting_balance", + sa.Float(), + nullable=True, + comment="Account balance at beginning of year.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "balance", + sa.Text(), + nullable=True, + comment="Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.", + ), + sa.Column( + "ferc_account", + sa.Text(), + nullable=True, + comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_retained_earnings_sched118_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_retained_earnings_sched118_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "earnings_type", + name=op.f("pk_out_ferc1__yearly_retained_earnings_sched118"), + ), + ) + op.create_table( + "out_ferc1__yearly_sales_by_rate_schedules_sched304", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "rate_schedule_type", + sa.Text(), + nullable=True, + comment="Categorization of rate schedule type.", + ), + sa.Column( + "billing_status", + sa.Text(), + nullable=True, + comment="Whether an amount is billed, unbilled, or both. Billed amounts pertain to the exchange of energy and unbilled amounts pertain to other sources of revenue such as contracts with peaker plants to keep them on standby or charging rent to host cell antennas on transmission towers.", + ), + sa.Column( + "rate_schedule_description", + sa.Text(), + nullable=True, + comment="Free-form description of what the rate schedule name is. Not standardized. Often a sub-category of rate_schedule_type.", + ), + sa.Column( + "sales_mwh", + sa.Float(), + nullable=True, + comment="Quantity of electricity sold in MWh.", + ), + sa.Column( + "dollar_value", + sa.Float(), + nullable=True, + comment="Dollar value of reported income, expense, asset, or liability.", + ), + sa.Column( + "avg_customers_per_month", + sa.Float(), + nullable=True, + comment="Average number of customers per month.", + ), + sa.Column( + "kwh_per_customer", sa.Float(), nullable=True, comment="kwh per customer." + ), + sa.Column("revenue_per_kwh", sa.Float(), nullable=True), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_sales_by_rate_schedules_sched304_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_sales_by_rate_schedules_sched304_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + ) + op.create_table( + "out_ferc1__yearly_transmission_lines_sched422", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "start_point", + sa.Text(), + nullable=True, + comment="The starting point of a transmission line.", + ), + sa.Column( + "end_point", + sa.Text(), + nullable=True, + comment="The end point of a transmission line.", + ), + sa.Column( + "operating_voltage_kv", + sa.Float(), + nullable=True, + comment="The operating voltage, expressed kilo-volts, for three-phase 60 cycle alternative current transmission lines.", + ), + sa.Column( + "designed_voltage_kv", + sa.Float(), + nullable=True, + comment="Manufactured (Designed) voltage, expressed in kilo-volts, for three-phase 60 cycle alternative current transmission lines", + ), + sa.Column( + "supporting_structure_type", + sa.Text(), + nullable=True, + comment="Supporting structure of the transmission line.", + ), + sa.Column( + "transmission_line_length_miles", + sa.Float(), + nullable=True, + comment="Length (in pole miles or circuit miles (if transmission lines are underground)) for lines that are stand alone structures (whose cost are reported on a stand-alone basis).", + ), + sa.Column( + "transmission_line_and_structures_length_miles", + sa.Float(), + nullable=True, + comment="Length (in pole miles or circuit miles (if transmission lines are underground)) for lines that are agrregated with other lines / structures (whose cost are aggregated and combined with other structures).", + ), + sa.Column( + "num_transmission_circuits", + sa.Integer(), + nullable=True, + comment="Number of circuits in a transmission line.", + ), + sa.Column( + "conductor_size_and_material", + sa.Text(), + nullable=True, + comment="Size of transmission conductor and material of the transmission line.", + ), + sa.Column( + "capex_land", + sa.Float(), + nullable=True, + comment="Cost of plant: land and land rights (USD).", + ), + sa.Column( + "capex_other", + sa.Float(), + nullable=True, + comment="Other costs associated with the plant (USD).", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_maintenance", + sa.Float(), + nullable=True, + comment="Production expenses: Maintenance (USD).", + ), + sa.Column( + "opex_rents", + sa.Float(), + nullable=True, + comment="Production expenses: rents (USD).", + ), + sa.Column( + "opex_total", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_transmission_lines_sched422_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_transmission_lines_sched422_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + ) + op.create_table( + "out_ferc1__yearly_utility_plant_summary_sched200", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_type", + sa.Text(), + nullable=False, + comment="Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.", + ), + sa.Column( + "utility_type_other", + sa.Text(), + nullable=True, + comment="Freeform description of type of utility reported in one of the other three other utility_type sections in the core_ferc1__yearly_utility_plant_summary_sched200 table. This field is reported only in the DBF reporting years (1994-2020).", + ), + sa.Column( + "utility_plant_asset_type", + sa.Text(), + nullable=False, + comment="Type of utility plant asset reported in the core_ferc1__yearly_utility_plant_summary_sched200 table. Assets include those leased to others, held for future use, construction work-in-progress and details of accumulated depreciation.", + ), + sa.Column( + "row_type_xbrl", + sa.Enum("calculated_value", "reported_value", "correction"), + nullable=True, + comment="Indicates whether the value reported in the row is calculated, or uniquely reported within the table.", + ), + sa.Column( + "ending_balance", + sa.Float(), + nullable=True, + comment="Account balance at end of year.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1"], + ["core_pudl__assn_utilities_ferc1.utility_id_ferc1"], + name=op.f( + "fk_out_ferc1__yearly_utility_plant_summary_sched200_utility_id_ferc1_core_pudl__assn_utilities_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_utility_plant_summary_sched200_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "report_year", + "utility_type", + "utility_plant_asset_type", + name=op.f("pk_out_ferc1__yearly_utility_plant_summary_sched200"), + ), + ) + op.create_table( + "_out_eia__plants_utilities", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "report_date"], + [ + "core_eia860__scd_plants.plant_id_eia", + "core_eia860__scd_plants.report_date", + ], + name=op.f( + "fk__out_eia__plants_utilities_plant_id_eia_core_eia860__scd_plants" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk__out_eia__plants_utilities_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk__out_eia__plants_utilities_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk__out_eia__plants_utilities_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "utility_id_eia", + name=op.f("pk__out_eia__plants_utilities"), + ), + ) + op.create_table( + "_out_eia__yearly_heat_rate_by_unit", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=False, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "report_date"], + [ + "core_eia860__scd_plants.plant_id_eia", + "core_eia860__scd_plants.report_date", + ], + name=op.f( + "fk__out_eia__yearly_heat_rate_by_unit_plant_id_eia_core_eia860__scd_plants" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "unit_id_pudl", + name=op.f("pk__out_eia__yearly_heat_rate_by_unit"), + ), + ) + op.create_table( + "_out_ferc1__yearly_hydroelectric_plants_sched406", + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=False, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "asset_retirement_cost", + sa.Float(), + nullable=True, + comment="Asset retirement cost (USD).", + ), + sa.Column("avg_num_employees", sa.Float(), nullable=True), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "capex_equipment", + sa.Float(), + nullable=True, + comment="Cost of plant: equipment (USD).", + ), + sa.Column( + "capex_facilities", + sa.Float(), + nullable=True, + comment="Cost of plant: reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "capex_land", + sa.Float(), + nullable=True, + comment="Cost of plant: land and land rights (USD).", + ), + sa.Column( + "capex_per_mw", + sa.Float(), + nullable=True, + comment="Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.", + ), + sa.Column( + "capex_roads", + sa.Float(), + nullable=True, + comment="Cost of plant: roads, railroads, and bridges (USD).", + ), + sa.Column( + "capex_structures", + sa.Float(), + nullable=True, + comment="Cost of plant: structures and improvements (USD).", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "construction_type", + sa.Enum("conventional", "outdoor", "semioutdoor"), + nullable=True, + comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings.", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "installation_year", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "net_capacity_adverse_conditions_mw", + sa.Float(), + nullable=True, + comment="Net plant capability under the least favorable operating conditions, in megawatts.", + ), + sa.Column( + "net_capacity_favorable_conditions_mw", + sa.Float(), + nullable=True, + comment="Net plant capability under the most favorable operating conditions, in megawatts.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "opex_dams", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "opex_electric", + sa.Float(), + nullable=True, + comment="Production expenses: electric expenses (USD).", + ), + sa.Column( + "opex_engineering", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance, supervision, and engineering (USD).", + ), + sa.Column( + "opex_generation_misc", + sa.Float(), + nullable=True, + comment="Production expenses: miscellaneous power generation expenses (USD).", + ), + sa.Column( + "opex_hydraulic", + sa.Float(), + nullable=True, + comment="Production expenses: hydraulic expenses (USD).", + ), + sa.Column( + "opex_misc_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of miscellaneous hydraulic plant (USD).", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_per_mwh", + sa.Float(), + nullable=True, + comment="Total production expenses (USD per MWh generated).", + ), + sa.Column( + "opex_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of electric plant (USD).", + ), + sa.Column( + "opex_rents", + sa.Float(), + nullable=True, + comment="Production expenses: rents (USD).", + ), + sa.Column( + "opex_structures", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of structures (USD).", + ), + sa.Column( + "opex_total", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "opex_total_nonfuel", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "opex_water_for_power", + sa.Float(), + nullable=True, + comment="Production expenses: water for power (USD).", + ), + sa.Column( + "peak_demand_mw", + sa.Float(), + nullable=True, + comment="Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.", + ), + sa.Column( + "plant_hours_connected_while_generating", + sa.Float(), + nullable=True, + comment="Hours the plant was connected to load while generating in the report year.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_type", sa.Text(), nullable=True), + sa.Column( + "project_num", + sa.Integer(), + nullable=True, + comment="FERC Licensed Project Number.", + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk__out_ferc1__yearly_hydroelectric_plants_sched406_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk__out_ferc1__yearly_hydroelectric_plants_sched406_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk__out_ferc1__yearly_hydroelectric_plants_sched406_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "record_id", + name=op.f("pk__out_ferc1__yearly_hydroelectric_plants_sched406"), + ), + ) + op.create_table( + "_out_ferc1__yearly_plants_utilities", + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=False, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk__out_ferc1__yearly_plants_utilities_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk__out_ferc1__yearly_plants_utilities_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk__out_ferc1__yearly_plants_utilities_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "utility_id_ferc1", + "plant_name_ferc1", + name=op.f("pk__out_ferc1__yearly_plants_utilities"), + ), + ) + op.create_table( + "_out_ferc1__yearly_pumped_storage_plants_sched408", + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=False, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "asset_retirement_cost", + sa.Float(), + nullable=True, + comment="Asset retirement cost (USD).", + ), + sa.Column("avg_num_employees", sa.Float(), nullable=True), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "capex_equipment_electric", + sa.Float(), + nullable=True, + comment="Cost of plant: accessory electric equipment (USD).", + ), + sa.Column( + "capex_equipment_misc", + sa.Float(), + nullable=True, + comment="Cost of plant: miscellaneous power plant equipment (USD).", + ), + sa.Column( + "capex_facilities", + sa.Float(), + nullable=True, + comment="Cost of plant: reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "capex_land", + sa.Float(), + nullable=True, + comment="Cost of plant: land and land rights (USD).", + ), + sa.Column( + "capex_per_mw", + sa.Float(), + nullable=True, + comment="Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.", + ), + sa.Column( + "capex_roads", + sa.Float(), + nullable=True, + comment="Cost of plant: roads, railroads, and bridges (USD).", + ), + sa.Column( + "capex_structures", + sa.Float(), + nullable=True, + comment="Cost of plant: structures and improvements (USD).", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "capex_wheels_turbines_generators", + sa.Float(), + nullable=True, + comment="Cost of plant: water wheels, turbines, and generators (USD).", + ), + sa.Column( + "construction_type", + sa.Enum("conventional", "outdoor", "semioutdoor"), + nullable=True, + comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings.", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "energy_used_for_pumping_mwh", + sa.Float(), + nullable=True, + comment="Energy used for pumping, in megawatt-hours.", + ), + sa.Column( + "installation_year", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "net_load_mwh", + sa.Float(), + nullable=True, + comment="Net output for load (net generation - energy used for pumping) in megawatt-hours.", + ), + sa.Column( + "opex_dams", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "opex_electric", + sa.Float(), + nullable=True, + comment="Production expenses: electric expenses (USD).", + ), + sa.Column( + "opex_engineering", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance, supervision, and engineering (USD).", + ), + sa.Column( + "opex_generation_misc", + sa.Float(), + nullable=True, + comment="Production expenses: miscellaneous power generation expenses (USD).", + ), + sa.Column( + "opex_misc_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of miscellaneous hydraulic plant (USD).", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_per_mwh", + sa.Float(), + nullable=True, + comment="Total production expenses (USD per MWh generated).", + ), + sa.Column( + "opex_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of electric plant (USD).", + ), + sa.Column( + "opex_production_before_pumping", + sa.Float(), + nullable=True, + comment="Total production expenses before pumping (USD).", + ), + sa.Column( + "opex_pumped_storage", + sa.Float(), + nullable=True, + comment="Production expenses: pumped storage (USD).", + ), + sa.Column( + "opex_pumping", + sa.Float(), + nullable=True, + comment="Production expenses: We are here to PUMP YOU UP! (USD).", + ), + sa.Column( + "opex_rents", + sa.Float(), + nullable=True, + comment="Production expenses: rents (USD).", + ), + sa.Column( + "opex_structures", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of structures (USD).", + ), + sa.Column( + "opex_total", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "opex_total_nonfuel", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "opex_water_for_power", + sa.Float(), + nullable=True, + comment="Production expenses: water for power (USD).", + ), + sa.Column( + "peak_demand_mw", + sa.Float(), + nullable=True, + comment="Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.", + ), + sa.Column( + "plant_capability_mw", + sa.Float(), + nullable=True, + comment="Net plant capability in megawatts.", + ), + sa.Column( + "plant_hours_connected_while_generating", + sa.Float(), + nullable=True, + comment="Hours the plant was connected to load while generating in the report year.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "project_num", + sa.Integer(), + nullable=True, + comment="FERC Licensed Project Number.", + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk__out_ferc1__yearly_pumped_storage_plants_sched408_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk__out_ferc1__yearly_pumped_storage_plants_sched408_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk__out_ferc1__yearly_pumped_storage_plants_sched408_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "record_id", + name=op.f("pk__out_ferc1__yearly_pumped_storage_plants_sched408"), + ), + ) + op.create_table( + "_out_ferc1__yearly_small_plants_sched410", + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=False, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "capex_per_mw", + sa.Float(), + nullable=True, + comment="Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column("fuel_type", sa.Text(), nullable=True), + sa.Column( + "license_id_ferc1", + sa.Integer(), + nullable=True, + comment="FERC issued operating license ID for the facility, if available. This value is extracted from the original plant name where possible.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "opex_fuel", + sa.Float(), + nullable=True, + comment="Production expenses: fuel (USD).", + ), + sa.Column( + "opex_maintenance", + sa.Float(), + nullable=True, + comment="Production expenses: Maintenance (USD).", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_total", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "opex_total_nonfuel", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "peak_demand_mw", + sa.Float(), + nullable=True, + comment="Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.", + ), + sa.Column("plant_type", sa.Text(), nullable=True), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk__out_ferc1__yearly_small_plants_sched410_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk__out_ferc1__yearly_small_plants_sched410_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk__out_ferc1__yearly_small_plants_sched410_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "record_id", name=op.f("pk__out_ferc1__yearly_small_plants_sched410") + ), + ) + op.create_table( + "_out_ferc1__yearly_steam_plants_sched402", + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "plant_id_ferc1", + sa.Integer(), + nullable=True, + comment="Algorithmically assigned PUDL FERC Plant ID. WARNING: NOT STABLE BETWEEN PUDL DB INITIALIZATIONS.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "asset_retirement_cost", + sa.Float(), + nullable=True, + comment="Asset retirement cost (USD).", + ), + sa.Column("avg_num_employees", sa.Float(), nullable=True), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "capex_annual_addition", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total`.", + ), + sa.Column( + "capex_annual_addition_rolling", + sa.Float(), + nullable=True, + comment="Year-to-date capital addition into `capex_total`.", + ), + sa.Column( + "capex_annual_per_kw", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total` per kw.", + ), + sa.Column( + "capex_annual_per_mw", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total` per MW.", + ), + sa.Column( + "capex_annual_per_mw_rolling", + sa.Float(), + nullable=True, + comment="Year-to-date capital addition into `capex_total` per MW.", + ), + sa.Column( + "capex_annual_per_mwh", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total` per MWh.", + ), + sa.Column( + "capex_annual_per_mwh_rolling", + sa.Float(), + nullable=True, + comment="Year-to-date capital addition into `capex_total` per MWh.", + ), + sa.Column( + "capex_equipment", + sa.Float(), + nullable=True, + comment="Cost of plant: equipment (USD).", + ), + sa.Column( + "capex_land", + sa.Float(), + nullable=True, + comment="Cost of plant: land and land rights (USD).", + ), + sa.Column( + "capex_per_mw", + sa.Float(), + nullable=True, + comment="Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.", + ), + sa.Column( + "capex_structures", + sa.Float(), + nullable=True, + comment="Cost of plant: structures and improvements (USD).", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "capex_wo_retirement_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD) without retirements.", + ), + sa.Column( + "construction_type", + sa.Enum("conventional", "outdoor", "semioutdoor"), + nullable=True, + comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings.", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "installation_year", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "not_water_limited_capacity_mw", + sa.Float(), + nullable=True, + comment="Plant capacity in MW when not limited by condenser water.", + ), + sa.Column("opex_allowances", sa.Float(), nullable=True, comment="Allowances."), + sa.Column( + "opex_boiler", + sa.Float(), + nullable=True, + comment="Maintenance of boiler (or reactor) plant.", + ), + sa.Column( + "opex_coolants", + sa.Float(), + nullable=True, + comment="Cost of coolants and water (nuclear plants only)", + ), + sa.Column( + "opex_electric", + sa.Float(), + nullable=True, + comment="Production expenses: electric expenses (USD).", + ), + sa.Column( + "opex_engineering", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance, supervision, and engineering (USD).", + ), + sa.Column( + "opex_fuel", + sa.Float(), + nullable=True, + comment="Production expenses: fuel (USD).", + ), + sa.Column( + "opex_fuel_per_mwh", + sa.Float(), + nullable=True, + comment="Production expenses: fuel (USD) per megawatt-hour (Mwh).", + ), + sa.Column( + "opex_misc_power", + sa.Float(), + nullable=True, + comment="Miscellaneous steam (or nuclear) expenses.", + ), + sa.Column( + "opex_misc_steam", + sa.Float(), + nullable=True, + comment="Maintenance of miscellaneous steam (or nuclear) plant.", + ), + sa.Column( + "opex_nonfuel_per_mwh", + sa.Float(), + nullable=True, + comment="Investments in non-fuel production expenses per Mwh.", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_per_mwh", + sa.Float(), + nullable=True, + comment="Total production expenses (USD per MWh generated).", + ), + sa.Column( + "opex_plants", + sa.Float(), + nullable=True, + comment="Maintenance of electrical plant.", + ), + sa.Column( + "opex_production_total", + sa.Float(), + nullable=True, + comment="Total operating expenses.", + ), + sa.Column( + "opex_rents", + sa.Float(), + nullable=True, + comment="Production expenses: rents (USD).", + ), + sa.Column("opex_steam", sa.Float(), nullable=True, comment="Steam expenses."), + sa.Column( + "opex_steam_other", + sa.Float(), + nullable=True, + comment="Steam from other sources.", + ), + sa.Column( + "opex_structures", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of structures (USD).", + ), + sa.Column( + "opex_total_nonfuel", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "opex_transfer", + sa.Float(), + nullable=True, + comment="Steam transferred (Credit).", + ), + sa.Column( + "peak_demand_mw", + sa.Float(), + nullable=True, + comment="Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.", + ), + sa.Column( + "plant_capability_mw", + sa.Float(), + nullable=True, + comment="Net plant capability in megawatts.", + ), + sa.Column( + "plant_hours_connected_while_generating", + sa.Float(), + nullable=True, + comment="Hours the plant was connected to load while generating in the report year.", + ), + sa.Column("plant_type", sa.Text(), nullable=True), + sa.Column( + "record_id", + sa.Text(), + nullable=False, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "water_limited_capacity_mw", + sa.Float(), + nullable=True, + comment="Plant capacity in MW when limited by condenser water.", + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk__out_ferc1__yearly_steam_plants_sched402_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk__out_ferc1__yearly_steam_plants_sched402_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk__out_ferc1__yearly_steam_plants_sched402_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "record_id", name=op.f("pk__out_ferc1__yearly_steam_plants_sched402") + ), + ) + op.create_table( + "core_eia860__scd_boilers", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "boiler_operating_date", + sa.Date(), + nullable=True, + comment="Date the boiler began or is planned to begin commercial operation.", + ), + sa.Column( + "boiler_status", + sa.Text(), + nullable=True, + comment="EIA short code identifying boiler operational status.", + ), + sa.Column( + "boiler_retirement_date", + sa.Date(), + nullable=True, + comment="Date of the scheduled or effected retirement of the boiler.", + ), + sa.Column( + "boiler_type", + sa.Text(), + nullable=True, + comment="EIA short code indicating the standards under which the boiler is operating as described in the U.S. EPA regulation under 40 CFR.", + ), + sa.Column( + "firing_type_1", + sa.Text(), + nullable=True, + comment="EIA short code indicating the type of firing used by this boiler.", + ), + sa.Column( + "firing_type_2", + sa.Text(), + nullable=True, + comment="EIA short code indicating the type of firing used by this boiler.", + ), + sa.Column( + "firing_type_3", + sa.Text(), + nullable=True, + comment="EIA short code indicating the type of firing used by this boiler.", + ), + sa.Column( + "firing_rate_using_coal_tons_per_hour", + sa.Float(), + nullable=True, + comment="Design firing rate at maximum continuous steam flow for coal to the nearest 0.1 ton per hour.", + ), + sa.Column( + "firing_rate_using_oil_bbls_per_hour", + sa.Float(), + nullable=True, + comment="Design firing rate at maximum continuous steam flow for pet coke to the nearest 0.1 barrels per hour.", + ), + sa.Column( + "firing_rate_using_gas_mcf_per_hour", + sa.Float(), + nullable=True, + comment="Design firing rate at maximum continuous steam flow for gas to the nearest 0.1 cubic feet per hour.", + ), + sa.Column( + "firing_rate_using_other_fuels", + sa.Float(), + nullable=True, + comment="Design firing rate at maximum continuous steam flow for energy sources other than coal, petroleum, or natural gas.", + ), + sa.Column( + "boiler_fuel_code_1", + sa.Text(), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the boiler.", + ), + sa.Column( + "boiler_fuel_code_2", + sa.Text(), + nullable=True, + comment="The code representing the second most predominant type of energy that fuels the boiler.", + ), + sa.Column( + "boiler_fuel_code_3", + sa.Text(), + nullable=True, + comment="The code representing the third most predominant type of energy that fuels the boiler.", + ), + sa.Column( + "boiler_fuel_code_4", + sa.Text(), + nullable=True, + comment="The code representing the fourth most predominant type of energy that fuels the boiler.", + ), + sa.Column( + "waste_heat_input_mmbtu_per_hour", + sa.Float(), + nullable=True, + comment="Design waste-heat input rate at maximum continuous steam flow where a waste-heat boiler is a boiler that receives all or a substantial portion of its energy input from the noncumbustible exhaust gases of a separate fuel-burning process (MMBtu per hour).", + ), + sa.Column( + "wet_dry_bottom", + sa.Text(), + nullable=True, + comment="Wet or Dry Bottom where Wet Bottom is defined as slag tanks that are installed at furnace throat to contain and remove molten ash from the furnace, and Dry Bottom is defined as having no slag tanks at furnace throat area, throat area is clear, and bottom ash drops through throat to bottom ash water hoppers.", + ), + sa.Column( + "fly_ash_reinjection", + sa.Boolean(), + nullable=True, + comment="Indicates whether the boiler is capable of re-injecting fly ash.", + ), + sa.Column( + "hrsg", + sa.Boolean(), + nullable=True, + comment="indicates if the boiler is a heat recovery steam generator (HRSG).", + ), + sa.Column( + "max_steam_flow_1000_lbs_per_hour", + sa.Float(), + nullable=True, + comment="Maximum continuous steam flow at 100 percent load.", + ), + sa.Column( + "turndown_ratio", + sa.Float(), + nullable=True, + comment="The turndown ratio for the boiler.", + ), + sa.Column( + "efficiency_100pct_load", + sa.Float(), + nullable=True, + comment="Boiler efficiency percentage when burning at 100 percent load to the nearest 0.1 percent.", + ), + sa.Column( + "efficiency_50pct_load", + sa.Float(), + nullable=True, + comment="Boiler efficiency percentage when burning at 50 percent load to the nearest 0.1 percent.", + ), + sa.Column( + "air_flow_100pct_load_cubic_feet_per_minute", + sa.Float(), + nullable=True, + comment="Total air flow including excess air at 100 percent load, reported at standard temperature and pressure (i.e. 68 F and one atmosphere pressure).", + ), + sa.Column( + "new_source_review", + sa.Boolean(), + nullable=True, + comment="Indicates whether the boiler is subject to New Source Review requirements.", + ), + sa.Column( + "new_source_review_date", + sa.Date(), + nullable=True, + comment="Month of issued New Source Review permit.", + ), + sa.Column( + "new_source_review_permit", + sa.Text(), + nullable=True, + comment="New Source Review permit number.", + ), + sa.Column( + "regulation_particulate", + sa.Text(), + nullable=True, + comment="EIA short code for most stringent type of statute or regulation code under which the boiler is operating for particulate matter control standards.", + ), + sa.Column( + "regulation_so2", + sa.Text(), + nullable=True, + comment="EIA short code for most stringent type of statute or regulation code under which the boiler is operating for sulfur dioxide control standards.", + ), + sa.Column( + "regulation_nox", + sa.Text(), + nullable=True, + comment="EIA short code for most stringent type of statute or regulation code under which the boiler is operating for nitrogen oxide control standards.", + ), + sa.Column( + "standard_particulate_rate", + sa.Float(), + nullable=True, + comment="Numeric value for the unit of measurement specified for particulate matter.", + ), + sa.Column( + "standard_so2_rate", + sa.Float(), + nullable=True, + comment="Numeric value for the unit of measurement specified for sulfur dioxide.", + ), + sa.Column( + "standard_nox_rate", + sa.Float(), + nullable=True, + comment="Numeric value for the unit of measurement specified for nitrogen oxide.", + ), + sa.Column( + "unit_particulate", + sa.Text(), + nullable=True, + comment="Numeric value for the unit of measurement specified for particulate matter.", + ), + sa.Column( + "unit_so2", + sa.Text(), + nullable=True, + comment="Numeric value for the unit of measurement specified for sulfur dioxide.", + ), + sa.Column( + "unit_nox", + sa.Text(), + nullable=True, + comment="Numeric value for the unit of measurement specified for nitrogen oxide.", + ), + sa.Column( + "compliance_year_particulate", + sa.Integer(), + nullable=True, + comment="Year boiler was or is expected to be in compliance with federal, state and/or local regulations for particulate matter emissions.", + ), + sa.Column( + "compliance_year_nox", + sa.Integer(), + nullable=True, + comment="Year boiler was or is expected to be in compliance with federal, state and/or local regulations for nitrogen oxide emissions.", + ), + sa.Column( + "compliance_year_so2", + sa.Integer(), + nullable=True, + comment="Year boiler was or is expected to be in compliance with federal, state and/or local regulations for sulfur dioxide emissions.", + ), + sa.Column( + "particulate_control_out_of_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with particulate matter regulations, strategy for compliance.", + ), + sa.Column( + "particulate_control_out_of_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with particulate matter regulations, strategy for compliance.", + ), + sa.Column( + "particulate_control_out_of_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with particulate matter regulations, strategy for compliance.", + ), + sa.Column( + "so2_control_out_of_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.", + ), + sa.Column( + "so2_control_out_of_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.", + ), + sa.Column( + "so2_control_out_of_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.", + ), + sa.Column( + "so2_control_existing_caaa_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_existing_caaa_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_existing_caaa_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_planned_caaa_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_planned_caaa_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_planned_caaa_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_out_of_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.", + ), + sa.Column( + "nox_control_out_of_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.", + ), + sa.Column( + "nox_control_out_of_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.", + ), + sa.Column( + "nox_control_existing_caaa_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_existing_caaa_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_existing_caaa_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_planned_caaa_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_planned_caaa_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_planned_caaa_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "compliance_year_mercury", + sa.Integer(), + nullable=True, + comment="Year boiler was or is expected to be in compliance with federal, state and/or local regulations for mercury emissions.", + ), + sa.Column( + "mercury_control_existing_strategy_1", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_existing_strategy_2", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_existing_strategy_3", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_existing_strategy_4", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_existing_strategy_5", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_existing_strategy_6", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_proposed_strategy_1", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_proposed_strategy_2", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_proposed_strategy_3", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "nox_control_existing_strategy_1", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_existing_strategy_2", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_existing_strategy_3", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_manufacturer", + sa.Text(), + nullable=True, + comment="Name of nitrogen oxide control manufacturer.", + ), + sa.Column( + "nox_control_manufacturer_code", + sa.Text(), + nullable=True, + comment="Code indicating the nitrogen oxide control burner manufacturer.", + ), + sa.Column( + "nox_control_proposed_strategy_1", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_proposed_strategy_2", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_proposed_strategy_3", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_status_code", + sa.Text(), + nullable=True, + comment="Nitrogen oxide control status code.", + ), + sa.Column( + "regulation_mercury", + sa.Text(), + nullable=True, + comment="Most stringent type of statute or regulation code under which the boiler is operating for mercury control standards.", + ), + sa.Column( + "so2_control_existing_strategy_1", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "so2_control_existing_strategy_2", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "so2_control_existing_strategy_3", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "so2_control_proposed_strategy_1", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "so2_control_proposed_strategy_2", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "so2_control_proposed_strategy_3", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "standard_so2_percent_scrubbed", + sa.Float(), + nullable=True, + comment="The percent of sulfur dioxide to be scrubbed specified by the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["boiler_fuel_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_boilers_boiler_fuel_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_fuel_code_2"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_boilers_boiler_fuel_code_2_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_fuel_code_3"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_boilers_boiler_fuel_code_3_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_fuel_code_4"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_boilers_boiler_fuel_code_4_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_status"], + ["core_eia__codes_boiler_status.code"], + name=op.f( + "fk_core_eia860__scd_boilers_boiler_status_core_eia__codes_boiler_status" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_type"], + ["core_eia__codes_boiler_types.code"], + name=op.f( + "fk_core_eia860__scd_boilers_boiler_type_core_eia__codes_boiler_types" + ), + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia860__scd_boilers_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["firing_type_1"], + ["core_eia__codes_firing_types.code"], + name=op.f( + "fk_core_eia860__scd_boilers_firing_type_1_core_eia__codes_firing_types" + ), + ), + sa.ForeignKeyConstraint( + ["firing_type_2"], + ["core_eia__codes_firing_types.code"], + name=op.f( + "fk_core_eia860__scd_boilers_firing_type_2_core_eia__codes_firing_types" + ), + ), + sa.ForeignKeyConstraint( + ["firing_type_3"], + ["core_eia__codes_firing_types.code"], + name=op.f( + "fk_core_eia860__scd_boilers_firing_type_3_core_eia__codes_firing_types" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_1"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_mercury_control_existing_strategy_1_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_2"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_mercury_control_existing_strategy_2_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_3"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_mercury_control_existing_strategy_3_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_4"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_mercury_control_existing_strategy_4_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_5"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_mercury_control_existing_strategy_5_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_6"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_mercury_control_existing_strategy_6_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_proposed_strategy_1"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_mercury_control_proposed_strategy_1_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_proposed_strategy_2"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_mercury_control_proposed_strategy_2_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_proposed_strategy_3"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_mercury_control_proposed_strategy_3_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_existing_caaa_compliance_strategy_1"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_existing_caaa_compliance_strategy_1_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_existing_caaa_compliance_strategy_2"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_existing_caaa_compliance_strategy_2_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_existing_caaa_compliance_strategy_3"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_existing_caaa_compliance_strategy_3_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_manufacturer_code"], + ["core_eia__codes_environmental_equipment_manufacturers.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_manufacturer_code_core_eia__codes_environmental_equipment_manufacturers" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_out_of_compliance_strategy_1"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_out_of_compliance_strategy_1_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_out_of_compliance_strategy_2"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_out_of_compliance_strategy_2_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_out_of_compliance_strategy_3"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_out_of_compliance_strategy_3_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_planned_caaa_compliance_strategy_1"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_planned_caaa_compliance_strategy_1_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_planned_caaa_compliance_strategy_2"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_planned_caaa_compliance_strategy_2_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_planned_caaa_compliance_strategy_3"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_planned_caaa_compliance_strategy_3_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_status_code"], + ["core_eia__codes_nox_control_status.code"], + name=op.f( + "fk_core_eia860__scd_boilers_nox_control_status_code_core_eia__codes_nox_control_status" + ), + ), + sa.ForeignKeyConstraint( + ["particulate_control_out_of_compliance_strategy_1"], + ["core_eia__codes_particulate_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_particulate_control_out_of_compliance_strategy_1_core_eia__codes_particulate_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["particulate_control_out_of_compliance_strategy_2"], + ["core_eia__codes_particulate_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_particulate_control_out_of_compliance_strategy_2_core_eia__codes_particulate_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["particulate_control_out_of_compliance_strategy_3"], + ["core_eia__codes_particulate_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_particulate_control_out_of_compliance_strategy_3_core_eia__codes_particulate_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id"], + [ + "core_eia__entity_boilers.plant_id_eia", + "core_eia__entity_boilers.boiler_id", + ], + name=op.f( + "fk_core_eia860__scd_boilers_plant_id_eia_core_eia__entity_boilers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "report_date"], + [ + "core_eia860__scd_plants.plant_id_eia", + "core_eia860__scd_plants.report_date", + ], + name=op.f( + "fk_core_eia860__scd_boilers_plant_id_eia_core_eia860__scd_plants" + ), + ), + sa.ForeignKeyConstraint( + ["regulation_mercury"], + ["core_eia__codes_regulations.code"], + name=op.f( + "fk_core_eia860__scd_boilers_regulation_mercury_core_eia__codes_regulations" + ), + ), + sa.ForeignKeyConstraint( + ["regulation_nox"], + ["core_eia__codes_regulations.code"], + name=op.f( + "fk_core_eia860__scd_boilers_regulation_nox_core_eia__codes_regulations" + ), + ), + sa.ForeignKeyConstraint( + ["regulation_particulate"], + ["core_eia__codes_regulations.code"], + name=op.f( + "fk_core_eia860__scd_boilers_regulation_particulate_core_eia__codes_regulations" + ), + ), + sa.ForeignKeyConstraint( + ["regulation_so2"], + ["core_eia__codes_regulations.code"], + name=op.f( + "fk_core_eia860__scd_boilers_regulation_so2_core_eia__codes_regulations" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_existing_caaa_compliance_strategy_1"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_so2_control_existing_caaa_compliance_strategy_1_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_existing_caaa_compliance_strategy_2"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_so2_control_existing_caaa_compliance_strategy_2_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_existing_caaa_compliance_strategy_3"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_so2_control_existing_caaa_compliance_strategy_3_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_out_of_compliance_strategy_1"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_so2_control_out_of_compliance_strategy_1_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_out_of_compliance_strategy_2"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_so2_control_out_of_compliance_strategy_2_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_out_of_compliance_strategy_3"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_so2_control_out_of_compliance_strategy_3_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_planned_caaa_compliance_strategy_1"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_so2_control_planned_caaa_compliance_strategy_1_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_planned_caaa_compliance_strategy_2"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_so2_control_planned_caaa_compliance_strategy_2_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_planned_caaa_compliance_strategy_3"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_core_eia860__scd_boilers_so2_control_planned_caaa_compliance_strategy_3_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["unit_nox"], + ["core_eia__codes_nox_units.code"], + name=op.f("fk_core_eia860__scd_boilers_unit_nox_core_eia__codes_nox_units"), + ), + sa.ForeignKeyConstraint( + ["unit_particulate"], + ["core_eia__codes_particulate_units.code"], + name=op.f( + "fk_core_eia860__scd_boilers_unit_particulate_core_eia__codes_particulate_units" + ), + ), + sa.ForeignKeyConstraint( + ["unit_so2"], + ["core_eia__codes_so2_units.code"], + name=op.f("fk_core_eia860__scd_boilers_unit_so2_core_eia__codes_so2_units"), + ), + sa.ForeignKeyConstraint( + ["wet_dry_bottom"], + ["core_eia__codes_wet_dry_bottom.code"], + name=op.f( + "fk_core_eia860__scd_boilers_wet_dry_bottom_core_eia__codes_wet_dry_bottom" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "boiler_id", + "report_date", + name=op.f("pk_core_eia860__scd_boilers"), + ), + ) + op.create_table( + "core_eia860__scd_generators", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "operational_status_code", + sa.Text(), + nullable=True, + comment="The operating status of the asset.", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.Column( + "ownership_code", + sa.Text(), + nullable=True, + comment="Identifies the ownership for each generator.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "summer_capacity_mw", + sa.Float(), + nullable=True, + comment="The net summer capacity.", + ), + sa.Column( + "summer_capacity_estimate", + sa.Boolean(), + nullable=True, + comment="Whether the summer capacity value was an estimate", + ), + sa.Column( + "winter_capacity_mw", + sa.Float(), + nullable=True, + comment="The net winter capacity.", + ), + sa.Column( + "winter_capacity_estimate", + sa.Boolean(), + nullable=True, + comment="Whether the winter capacity value was an estimate", + ), + sa.Column( + "net_capacity_mwdc", + sa.Float(), + nullable=True, + comment="Generation capacity in megawatts of direct current that is subject to a net metering agreement. Typically used for behind-the-meter solar PV.", + ), + sa.Column( + "energy_storage_capacity_mwh", + sa.Float(), + nullable=True, + comment="Energy storage capacity in MWh (e.g. for batteries).", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "energy_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the generator.", + ), + sa.Column( + "energy_source_code_2", + sa.Text(), + nullable=True, + comment="The code representing the second most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_3", + sa.Text(), + nullable=True, + comment="The code representing the third most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_4", + sa.Text(), + nullable=True, + comment="The code representing the fourth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_5", + sa.Text(), + nullable=True, + comment="The code representing the fifth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_6", + sa.Text(), + nullable=True, + comment="The code representing the sixth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_1_transport_1", + sa.Text(), + nullable=True, + comment="Primary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_1_transport_2", + sa.Text(), + nullable=True, + comment="Secondary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_1_transport_3", + sa.Text(), + nullable=True, + comment="Tertiary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_2_transport_1", + sa.Text(), + nullable=True, + comment="Primary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_2_transport_2", + sa.Text(), + nullable=True, + comment="Secondary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_2_transport_3", + sa.Text(), + nullable=True, + comment="Tertiary mode of transport for energy source 2.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "multiple_fuels", + sa.Boolean(), + nullable=True, + comment="Can the generator burn multiple fuels?", + ), + sa.Column( + "deliver_power_transgrid", + sa.Boolean(), + nullable=True, + comment="Indicate whether the generator can deliver power to the transmission grid.", + ), + sa.Column( + "distributed_generation", + sa.Boolean(), + nullable=True, + comment="Whether the generator is considered distributed generation", + ), + sa.Column( + "syncronized_transmission_grid", + sa.Boolean(), + nullable=True, + comment="Indicates whether standby generators (SB status) can be synchronized to the grid.", + ), + sa.Column( + "turbines_num", + sa.Integer(), + nullable=True, + comment="Number of wind turbines, or hydrokinetic buoys.", + ), + sa.Column( + "planned_modifications", + sa.Boolean(), + nullable=True, + comment="Indicates whether there are any planned capacity uprates/derates, repowering, other modifications, or generator retirements scheduled for the next 5 years.", + ), + sa.Column( + "planned_net_summer_capacity_uprate_mw", + sa.Float(), + nullable=True, + comment="Increase in summer capacity expected to be realized from the modification to the equipment.", + ), + sa.Column( + "planned_net_winter_capacity_uprate_mw", + sa.Float(), + nullable=True, + comment="Increase in winter capacity expected to be realized from the uprate modification to the equipment.", + ), + sa.Column( + "planned_uprate_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter operation after the uprate modification.", + ), + sa.Column( + "planned_net_summer_capacity_derate_mw", + sa.Float(), + nullable=True, + comment="Decrease in summer capacity expected to be realized from the derate modification to the equipment.", + ), + sa.Column( + "planned_net_winter_capacity_derate_mw", + sa.Float(), + nullable=True, + comment="Decrease in winter capacity expected to be realized from the derate modification to the equipment.", + ), + sa.Column( + "planned_derate_date", + sa.Date(), + nullable=True, + comment="Planned effective month that the generator is scheduled to enter operation after the derate modification.", + ), + sa.Column( + "planned_new_prime_mover_code", + sa.Text(), + nullable=True, + comment="New prime mover for the planned repowered generator.", + ), + sa.Column( + "planned_energy_source_code_1", + sa.Text(), + nullable=True, + comment="New energy source code for the planned repowered generator.", + ), + sa.Column( + "planned_repower_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter operation after the repowering is complete.", + ), + sa.Column( + "other_planned_modifications", + sa.Boolean(), + nullable=True, + comment="Indicates whether there are there other modifications planned for the generator.", + ), + sa.Column( + "other_modifications_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter commercial operation after any other planned modification is complete.", + ), + sa.Column( + "planned_generator_retirement_date", + sa.Date(), + nullable=True, + comment="Planned effective date of the scheduled retirement of the generator.", + ), + sa.Column( + "carbon_capture", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses carbon capture technology.", + ), + sa.Column( + "startup_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_2", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_3", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_4", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "technology_description", + sa.Text(), + nullable=True, + comment="High level description of the technology used by the generator to produce electricity.", + ), + sa.Column( + "turbines_inverters_hydrokinetics", + sa.Integer(), + nullable=True, + comment="Number of wind turbines, or hydrokinetic buoys.", + ), + sa.Column( + "time_cold_shutdown_full_load_code", + sa.Text(), + nullable=True, + comment="The minimum amount of time required to bring the unit to full load from shutdown.", + ), + sa.Column( + "planned_new_capacity_mw", + sa.Float(), + nullable=True, + comment="The expected new namplate capacity for the generator.", + ), + sa.Column( + "cofire_fuels", + sa.Boolean(), + nullable=True, + comment="Can the generator co-fire fuels?.", + ), + sa.Column( + "switch_oil_gas", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator switch between oil and natural gas.", + ), + sa.Column( + "nameplate_power_factor", + sa.Float(), + nullable=True, + comment="The nameplate power factor of the generator.", + ), + sa.Column( + "minimum_load_mw", + sa.Float(), + nullable=True, + comment="The minimum load at which the generator can operate at continuosuly.", + ), + sa.Column( + "uprate_derate_during_year", + sa.Boolean(), + nullable=True, + comment="Was an uprate or derate completed on this generator during the reporting year?", + ), + sa.Column( + "uprate_derate_completed_date", + sa.Date(), + nullable=True, + comment="The date when the uprate or derate was completed.", + ), + sa.Column( + "current_planned_generator_operating_date", + sa.Date(), + nullable=True, + comment="The most recently updated effective date on which the generator is scheduled to start operation", + ), + sa.Column( + "summer_estimated_capability_mw", + sa.Float(), + nullable=True, + comment="EIA estimated summer capacity (in MWh).", + ), + sa.Column( + "winter_estimated_capability_mw", + sa.Float(), + nullable=True, + comment="EIA estimated winter capacity (in MWh).", + ), + sa.Column( + "generator_retirement_date", + sa.Date(), + nullable=True, + comment="Date of the scheduled or effected retirement of the generator.", + ), + sa.Column( + "owned_by_non_utility", + sa.Boolean(), + nullable=True, + comment="Whether any part of generator is owned by a nonutilty", + ), + sa.Column( + "reactive_power_output_mvar", + sa.Float(), + nullable=True, + comment="Reactive Power Output (MVAr)", + ), + sa.Column( + "ferc_qualifying_facility", + sa.Boolean(), + nullable=True, + comment="Indicatates whether or not a generator is a qualifying FERC cogeneation facility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia860__scd_generators_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_1"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_1_transport_1_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_2"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_1_transport_2_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_3"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_1_transport_3_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_1"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_2_transport_1_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_2"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_2_transport_2_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_3"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_2_transport_3_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_2"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_code_2_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_3"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_code_3_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_4"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_code_4_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_5"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_code_5_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_6"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_energy_source_code_6_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["operational_status_code"], + ["core_eia__codes_operational_status.code"], + name=op.f( + "fk_core_eia860__scd_generators_operational_status_code_core_eia__codes_operational_status" + ), + ), + sa.ForeignKeyConstraint( + ["planned_energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_planned_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["planned_new_prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_core_eia860__scd_generators_planned_new_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id"], + [ + "core_eia__entity_generators.plant_id_eia", + "core_eia__entity_generators.generator_id", + ], + name=op.f( + "fk_core_eia860__scd_generators_plant_id_eia_core_eia__entity_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "report_date"], + [ + "core_eia860__scd_plants.plant_id_eia", + "core_eia860__scd_plants.report_date", + ], + name=op.f( + "fk_core_eia860__scd_generators_plant_id_eia_core_eia860__scd_plants" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_core_eia860__scd_generators_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_startup_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_2"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_startup_source_code_2_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_3"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_startup_source_code_3_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_4"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_core_eia860__scd_generators_startup_source_code_4_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_core_eia860__scd_generators_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "generator_id", + "report_date", + name=op.f("pk_core_eia860__scd_generators"), + ), + ) + op.create_table( + "core_ferc1__yearly_hydroelectric_plants_sched406", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "project_num", + sa.Integer(), + nullable=True, + comment="FERC Licensed Project Number.", + ), + sa.Column( + "plant_type", + sa.Enum( + "hydro", + "run_of_river", + "storage", + "na_category", + "run_of_river_with_storage", + ), + nullable=True, + ), + sa.Column( + "construction_type", + sa.Enum("conventional", "outdoor", "semioutdoor"), + nullable=True, + comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings.", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "installation_year", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "peak_demand_mw", + sa.Float(), + nullable=True, + comment="Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.", + ), + sa.Column( + "plant_hours_connected_while_generating", + sa.Float(), + nullable=True, + comment="Hours the plant was connected to load while generating in the report year.", + ), + sa.Column( + "net_capacity_favorable_conditions_mw", + sa.Float(), + nullable=True, + comment="Net plant capability under the most favorable operating conditions, in megawatts.", + ), + sa.Column( + "net_capacity_adverse_conditions_mw", + sa.Float(), + nullable=True, + comment="Net plant capability under the least favorable operating conditions, in megawatts.", + ), + sa.Column("avg_num_employees", sa.Float(), nullable=True), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "capex_land", + sa.Float(), + nullable=True, + comment="Cost of plant: land and land rights (USD).", + ), + sa.Column( + "capex_structures", + sa.Float(), + nullable=True, + comment="Cost of plant: structures and improvements (USD).", + ), + sa.Column( + "capex_facilities", + sa.Float(), + nullable=True, + comment="Cost of plant: reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "capex_equipment", + sa.Float(), + nullable=True, + comment="Cost of plant: equipment (USD).", + ), + sa.Column( + "capex_roads", + sa.Float(), + nullable=True, + comment="Cost of plant: roads, railroads, and bridges (USD).", + ), + sa.Column( + "asset_retirement_cost", + sa.Float(), + nullable=True, + comment="Asset retirement cost (USD).", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "capex_per_mw", + sa.Float(), + nullable=True, + comment="Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_water_for_power", + sa.Float(), + nullable=True, + comment="Production expenses: water for power (USD).", + ), + sa.Column( + "opex_hydraulic", + sa.Float(), + nullable=True, + comment="Production expenses: hydraulic expenses (USD).", + ), + sa.Column( + "opex_electric", + sa.Float(), + nullable=True, + comment="Production expenses: electric expenses (USD).", + ), + sa.Column( + "opex_generation_misc", + sa.Float(), + nullable=True, + comment="Production expenses: miscellaneous power generation expenses (USD).", + ), + sa.Column( + "opex_rents", + sa.Float(), + nullable=True, + comment="Production expenses: rents (USD).", + ), + sa.Column( + "opex_engineering", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance, supervision, and engineering (USD).", + ), + sa.Column( + "opex_structures", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of structures (USD).", + ), + sa.Column( + "opex_dams", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "opex_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of electric plant (USD).", + ), + sa.Column( + "opex_misc_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of miscellaneous hydraulic plant (USD).", + ), + sa.Column( + "opex_total", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "opex_per_mwh", + sa.Float(), + nullable=True, + comment="Total production expenses (USD per MWh generated).", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk_core_ferc1__yearly_hydroelectric_plants_sched406_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + ) + op.create_table( + "core_ferc1__yearly_pumped_storage_plants_sched408", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "project_num", + sa.Integer(), + nullable=True, + comment="FERC Licensed Project Number.", + ), + sa.Column( + "construction_type", + sa.Enum("conventional", "outdoor", "semioutdoor"), + nullable=True, + comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings.", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "installation_year", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "peak_demand_mw", + sa.Float(), + nullable=True, + comment="Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.", + ), + sa.Column( + "plant_hours_connected_while_generating", + sa.Float(), + nullable=True, + comment="Hours the plant was connected to load while generating in the report year.", + ), + sa.Column( + "plant_capability_mw", + sa.Float(), + nullable=True, + comment="Net plant capability in megawatts.", + ), + sa.Column("avg_num_employees", sa.Float(), nullable=True), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "energy_used_for_pumping_mwh", + sa.Float(), + nullable=True, + comment="Energy used for pumping, in megawatt-hours.", + ), + sa.Column( + "net_load_mwh", + sa.Float(), + nullable=True, + comment="Net output for load (net generation - energy used for pumping) in megawatt-hours.", + ), + sa.Column( + "capex_land", + sa.Float(), + nullable=True, + comment="Cost of plant: land and land rights (USD).", + ), + sa.Column( + "capex_structures", + sa.Float(), + nullable=True, + comment="Cost of plant: structures and improvements (USD).", + ), + sa.Column( + "capex_facilities", + sa.Float(), + nullable=True, + comment="Cost of plant: reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "capex_wheels_turbines_generators", + sa.Float(), + nullable=True, + comment="Cost of plant: water wheels, turbines, and generators (USD).", + ), + sa.Column( + "capex_equipment_electric", + sa.Float(), + nullable=True, + comment="Cost of plant: accessory electric equipment (USD).", + ), + sa.Column( + "capex_equipment_misc", + sa.Float(), + nullable=True, + comment="Cost of plant: miscellaneous power plant equipment (USD).", + ), + sa.Column( + "capex_roads", + sa.Float(), + nullable=True, + comment="Cost of plant: roads, railroads, and bridges (USD).", + ), + sa.Column( + "asset_retirement_cost", + sa.Float(), + nullable=True, + comment="Asset retirement cost (USD).", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "capex_per_mw", + sa.Float(), + nullable=True, + comment="Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_water_for_power", + sa.Float(), + nullable=True, + comment="Production expenses: water for power (USD).", + ), + sa.Column( + "opex_pumped_storage", + sa.Float(), + nullable=True, + comment="Production expenses: pumped storage (USD).", + ), + sa.Column( + "opex_electric", + sa.Float(), + nullable=True, + comment="Production expenses: electric expenses (USD).", + ), + sa.Column( + "opex_generation_misc", + sa.Float(), + nullable=True, + comment="Production expenses: miscellaneous power generation expenses (USD).", + ), + sa.Column( + "opex_rents", + sa.Float(), + nullable=True, + comment="Production expenses: rents (USD).", + ), + sa.Column( + "opex_engineering", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance, supervision, and engineering (USD).", + ), + sa.Column( + "opex_structures", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of structures (USD).", + ), + sa.Column( + "opex_dams", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "opex_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of electric plant (USD).", + ), + sa.Column( + "opex_misc_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of miscellaneous hydraulic plant (USD).", + ), + sa.Column( + "opex_production_before_pumping", + sa.Float(), + nullable=True, + comment="Total production expenses before pumping (USD).", + ), + sa.Column( + "opex_pumping", + sa.Float(), + nullable=True, + comment="Production expenses: We are here to PUMP YOU UP! (USD).", + ), + sa.Column( + "opex_total", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "opex_per_mwh", + sa.Float(), + nullable=True, + comment="Total production expenses (USD per MWh generated).", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk_core_ferc1__yearly_pumped_storage_plants_sched408_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + ) + op.create_table( + "core_ferc1__yearly_small_plants_sched410", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column("plant_type", sa.Text(), nullable=True), + sa.Column( + "license_id_ferc1", + sa.Integer(), + nullable=True, + comment="FERC issued operating license ID for the facility, if available. This value is extracted from the original plant name where possible.", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "peak_demand_mw", + sa.Float(), + nullable=True, + comment="Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "capex_per_mw", + sa.Float(), + nullable=True, + comment="Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_fuel", + sa.Float(), + nullable=True, + comment="Production expenses: fuel (USD).", + ), + sa.Column( + "opex_maintenance", + sa.Float(), + nullable=True, + comment="Production expenses: Maintenance (USD).", + ), + sa.Column("fuel_type", sa.Text(), nullable=True), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk_core_ferc1__yearly_small_plants_sched410_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + ) + op.create_table( + "core_ferc1__yearly_steam_plants_fuel_sched402", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_units", + sa.Enum( + "mmbtu", + "gramsU", + "kg", + "mwhth", + "kgal", + "bbl", + "klbs", + "mcf", + "gal", + "mwdth", + "btu", + "ton", + ), + nullable=True, + comment="Reported unit of measure for fuel.", + ), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_cost_per_unit_burned", + sa.Float(), + nullable=True, + comment="Average cost of fuel consumed in the report year per reported fuel unit (USD).", + ), + sa.Column( + "fuel_cost_per_unit_delivered", + sa.Float(), + nullable=True, + comment="Average cost of fuel delivered in the report year per reported fuel unit (USD).", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk_core_ferc1__yearly_steam_plants_fuel_sched402_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + ) + op.create_table( + "core_ferc1__yearly_steam_plants_sched402", + sa.Column( + "record_id", + sa.Text(), + nullable=True, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "plant_id_ferc1", + sa.Integer(), + nullable=True, + comment="Algorithmically assigned PUDL FERC Plant ID. WARNING: NOT STABLE BETWEEN PUDL DB INITIALIZATIONS.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "plant_type", + sa.Enum( + "geothermal", + "na_category", + "wind", + "photovoltaic", + "combined_cycle", + "combustion_turbine", + "internal_combustion", + "nuclear", + "steam", + "solar_thermal", + ), + nullable=True, + ), + sa.Column( + "construction_type", + sa.Enum("conventional", "outdoor", "semioutdoor"), + nullable=True, + comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings.", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "installation_year", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "peak_demand_mw", + sa.Float(), + nullable=True, + comment="Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.", + ), + sa.Column( + "plant_hours_connected_while_generating", + sa.Float(), + nullable=True, + comment="Hours the plant was connected to load while generating in the report year.", + ), + sa.Column( + "plant_capability_mw", + sa.Float(), + nullable=True, + comment="Net plant capability in megawatts.", + ), + sa.Column( + "water_limited_capacity_mw", + sa.Float(), + nullable=True, + comment="Plant capacity in MW when limited by condenser water.", + ), + sa.Column( + "not_water_limited_capacity_mw", + sa.Float(), + nullable=True, + comment="Plant capacity in MW when not limited by condenser water.", + ), + sa.Column("avg_num_employees", sa.Float(), nullable=True), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "capex_land", + sa.Float(), + nullable=True, + comment="Cost of plant: land and land rights (USD).", + ), + sa.Column( + "capex_structures", + sa.Float(), + nullable=True, + comment="Cost of plant: structures and improvements (USD).", + ), + sa.Column( + "capex_equipment", + sa.Float(), + nullable=True, + comment="Cost of plant: equipment (USD).", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "capex_per_mw", + sa.Float(), + nullable=True, + comment="Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_fuel", + sa.Float(), + nullable=True, + comment="Production expenses: fuel (USD).", + ), + sa.Column( + "opex_coolants", + sa.Float(), + nullable=True, + comment="Cost of coolants and water (nuclear plants only)", + ), + sa.Column("opex_steam", sa.Float(), nullable=True, comment="Steam expenses."), + sa.Column( + "opex_steam_other", + sa.Float(), + nullable=True, + comment="Steam from other sources.", + ), + sa.Column( + "opex_transfer", + sa.Float(), + nullable=True, + comment="Steam transferred (Credit).", + ), + sa.Column( + "opex_electric", + sa.Float(), + nullable=True, + comment="Production expenses: electric expenses (USD).", + ), + sa.Column( + "opex_misc_power", + sa.Float(), + nullable=True, + comment="Miscellaneous steam (or nuclear) expenses.", + ), + sa.Column( + "opex_rents", + sa.Float(), + nullable=True, + comment="Production expenses: rents (USD).", + ), + sa.Column("opex_allowances", sa.Float(), nullable=True, comment="Allowances."), + sa.Column( + "opex_engineering", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance, supervision, and engineering (USD).", + ), + sa.Column( + "opex_structures", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of structures (USD).", + ), + sa.Column( + "opex_boiler", + sa.Float(), + nullable=True, + comment="Maintenance of boiler (or reactor) plant.", + ), + sa.Column( + "opex_plants", + sa.Float(), + nullable=True, + comment="Maintenance of electrical plant.", + ), + sa.Column( + "opex_misc_steam", + sa.Float(), + nullable=True, + comment="Maintenance of miscellaneous steam (or nuclear) plant.", + ), + sa.Column( + "opex_production_total", + sa.Float(), + nullable=True, + comment="Total operating expenses.", + ), + sa.Column( + "opex_per_mwh", + sa.Float(), + nullable=True, + comment="Total production expenses (USD per MWh generated).", + ), + sa.Column( + "asset_retirement_cost", + sa.Float(), + nullable=True, + comment="Asset retirement cost (USD).", + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk_core_ferc1__yearly_steam_plants_sched402_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + ) + op.create_table( + "out_eia923__yearly_fuel_receipts_costs", + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_received_units", + sa.Float(), + nullable=True, + comment="Quanity of fuel received in tons, barrel, or Mcf.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "sulfur_content_pct", + sa.Float(), + nullable=True, + comment="Sulfur content percentage by weight to the nearest 0.01 percent.", + ), + sa.Column( + "ash_content_pct", + sa.Float(), + nullable=True, + comment="Ash content percentage by weight to the nearest 0.1 percent.", + ), + sa.Column( + "mercury_content_ppm", + sa.Float(), + nullable=True, + comment="Mercury content in parts per million (ppm) to the nearest 0.001 ppm.", + ), + sa.Column("moisture_content_pct", sa.Float(), nullable=True), + sa.Column("chlorine_content_ppm", sa.Float(), nullable=True), + sa.ForeignKeyConstraint( + ["plant_id_eia", "report_date"], + [ + "core_eia860__scd_plants.plant_id_eia", + "core_eia860__scd_plants.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_fuel_receipts_costs_plant_id_eia_core_eia860__scd_plants" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__yearly_fuel_receipts_costs_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_fuel_receipts_costs_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__yearly_fuel_receipts_costs_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + ) + op.create_table( + "out_eia923__yearly_generation_fuel_combined", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_units", + sa.Float(), + nullable=True, + comment="Consumption for electric generation of the fuel type in physical unit.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_combined_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "report_date"], + [ + "core_eia860__scd_plants.plant_id_eia", + "core_eia860__scd_plants.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_combined_plant_id_eia_core_eia860__scd_plants" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_combined_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_combined_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_combined_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_combined_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "report_date", + "prime_mover_code", + "energy_source_code", + name=op.f("pk_out_eia923__yearly_generation_fuel_combined"), + ), + ) + op.create_table( + "out_eia__yearly_plants", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column("city", sa.Text(), nullable=True), + sa.Column("county", sa.Text(), nullable=True, comment="County name."), + sa.Column( + "latitude", + sa.Float(), + nullable=True, + comment="Latitude of the plant's location, in degrees.", + ), + sa.Column( + "longitude", + sa.Float(), + nullable=True, + comment="Longitude of the plant's location, in degrees.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("street_address", sa.Text(), nullable=True), + sa.Column( + "zip_code", sa.Text(), nullable=True, comment="Five digit US Zip Code." + ), + sa.Column( + "timezone", + sa.Enum( + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Timbuktu", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/ComodRivadavia", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Atka", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Coral_Harbour", + "America/Cordoba", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Ensenada", + "America/Fort_Nelson", + "America/Fort_Wayne", + "America/Fortaleza", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indianapolis", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Jujuy", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Knox_IN", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Louisville", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Mendoza", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montreal", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nipigon", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Nuuk", + "America/Ojinaga", + "America/Panama", + "America/Pangnirtung", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Acre", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Rosario", + "America/Santa_Isabel", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Shiprock", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Thunder_Bay", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Virgin", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "America/Yellowknife", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/South_Pole", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Ashkhabad", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Calcutta", + "Asia/Chita", + "Asia/Choibalsan", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Colombo", + "Asia/Dacca", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Harbin", + "Asia/Hebron", + "Asia/Ho_Chi_Minh", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Istanbul", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kashgar", + "Asia/Kathmandu", + "Asia/Katmandu", + "Asia/Khandyga", + "Asia/Kolkata", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macao", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Rangoon", + "Asia/Riyadh", + "Asia/Saigon", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Tel_Aviv", + "Asia/Thimbu", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ujung_Pandang", + "Asia/Ulaanbaatar", + "Asia/Ulan_Bator", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yangon", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faeroe", + "Atlantic/Faroe", + "Atlantic/Jan_Mayen", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/ACT", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Canberra", + "Australia/Currie", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/LHI", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/NSW", + "Australia/North", + "Australia/Perth", + "Australia/Queensland", + "Australia/South", + "Australia/Sydney", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/West", + "Australia/Yancowinna", + "Brazil/Acre", + "Brazil/DeNoronha", + "Brazil/East", + "Brazil/West", + "CET", + "CST6CDT", + "Canada/Atlantic", + "Canada/Central", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Canada/Saskatchewan", + "Canada/Yukon", + "Chile/Continental", + "Chile/EasterIsland", + "Cuba", + "EET", + "EST", + "EST5EDT", + "Egypt", + "Eire", + "Etc/GMT", + "Etc/GMT+0", + "Etc/GMT+1", + "Etc/GMT+10", + "Etc/GMT+11", + "Etc/GMT+12", + "Etc/GMT+2", + "Etc/GMT+3", + "Etc/GMT+4", + "Etc/GMT+5", + "Etc/GMT+6", + "Etc/GMT+7", + "Etc/GMT+8", + "Etc/GMT+9", + "Etc/GMT-0", + "Etc/GMT-1", + "Etc/GMT-10", + "Etc/GMT-11", + "Etc/GMT-12", + "Etc/GMT-13", + "Etc/GMT-14", + "Etc/GMT-2", + "Etc/GMT-3", + "Etc/GMT-4", + "Etc/GMT-5", + "Etc/GMT-6", + "Etc/GMT-7", + "Etc/GMT-8", + "Etc/GMT-9", + "Etc/GMT0", + "Etc/Greenwich", + "Etc/UCT", + "Etc/UTC", + "Etc/Universal", + "Etc/Zulu", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belfast", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kiev", + "Europe/Kirov", + "Europe/Kyiv", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Nicosia", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Tiraspol", + "Europe/Ulyanovsk", + "Europe/Uzhgorod", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zaporozhye", + "Europe/Zurich", + "GB", + "GB-Eire", + "GMT", + "GMT+0", + "GMT-0", + "GMT0", + "Greenwich", + "HST", + "Hongkong", + "Iceland", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Iran", + "Israel", + "Jamaica", + "Japan", + "Kwajalein", + "Libya", + "MET", + "MST", + "MST7MDT", + "Mexico/BajaNorte", + "Mexico/BajaSur", + "Mexico/General", + "NZ", + "NZ-CHAT", + "Navajo", + "PRC", + "PST8PDT", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Chuuk", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Enderbury", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Johnston", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Pohnpei", + "Pacific/Ponape", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Samoa", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Truk", + "Pacific/Wake", + "Pacific/Wallis", + "Pacific/Yap", + "Poland", + "Portugal", + "ROC", + "ROK", + "Singapore", + "Turkey", + "UCT", + "US/Alaska", + "US/Aleutian", + "US/Arizona", + "US/Central", + "US/East-Indiana", + "US/Eastern", + "US/Hawaii", + "US/Indiana-Starke", + "US/Michigan", + "US/Mountain", + "US/Pacific", + "US/Samoa", + "UTC", + "Universal", + "W-SU", + "WET", + "Zulu", + ), + nullable=True, + comment="IANA timezone name", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "ash_impoundment", + sa.Boolean(), + nullable=True, + comment="Is there an ash impoundment (e.g. pond, reservoir) at the plant?", + ), + sa.Column( + "ash_impoundment_lined", + sa.Boolean(), + nullable=True, + comment="If there is an ash impoundment at the plant, is the impoundment lined?", + ), + sa.Column( + "ash_impoundment_status", + sa.Text(), + nullable=True, + comment="If there is an ash impoundment at the plant, the ash impoundment status as of December 31 of the reporting year.", + ), + sa.Column( + "balancing_authority_code_eia", + sa.Text(), + nullable=True, + comment="EIA short code identifying a balancing authority.", + ), + sa.Column( + "balancing_authority_name_eia", + sa.Text(), + nullable=True, + comment="Name of the balancing authority.", + ), + sa.Column( + "datum", + sa.Text(), + nullable=True, + comment="Geodetic coordinate system identifier (e.g. NAD27, NAD83, or WGS84).", + ), + sa.Column( + "energy_storage", + sa.Boolean(), + nullable=True, + comment="Indicates if the facility has energy storage capabilities.", + ), + sa.Column( + "ferc_cogen_docket_no", + sa.Text(), + nullable=True, + comment="The docket number relating to the FERC cogenerator status. See FERC Form 556.", + ), + sa.Column( + "ferc_cogen_status", + sa.Boolean(), + nullable=True, + comment="Indicates whether the plant has FERC qualifying facility cogenerator status. See FERC Form 556.", + ), + sa.Column( + "ferc_exempt_wholesale_generator_docket_no", + sa.Text(), + nullable=True, + comment="The docket number relating to the FERC qualifying facility exempt wholesale generator status.", + ), + sa.Column( + "ferc_exempt_wholesale_generator", + sa.Boolean(), + nullable=True, + comment="Indicates whether the plant has FERC qualifying facility exempt wholesale generator status", + ), + sa.Column( + "ferc_small_power_producer_docket_no", + sa.Text(), + nullable=True, + comment="The docket number relating to the FERC qualifying facility small power producer status. See FERC Form 556.", + ), + sa.Column( + "ferc_small_power_producer", + sa.Boolean(), + nullable=True, + comment="Indicates whether the plant has FERC qualifying facility small power producer status. See FERC Form 556.", + ), + sa.Column( + "ferc_qualifying_facility_docket_no", + sa.Text(), + nullable=True, + comment="The docket number relating to the FERC qualifying facility cogenerator status. See FERC Form 556.", + ), + sa.Column( + "grid_voltage_1_kv", + sa.Float(), + nullable=True, + comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities", + ), + sa.Column( + "grid_voltage_2_kv", + sa.Float(), + nullable=True, + comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities", + ), + sa.Column( + "grid_voltage_3_kv", + sa.Float(), + nullable=True, + comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities", + ), + sa.Column( + "iso_rto_code", + sa.Text(), + nullable=True, + comment="The code of the plant's ISO or RTO. NA if not reported in that year.", + ), + sa.Column( + "liquefied_natural_gas_storage", + sa.Boolean(), + nullable=True, + comment="Indicates if the facility have the capability to store the natural gas in the form of liquefied natural gas.", + ), + sa.Column( + "natural_gas_local_distribution_company", + sa.Text(), + nullable=True, + comment="Names of Local Distribution Company (LDC), connected to natural gas burning power plants.", + ), + sa.Column( + "natural_gas_storage", + sa.Boolean(), + nullable=True, + comment="Indicates if the facility have on-site storage of natural gas.", + ), + sa.Column( + "natural_gas_pipeline_name_1", + sa.Text(), + nullable=True, + comment="The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.", + ), + sa.Column( + "natural_gas_pipeline_name_2", + sa.Text(), + nullable=True, + comment="The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.", + ), + sa.Column( + "natural_gas_pipeline_name_3", + sa.Text(), + nullable=True, + comment="The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.", + ), + sa.Column( + "nerc_region", + sa.Enum( + "BASN", + "CALN", + "CALS", + "DSW", + "ASCC", + "ISONE", + "ERCOT", + "NORW", + "NYISO", + "PJM", + "ROCK", + "ECAR", + "FRCC", + "HICC", + "MAAC", + "MAIN", + "MAPP", + "MRO", + "NPCC", + "RFC", + "SERC", + "SPP", + "TRE", + "WECC", + "WSCC", + "MISO", + "ECAR_MAAC", + "MAPP_WECC", + "RFC_SERC", + "SPP_WECC", + "MRO_WECC", + "ERCOT_SPP", + "SPP_TRE", + "ERCOT_TRE", + "MISO_TRE", + "VI", + "GU", + "PR", + "AS", + "UNK", + ), + nullable=True, + comment="NERC region in which the plant is located", + ), + sa.Column( + "net_metering", + sa.Boolean(), + nullable=True, + comment="Did this plant have a net metering agreement in effect during the reporting year? (Only displayed for facilities that report the sun or wind as an energy source). This field was only reported up until 2015", + ), + sa.Column( + "pipeline_notes", + sa.Text(), + nullable=True, + comment="Additional owner or operator of natural gas pipeline.", + ), + sa.Column( + "primary_purpose_id_naics", + sa.Integer(), + nullable=True, + comment="North American Industry Classification System (NAICS) code that best describes the primary purpose of the reporting plant", + ), + sa.Column( + "regulatory_status_code", + sa.Text(), + nullable=True, + comment="Indicates whether the plant is regulated or non-regulated.", + ), + sa.Column( + "reporting_frequency_code", + sa.Enum("A", "AM", "M"), + nullable=True, + comment="Code that specifies what time period data has to be reported (i.e. monthly data or annual totals) and how often the power plant reports this data to EIA. See reporting_frequencies_eia for more details.", + ), + sa.Column( + "sector_id_eia", + sa.Integer(), + nullable=True, + comment="EIA assigned sector ID, corresponding to high level NAICS sector, designated by the primary purpose, regulatory status and plant-level combined heat and power status", + ), + sa.Column( + "sector_name_eia", + sa.Text(), + nullable=True, + comment="EIA assigned sector name, corresponding to high level NAICS sector, designated by the primary purpose, regulatory status and plant-level combined heat and power status", + ), + sa.Column( + "service_area", + sa.Text(), + nullable=True, + comment="Service area in which plant is located; for unregulated companies, it's the electric utility with which plant is interconnected", + ), + sa.Column( + "transmission_distribution_owner_id", + sa.Integer(), + nullable=True, + comment="EIA-assigned code for owner of transmission/distribution system to which the plant is interconnected.", + ), + sa.Column( + "transmission_distribution_owner_name", + sa.Text(), + nullable=True, + comment="Name of the owner of the transmission or distribution system to which the plant is interconnected.", + ), + sa.Column( + "transmission_distribution_owner_state", + sa.Text(), + nullable=True, + comment="State location for owner of transmission/distribution system to which the plant is interconnected.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "water_source", + sa.Text(), + nullable=True, + comment="Name of water source associated with the plant.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "balancing_authority_code_eia_consistent_rate", + sa.Float(), + nullable=True, + comment="Percentage consistency of balancing authority code across entity records.", + ), + sa.ForeignKeyConstraint( + ["balancing_authority_code_eia"], + ["core_eia__codes_balancing_authorities.code"], + name=op.f( + "fk_out_eia__yearly_plants_balancing_authority_code_eia_core_eia__codes_balancing_authorities" + ), + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_out_eia__yearly_plants_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "report_date"], + [ + "core_eia860__scd_plants.plant_id_eia", + "core_eia860__scd_plants.report_date", + ], + name=op.f("fk_out_eia__yearly_plants_plant_id_eia_core_eia860__scd_plants"), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia__yearly_plants_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["reporting_frequency_code"], + ["core_eia__codes_reporting_frequencies.code"], + name=op.f( + "fk_out_eia__yearly_plants_reporting_frequency_code_core_eia__codes_reporting_frequencies" + ), + ), + sa.ForeignKeyConstraint( + ["sector_id_eia"], + ["core_eia__codes_sector_consolidated.code"], + name=op.f( + "fk_out_eia__yearly_plants_sector_id_eia_core_eia__codes_sector_consolidated" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia__yearly_plants_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia__yearly_plants_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", "report_date", name=op.f("pk_out_eia__yearly_plants") + ), + ) + op.create_table( + "out_ferc1__yearly_all_plants", + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "plant_id_ferc1", + sa.Integer(), + nullable=True, + comment="Algorithmically assigned PUDL FERC Plant ID. WARNING: NOT STABLE BETWEEN PUDL DB INITIALIZATIONS.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "asset_retirement_cost", + sa.Float(), + nullable=True, + comment="Asset retirement cost (USD).", + ), + sa.Column("avg_num_employees", sa.Float(), nullable=True), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "capex_annual_addition", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total`.", + ), + sa.Column( + "capex_annual_addition_rolling", + sa.Float(), + nullable=True, + comment="Year-to-date capital addition into `capex_total`.", + ), + sa.Column( + "capex_annual_per_kw", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total` per kw.", + ), + sa.Column( + "capex_annual_per_mw", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total` per MW.", + ), + sa.Column( + "capex_annual_per_mw_rolling", + sa.Float(), + nullable=True, + comment="Year-to-date capital addition into `capex_total` per MW.", + ), + sa.Column( + "capex_annual_per_mwh", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total` per MWh.", + ), + sa.Column( + "capex_annual_per_mwh_rolling", + sa.Float(), + nullable=True, + comment="Year-to-date capital addition into `capex_total` per MWh.", + ), + sa.Column( + "capex_equipment", + sa.Float(), + nullable=True, + comment="Cost of plant: equipment (USD).", + ), + sa.Column( + "capex_land", + sa.Float(), + nullable=True, + comment="Cost of plant: land and land rights (USD).", + ), + sa.Column( + "capex_per_mw", + sa.Float(), + nullable=True, + comment="Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.", + ), + sa.Column( + "capex_structures", + sa.Float(), + nullable=True, + comment="Cost of plant: structures and improvements (USD).", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "capex_wo_retirement_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD) without retirements.", + ), + sa.Column( + "construction_type", + sa.Enum("conventional", "outdoor", "semioutdoor"), + nullable=True, + comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings.", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "installation_year", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "not_water_limited_capacity_mw", + sa.Float(), + nullable=True, + comment="Plant capacity in MW when not limited by condenser water.", + ), + sa.Column("opex_allowances", sa.Float(), nullable=True, comment="Allowances."), + sa.Column( + "opex_boiler", + sa.Float(), + nullable=True, + comment="Maintenance of boiler (or reactor) plant.", + ), + sa.Column( + "opex_coolants", + sa.Float(), + nullable=True, + comment="Cost of coolants and water (nuclear plants only)", + ), + sa.Column( + "opex_electric", + sa.Float(), + nullable=True, + comment="Production expenses: electric expenses (USD).", + ), + sa.Column( + "opex_engineering", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance, supervision, and engineering (USD).", + ), + sa.Column( + "opex_fuel", + sa.Float(), + nullable=True, + comment="Production expenses: fuel (USD).", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "opex_misc_power", + sa.Float(), + nullable=True, + comment="Miscellaneous steam (or nuclear) expenses.", + ), + sa.Column( + "opex_misc_steam", + sa.Float(), + nullable=True, + comment="Maintenance of miscellaneous steam (or nuclear) plant.", + ), + sa.Column( + "opex_nonfuel_per_mwh", + sa.Float(), + nullable=True, + comment="Investments in non-fuel production expenses per Mwh.", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_per_mwh", + sa.Float(), + nullable=True, + comment="Total production expenses (USD per MWh generated).", + ), + sa.Column( + "opex_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of electric plant (USD).", + ), + sa.Column( + "opex_production_total", + sa.Float(), + nullable=True, + comment="Total operating expenses.", + ), + sa.Column( + "opex_rents", + sa.Float(), + nullable=True, + comment="Production expenses: rents (USD).", + ), + sa.Column("opex_steam", sa.Float(), nullable=True, comment="Steam expenses."), + sa.Column( + "opex_steam_other", + sa.Float(), + nullable=True, + comment="Steam from other sources.", + ), + sa.Column( + "opex_structures", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of structures (USD).", + ), + sa.Column( + "opex_total_nonfuel", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "opex_transfer", + sa.Float(), + nullable=True, + comment="Steam transferred (Credit).", + ), + sa.Column( + "peak_demand_mw", + sa.Float(), + nullable=True, + comment="Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.", + ), + sa.Column( + "plant_capability_mw", + sa.Float(), + nullable=True, + comment="Net plant capability in megawatts.", + ), + sa.Column( + "plant_hours_connected_while_generating", + sa.Float(), + nullable=True, + comment="Hours the plant was connected to load while generating in the report year.", + ), + sa.Column("plant_type", sa.Text(), nullable=True), + sa.Column( + "record_id", + sa.Text(), + nullable=False, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "water_limited_capacity_mw", + sa.Float(), + nullable=True, + comment="Plant capacity in MW when limited by condenser water.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column("fuel_type", sa.Text(), nullable=True), + sa.Column( + "license_id_ferc1", + sa.Integer(), + nullable=True, + comment="FERC issued operating license ID for the facility, if available. This value is extracted from the original plant name where possible.", + ), + sa.Column( + "opex_maintenance", + sa.Float(), + nullable=True, + comment="Production expenses: Maintenance (USD).", + ), + sa.Column( + "opex_total", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "capex_facilities", + sa.Float(), + nullable=True, + comment="Cost of plant: reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "capex_roads", + sa.Float(), + nullable=True, + comment="Cost of plant: roads, railroads, and bridges (USD).", + ), + sa.Column( + "net_capacity_adverse_conditions_mw", + sa.Float(), + nullable=True, + comment="Net plant capability under the least favorable operating conditions, in megawatts.", + ), + sa.Column( + "net_capacity_favorable_conditions_mw", + sa.Float(), + nullable=True, + comment="Net plant capability under the most favorable operating conditions, in megawatts.", + ), + sa.Column( + "opex_dams", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "opex_generation_misc", + sa.Float(), + nullable=True, + comment="Production expenses: miscellaneous power generation expenses (USD).", + ), + sa.Column( + "opex_hydraulic", + sa.Float(), + nullable=True, + comment="Production expenses: hydraulic expenses (USD).", + ), + sa.Column( + "opex_misc_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of miscellaneous hydraulic plant (USD).", + ), + sa.Column( + "opex_water_for_power", + sa.Float(), + nullable=True, + comment="Production expenses: water for power (USD).", + ), + sa.Column( + "ferc_license_id", + sa.Text(), + nullable=True, + comment="The FERC license ID of a project.", + ), + sa.Column( + "capex_equipment_electric", + sa.Float(), + nullable=True, + comment="Cost of plant: accessory electric equipment (USD).", + ), + sa.Column( + "capex_equipment_misc", + sa.Float(), + nullable=True, + comment="Cost of plant: miscellaneous power plant equipment (USD).", + ), + sa.Column( + "capex_wheels_turbines_generators", + sa.Float(), + nullable=True, + comment="Cost of plant: water wheels, turbines, and generators (USD).", + ), + sa.Column( + "energy_used_for_pumping_mwh", + sa.Float(), + nullable=True, + comment="Energy used for pumping, in megawatt-hours.", + ), + sa.Column( + "net_load_mwh", + sa.Float(), + nullable=True, + comment="Net output for load (net generation - energy used for pumping) in megawatt-hours.", + ), + sa.Column( + "opex_production_before_pumping", + sa.Float(), + nullable=True, + comment="Total production expenses before pumping (USD).", + ), + sa.Column( + "opex_pumped_storage", + sa.Float(), + nullable=True, + comment="Production expenses: pumped storage (USD).", + ), + sa.Column( + "opex_pumping", + sa.Float(), + nullable=True, + comment="Production expenses: We are here to PUMP YOU UP! (USD).", + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_all_plants_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk_out_ferc1__yearly_all_plants_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_all_plants_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "record_id", name=op.f("pk_out_ferc1__yearly_all_plants") + ), + ) + op.create_table( + "out_ferc1__yearly_steam_plants_fuel_by_plant_sched402", + sa.Column( + "report_year", + sa.Integer(), + nullable=False, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=False, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=False, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "coal_fraction_cost", + sa.Float(), + nullable=True, + comment="Coal cost as a percentage of overall fuel cost.", + ), + sa.Column( + "coal_fraction_mmbtu", + sa.Float(), + nullable=True, + comment="Coal heat content as a percentage of overall fuel heat content (mmBTU).", + ), + sa.Column( + "fuel_cost", + sa.Float(), + nullable=True, + comment="Total fuel cost for plant (in $USD).", + ), + sa.Column( + "fuel_mmbtu", + sa.Float(), + nullable=True, + comment="Total heat content for plant (in MMBtu).", + ), + sa.Column( + "gas_fraction_cost", + sa.Float(), + nullable=True, + comment="Natural gas cost as a percentage of overall fuel cost.", + ), + sa.Column( + "gas_fraction_mmbtu", + sa.Float(), + nullable=True, + comment="Natural gas heat content as a percentage of overall fuel heat content (MMBtu).", + ), + sa.Column( + "nuclear_fraction_cost", + sa.Float(), + nullable=True, + comment="Nuclear cost as a percentage of overall fuel cost.", + ), + sa.Column( + "nuclear_fraction_mmbtu", + sa.Float(), + nullable=True, + comment="Nuclear heat content as a percentage of overall fuel heat content (MMBtu).", + ), + sa.Column( + "oil_fraction_cost", + sa.Float(), + nullable=True, + comment="Oil cost as a percentage of overall fuel cost.", + ), + sa.Column( + "oil_fraction_mmbtu", + sa.Float(), + nullable=True, + comment="Oil heat content as a percentage of overall fuel heat content (MMBtu).", + ), + sa.Column( + "primary_fuel_by_cost", + sa.Text(), + nullable=True, + comment="Primary fuel for plant as a percentage of cost.", + ), + sa.Column( + "primary_fuel_by_mmbtu", + sa.Text(), + nullable=True, + comment="Primary fuel for plant as a percentage of heat content.", + ), + sa.Column( + "waste_fraction_cost", + sa.Float(), + nullable=True, + comment="Waste-heat cost as a percentage of overall fuel cost.", + ), + sa.Column( + "waste_fraction_mmbtu", + sa.Float(), + nullable=True, + comment="Waste-heat heat content as a percentage of overall fuel heat content (MMBtu).", + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_steam_plants_fuel_by_plant_sched402_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk_out_ferc1__yearly_steam_plants_fuel_by_plant_sched402_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_steam_plants_fuel_by_plant_sched402_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "report_year", + "utility_id_ferc1", + "plant_name_ferc1", + name=op.f("pk_out_ferc1__yearly_steam_plants_fuel_by_plant_sched402"), + ), + ) + op.create_table( + "out_ferc1__yearly_steam_plants_fuel_sched402", + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_total_cost", + sa.Float(), + nullable=True, + comment="Total cost of consumed fuel.", + ), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_cost_per_unit_burned", + sa.Float(), + nullable=True, + comment="Average cost of fuel consumed in the report year per reported fuel unit (USD).", + ), + sa.Column( + "fuel_cost_per_unit_delivered", + sa.Float(), + nullable=True, + comment="Average cost of fuel delivered in the report year per reported fuel unit (USD).", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_units", + sa.Enum( + "mmbtu", + "gramsU", + "kg", + "mwhth", + "kgal", + "bbl", + "klbs", + "mcf", + "gal", + "mwdth", + "btu", + "ton", + ), + nullable=True, + comment="Reported unit of measure for fuel.", + ), + sa.Column( + "record_id", + sa.Text(), + nullable=False, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_steam_plants_fuel_sched402_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk_out_ferc1__yearly_steam_plants_fuel_sched402_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_ferc1__yearly_steam_plants_fuel_sched402_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "record_id", name=op.f("pk_out_ferc1__yearly_steam_plants_fuel_sched402") + ), + ) + op.create_table( + "_out_eia__yearly_capacity_factor_by_generator", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk__out_eia__yearly_capacity_factor_by_generator_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk__out_eia__yearly_capacity_factor_by_generator"), + ), + ) + op.create_table( + "_out_eia__yearly_derived_generator_attributes", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "total_mmbtu", + sa.Float(), + nullable=True, + comment="Total annual heat content of fuel consumed by a plant part record in the plant parts list.", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk__out_eia__yearly_derived_generator_attributes_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk__out_eia__yearly_derived_generator_attributes"), + ), + ) + op.create_table( + "_out_eia__yearly_fuel_cost_by_generator", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "fuel_type_count", + sa.Integer(), + nullable=True, + comment="A count of how many different simple energy sources there are associated with a generator.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk__out_eia__yearly_fuel_cost_by_generator_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk__out_eia__yearly_fuel_cost_by_generator_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk__out_eia__yearly_fuel_cost_by_generator_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk__out_eia__yearly_fuel_cost_by_generator_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk__out_eia__yearly_fuel_cost_by_generator"), + ), + ) + op.create_table( + "_out_eia__yearly_generators", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "associated_combined_heat_power", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator is associated with a combined heat and power system", + ), + sa.Column( + "bga_source", + sa.Text(), + nullable=True, + comment="The source from where the unit_id_pudl is compiled. The unit_id_pudl comes directly from EIA 860, or string association (which looks at all the boilers and generators that are not associated with a unit and tries to find a matching string in the respective collection of boilers or generator), or from a unit connection (where the unit_id_eia is employed to find additional boiler generator connections).", + ), + sa.Column( + "bypass_heat_recovery", + sa.Boolean(), + nullable=True, + comment="Can this generator operate while bypassing the heat recovery steam generator?", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "carbon_capture", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses carbon capture technology.", + ), + sa.Column("city", sa.Text(), nullable=True), + sa.Column( + "cofire_fuels", + sa.Boolean(), + nullable=True, + comment="Can the generator co-fire fuels?.", + ), + sa.Column("county", sa.Text(), nullable=True, comment="County name."), + sa.Column( + "current_planned_generator_operating_date", + sa.Date(), + nullable=True, + comment="The most recently updated effective date on which the generator is scheduled to start operation", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.Column( + "deliver_power_transgrid", + sa.Boolean(), + nullable=True, + comment="Indicate whether the generator can deliver power to the transmission grid.", + ), + sa.Column( + "distributed_generation", + sa.Boolean(), + nullable=True, + comment="Whether the generator is considered distributed generation", + ), + sa.Column( + "duct_burners", + sa.Boolean(), + nullable=True, + comment="Indicates whether the unit has duct-burners for supplementary firing of the turbine exhaust gas", + ), + sa.Column( + "energy_source_1_transport_1", + sa.Text(), + nullable=True, + comment="Primary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_1_transport_2", + sa.Text(), + nullable=True, + comment="Secondary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_1_transport_3", + sa.Text(), + nullable=True, + comment="Tertiary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_2_transport_1", + sa.Text(), + nullable=True, + comment="Primary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_2_transport_2", + sa.Text(), + nullable=True, + comment="Secondary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_2_transport_3", + sa.Text(), + nullable=True, + comment="Tertiary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the generator.", + ), + sa.Column( + "energy_source_code_2", + sa.Text(), + nullable=True, + comment="The code representing the second most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_3", + sa.Text(), + nullable=True, + comment="The code representing the third most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_4", + sa.Text(), + nullable=True, + comment="The code representing the fourth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_5", + sa.Text(), + nullable=True, + comment="The code representing the fifth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_6", + sa.Text(), + nullable=True, + comment="The code representing the sixth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_storage_capacity_mwh", + sa.Float(), + nullable=True, + comment="Energy storage capacity in MWh (e.g. for batteries).", + ), + sa.Column( + "ferc_qualifying_facility", + sa.Boolean(), + nullable=True, + comment="Indicatates whether or not a generator is a qualifying FERC cogeneation facility.", + ), + sa.Column( + "fluidized_bed_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses fluidized bed technology", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_type_count", + sa.Integer(), + nullable=True, + comment="A count of how many different simple energy sources there are associated with a generator.", + ), + sa.Column( + "generator_operating_date", + sa.Date(), + nullable=True, + comment="Date the generator began commercial operation.", + ), + sa.Column( + "generator_retirement_date", + sa.Date(), + nullable=True, + comment="Date of the scheduled or effected retirement of the generator.", + ), + sa.Column( + "latitude", + sa.Float(), + nullable=True, + comment="Latitude of the plant's location, in degrees.", + ), + sa.Column( + "longitude", + sa.Float(), + nullable=True, + comment="Longitude of the plant's location, in degrees.", + ), + sa.Column( + "minimum_load_mw", + sa.Float(), + nullable=True, + comment="The minimum load at which the generator can operate at continuosuly.", + ), + sa.Column( + "multiple_fuels", + sa.Boolean(), + nullable=True, + comment="Can the generator burn multiple fuels?", + ), + sa.Column( + "nameplate_power_factor", + sa.Float(), + nullable=True, + comment="The nameplate power factor of the generator.", + ), + sa.Column( + "net_capacity_mwdc", + sa.Float(), + nullable=True, + comment="Generation capacity in megawatts of direct current that is subject to a net metering agreement. Typically used for behind-the-meter solar PV.", + ), + sa.Column( + "operating_switch", + sa.Text(), + nullable=True, + comment="Indicates whether the fuel switching generator can switch when operating", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.Column( + "operational_status_code", + sa.Text(), + nullable=True, + comment="The operating status of the asset.", + ), + sa.Column( + "original_planned_generator_operating_date", + sa.Date(), + nullable=True, + comment="The date the generator was originally scheduled to be operational", + ), + sa.Column( + "other_combustion_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses other combustion technologies", + ), + sa.Column( + "other_modifications_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter commercial operation after any other planned modification is complete.", + ), + sa.Column( + "other_planned_modifications", + sa.Boolean(), + nullable=True, + comment="Indicates whether there are there other modifications planned for the generator.", + ), + sa.Column( + "owned_by_non_utility", + sa.Boolean(), + nullable=True, + comment="Whether any part of generator is owned by a nonutilty", + ), + sa.Column( + "ownership_code", + sa.Text(), + nullable=True, + comment="Identifies the ownership for each generator.", + ), + sa.Column( + "planned_derate_date", + sa.Date(), + nullable=True, + comment="Planned effective month that the generator is scheduled to enter operation after the derate modification.", + ), + sa.Column( + "planned_energy_source_code_1", + sa.Text(), + nullable=True, + comment="New energy source code for the planned repowered generator.", + ), + sa.Column( + "planned_generator_retirement_date", + sa.Date(), + nullable=True, + comment="Planned effective date of the scheduled retirement of the generator.", + ), + sa.Column( + "planned_modifications", + sa.Boolean(), + nullable=True, + comment="Indicates whether there are any planned capacity uprates/derates, repowering, other modifications, or generator retirements scheduled for the next 5 years.", + ), + sa.Column( + "planned_net_summer_capacity_derate_mw", + sa.Float(), + nullable=True, + comment="Decrease in summer capacity expected to be realized from the derate modification to the equipment.", + ), + sa.Column( + "planned_net_summer_capacity_uprate_mw", + sa.Float(), + nullable=True, + comment="Increase in summer capacity expected to be realized from the modification to the equipment.", + ), + sa.Column( + "planned_net_winter_capacity_derate_mw", + sa.Float(), + nullable=True, + comment="Decrease in winter capacity expected to be realized from the derate modification to the equipment.", + ), + sa.Column( + "planned_net_winter_capacity_uprate_mw", + sa.Float(), + nullable=True, + comment="Increase in winter capacity expected to be realized from the uprate modification to the equipment.", + ), + sa.Column( + "planned_new_capacity_mw", + sa.Float(), + nullable=True, + comment="The expected new namplate capacity for the generator.", + ), + sa.Column( + "planned_new_prime_mover_code", + sa.Text(), + nullable=True, + comment="New prime mover for the planned repowered generator.", + ), + sa.Column( + "planned_repower_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter operation after the repowering is complete.", + ), + sa.Column( + "planned_uprate_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter operation after the uprate modification.", + ), + sa.Column( + "previously_canceled", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator was previously reported as indefinitely postponed or canceled", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "pulverized_coal_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses pulverized coal technology", + ), + sa.Column( + "reactive_power_output_mvar", + sa.Float(), + nullable=True, + comment="Reactive Power Output (MVAr)", + ), + sa.Column( + "rto_iso_lmp_node_id", + sa.Text(), + nullable=True, + comment="The designation used to identify the price node in RTO/ISO Locational Marginal Price reports", + ), + sa.Column( + "rto_iso_location_wholesale_reporting_id", + sa.Text(), + nullable=True, + comment="The designation used to report ths specific location of the wholesale sales transactions to FERC for the Electric Quarterly Report", + ), + sa.Column( + "solid_fuel_gasification", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator is part of a solid fuel gasification system", + ), + sa.Column( + "startup_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_2", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_3", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_4", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "stoker_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses stoker technology", + ), + sa.Column("street_address", sa.Text(), nullable=True), + sa.Column( + "subcritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses subcritical technology", + ), + sa.Column( + "summer_capacity_estimate", + sa.Boolean(), + nullable=True, + comment="Whether the summer capacity value was an estimate", + ), + sa.Column( + "summer_capacity_mw", + sa.Float(), + nullable=True, + comment="The net summer capacity.", + ), + sa.Column( + "summer_estimated_capability_mw", + sa.Float(), + nullable=True, + comment="EIA estimated summer capacity (in MWh).", + ), + sa.Column( + "supercritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses supercritical technology", + ), + sa.Column( + "switch_oil_gas", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator switch between oil and natural gas.", + ), + sa.Column( + "syncronized_transmission_grid", + sa.Boolean(), + nullable=True, + comment="Indicates whether standby generators (SB status) can be synchronized to the grid.", + ), + sa.Column( + "technology_description", + sa.Text(), + nullable=True, + comment="High level description of the technology used by the generator to produce electricity.", + ), + sa.Column( + "time_cold_shutdown_full_load_code", + sa.Text(), + nullable=True, + comment="The minimum amount of time required to bring the unit to full load from shutdown.", + ), + sa.Column( + "timezone", + sa.Enum( + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Timbuktu", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/ComodRivadavia", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Atka", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Coral_Harbour", + "America/Cordoba", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Ensenada", + "America/Fort_Nelson", + "America/Fort_Wayne", + "America/Fortaleza", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indianapolis", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Jujuy", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Knox_IN", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Louisville", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Mendoza", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montreal", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nipigon", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Nuuk", + "America/Ojinaga", + "America/Panama", + "America/Pangnirtung", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Acre", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Rosario", + "America/Santa_Isabel", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Shiprock", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Thunder_Bay", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Virgin", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "America/Yellowknife", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/South_Pole", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Ashkhabad", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Calcutta", + "Asia/Chita", + "Asia/Choibalsan", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Colombo", + "Asia/Dacca", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Harbin", + "Asia/Hebron", + "Asia/Ho_Chi_Minh", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Istanbul", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kashgar", + "Asia/Kathmandu", + "Asia/Katmandu", + "Asia/Khandyga", + "Asia/Kolkata", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macao", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Rangoon", + "Asia/Riyadh", + "Asia/Saigon", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Tel_Aviv", + "Asia/Thimbu", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ujung_Pandang", + "Asia/Ulaanbaatar", + "Asia/Ulan_Bator", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yangon", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faeroe", + "Atlantic/Faroe", + "Atlantic/Jan_Mayen", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/ACT", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Canberra", + "Australia/Currie", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/LHI", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/NSW", + "Australia/North", + "Australia/Perth", + "Australia/Queensland", + "Australia/South", + "Australia/Sydney", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/West", + "Australia/Yancowinna", + "Brazil/Acre", + "Brazil/DeNoronha", + "Brazil/East", + "Brazil/West", + "CET", + "CST6CDT", + "Canada/Atlantic", + "Canada/Central", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Canada/Saskatchewan", + "Canada/Yukon", + "Chile/Continental", + "Chile/EasterIsland", + "Cuba", + "EET", + "EST", + "EST5EDT", + "Egypt", + "Eire", + "Etc/GMT", + "Etc/GMT+0", + "Etc/GMT+1", + "Etc/GMT+10", + "Etc/GMT+11", + "Etc/GMT+12", + "Etc/GMT+2", + "Etc/GMT+3", + "Etc/GMT+4", + "Etc/GMT+5", + "Etc/GMT+6", + "Etc/GMT+7", + "Etc/GMT+8", + "Etc/GMT+9", + "Etc/GMT-0", + "Etc/GMT-1", + "Etc/GMT-10", + "Etc/GMT-11", + "Etc/GMT-12", + "Etc/GMT-13", + "Etc/GMT-14", + "Etc/GMT-2", + "Etc/GMT-3", + "Etc/GMT-4", + "Etc/GMT-5", + "Etc/GMT-6", + "Etc/GMT-7", + "Etc/GMT-8", + "Etc/GMT-9", + "Etc/GMT0", + "Etc/Greenwich", + "Etc/UCT", + "Etc/UTC", + "Etc/Universal", + "Etc/Zulu", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belfast", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kiev", + "Europe/Kirov", + "Europe/Kyiv", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Nicosia", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Tiraspol", + "Europe/Ulyanovsk", + "Europe/Uzhgorod", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zaporozhye", + "Europe/Zurich", + "GB", + "GB-Eire", + "GMT", + "GMT+0", + "GMT-0", + "GMT0", + "Greenwich", + "HST", + "Hongkong", + "Iceland", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Iran", + "Israel", + "Jamaica", + "Japan", + "Kwajalein", + "Libya", + "MET", + "MST", + "MST7MDT", + "Mexico/BajaNorte", + "Mexico/BajaSur", + "Mexico/General", + "NZ", + "NZ-CHAT", + "Navajo", + "PRC", + "PST8PDT", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Chuuk", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Enderbury", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Johnston", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Pohnpei", + "Pacific/Ponape", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Samoa", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Truk", + "Pacific/Wake", + "Pacific/Wallis", + "Pacific/Yap", + "Poland", + "Portugal", + "ROC", + "ROK", + "Singapore", + "Turkey", + "UCT", + "US/Alaska", + "US/Aleutian", + "US/Arizona", + "US/Central", + "US/East-Indiana", + "US/Eastern", + "US/Hawaii", + "US/Indiana-Starke", + "US/Michigan", + "US/Mountain", + "US/Pacific", + "US/Samoa", + "UTC", + "Universal", + "W-SU", + "WET", + "Zulu", + ), + nullable=True, + comment="IANA timezone name", + ), + sa.Column( + "topping_bottoming_code", + sa.Text(), + nullable=True, + comment="If the generator is associated with a combined heat and power system, indicates whether the generator is part of a topping cycle or a bottoming cycle", + ), + sa.Column( + "turbines_inverters_hydrokinetics", + sa.Integer(), + nullable=True, + comment="Number of wind turbines, or hydrokinetic buoys.", + ), + sa.Column( + "turbines_num", + sa.Integer(), + nullable=True, + comment="Number of wind turbines, or hydrokinetic buoys.", + ), + sa.Column( + "ultrasupercritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses ultra-supercritical technology", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "uprate_derate_completed_date", + sa.Date(), + nullable=True, + comment="The date when the uprate or derate was completed.", + ), + sa.Column( + "uprate_derate_during_year", + sa.Boolean(), + nullable=True, + comment="Was an uprate or derate completed on this generator during the reporting year?", + ), + sa.Column( + "winter_capacity_estimate", + sa.Boolean(), + nullable=True, + comment="Whether the winter capacity value was an estimate", + ), + sa.Column( + "winter_capacity_mw", + sa.Float(), + nullable=True, + comment="The net winter capacity.", + ), + sa.Column( + "winter_estimated_capability_mw", + sa.Float(), + nullable=True, + comment="EIA estimated winter capacity (in MWh).", + ), + sa.Column( + "zip_code", sa.Text(), nullable=True, comment="Five digit US Zip Code." + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk__out_eia__yearly_generators_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_1"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_1_transport_1_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_2"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_1_transport_2_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_3"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_1_transport_3_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_1"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_2_transport_1_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_2"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_2_transport_2_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_3"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_2_transport_3_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_2"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_code_2_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_3"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_code_3_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_4"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_code_4_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_5"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_code_5_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_6"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_energy_source_code_6_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["operational_status_code"], + ["core_eia__codes_operational_status.code"], + name=op.f( + "fk__out_eia__yearly_generators_operational_status_code_core_eia__codes_operational_status" + ), + ), + sa.ForeignKeyConstraint( + ["planned_energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_planned_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["planned_new_prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk__out_eia__yearly_generators_planned_new_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk__out_eia__yearly_generators_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk__out_eia__yearly_generators_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk__out_eia__yearly_generators_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_startup_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_2"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_startup_source_code_2_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_3"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_startup_source_code_3_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_4"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk__out_eia__yearly_generators_startup_source_code_4_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk__out_eia__yearly_generators_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk__out_eia__yearly_generators_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "generator_id", + "report_date", + name=op.f("pk__out_eia__yearly_generators"), + ), + ) + op.create_table( + "_out_eia__yearly_heat_rate_by_generator", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_type_count", + sa.Integer(), + nullable=True, + comment="A count of how many different simple energy sources there are associated with a generator.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk__out_eia__yearly_heat_rate_by_generator_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk__out_eia__yearly_heat_rate_by_generator_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk__out_eia__yearly_heat_rate_by_generator"), + ), + ) + op.create_table( + "core_eia860__assn_boiler_cooling", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column( + "cooling_id_eia", + sa.Text(), + nullable=False, + comment="The cooling system identification number reported to EIA.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia860__assn_boiler_cooling_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id", "report_date"], + [ + "core_eia860__scd_boilers.plant_id_eia", + "core_eia860__scd_boilers.boiler_id", + "core_eia860__scd_boilers.report_date", + ], + name=op.f( + "fk_core_eia860__assn_boiler_cooling_plant_id_eia_core_eia860__scd_boilers" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "boiler_id", + "cooling_id_eia", + name=op.f("pk_core_eia860__assn_boiler_cooling"), + ), + ) + op.create_table( + "core_eia860__assn_boiler_generator", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column( + "unit_id_eia", + sa.Text(), + nullable=True, + comment="EIA-assigned unit identification code.", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "boiler_generator_assn_type_code", + sa.Text(), + nullable=True, + comment="Indicates whether boiler associations with generator during the year were actual or theoretical. Only available before 2013.", + ), + sa.Column( + "steam_plant_type_code", + sa.Integer(), + nullable=True, + comment="Code that describes types of steam plants from EIA 860. See steam_plant_types_eia table for more details.", + ), + sa.Column( + "bga_source", + sa.Text(), + nullable=True, + comment="The source from where the unit_id_pudl is compiled. The unit_id_pudl comes directly from EIA 860, or string association (which looks at all the boilers and generators that are not associated with a unit and tries to find a matching string in the respective collection of boilers or generator), or from a unit connection (where the unit_id_eia is employed to find additional boiler generator connections).", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["boiler_generator_assn_type_code"], + ["core_eia__codes_boiler_generator_assn_types.code"], + name=op.f( + "fk_core_eia860__assn_boiler_generator_boiler_generator_assn_type_code_core_eia__codes_boiler_generator_assn_types" + ), + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia860__assn_boiler_generator_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id", "report_date"], + [ + "core_eia860__scd_boilers.plant_id_eia", + "core_eia860__scd_boilers.boiler_id", + "core_eia860__scd_boilers.report_date", + ], + name=op.f( + "fk_core_eia860__assn_boiler_generator_plant_id_eia_core_eia860__scd_boilers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_core_eia860__assn_boiler_generator_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["steam_plant_type_code"], + ["core_eia__codes_steam_plant_types.code"], + name=op.f( + "fk_core_eia860__assn_boiler_generator_steam_plant_type_code_core_eia__codes_steam_plant_types" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "report_date", + "generator_id", + "boiler_id", + name=op.f("pk_core_eia860__assn_boiler_generator"), + ), + ) + op.create_table( + "core_eia860__assn_boiler_stack_flue", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column( + "stack_id_eia", + sa.Text(), + nullable=True, + comment="The stack identification value reported to EIA. Stacks or chimneys are the place where emissions from the combustion process are released into the atmosphere. This field was reported in conjunction with flue_id_eia until 2013 when stack_flue_id_eia took their place.", + ), + sa.Column( + "flue_id_eia", + sa.Text(), + nullable=True, + comment="The flue identification value reported to EIA. The flue is a duct, pipe, or opening that transports exhast gases through the stack. This field was reported in conjunction with stack_id_eia until 2013 when stack_flue_id_eia took their place.", + ), + sa.Column( + "stack_flue_id_eia", + sa.Text(), + nullable=True, + comment="The stack or flue identification value reported to EIA. This denotes the place where emissions from the combusion process are released into the atmosphere. Prior to 2013, this was reported as `stack_id_eia` and `flue_id_eia`.", + ), + sa.Column( + "stack_flue_id_pudl", + sa.Text(), + nullable=False, + comment="A stack and/or flue identification value created by PUDL for use as part of the primary key for the stack flue equipment and boiler association tables. For 2013 and onward, this value is equal to the value for stack_flue_id_eia. Prior to 2013, this value is equal to the value for stack_id_eia and the value for flue_id_eia seperated by an underscore or just the stack_flue_eia in cases where flue_id_eia is NA.", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id", "report_date"], + [ + "core_eia860__scd_boilers.plant_id_eia", + "core_eia860__scd_boilers.boiler_id", + "core_eia860__scd_boilers.report_date", + ], + name=op.f( + "fk_core_eia860__assn_boiler_stack_flue_plant_id_eia_core_eia860__scd_boilers" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "boiler_id", + "stack_flue_id_pudl", + name=op.f("pk_core_eia860__assn_boiler_stack_flue"), + ), + ) + op.create_table( + "core_eia860__scd_ownership", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "owner_utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA utility Identification number for the owner company that is responsible for the day-to-day operations of the generator, not the operator utility.", + ), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "owner_utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the EIA owner utility.", + ), + sa.Column( + "owner_state", + sa.Enum( + "AS", + "ID", + "UT", + "IL", + "OH", + "AL", + "KY", + "NH", + "NT", + "ND", + "KS", + "MN", + "MI", + "OR", + "CO", + "QC", + "AB", + "MP", + "WI", + "BC", + "AZ", + "SD", + "RI", + "ME", + "MO", + "NC", + "GA", + "YT", + "ON", + "CA", + "DE", + "FL", + "NE", + "NM", + "VA", + "WA", + "NJ", + "DC", + "MS", + "GU", + "WV", + "CT", + "AK", + "WY", + "TN", + "TX", + "PR", + "SC", + "MD", + "IN", + "NB", + "NS", + "LA", + "OK", + "SK", + "VI", + "NV", + "MT", + "IA", + "NY", + "PA", + "MB", + "MA", + "VT", + "AR", + "PE", + "NU", + "HI", + "NL", + ), + nullable=True, + comment="Two letter ISO-3166 political subdivision code.", + ), + sa.Column("owner_city", sa.Text(), nullable=True, comment="City of owner."), + sa.Column( + "owner_country", + sa.Enum("USA", "CAN"), + nullable=True, + comment="Three letter ISO-3166 country code.", + ), + sa.Column( + "owner_street_address", + sa.Text(), + nullable=True, + comment="Steet address of owner.", + ), + sa.Column( + "owner_zip_code", sa.Text(), nullable=True, comment="Zip code of owner." + ), + sa.Column( + "fraction_owned", + sa.Float(), + nullable=True, + comment="Proportion of generator ownership attributable to this utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia860__scd_ownership_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["owner_utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_core_eia860__scd_ownership_owner_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_core_eia860__scd_ownership_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + "owner_utility_id_eia", + name=op.f("pk_core_eia860__scd_ownership"), + ), + ) + op.create_table( + "core_eia860__yearly_boiler_emissions_control_equipment_assn", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column( + "emission_control_id_type", + sa.Text(), + nullable=False, + comment="The type of emissions control id: so2, nox, particulate, or mercury.", + ), + sa.Column( + "emission_control_id_eia", + sa.Text(), + nullable=False, + comment="The emission control ID used to collect so2, nox, particulate, and mercury emissions data. This column should be used in conjunction with emissions_control_type as it's not guaranteed to be unique.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_core_eia860__yearly_boiler_emissions_control_equipment_assn_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id", "report_date"], + [ + "core_eia860__scd_boilers.plant_id_eia", + "core_eia860__scd_boilers.boiler_id", + "core_eia860__scd_boilers.report_date", + ], + name=op.f( + "fk_core_eia860__yearly_boiler_emissions_control_equipment_assn_plant_id_eia_core_eia860__scd_boilers" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "boiler_id", + "emission_control_id_type", + "emission_control_id_eia", + name=op.f("pk_core_eia860__yearly_boiler_emissions_control_equipment_assn"), + ), + ) + op.create_table( + "mega_generators_eia", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=True, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "technology_description", + sa.Text(), + nullable=True, + comment="High level description of the technology used by the generator to produce electricity.", + ), + sa.Column( + "energy_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the generator.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "generator_operating_date", + sa.Date(), + nullable=True, + comment="Date the generator began commercial operation.", + ), + sa.Column( + "generator_retirement_date", + sa.Date(), + nullable=True, + comment="Date of the scheduled or effected retirement of the generator.", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "planned_generator_retirement_date", + sa.Date(), + nullable=True, + comment="Planned effective date of the scheduled retirement of the generator.", + ), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "total_mmbtu", + sa.Float(), + nullable=True, + comment="Total annual heat content of fuel consumed by a plant part record in the plant parts list.", + ), + sa.Column( + "ferc_acct_name", + sa.Enum("Hydraulic", "Nuclear", "Steam", "Other"), + nullable=True, + comment="Name of FERC account, derived from technology description and prime mover code.", + ), + sa.Column( + "generator_operating_year", + sa.Integer(), + nullable=True, + comment="Year a generator went into service.", + ), + sa.Column( + "operational_status_pudl", + sa.Enum("operating", "retired", "proposed"), + nullable=True, + comment="The operating status of the asset using PUDL categories.", + ), + sa.Column( + "capacity_eoy_mw", + sa.Float(), + nullable=True, + comment="Total end of year installed (nameplate) capacity for a plant part, in megawatts.", + ), + sa.Column( + "fraction_owned", + sa.Float(), + nullable=True, + comment="Proportion of generator ownership attributable to this utility.", + ), + sa.Column( + "ownership_record_type", + sa.Enum("owned", "total"), + nullable=True, + comment="Whether each generator record is for one owner or represents a total of all ownerships.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_mega_generators_eia_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_mega_generators_eia_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_mega_generators_eia_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_mega_generators_eia_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_mega_generators_eia_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_mega_generators_eia_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + ) + op.create_table( + "out_pudl__yearly_assn_eia_ferc1_plant_parts", + sa.Column( + "record_id_ferc1", + sa.Text(), + nullable=False, + comment="Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.", + ), + sa.Column( + "record_id_eia", + sa.Text(), + nullable=True, + comment="Identifier for EIA plant parts analysis records.", + ), + sa.Column( + "match_type", + sa.Text(), + nullable=True, + comment="Indicates the source and validation of the match between EIA and FERC. Match types include matches was generated from the model, verified by the training data, overridden by the training data, etc.", + ), + sa.Column( + "plant_name_ppe", + sa.Text(), + nullable=True, + comment="Derived plant name that includes EIA plant name and other strings associated with ID and PK columns of the plant part.", + ), + sa.Column( + "plant_part", + sa.Enum( + "plant_unit", + "plant_prime_fuel", + "plant_operating_year", + "plant_gen", + "plant_match_ferc1", + "plant_prime_mover", + "plant_technology", + "plant", + "plant_ferc_acct", + ), + nullable=True, + comment="The part of the plant a record corresponds to.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "ownership_record_type", + sa.Enum("owned", "total"), + nullable=True, + comment="Whether each generator record is for one owner or represents a total of all ownerships.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=True, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "energy_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the generator.", + ), + sa.Column( + "technology_description", + sa.Text(), + nullable=True, + comment="High level description of the technology used by the generator to produce electricity.", + ), + sa.Column( + "ferc_acct_name", + sa.Enum("Hydraulic", "Nuclear", "Steam", "Other"), + nullable=True, + comment="Name of FERC account, derived from technology description and prime mover code.", + ), + sa.Column( + "generator_operating_year", + sa.Integer(), + nullable=True, + comment="Year a generator went into service.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "true_gran", + sa.Boolean(), + nullable=True, + comment="Indicates whether a plant part list record is associated with the highest priority plant part for all identical records.", + ), + sa.Column( + "appro_part_label", + sa.Enum( + "plant_unit", + "plant_prime_fuel", + "plant_operating_year", + "plant_gen", + "plant_match_ferc1", + "plant_prime_mover", + "plant_technology", + "plant", + "plant_ferc_acct", + ), + nullable=True, + comment="Plant part of the associated true granularity record.", + ), + sa.Column( + "appro_record_id_eia", + sa.Text(), + nullable=True, + comment="EIA record ID of the associated true granularity record.", + ), + sa.Column( + "record_count", + sa.Integer(), + nullable=True, + comment="Number of distinct generator IDs that partcipated in the aggregation for a plant part list record.", + ), + sa.Column( + "fraction_owned", + sa.Float(), + nullable=True, + comment="Proportion of generator ownership attributable to this utility.", + ), + sa.Column( + "ownership_dupe", + sa.Boolean(), + nullable=True, + comment="Whether a plant part record has a duplicate record with different ownership status.", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.Column( + "operational_status_pudl", + sa.Enum("operating", "retired", "proposed"), + nullable=True, + comment="The operating status of the asset using PUDL categories.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column( + "total_fuel_cost_eia", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "fuel_cost_per_mmbtu_eia", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "net_generation_mwh_eia", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "capacity_mw_eia", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "capacity_factor_eia", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "total_mmbtu_eia", + sa.Float(), + nullable=True, + comment="Total annual heat content of fuel consumed by a plant part record in the plant parts list.", + ), + sa.Column( + "heat_rate_mmbtu_mwh_eia", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "fuel_type_code_pudl_eia", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "installation_year_eia", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "plant_part_id_eia", + sa.Text(), + nullable=True, + comment="Contains EIA plant ID, plant part, ownership, and EIA utility id", + ), + sa.Column( + "utility_id_ferc1", + sa.Integer(), + nullable=True, + comment="PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.", + ), + sa.Column( + "utility_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the responding utility, as it is reported in FERC Form 1. For human readability only.", + ), + sa.Column( + "plant_id_ferc1", + sa.Integer(), + nullable=True, + comment="Algorithmically assigned PUDL FERC Plant ID. WARNING: NOT STABLE BETWEEN PUDL DB INITIALIZATIONS.", + ), + sa.Column( + "plant_name_ferc1", + sa.Text(), + nullable=True, + comment="Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.", + ), + sa.Column( + "asset_retirement_cost", + sa.Float(), + nullable=True, + comment="Asset retirement cost (USD).", + ), + sa.Column("avg_num_employees", sa.Float(), nullable=True), + sa.Column( + "capacity_factor_ferc1", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "capacity_mw_ferc1", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "capex_annual_addition", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total`.", + ), + sa.Column( + "capex_annual_addition_rolling", + sa.Float(), + nullable=True, + comment="Year-to-date capital addition into `capex_total`.", + ), + sa.Column( + "capex_annual_per_kw", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total` per kw.", + ), + sa.Column( + "capex_annual_per_mw", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total` per MW.", + ), + sa.Column( + "capex_annual_per_mw_rolling", + sa.Float(), + nullable=True, + comment="Year-to-date capital addition into `capex_total` per MW.", + ), + sa.Column( + "capex_annual_per_mwh", + sa.Float(), + nullable=True, + comment="Annual capital addition into `capex_total` per MWh.", + ), + sa.Column( + "capex_annual_per_mwh_rolling", + sa.Float(), + nullable=True, + comment="Year-to-date capital addition into `capex_total` per MWh.", + ), + sa.Column( + "capex_equipment", + sa.Float(), + nullable=True, + comment="Cost of plant: equipment (USD).", + ), + sa.Column( + "capex_land", + sa.Float(), + nullable=True, + comment="Cost of plant: land and land rights (USD).", + ), + sa.Column( + "capex_per_mw", + sa.Float(), + nullable=True, + comment="Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.", + ), + sa.Column( + "capex_structures", + sa.Float(), + nullable=True, + comment="Cost of plant: structures and improvements (USD).", + ), + sa.Column( + "capex_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD).", + ), + sa.Column( + "capex_wo_retirement_total", + sa.Float(), + nullable=True, + comment="Total cost of plant (USD) without retirements.", + ), + sa.Column( + "construction_type", + sa.Enum("conventional", "outdoor", "semioutdoor"), + nullable=True, + comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings.", + ), + sa.Column( + "construction_year_eia", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "construction_year_ferc1", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "installation_year_ferc1", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "net_generation_mwh_ferc1", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "not_water_limited_capacity_mw", + sa.Float(), + nullable=True, + comment="Plant capacity in MW when not limited by condenser water.", + ), + sa.Column("opex_allowances", sa.Float(), nullable=True, comment="Allowances."), + sa.Column( + "opex_boiler", + sa.Float(), + nullable=True, + comment="Maintenance of boiler (or reactor) plant.", + ), + sa.Column( + "opex_coolants", + sa.Float(), + nullable=True, + comment="Cost of coolants and water (nuclear plants only)", + ), + sa.Column( + "opex_electric", + sa.Float(), + nullable=True, + comment="Production expenses: electric expenses (USD).", + ), + sa.Column( + "opex_engineering", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance, supervision, and engineering (USD).", + ), + sa.Column( + "opex_fuel", + sa.Float(), + nullable=True, + comment="Production expenses: fuel (USD).", + ), + sa.Column( + "fuel_cost_per_mwh_eia", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "fuel_cost_per_mwh_ferc1", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "opex_misc_power", + sa.Float(), + nullable=True, + comment="Miscellaneous steam (or nuclear) expenses.", + ), + sa.Column( + "opex_misc_steam", + sa.Float(), + nullable=True, + comment="Maintenance of miscellaneous steam (or nuclear) plant.", + ), + sa.Column( + "opex_nonfuel_per_mwh", + sa.Float(), + nullable=True, + comment="Investments in non-fuel production expenses per Mwh.", + ), + sa.Column( + "opex_operations", + sa.Float(), + nullable=True, + comment="Production expenses: operations, supervision, and engineering (USD).", + ), + sa.Column( + "opex_per_mwh", + sa.Float(), + nullable=True, + comment="Total production expenses (USD per MWh generated).", + ), + sa.Column( + "opex_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of electric plant (USD).", + ), + sa.Column( + "opex_production_total", + sa.Float(), + nullable=True, + comment="Total operating expenses.", + ), + sa.Column( + "opex_rents", + sa.Float(), + nullable=True, + comment="Production expenses: rents (USD).", + ), + sa.Column("opex_steam", sa.Float(), nullable=True, comment="Steam expenses."), + sa.Column( + "opex_steam_other", + sa.Float(), + nullable=True, + comment="Steam from other sources.", + ), + sa.Column( + "opex_structures", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of structures (USD).", + ), + sa.Column( + "opex_total_nonfuel", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "opex_transfer", + sa.Float(), + nullable=True, + comment="Steam transferred (Credit).", + ), + sa.Column( + "peak_demand_mw", + sa.Float(), + nullable=True, + comment="Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.", + ), + sa.Column( + "plant_capability_mw", + sa.Float(), + nullable=True, + comment="Net plant capability in megawatts.", + ), + sa.Column( + "plant_hours_connected_while_generating", + sa.Float(), + nullable=True, + comment="Hours the plant was connected to load while generating in the report year.", + ), + sa.Column("plant_type", sa.Text(), nullable=True), + sa.Column( + "water_limited_capacity_mw", + sa.Float(), + nullable=True, + comment="Plant capacity in MW when limited by condenser water.", + ), + sa.Column( + "fuel_cost_per_mmbtu_ferc1", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column("fuel_type", sa.Text(), nullable=True), + sa.Column( + "license_id_ferc1", + sa.Integer(), + nullable=True, + comment="FERC issued operating license ID for the facility, if available. This value is extracted from the original plant name where possible.", + ), + sa.Column( + "opex_maintenance", + sa.Float(), + nullable=True, + comment="Production expenses: Maintenance (USD).", + ), + sa.Column( + "opex_total", + sa.Float(), + nullable=True, + comment="Total production expenses, excluding fuel (USD).", + ), + sa.Column( + "capex_facilities", + sa.Float(), + nullable=True, + comment="Cost of plant: reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "capex_roads", + sa.Float(), + nullable=True, + comment="Cost of plant: roads, railroads, and bridges (USD).", + ), + sa.Column( + "net_capacity_adverse_conditions_mw", + sa.Float(), + nullable=True, + comment="Net plant capability under the least favorable operating conditions, in megawatts.", + ), + sa.Column( + "net_capacity_favorable_conditions_mw", + sa.Float(), + nullable=True, + comment="Net plant capability under the most favorable operating conditions, in megawatts.", + ), + sa.Column( + "opex_dams", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of reservoirs, dams, and waterways (USD).", + ), + sa.Column( + "opex_generation_misc", + sa.Float(), + nullable=True, + comment="Production expenses: miscellaneous power generation expenses (USD).", + ), + sa.Column( + "opex_hydraulic", + sa.Float(), + nullable=True, + comment="Production expenses: hydraulic expenses (USD).", + ), + sa.Column( + "opex_misc_plant", + sa.Float(), + nullable=True, + comment="Production expenses: maintenance of miscellaneous hydraulic plant (USD).", + ), + sa.Column( + "opex_water_for_power", + sa.Float(), + nullable=True, + comment="Production expenses: water for power (USD).", + ), + sa.Column( + "ferc_license_id", + sa.Text(), + nullable=True, + comment="The FERC license ID of a project.", + ), + sa.Column( + "capex_equipment_electric", + sa.Float(), + nullable=True, + comment="Cost of plant: accessory electric equipment (USD).", + ), + sa.Column( + "capex_equipment_misc", + sa.Float(), + nullable=True, + comment="Cost of plant: miscellaneous power plant equipment (USD).", + ), + sa.Column( + "capex_wheels_turbines_generators", + sa.Float(), + nullable=True, + comment="Cost of plant: water wheels, turbines, and generators (USD).", + ), + sa.Column( + "energy_used_for_pumping_mwh", + sa.Float(), + nullable=True, + comment="Energy used for pumping, in megawatt-hours.", + ), + sa.Column( + "net_load_mwh", + sa.Float(), + nullable=True, + comment="Net output for load (net generation - energy used for pumping) in megawatt-hours.", + ), + sa.Column( + "opex_production_before_pumping", + sa.Float(), + nullable=True, + comment="Total production expenses before pumping (USD).", + ), + sa.Column( + "opex_pumped_storage", + sa.Float(), + nullable=True, + comment="Production expenses: pumped storage (USD).", + ), + sa.Column( + "opex_pumping", + sa.Float(), + nullable=True, + comment="Production expenses: We are here to PUMP YOU UP! (USD).", + ), + sa.Column( + "total_fuel_cost_ferc1", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "total_mmbtu_ferc1", + sa.Float(), + nullable=True, + comment="Total annual heat content of fuel consumed by a plant part record in the plant parts list.", + ), + sa.Column( + "fuel_type_code_pudl_ferc1", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "heat_rate_mmbtu_mwh_ferc1", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Calculated from FERC reported fuel consumption and net generation.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_pudl__yearly_assn_eia_ferc1_plant_parts_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_out_pudl__yearly_assn_eia_ferc1_plant_parts_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_pudl__yearly_assn_eia_ferc1_plant_parts_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_pudl__yearly_assn_eia_ferc1_plant_parts_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_pudl__yearly_assn_eia_ferc1_plant_parts_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_ferc1", "plant_name_ferc1"], + [ + "core_pudl__assn_plants_ferc1.utility_id_ferc1", + "core_pudl__assn_plants_ferc1.plant_name_ferc1", + ], + name=op.f( + "fk_out_pudl__yearly_assn_eia_ferc1_plant_parts_utility_id_ferc1_core_pudl__assn_plants_ferc1" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_pudl__yearly_assn_eia_ferc1_plant_parts_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "record_id_ferc1", + name=op.f("pk_out_pudl__yearly_assn_eia_ferc1_plant_parts"), + ), + ) + op.create_table( + "out_eia860__yearly_ownership", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "owner_utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA utility Identification number for the owner company that is responsible for the day-to-day operations of the generator, not the operator utility.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "owner_utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the EIA owner utility.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "owner_state", + sa.Enum( + "AS", + "ID", + "UT", + "IL", + "OH", + "AL", + "KY", + "NH", + "NT", + "ND", + "KS", + "MN", + "MI", + "OR", + "CO", + "QC", + "AB", + "MP", + "WI", + "BC", + "AZ", + "SD", + "RI", + "ME", + "MO", + "NC", + "GA", + "YT", + "ON", + "CA", + "DE", + "FL", + "NE", + "NM", + "VA", + "WA", + "NJ", + "DC", + "MS", + "GU", + "WV", + "CT", + "AK", + "WY", + "TN", + "TX", + "PR", + "SC", + "MD", + "IN", + "NB", + "NS", + "LA", + "OK", + "SK", + "VI", + "NV", + "MT", + "IA", + "NY", + "PA", + "MB", + "MA", + "VT", + "AR", + "PE", + "NU", + "HI", + "NL", + ), + nullable=True, + comment="Two letter ISO-3166 political subdivision code.", + ), + sa.Column("owner_city", sa.Text(), nullable=True, comment="City of owner."), + sa.Column( + "owner_country", + sa.Enum("USA", "CAN"), + nullable=True, + comment="Three letter ISO-3166 country code.", + ), + sa.Column( + "owner_street_address", + sa.Text(), + nullable=True, + comment="Steet address of owner.", + ), + sa.Column( + "owner_zip_code", sa.Text(), nullable=True, comment="Zip code of owner." + ), + sa.Column( + "fraction_owned", + sa.Float(), + nullable=True, + comment="Proportion of generator ownership attributable to this utility.", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_out_eia860__yearly_ownership_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["owner_utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia860__yearly_ownership_owner_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_out_eia860__yearly_ownership_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia860__yearly_ownership_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia860__yearly_ownership_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + "owner_utility_id_eia", + name=op.f("pk_out_eia860__yearly_ownership"), + ), + ) + op.create_table( + "out_eia923__yearly_boiler_fuel", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "fuel_consumed_units", + sa.Float(), + nullable=True, + comment="Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_mmbtu_per_unit", + sa.Float(), + nullable=True, + comment="Heat content of the fuel in millions of Btus per physical unit.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "sulfur_content_pct", + sa.Float(), + nullable=True, + comment="Sulfur content percentage by weight to the nearest 0.01 percent.", + ), + sa.Column( + "ash_content_pct", + sa.Float(), + nullable=True, + comment="Ash content percentage by weight to the nearest 0.1 percent.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia923__yearly_boiler_fuel_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id", "report_date"], + [ + "core_eia860__scd_boilers.plant_id_eia", + "core_eia860__scd_boilers.boiler_id", + "core_eia860__scd_boilers.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_boiler_fuel_plant_id_eia_core_eia860__scd_boilers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__yearly_boiler_fuel_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia923__yearly_boiler_fuel_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_boiler_fuel_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__yearly_boiler_fuel_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "boiler_id", + "energy_source_code", + "prime_mover_code", + "report_date", + name=op.f("pk_out_eia923__yearly_boiler_fuel"), + ), + ) + op.create_table( + "out_eia923__yearly_generation", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_generation_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__yearly_generation_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_generation_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__yearly_generation_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "generator_id", + "report_date", + name=op.f("pk_out_eia923__yearly_generation"), + ), + ) + op.create_table( + "out_eia923__yearly_generation_fuel_by_generator", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_by_generator_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_by_generator_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_by_generator_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_by_generator_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk_out_eia923__yearly_generation_fuel_by_generator"), + ), + ) + op.create_table( + "out_eia923__yearly_generation_fuel_by_generator_energy_source", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "energy_source_code_num", + sa.Enum( + "energy_source_code_1", + "energy_source_code_2", + "energy_source_code_3", + "energy_source_code_4", + "energy_source_code_5", + "energy_source_code_6", + "energy_source_code_7", + "energy_source_code_8", + ), + nullable=True, + comment="Name of the energy_source_code_N column that this energy source code was reported in for the generator referenced in the same record.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + "prime_mover_code", + "energy_source_code", + name=op.f( + "pk_out_eia923__yearly_generation_fuel_by_generator_energy_source" + ), + ), + ) + op.create_table( + "out_eia923__yearly_generation_fuel_by_generator_energy_source_owner", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=False, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "energy_source_code", + sa.Text(), + nullable=False, + comment="A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=False, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "ownership_record_type", + sa.Enum("owned", "total"), + nullable=False, + comment="Whether each generator record is for one owner or represents a total of all ownerships.", + ), + sa.Column( + "fraction_owned", + sa.Float(), + nullable=True, + comment="Proportion of generator ownership attributable to this utility.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "energy_source_code_num", + sa.Enum( + "energy_source_code_1", + "energy_source_code_2", + "energy_source_code_3", + "energy_source_code_4", + "energy_source_code_5", + "energy_source_code_6", + "energy_source_code_7", + "energy_source_code_8", + ), + nullable=True, + comment="Name of the energy_source_code_N column that this energy source code was reported in for the generator referenced in the same record.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "fuel_consumed_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.", + ), + sa.Column( + "fuel_consumed_for_electricity_mmbtu", + sa.Float(), + nullable=True, + comment="Total consumption of fuel to produce electricity, in physical unit, year to date.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_owner_energy_source_code_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_owner_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_owner_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + "prime_mover_code", + "energy_source_code", + "utility_id_eia", + "ownership_record_type", + name=op.f( + "pk_out_eia923__yearly_generation_fuel_by_generator_energy_source_owner" + ), + ), + ) + op.create_table( + "out_eia__yearly_boilers", + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "boiler_id", sa.Text(), nullable=False, comment="Alphanumeric boiler ID." + ), + sa.Column( + "air_flow_100pct_load_cubic_feet_per_minute", + sa.Float(), + nullable=True, + comment="Total air flow including excess air at 100 percent load, reported at standard temperature and pressure (i.e. 68 F and one atmosphere pressure).", + ), + sa.Column( + "boiler_fuel_code_1", + sa.Text(), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the boiler.", + ), + sa.Column( + "boiler_fuel_code_2", + sa.Text(), + nullable=True, + comment="The code representing the second most predominant type of energy that fuels the boiler.", + ), + sa.Column( + "boiler_fuel_code_3", + sa.Text(), + nullable=True, + comment="The code representing the third most predominant type of energy that fuels the boiler.", + ), + sa.Column( + "boiler_fuel_code_4", + sa.Text(), + nullable=True, + comment="The code representing the fourth most predominant type of energy that fuels the boiler.", + ), + sa.Column( + "boiler_manufacturer", + sa.Text(), + nullable=True, + comment="Name of boiler manufacturer.", + ), + sa.Column( + "boiler_manufacturer_code", + sa.Text(), + nullable=True, + comment="EIA short code for boiler manufacturer.", + ), + sa.Column( + "boiler_operating_date", + sa.Date(), + nullable=True, + comment="Date the boiler began or is planned to begin commercial operation.", + ), + sa.Column( + "boiler_retirement_date", + sa.Date(), + nullable=True, + comment="Date of the scheduled or effected retirement of the boiler.", + ), + sa.Column( + "boiler_status", + sa.Text(), + nullable=True, + comment="EIA short code identifying boiler operational status.", + ), + sa.Column( + "boiler_type", + sa.Text(), + nullable=True, + comment="EIA short code indicating the standards under which the boiler is operating as described in the U.S. EPA regulation under 40 CFR.", + ), + sa.Column("city", sa.Text(), nullable=True), + sa.Column( + "compliance_year_mercury", + sa.Integer(), + nullable=True, + comment="Year boiler was or is expected to be in compliance with federal, state and/or local regulations for mercury emissions.", + ), + sa.Column( + "compliance_year_nox", + sa.Integer(), + nullable=True, + comment="Year boiler was or is expected to be in compliance with federal, state and/or local regulations for nitrogen oxide emissions.", + ), + sa.Column( + "compliance_year_particulate", + sa.Integer(), + nullable=True, + comment="Year boiler was or is expected to be in compliance with federal, state and/or local regulations for particulate matter emissions.", + ), + sa.Column( + "compliance_year_so2", + sa.Integer(), + nullable=True, + comment="Year boiler was or is expected to be in compliance with federal, state and/or local regulations for sulfur dioxide emissions.", + ), + sa.Column("county", sa.Text(), nullable=True, comment="County name."), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.Column( + "efficiency_100pct_load", + sa.Float(), + nullable=True, + comment="Boiler efficiency percentage when burning at 100 percent load to the nearest 0.1 percent.", + ), + sa.Column( + "efficiency_50pct_load", + sa.Float(), + nullable=True, + comment="Boiler efficiency percentage when burning at 50 percent load to the nearest 0.1 percent.", + ), + sa.Column( + "firing_rate_using_coal_tons_per_hour", + sa.Float(), + nullable=True, + comment="Design firing rate at maximum continuous steam flow for coal to the nearest 0.1 ton per hour.", + ), + sa.Column( + "firing_rate_using_gas_mcf_per_hour", + sa.Float(), + nullable=True, + comment="Design firing rate at maximum continuous steam flow for gas to the nearest 0.1 cubic feet per hour.", + ), + sa.Column( + "firing_rate_using_oil_bbls_per_hour", + sa.Float(), + nullable=True, + comment="Design firing rate at maximum continuous steam flow for pet coke to the nearest 0.1 barrels per hour.", + ), + sa.Column( + "firing_rate_using_other_fuels", + sa.Float(), + nullable=True, + comment="Design firing rate at maximum continuous steam flow for energy sources other than coal, petroleum, or natural gas.", + ), + sa.Column( + "firing_type_1", + sa.Text(), + nullable=True, + comment="EIA short code indicating the type of firing used by this boiler.", + ), + sa.Column( + "firing_type_2", + sa.Text(), + nullable=True, + comment="EIA short code indicating the type of firing used by this boiler.", + ), + sa.Column( + "firing_type_3", + sa.Text(), + nullable=True, + comment="EIA short code indicating the type of firing used by this boiler.", + ), + sa.Column( + "fly_ash_reinjection", + sa.Boolean(), + nullable=True, + comment="Indicates whether the boiler is capable of re-injecting fly ash.", + ), + sa.Column( + "hrsg", + sa.Boolean(), + nullable=True, + comment="indicates if the boiler is a heat recovery steam generator (HRSG).", + ), + sa.Column( + "latitude", + sa.Float(), + nullable=True, + comment="Latitude of the plant's location, in degrees.", + ), + sa.Column( + "longitude", + sa.Float(), + nullable=True, + comment="Longitude of the plant's location, in degrees.", + ), + sa.Column( + "max_steam_flow_1000_lbs_per_hour", + sa.Float(), + nullable=True, + comment="Maximum continuous steam flow at 100 percent load.", + ), + sa.Column( + "mercury_control_existing_strategy_1", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_existing_strategy_2", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_existing_strategy_3", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_existing_strategy_4", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_existing_strategy_5", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_existing_strategy_6", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_proposed_strategy_1", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_proposed_strategy_2", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "mercury_control_proposed_strategy_3", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent mercury regulation.", + ), + sa.Column( + "new_source_review", + sa.Boolean(), + nullable=True, + comment="Indicates whether the boiler is subject to New Source Review requirements.", + ), + sa.Column( + "new_source_review_date", + sa.Date(), + nullable=True, + comment="Month of issued New Source Review permit.", + ), + sa.Column( + "new_source_review_permit", + sa.Text(), + nullable=True, + comment="New Source Review permit number.", + ), + sa.Column( + "nox_control_existing_caaa_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_existing_caaa_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_existing_caaa_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_existing_strategy_1", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_existing_strategy_2", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_existing_strategy_3", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_manufacturer", + sa.Text(), + nullable=True, + comment="Name of nitrogen oxide control manufacturer.", + ), + sa.Column( + "nox_control_manufacturer_code", + sa.Text(), + nullable=True, + comment="Code indicating the nitrogen oxide control burner manufacturer.", + ), + sa.Column( + "nox_control_out_of_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.", + ), + sa.Column( + "nox_control_out_of_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.", + ), + sa.Column( + "nox_control_out_of_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.", + ), + sa.Column( + "nox_control_planned_caaa_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_planned_caaa_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_planned_caaa_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "nox_control_proposed_strategy_1", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_proposed_strategy_2", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_proposed_strategy_3", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent nitrogen oxide regulation.", + ), + sa.Column( + "nox_control_status_code", + sa.Text(), + nullable=True, + comment="Nitrogen oxide control status code.", + ), + sa.Column( + "particulate_control_out_of_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with particulate matter regulations, strategy for compliance.", + ), + sa.Column( + "particulate_control_out_of_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with particulate matter regulations, strategy for compliance.", + ), + sa.Column( + "particulate_control_out_of_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with particulate matter regulations, strategy for compliance.", + ), + sa.Column( + "regulation_mercury", + sa.Text(), + nullable=True, + comment="Most stringent type of statute or regulation code under which the boiler is operating for mercury control standards.", + ), + sa.Column( + "regulation_nox", + sa.Text(), + nullable=True, + comment="EIA short code for most stringent type of statute or regulation code under which the boiler is operating for nitrogen oxide control standards.", + ), + sa.Column( + "regulation_particulate", + sa.Text(), + nullable=True, + comment="EIA short code for most stringent type of statute or regulation code under which the boiler is operating for particulate matter control standards.", + ), + sa.Column( + "regulation_so2", + sa.Text(), + nullable=True, + comment="EIA short code for most stringent type of statute or regulation code under which the boiler is operating for sulfur dioxide control standards.", + ), + sa.Column( + "so2_control_existing_caaa_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_existing_caaa_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_existing_caaa_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_existing_strategy_1", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "so2_control_existing_strategy_2", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "so2_control_existing_strategy_3", + sa.Text(), + nullable=True, + comment="Existing strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "so2_control_out_of_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.", + ), + sa.Column( + "so2_control_out_of_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.", + ), + sa.Column( + "so2_control_out_of_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.", + ), + sa.Column( + "so2_control_planned_caaa_compliance_strategy_1", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_planned_caaa_compliance_strategy_2", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_planned_caaa_compliance_strategy_3", + sa.Text(), + nullable=True, + comment="Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.", + ), + sa.Column( + "so2_control_proposed_strategy_1", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "so2_control_proposed_strategy_2", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "so2_control_proposed_strategy_3", + sa.Text(), + nullable=True, + comment="Proposed strategy to comply with the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "standard_nox_rate", + sa.Float(), + nullable=True, + comment="Numeric value for the unit of measurement specified for nitrogen oxide.", + ), + sa.Column( + "standard_particulate_rate", + sa.Float(), + nullable=True, + comment="Numeric value for the unit of measurement specified for particulate matter.", + ), + sa.Column( + "standard_so2_percent_scrubbed", + sa.Float(), + nullable=True, + comment="The percent of sulfur dioxide to be scrubbed specified by the most stringent sulfur dioxide regulation.", + ), + sa.Column( + "standard_so2_rate", + sa.Float(), + nullable=True, + comment="Numeric value for the unit of measurement specified for sulfur dioxide.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column("street_address", sa.Text(), nullable=True), + sa.Column( + "timezone", + sa.Enum( + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Timbuktu", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/ComodRivadavia", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Atka", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Coral_Harbour", + "America/Cordoba", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Ensenada", + "America/Fort_Nelson", + "America/Fort_Wayne", + "America/Fortaleza", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indianapolis", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Jujuy", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Knox_IN", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Louisville", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Mendoza", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montreal", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nipigon", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Nuuk", + "America/Ojinaga", + "America/Panama", + "America/Pangnirtung", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Acre", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Rosario", + "America/Santa_Isabel", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Shiprock", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Thunder_Bay", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Virgin", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "America/Yellowknife", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/South_Pole", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Ashkhabad", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Calcutta", + "Asia/Chita", + "Asia/Choibalsan", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Colombo", + "Asia/Dacca", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Harbin", + "Asia/Hebron", + "Asia/Ho_Chi_Minh", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Istanbul", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kashgar", + "Asia/Kathmandu", + "Asia/Katmandu", + "Asia/Khandyga", + "Asia/Kolkata", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macao", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Rangoon", + "Asia/Riyadh", + "Asia/Saigon", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Tel_Aviv", + "Asia/Thimbu", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ujung_Pandang", + "Asia/Ulaanbaatar", + "Asia/Ulan_Bator", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yangon", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faeroe", + "Atlantic/Faroe", + "Atlantic/Jan_Mayen", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/ACT", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Canberra", + "Australia/Currie", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/LHI", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/NSW", + "Australia/North", + "Australia/Perth", + "Australia/Queensland", + "Australia/South", + "Australia/Sydney", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/West", + "Australia/Yancowinna", + "Brazil/Acre", + "Brazil/DeNoronha", + "Brazil/East", + "Brazil/West", + "CET", + "CST6CDT", + "Canada/Atlantic", + "Canada/Central", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Canada/Saskatchewan", + "Canada/Yukon", + "Chile/Continental", + "Chile/EasterIsland", + "Cuba", + "EET", + "EST", + "EST5EDT", + "Egypt", + "Eire", + "Etc/GMT", + "Etc/GMT+0", + "Etc/GMT+1", + "Etc/GMT+10", + "Etc/GMT+11", + "Etc/GMT+12", + "Etc/GMT+2", + "Etc/GMT+3", + "Etc/GMT+4", + "Etc/GMT+5", + "Etc/GMT+6", + "Etc/GMT+7", + "Etc/GMT+8", + "Etc/GMT+9", + "Etc/GMT-0", + "Etc/GMT-1", + "Etc/GMT-10", + "Etc/GMT-11", + "Etc/GMT-12", + "Etc/GMT-13", + "Etc/GMT-14", + "Etc/GMT-2", + "Etc/GMT-3", + "Etc/GMT-4", + "Etc/GMT-5", + "Etc/GMT-6", + "Etc/GMT-7", + "Etc/GMT-8", + "Etc/GMT-9", + "Etc/GMT0", + "Etc/Greenwich", + "Etc/UCT", + "Etc/UTC", + "Etc/Universal", + "Etc/Zulu", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belfast", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kiev", + "Europe/Kirov", + "Europe/Kyiv", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Nicosia", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Tiraspol", + "Europe/Ulyanovsk", + "Europe/Uzhgorod", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zaporozhye", + "Europe/Zurich", + "GB", + "GB-Eire", + "GMT", + "GMT+0", + "GMT-0", + "GMT0", + "Greenwich", + "HST", + "Hongkong", + "Iceland", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Iran", + "Israel", + "Jamaica", + "Japan", + "Kwajalein", + "Libya", + "MET", + "MST", + "MST7MDT", + "Mexico/BajaNorte", + "Mexico/BajaSur", + "Mexico/General", + "NZ", + "NZ-CHAT", + "Navajo", + "PRC", + "PST8PDT", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Chuuk", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Enderbury", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Johnston", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Pohnpei", + "Pacific/Ponape", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Samoa", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Truk", + "Pacific/Wake", + "Pacific/Wallis", + "Pacific/Yap", + "Poland", + "Portugal", + "ROC", + "ROK", + "Singapore", + "Turkey", + "UCT", + "US/Alaska", + "US/Aleutian", + "US/Arizona", + "US/Central", + "US/East-Indiana", + "US/Eastern", + "US/Hawaii", + "US/Indiana-Starke", + "US/Michigan", + "US/Mountain", + "US/Pacific", + "US/Samoa", + "UTC", + "Universal", + "W-SU", + "WET", + "Zulu", + ), + nullable=True, + comment="IANA timezone name", + ), + sa.Column( + "turndown_ratio", + sa.Float(), + nullable=True, + comment="The turndown ratio for the boiler.", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "unit_nox", + sa.Text(), + nullable=True, + comment="Numeric value for the unit of measurement specified for nitrogen oxide.", + ), + sa.Column( + "unit_particulate", + sa.Text(), + nullable=True, + comment="Numeric value for the unit of measurement specified for particulate matter.", + ), + sa.Column( + "unit_so2", + sa.Text(), + nullable=True, + comment="Numeric value for the unit of measurement specified for sulfur dioxide.", + ), + sa.Column( + "waste_heat_input_mmbtu_per_hour", + sa.Float(), + nullable=True, + comment="Design waste-heat input rate at maximum continuous steam flow where a waste-heat boiler is a boiler that receives all or a substantial portion of its energy input from the noncumbustible exhaust gases of a separate fuel-burning process (MMBtu per hour).", + ), + sa.Column( + "wet_dry_bottom", + sa.Text(), + nullable=True, + comment="Wet or Dry Bottom where Wet Bottom is defined as slag tanks that are installed at furnace throat to contain and remove molten ash from the furnace, and Dry Bottom is defined as having no slag tanks at furnace throat area, throat area is clear, and bottom ash drops through throat to bottom ash water hoppers.", + ), + sa.Column( + "zip_code", sa.Text(), nullable=True, comment="Five digit US Zip Code." + ), + sa.ForeignKeyConstraint( + ["boiler_fuel_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_boilers_boiler_fuel_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_fuel_code_2"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_boilers_boiler_fuel_code_2_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_fuel_code_3"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_boilers_boiler_fuel_code_3_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_fuel_code_4"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_boilers_boiler_fuel_code_4_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_manufacturer_code"], + ["core_eia__codes_environmental_equipment_manufacturers.code"], + name=op.f( + "fk_out_eia__yearly_boilers_boiler_manufacturer_code_core_eia__codes_environmental_equipment_manufacturers" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_status"], + ["core_eia__codes_boiler_status.code"], + name=op.f( + "fk_out_eia__yearly_boilers_boiler_status_core_eia__codes_boiler_status" + ), + ), + sa.ForeignKeyConstraint( + ["boiler_type"], + ["core_eia__codes_boiler_types.code"], + name=op.f( + "fk_out_eia__yearly_boilers_boiler_type_core_eia__codes_boiler_types" + ), + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_out_eia__yearly_boilers_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["firing_type_1"], + ["core_eia__codes_firing_types.code"], + name=op.f( + "fk_out_eia__yearly_boilers_firing_type_1_core_eia__codes_firing_types" + ), + ), + sa.ForeignKeyConstraint( + ["firing_type_2"], + ["core_eia__codes_firing_types.code"], + name=op.f( + "fk_out_eia__yearly_boilers_firing_type_2_core_eia__codes_firing_types" + ), + ), + sa.ForeignKeyConstraint( + ["firing_type_3"], + ["core_eia__codes_firing_types.code"], + name=op.f( + "fk_out_eia__yearly_boilers_firing_type_3_core_eia__codes_firing_types" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_1"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_mercury_control_existing_strategy_1_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_2"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_mercury_control_existing_strategy_2_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_3"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_mercury_control_existing_strategy_3_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_4"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_mercury_control_existing_strategy_4_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_5"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_mercury_control_existing_strategy_5_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_existing_strategy_6"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_mercury_control_existing_strategy_6_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_proposed_strategy_1"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_mercury_control_proposed_strategy_1_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_proposed_strategy_2"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_mercury_control_proposed_strategy_2_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["mercury_control_proposed_strategy_3"], + ["core_eia__codes_mercury_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_mercury_control_proposed_strategy_3_core_eia__codes_mercury_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_existing_caaa_compliance_strategy_1"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_existing_caaa_compliance_strategy_1_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_existing_caaa_compliance_strategy_2"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_existing_caaa_compliance_strategy_2_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_existing_caaa_compliance_strategy_3"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_existing_caaa_compliance_strategy_3_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_manufacturer_code"], + ["core_eia__codes_environmental_equipment_manufacturers.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_manufacturer_code_core_eia__codes_environmental_equipment_manufacturers" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_out_of_compliance_strategy_1"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_out_of_compliance_strategy_1_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_out_of_compliance_strategy_2"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_out_of_compliance_strategy_2_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_out_of_compliance_strategy_3"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_out_of_compliance_strategy_3_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_planned_caaa_compliance_strategy_1"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_planned_caaa_compliance_strategy_1_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_planned_caaa_compliance_strategy_2"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_planned_caaa_compliance_strategy_2_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_planned_caaa_compliance_strategy_3"], + ["core_eia__codes_nox_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_planned_caaa_compliance_strategy_3_core_eia__codes_nox_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["nox_control_status_code"], + ["core_eia__codes_nox_control_status.code"], + name=op.f( + "fk_out_eia__yearly_boilers_nox_control_status_code_core_eia__codes_nox_control_status" + ), + ), + sa.ForeignKeyConstraint( + ["particulate_control_out_of_compliance_strategy_1"], + ["core_eia__codes_particulate_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_particulate_control_out_of_compliance_strategy_1_core_eia__codes_particulate_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["particulate_control_out_of_compliance_strategy_2"], + ["core_eia__codes_particulate_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_particulate_control_out_of_compliance_strategy_2_core_eia__codes_particulate_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["particulate_control_out_of_compliance_strategy_3"], + ["core_eia__codes_particulate_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_particulate_control_out_of_compliance_strategy_3_core_eia__codes_particulate_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "boiler_id", "report_date"], + [ + "core_eia860__scd_boilers.plant_id_eia", + "core_eia860__scd_boilers.boiler_id", + "core_eia860__scd_boilers.report_date", + ], + name=op.f( + "fk_out_eia__yearly_boilers_plant_id_eia_core_eia860__scd_boilers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia__yearly_boilers_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["regulation_mercury"], + ["core_eia__codes_regulations.code"], + name=op.f( + "fk_out_eia__yearly_boilers_regulation_mercury_core_eia__codes_regulations" + ), + ), + sa.ForeignKeyConstraint( + ["regulation_nox"], + ["core_eia__codes_regulations.code"], + name=op.f( + "fk_out_eia__yearly_boilers_regulation_nox_core_eia__codes_regulations" + ), + ), + sa.ForeignKeyConstraint( + ["regulation_particulate"], + ["core_eia__codes_regulations.code"], + name=op.f( + "fk_out_eia__yearly_boilers_regulation_particulate_core_eia__codes_regulations" + ), + ), + sa.ForeignKeyConstraint( + ["regulation_so2"], + ["core_eia__codes_regulations.code"], + name=op.f( + "fk_out_eia__yearly_boilers_regulation_so2_core_eia__codes_regulations" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_existing_caaa_compliance_strategy_1"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_so2_control_existing_caaa_compliance_strategy_1_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_existing_caaa_compliance_strategy_2"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_so2_control_existing_caaa_compliance_strategy_2_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_existing_caaa_compliance_strategy_3"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_so2_control_existing_caaa_compliance_strategy_3_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_out_of_compliance_strategy_1"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_so2_control_out_of_compliance_strategy_1_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_out_of_compliance_strategy_2"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_so2_control_out_of_compliance_strategy_2_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_out_of_compliance_strategy_3"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_so2_control_out_of_compliance_strategy_3_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_planned_caaa_compliance_strategy_1"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_so2_control_planned_caaa_compliance_strategy_1_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_planned_caaa_compliance_strategy_2"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_so2_control_planned_caaa_compliance_strategy_2_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["so2_control_planned_caaa_compliance_strategy_3"], + ["core_eia__codes_so2_compliance_strategies.code"], + name=op.f( + "fk_out_eia__yearly_boilers_so2_control_planned_caaa_compliance_strategy_3_core_eia__codes_so2_compliance_strategies" + ), + ), + sa.ForeignKeyConstraint( + ["unit_nox"], + ["core_eia__codes_nox_units.code"], + name=op.f("fk_out_eia__yearly_boilers_unit_nox_core_eia__codes_nox_units"), + ), + sa.ForeignKeyConstraint( + ["unit_particulate"], + ["core_eia__codes_particulate_units.code"], + name=op.f( + "fk_out_eia__yearly_boilers_unit_particulate_core_eia__codes_particulate_units" + ), + ), + sa.ForeignKeyConstraint( + ["unit_so2"], + ["core_eia__codes_so2_units.code"], + name=op.f("fk_out_eia__yearly_boilers_unit_so2_core_eia__codes_so2_units"), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia__yearly_boilers_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia__yearly_boilers_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["wet_dry_bottom"], + ["core_eia__codes_wet_dry_bottom.code"], + name=op.f( + "fk_out_eia__yearly_boilers_wet_dry_bottom_core_eia__codes_wet_dry_bottom" + ), + ), + sa.PrimaryKeyConstraint( + "plant_id_eia", + "boiler_id", + "report_date", + name=op.f("pk_out_eia__yearly_boilers"), + ), + ) + op.create_table( + "out_eia__yearly_generators", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=False, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=False, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column("report_date", sa.Date(), nullable=False, comment="Date reported."), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "technology_description", + sa.Text(), + nullable=True, + comment="High level description of the technology used by the generator to produce electricity.", + ), + sa.Column( + "energy_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the generator.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "generator_operating_date", + sa.Date(), + nullable=True, + comment="Date the generator began commercial operation.", + ), + sa.Column( + "generator_retirement_date", + sa.Date(), + nullable=True, + comment="Date of the scheduled or effected retirement of the generator.", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "planned_generator_retirement_date", + sa.Date(), + nullable=True, + comment="Planned effective date of the scheduled retirement of the generator.", + ), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "total_mmbtu", + sa.Float(), + nullable=True, + comment="Total annual heat content of fuel consumed by a plant part record in the plant parts list.", + ), + sa.Column( + "associated_combined_heat_power", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator is associated with a combined heat and power system", + ), + sa.Column( + "bga_source", + sa.Text(), + nullable=True, + comment="The source from where the unit_id_pudl is compiled. The unit_id_pudl comes directly from EIA 860, or string association (which looks at all the boilers and generators that are not associated with a unit and tries to find a matching string in the respective collection of boilers or generator), or from a unit connection (where the unit_id_eia is employed to find additional boiler generator connections).", + ), + sa.Column( + "bypass_heat_recovery", + sa.Boolean(), + nullable=True, + comment="Can this generator operate while bypassing the heat recovery steam generator?", + ), + sa.Column( + "carbon_capture", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses carbon capture technology.", + ), + sa.Column("city", sa.Text(), nullable=True), + sa.Column( + "cofire_fuels", + sa.Boolean(), + nullable=True, + comment="Can the generator co-fire fuels?.", + ), + sa.Column("county", sa.Text(), nullable=True, comment="County name."), + sa.Column( + "current_planned_generator_operating_date", + sa.Date(), + nullable=True, + comment="The most recently updated effective date on which the generator is scheduled to start operation", + ), + sa.Column( + "data_maturity", + sa.Text(), + nullable=True, + comment="Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.", + ), + sa.Column( + "deliver_power_transgrid", + sa.Boolean(), + nullable=True, + comment="Indicate whether the generator can deliver power to the transmission grid.", + ), + sa.Column( + "distributed_generation", + sa.Boolean(), + nullable=True, + comment="Whether the generator is considered distributed generation", + ), + sa.Column( + "duct_burners", + sa.Boolean(), + nullable=True, + comment="Indicates whether the unit has duct-burners for supplementary firing of the turbine exhaust gas", + ), + sa.Column( + "energy_source_1_transport_1", + sa.Text(), + nullable=True, + comment="Primary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_1_transport_2", + sa.Text(), + nullable=True, + comment="Secondary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_1_transport_3", + sa.Text(), + nullable=True, + comment="Tertiary mode of transport for energy source 1.", + ), + sa.Column( + "energy_source_2_transport_1", + sa.Text(), + nullable=True, + comment="Primary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_2_transport_2", + sa.Text(), + nullable=True, + comment="Secondary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_2_transport_3", + sa.Text(), + nullable=True, + comment="Tertiary mode of transport for energy source 2.", + ), + sa.Column( + "energy_source_code_2", + sa.Text(), + nullable=True, + comment="The code representing the second most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_3", + sa.Text(), + nullable=True, + comment="The code representing the third most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_4", + sa.Text(), + nullable=True, + comment="The code representing the fourth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_5", + sa.Text(), + nullable=True, + comment="The code representing the fifth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_source_code_6", + sa.Text(), + nullable=True, + comment="The code representing the sixth most predominant type of energy that fuels the generator", + ), + sa.Column( + "energy_storage_capacity_mwh", + sa.Float(), + nullable=True, + comment="Energy storage capacity in MWh (e.g. for batteries).", + ), + sa.Column( + "ferc_qualifying_facility", + sa.Boolean(), + nullable=True, + comment="Indicatates whether or not a generator is a qualifying FERC cogeneation facility.", + ), + sa.Column( + "fluidized_bed_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses fluidized bed technology", + ), + sa.Column( + "fuel_type_count", + sa.Integer(), + nullable=True, + comment="A count of how many different simple energy sources there are associated with a generator.", + ), + sa.Column( + "latitude", + sa.Float(), + nullable=True, + comment="Latitude of the plant's location, in degrees.", + ), + sa.Column( + "longitude", + sa.Float(), + nullable=True, + comment="Longitude of the plant's location, in degrees.", + ), + sa.Column( + "minimum_load_mw", + sa.Float(), + nullable=True, + comment="The minimum load at which the generator can operate at continuosuly.", + ), + sa.Column( + "multiple_fuels", + sa.Boolean(), + nullable=True, + comment="Can the generator burn multiple fuels?", + ), + sa.Column( + "nameplate_power_factor", + sa.Float(), + nullable=True, + comment="The nameplate power factor of the generator.", + ), + sa.Column( + "net_capacity_mwdc", + sa.Float(), + nullable=True, + comment="Generation capacity in megawatts of direct current that is subject to a net metering agreement. Typically used for behind-the-meter solar PV.", + ), + sa.Column( + "operating_switch", + sa.Text(), + nullable=True, + comment="Indicates whether the fuel switching generator can switch when operating", + ), + sa.Column( + "operational_status_code", + sa.Text(), + nullable=True, + comment="The operating status of the asset.", + ), + sa.Column( + "original_planned_generator_operating_date", + sa.Date(), + nullable=True, + comment="The date the generator was originally scheduled to be operational", + ), + sa.Column( + "other_combustion_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses other combustion technologies", + ), + sa.Column( + "other_modifications_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter commercial operation after any other planned modification is complete.", + ), + sa.Column( + "other_planned_modifications", + sa.Boolean(), + nullable=True, + comment="Indicates whether there are there other modifications planned for the generator.", + ), + sa.Column( + "owned_by_non_utility", + sa.Boolean(), + nullable=True, + comment="Whether any part of generator is owned by a nonutilty", + ), + sa.Column( + "ownership_code", + sa.Text(), + nullable=True, + comment="Identifies the ownership for each generator.", + ), + sa.Column( + "planned_derate_date", + sa.Date(), + nullable=True, + comment="Planned effective month that the generator is scheduled to enter operation after the derate modification.", + ), + sa.Column( + "planned_energy_source_code_1", + sa.Text(), + nullable=True, + comment="New energy source code for the planned repowered generator.", + ), + sa.Column( + "planned_modifications", + sa.Boolean(), + nullable=True, + comment="Indicates whether there are any planned capacity uprates/derates, repowering, other modifications, or generator retirements scheduled for the next 5 years.", + ), + sa.Column( + "planned_net_summer_capacity_derate_mw", + sa.Float(), + nullable=True, + comment="Decrease in summer capacity expected to be realized from the derate modification to the equipment.", + ), + sa.Column( + "planned_net_summer_capacity_uprate_mw", + sa.Float(), + nullable=True, + comment="Increase in summer capacity expected to be realized from the modification to the equipment.", + ), + sa.Column( + "planned_net_winter_capacity_derate_mw", + sa.Float(), + nullable=True, + comment="Decrease in winter capacity expected to be realized from the derate modification to the equipment.", + ), + sa.Column( + "planned_net_winter_capacity_uprate_mw", + sa.Float(), + nullable=True, + comment="Increase in winter capacity expected to be realized from the uprate modification to the equipment.", + ), + sa.Column( + "planned_new_capacity_mw", + sa.Float(), + nullable=True, + comment="The expected new namplate capacity for the generator.", + ), + sa.Column( + "planned_new_prime_mover_code", + sa.Text(), + nullable=True, + comment="New prime mover for the planned repowered generator.", + ), + sa.Column( + "planned_repower_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter operation after the repowering is complete.", + ), + sa.Column( + "planned_uprate_date", + sa.Date(), + nullable=True, + comment="Planned effective date that the generator is scheduled to enter operation after the uprate modification.", + ), + sa.Column( + "previously_canceled", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator was previously reported as indefinitely postponed or canceled", + ), + sa.Column( + "pulverized_coal_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses pulverized coal technology", + ), + sa.Column( + "reactive_power_output_mvar", + sa.Float(), + nullable=True, + comment="Reactive Power Output (MVAr)", + ), + sa.Column( + "rto_iso_lmp_node_id", + sa.Text(), + nullable=True, + comment="The designation used to identify the price node in RTO/ISO Locational Marginal Price reports", + ), + sa.Column( + "rto_iso_location_wholesale_reporting_id", + sa.Text(), + nullable=True, + comment="The designation used to report ths specific location of the wholesale sales transactions to FERC for the Electric Quarterly Report", + ), + sa.Column( + "solid_fuel_gasification", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator is part of a solid fuel gasification system", + ), + sa.Column( + "startup_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_2", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_3", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "startup_source_code_4", + sa.Text(), + nullable=True, + comment="The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.", + ), + sa.Column( + "state", + sa.Text(), + nullable=True, + comment="Two letter US state abbreviation.", + ), + sa.Column( + "stoker_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses stoker technology", + ), + sa.Column("street_address", sa.Text(), nullable=True), + sa.Column( + "subcritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses subcritical technology", + ), + sa.Column( + "summer_capacity_estimate", + sa.Boolean(), + nullable=True, + comment="Whether the summer capacity value was an estimate", + ), + sa.Column( + "summer_capacity_mw", + sa.Float(), + nullable=True, + comment="The net summer capacity.", + ), + sa.Column( + "summer_estimated_capability_mw", + sa.Float(), + nullable=True, + comment="EIA estimated summer capacity (in MWh).", + ), + sa.Column( + "supercritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses supercritical technology", + ), + sa.Column( + "switch_oil_gas", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator switch between oil and natural gas.", + ), + sa.Column( + "syncronized_transmission_grid", + sa.Boolean(), + nullable=True, + comment="Indicates whether standby generators (SB status) can be synchronized to the grid.", + ), + sa.Column( + "time_cold_shutdown_full_load_code", + sa.Text(), + nullable=True, + comment="The minimum amount of time required to bring the unit to full load from shutdown.", + ), + sa.Column( + "timezone", + sa.Enum( + "Africa/Abidjan", + "Africa/Accra", + "Africa/Addis_Ababa", + "Africa/Algiers", + "Africa/Asmara", + "Africa/Asmera", + "Africa/Bamako", + "Africa/Bangui", + "Africa/Banjul", + "Africa/Bissau", + "Africa/Blantyre", + "Africa/Brazzaville", + "Africa/Bujumbura", + "Africa/Cairo", + "Africa/Casablanca", + "Africa/Ceuta", + "Africa/Conakry", + "Africa/Dakar", + "Africa/Dar_es_Salaam", + "Africa/Djibouti", + "Africa/Douala", + "Africa/El_Aaiun", + "Africa/Freetown", + "Africa/Gaborone", + "Africa/Harare", + "Africa/Johannesburg", + "Africa/Juba", + "Africa/Kampala", + "Africa/Khartoum", + "Africa/Kigali", + "Africa/Kinshasa", + "Africa/Lagos", + "Africa/Libreville", + "Africa/Lome", + "Africa/Luanda", + "Africa/Lubumbashi", + "Africa/Lusaka", + "Africa/Malabo", + "Africa/Maputo", + "Africa/Maseru", + "Africa/Mbabane", + "Africa/Mogadishu", + "Africa/Monrovia", + "Africa/Nairobi", + "Africa/Ndjamena", + "Africa/Niamey", + "Africa/Nouakchott", + "Africa/Ouagadougou", + "Africa/Porto-Novo", + "Africa/Sao_Tome", + "Africa/Timbuktu", + "Africa/Tripoli", + "Africa/Tunis", + "Africa/Windhoek", + "America/Adak", + "America/Anchorage", + "America/Anguilla", + "America/Antigua", + "America/Araguaina", + "America/Argentina/Buenos_Aires", + "America/Argentina/Catamarca", + "America/Argentina/ComodRivadavia", + "America/Argentina/Cordoba", + "America/Argentina/Jujuy", + "America/Argentina/La_Rioja", + "America/Argentina/Mendoza", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Salta", + "America/Argentina/San_Juan", + "America/Argentina/San_Luis", + "America/Argentina/Tucuman", + "America/Argentina/Ushuaia", + "America/Aruba", + "America/Asuncion", + "America/Atikokan", + "America/Atka", + "America/Bahia", + "America/Bahia_Banderas", + "America/Barbados", + "America/Belem", + "America/Belize", + "America/Blanc-Sablon", + "America/Boa_Vista", + "America/Bogota", + "America/Boise", + "America/Buenos_Aires", + "America/Cambridge_Bay", + "America/Campo_Grande", + "America/Cancun", + "America/Caracas", + "America/Catamarca", + "America/Cayenne", + "America/Cayman", + "America/Chicago", + "America/Chihuahua", + "America/Ciudad_Juarez", + "America/Coral_Harbour", + "America/Cordoba", + "America/Costa_Rica", + "America/Creston", + "America/Cuiaba", + "America/Curacao", + "America/Danmarkshavn", + "America/Dawson", + "America/Dawson_Creek", + "America/Denver", + "America/Detroit", + "America/Dominica", + "America/Edmonton", + "America/Eirunepe", + "America/El_Salvador", + "America/Ensenada", + "America/Fort_Nelson", + "America/Fort_Wayne", + "America/Fortaleza", + "America/Glace_Bay", + "America/Godthab", + "America/Goose_Bay", + "America/Grand_Turk", + "America/Grenada", + "America/Guadeloupe", + "America/Guatemala", + "America/Guayaquil", + "America/Guyana", + "America/Halifax", + "America/Havana", + "America/Hermosillo", + "America/Indiana/Indianapolis", + "America/Indiana/Knox", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Tell_City", + "America/Indiana/Vevay", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indianapolis", + "America/Inuvik", + "America/Iqaluit", + "America/Jamaica", + "America/Jujuy", + "America/Juneau", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Knox_IN", + "America/Kralendijk", + "America/La_Paz", + "America/Lima", + "America/Los_Angeles", + "America/Louisville", + "America/Lower_Princes", + "America/Maceio", + "America/Managua", + "America/Manaus", + "America/Marigot", + "America/Martinique", + "America/Matamoros", + "America/Mazatlan", + "America/Mendoza", + "America/Menominee", + "America/Merida", + "America/Metlakatla", + "America/Mexico_City", + "America/Miquelon", + "America/Moncton", + "America/Monterrey", + "America/Montevideo", + "America/Montreal", + "America/Montserrat", + "America/Nassau", + "America/New_York", + "America/Nipigon", + "America/Nome", + "America/Noronha", + "America/North_Dakota/Beulah", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/Nuuk", + "America/Ojinaga", + "America/Panama", + "America/Pangnirtung", + "America/Paramaribo", + "America/Phoenix", + "America/Port-au-Prince", + "America/Port_of_Spain", + "America/Porto_Acre", + "America/Porto_Velho", + "America/Puerto_Rico", + "America/Punta_Arenas", + "America/Rainy_River", + "America/Rankin_Inlet", + "America/Recife", + "America/Regina", + "America/Resolute", + "America/Rio_Branco", + "America/Rosario", + "America/Santa_Isabel", + "America/Santarem", + "America/Santiago", + "America/Santo_Domingo", + "America/Sao_Paulo", + "America/Scoresbysund", + "America/Shiprock", + "America/Sitka", + "America/St_Barthelemy", + "America/St_Johns", + "America/St_Kitts", + "America/St_Lucia", + "America/St_Thomas", + "America/St_Vincent", + "America/Swift_Current", + "America/Tegucigalpa", + "America/Thule", + "America/Thunder_Bay", + "America/Tijuana", + "America/Toronto", + "America/Tortola", + "America/Vancouver", + "America/Virgin", + "America/Whitehorse", + "America/Winnipeg", + "America/Yakutat", + "America/Yellowknife", + "Antarctica/Casey", + "Antarctica/Davis", + "Antarctica/DumontDUrville", + "Antarctica/Macquarie", + "Antarctica/Mawson", + "Antarctica/McMurdo", + "Antarctica/Palmer", + "Antarctica/Rothera", + "Antarctica/South_Pole", + "Antarctica/Syowa", + "Antarctica/Troll", + "Antarctica/Vostok", + "Arctic/Longyearbyen", + "Asia/Aden", + "Asia/Almaty", + "Asia/Amman", + "Asia/Anadyr", + "Asia/Aqtau", + "Asia/Aqtobe", + "Asia/Ashgabat", + "Asia/Ashkhabad", + "Asia/Atyrau", + "Asia/Baghdad", + "Asia/Bahrain", + "Asia/Baku", + "Asia/Bangkok", + "Asia/Barnaul", + "Asia/Beirut", + "Asia/Bishkek", + "Asia/Brunei", + "Asia/Calcutta", + "Asia/Chita", + "Asia/Choibalsan", + "Asia/Chongqing", + "Asia/Chungking", + "Asia/Colombo", + "Asia/Dacca", + "Asia/Damascus", + "Asia/Dhaka", + "Asia/Dili", + "Asia/Dubai", + "Asia/Dushanbe", + "Asia/Famagusta", + "Asia/Gaza", + "Asia/Harbin", + "Asia/Hebron", + "Asia/Ho_Chi_Minh", + "Asia/Hong_Kong", + "Asia/Hovd", + "Asia/Irkutsk", + "Asia/Istanbul", + "Asia/Jakarta", + "Asia/Jayapura", + "Asia/Jerusalem", + "Asia/Kabul", + "Asia/Kamchatka", + "Asia/Karachi", + "Asia/Kashgar", + "Asia/Kathmandu", + "Asia/Katmandu", + "Asia/Khandyga", + "Asia/Kolkata", + "Asia/Krasnoyarsk", + "Asia/Kuala_Lumpur", + "Asia/Kuching", + "Asia/Kuwait", + "Asia/Macao", + "Asia/Macau", + "Asia/Magadan", + "Asia/Makassar", + "Asia/Manila", + "Asia/Muscat", + "Asia/Nicosia", + "Asia/Novokuznetsk", + "Asia/Novosibirsk", + "Asia/Omsk", + "Asia/Oral", + "Asia/Phnom_Penh", + "Asia/Pontianak", + "Asia/Pyongyang", + "Asia/Qatar", + "Asia/Qostanay", + "Asia/Qyzylorda", + "Asia/Rangoon", + "Asia/Riyadh", + "Asia/Saigon", + "Asia/Sakhalin", + "Asia/Samarkand", + "Asia/Seoul", + "Asia/Shanghai", + "Asia/Singapore", + "Asia/Srednekolymsk", + "Asia/Taipei", + "Asia/Tashkent", + "Asia/Tbilisi", + "Asia/Tehran", + "Asia/Tel_Aviv", + "Asia/Thimbu", + "Asia/Thimphu", + "Asia/Tokyo", + "Asia/Tomsk", + "Asia/Ujung_Pandang", + "Asia/Ulaanbaatar", + "Asia/Ulan_Bator", + "Asia/Urumqi", + "Asia/Ust-Nera", + "Asia/Vientiane", + "Asia/Vladivostok", + "Asia/Yakutsk", + "Asia/Yangon", + "Asia/Yekaterinburg", + "Asia/Yerevan", + "Atlantic/Azores", + "Atlantic/Bermuda", + "Atlantic/Canary", + "Atlantic/Cape_Verde", + "Atlantic/Faeroe", + "Atlantic/Faroe", + "Atlantic/Jan_Mayen", + "Atlantic/Madeira", + "Atlantic/Reykjavik", + "Atlantic/South_Georgia", + "Atlantic/St_Helena", + "Atlantic/Stanley", + "Australia/ACT", + "Australia/Adelaide", + "Australia/Brisbane", + "Australia/Broken_Hill", + "Australia/Canberra", + "Australia/Currie", + "Australia/Darwin", + "Australia/Eucla", + "Australia/Hobart", + "Australia/LHI", + "Australia/Lindeman", + "Australia/Lord_Howe", + "Australia/Melbourne", + "Australia/NSW", + "Australia/North", + "Australia/Perth", + "Australia/Queensland", + "Australia/South", + "Australia/Sydney", + "Australia/Tasmania", + "Australia/Victoria", + "Australia/West", + "Australia/Yancowinna", + "Brazil/Acre", + "Brazil/DeNoronha", + "Brazil/East", + "Brazil/West", + "CET", + "CST6CDT", + "Canada/Atlantic", + "Canada/Central", + "Canada/Eastern", + "Canada/Mountain", + "Canada/Newfoundland", + "Canada/Pacific", + "Canada/Saskatchewan", + "Canada/Yukon", + "Chile/Continental", + "Chile/EasterIsland", + "Cuba", + "EET", + "EST", + "EST5EDT", + "Egypt", + "Eire", + "Etc/GMT", + "Etc/GMT+0", + "Etc/GMT+1", + "Etc/GMT+10", + "Etc/GMT+11", + "Etc/GMT+12", + "Etc/GMT+2", + "Etc/GMT+3", + "Etc/GMT+4", + "Etc/GMT+5", + "Etc/GMT+6", + "Etc/GMT+7", + "Etc/GMT+8", + "Etc/GMT+9", + "Etc/GMT-0", + "Etc/GMT-1", + "Etc/GMT-10", + "Etc/GMT-11", + "Etc/GMT-12", + "Etc/GMT-13", + "Etc/GMT-14", + "Etc/GMT-2", + "Etc/GMT-3", + "Etc/GMT-4", + "Etc/GMT-5", + "Etc/GMT-6", + "Etc/GMT-7", + "Etc/GMT-8", + "Etc/GMT-9", + "Etc/GMT0", + "Etc/Greenwich", + "Etc/UCT", + "Etc/UTC", + "Etc/Universal", + "Etc/Zulu", + "Europe/Amsterdam", + "Europe/Andorra", + "Europe/Astrakhan", + "Europe/Athens", + "Europe/Belfast", + "Europe/Belgrade", + "Europe/Berlin", + "Europe/Bratislava", + "Europe/Brussels", + "Europe/Bucharest", + "Europe/Budapest", + "Europe/Busingen", + "Europe/Chisinau", + "Europe/Copenhagen", + "Europe/Dublin", + "Europe/Gibraltar", + "Europe/Guernsey", + "Europe/Helsinki", + "Europe/Isle_of_Man", + "Europe/Istanbul", + "Europe/Jersey", + "Europe/Kaliningrad", + "Europe/Kiev", + "Europe/Kirov", + "Europe/Kyiv", + "Europe/Lisbon", + "Europe/Ljubljana", + "Europe/London", + "Europe/Luxembourg", + "Europe/Madrid", + "Europe/Malta", + "Europe/Mariehamn", + "Europe/Minsk", + "Europe/Monaco", + "Europe/Moscow", + "Europe/Nicosia", + "Europe/Oslo", + "Europe/Paris", + "Europe/Podgorica", + "Europe/Prague", + "Europe/Riga", + "Europe/Rome", + "Europe/Samara", + "Europe/San_Marino", + "Europe/Sarajevo", + "Europe/Saratov", + "Europe/Simferopol", + "Europe/Skopje", + "Europe/Sofia", + "Europe/Stockholm", + "Europe/Tallinn", + "Europe/Tirane", + "Europe/Tiraspol", + "Europe/Ulyanovsk", + "Europe/Uzhgorod", + "Europe/Vaduz", + "Europe/Vatican", + "Europe/Vienna", + "Europe/Vilnius", + "Europe/Volgograd", + "Europe/Warsaw", + "Europe/Zagreb", + "Europe/Zaporozhye", + "Europe/Zurich", + "GB", + "GB-Eire", + "GMT", + "GMT+0", + "GMT-0", + "GMT0", + "Greenwich", + "HST", + "Hongkong", + "Iceland", + "Indian/Antananarivo", + "Indian/Chagos", + "Indian/Christmas", + "Indian/Cocos", + "Indian/Comoro", + "Indian/Kerguelen", + "Indian/Mahe", + "Indian/Maldives", + "Indian/Mauritius", + "Indian/Mayotte", + "Indian/Reunion", + "Iran", + "Israel", + "Jamaica", + "Japan", + "Kwajalein", + "Libya", + "MET", + "MST", + "MST7MDT", + "Mexico/BajaNorte", + "Mexico/BajaSur", + "Mexico/General", + "NZ", + "NZ-CHAT", + "Navajo", + "PRC", + "PST8PDT", + "Pacific/Apia", + "Pacific/Auckland", + "Pacific/Bougainville", + "Pacific/Chatham", + "Pacific/Chuuk", + "Pacific/Easter", + "Pacific/Efate", + "Pacific/Enderbury", + "Pacific/Fakaofo", + "Pacific/Fiji", + "Pacific/Funafuti", + "Pacific/Galapagos", + "Pacific/Gambier", + "Pacific/Guadalcanal", + "Pacific/Guam", + "Pacific/Honolulu", + "Pacific/Johnston", + "Pacific/Kanton", + "Pacific/Kiritimati", + "Pacific/Kosrae", + "Pacific/Kwajalein", + "Pacific/Majuro", + "Pacific/Marquesas", + "Pacific/Midway", + "Pacific/Nauru", + "Pacific/Niue", + "Pacific/Norfolk", + "Pacific/Noumea", + "Pacific/Pago_Pago", + "Pacific/Palau", + "Pacific/Pitcairn", + "Pacific/Pohnpei", + "Pacific/Ponape", + "Pacific/Port_Moresby", + "Pacific/Rarotonga", + "Pacific/Saipan", + "Pacific/Samoa", + "Pacific/Tahiti", + "Pacific/Tarawa", + "Pacific/Tongatapu", + "Pacific/Truk", + "Pacific/Wake", + "Pacific/Wallis", + "Pacific/Yap", + "Poland", + "Portugal", + "ROC", + "ROK", + "Singapore", + "Turkey", + "UCT", + "US/Alaska", + "US/Aleutian", + "US/Arizona", + "US/Central", + "US/East-Indiana", + "US/Eastern", + "US/Hawaii", + "US/Indiana-Starke", + "US/Michigan", + "US/Mountain", + "US/Pacific", + "US/Samoa", + "UTC", + "Universal", + "W-SU", + "WET", + "Zulu", + ), + nullable=True, + comment="IANA timezone name", + ), + sa.Column( + "topping_bottoming_code", + sa.Text(), + nullable=True, + comment="If the generator is associated with a combined heat and power system, indicates whether the generator is part of a topping cycle or a bottoming cycle", + ), + sa.Column( + "turbines_inverters_hydrokinetics", + sa.Integer(), + nullable=True, + comment="Number of wind turbines, or hydrokinetic buoys.", + ), + sa.Column( + "turbines_num", + sa.Integer(), + nullable=True, + comment="Number of wind turbines, or hydrokinetic buoys.", + ), + sa.Column( + "ultrasupercritical_tech", + sa.Boolean(), + nullable=True, + comment="Indicates whether the generator uses ultra-supercritical technology", + ), + sa.Column( + "uprate_derate_completed_date", + sa.Date(), + nullable=True, + comment="The date when the uprate or derate was completed.", + ), + sa.Column( + "uprate_derate_during_year", + sa.Boolean(), + nullable=True, + comment="Was an uprate or derate completed on this generator during the reporting year?", + ), + sa.Column( + "winter_capacity_estimate", + sa.Boolean(), + nullable=True, + comment="Whether the winter capacity value was an estimate", + ), + sa.Column( + "winter_capacity_mw", + sa.Float(), + nullable=True, + comment="The net winter capacity.", + ), + sa.Column( + "winter_estimated_capability_mw", + sa.Float(), + nullable=True, + comment="EIA estimated winter capacity (in MWh).", + ), + sa.Column( + "zip_code", sa.Text(), nullable=True, comment="Five digit US Zip Code." + ), + sa.ForeignKeyConstraint( + ["data_maturity"], + ["core_pudl__codes_data_maturities.code"], + name=op.f( + "fk_out_eia__yearly_generators_data_maturity_core_pudl__codes_data_maturities" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_1"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_1_transport_1_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_2"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_1_transport_2_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_1_transport_3"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_1_transport_3_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_1"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_2_transport_1_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_2"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_2_transport_2_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_2_transport_3"], + ["core_eia__codes_fuel_transportation_modes.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_2_transport_3_core_eia__codes_fuel_transportation_modes" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_2"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_code_2_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_3"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_code_3_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_4"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_code_4_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_5"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_code_5_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["energy_source_code_6"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_energy_source_code_6_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["operational_status_code"], + ["core_eia__codes_operational_status.code"], + name=op.f( + "fk_out_eia__yearly_generators_operational_status_code_core_eia__codes_operational_status" + ), + ), + sa.ForeignKeyConstraint( + ["planned_energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_planned_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["planned_new_prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia__yearly_generators_planned_new_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_out_eia__yearly_generators_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia__yearly_generators_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia__yearly_generators_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_startup_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_2"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_startup_source_code_2_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_3"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_startup_source_code_3_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["startup_source_code_4"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_startup_source_code_4_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia__yearly_generators_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia__yearly_generators_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "report_date", + "plant_id_eia", + "generator_id", + name=op.f("pk_out_eia__yearly_generators"), + ), + ) + op.create_table( + "out_eia__yearly_generators_by_ownership", + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=True, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "utility_name_eia", + sa.Text(), + nullable=True, + comment="The name of the utility.", + ), + sa.Column( + "technology_description", + sa.Text(), + nullable=True, + comment="High level description of the technology used by the generator to produce electricity.", + ), + sa.Column( + "energy_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the generator.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "generator_operating_date", + sa.Date(), + nullable=True, + comment="Date the generator began commercial operation.", + ), + sa.Column( + "generator_retirement_date", + sa.Date(), + nullable=True, + comment="Date of the scheduled or effected retirement of the generator.", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "planned_generator_retirement_date", + sa.Date(), + nullable=True, + comment="Planned effective date of the scheduled retirement of the generator.", + ), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "fuel_cost_from_eiaapi", + sa.Boolean(), + nullable=True, + comment="Indicates whether the fuel cost was derived from the EIA API.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "total_mmbtu", + sa.Float(), + nullable=True, + comment="Total annual heat content of fuel consumed by a plant part record in the plant parts list.", + ), + sa.Column( + "ferc_acct_name", + sa.Enum("Hydraulic", "Nuclear", "Steam", "Other"), + nullable=True, + comment="Name of FERC account, derived from technology description and prime mover code.", + ), + sa.Column( + "generator_operating_year", + sa.Integer(), + nullable=True, + comment="Year a generator went into service.", + ), + sa.Column( + "operational_status_pudl", + sa.Enum("operating", "retired", "proposed"), + nullable=True, + comment="The operating status of the asset using PUDL categories.", + ), + sa.Column( + "capacity_eoy_mw", + sa.Float(), + nullable=True, + comment="Total end of year installed (nameplate) capacity for a plant part, in megawatts.", + ), + sa.Column( + "fraction_owned", + sa.Float(), + nullable=True, + comment="Proportion of generator ownership attributable to this utility.", + ), + sa.Column( + "ownership_record_type", + sa.Enum("owned", "total"), + nullable=True, + comment="Whether each generator record is for one owner or represents a total of all ownerships.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_generators_by_ownership_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_out_eia__yearly_generators_by_ownership_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia__yearly_generators_by_ownership_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia__yearly_generators_by_ownership_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia__yearly_generators_by_ownership_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia__yearly_generators_by_ownership_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + ) + op.create_table( + "out_eia__yearly_plant_parts", + sa.Column( + "record_id_eia", + sa.Text(), + nullable=False, + comment="Identifier for EIA plant parts analysis records.", + ), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "plant_part", + sa.Enum( + "plant_unit", + "plant_prime_fuel", + "plant_operating_year", + "plant_gen", + "plant_match_ferc1", + "plant_prime_mover", + "plant_technology", + "plant", + "plant_ferc_acct", + ), + nullable=True, + comment="The part of the plant a record corresponds to.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=True, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "energy_source_code_1", + sa.Text(), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the generator.", + ), + sa.Column( + "technology_description", + sa.Text(), + nullable=True, + comment="High level description of the technology used by the generator to produce electricity.", + ), + sa.Column( + "ferc_acct_name", + sa.Enum("Hydraulic", "Nuclear", "Steam", "Other"), + nullable=True, + comment="Name of FERC account, derived from technology description and prime mover code.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "true_gran", + sa.Boolean(), + nullable=True, + comment="Indicates whether a plant part list record is associated with the highest priority plant part for all identical records.", + ), + sa.Column( + "appro_part_label", + sa.Enum( + "plant_unit", + "plant_prime_fuel", + "plant_operating_year", + "plant_gen", + "plant_match_ferc1", + "plant_prime_mover", + "plant_technology", + "plant", + "plant_ferc_acct", + ), + nullable=True, + comment="Plant part of the associated true granularity record.", + ), + sa.Column( + "appro_record_id_eia", + sa.Text(), + nullable=True, + comment="EIA record ID of the associated true granularity record.", + ), + sa.Column( + "ferc1_generator_agg_id", + sa.Integer(), + nullable=True, + comment="ID dynamically assigned by PUDL to EIA records with multiple matches to a single FERC ID in the FERC-EIA manual matching process.", + ), + sa.Column( + "capacity_eoy_mw", + sa.Float(), + nullable=True, + comment="Total end of year installed (nameplate) capacity for a plant part, in megawatts.", + ), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "fraction_owned", + sa.Float(), + nullable=True, + comment="Proportion of generator ownership attributable to this utility.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "generator_retirement_date", + sa.Date(), + nullable=True, + comment="Date of the scheduled or effected retirement of the generator.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "installation_year", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "generator_operating_year", + sa.Integer(), + nullable=True, + comment="Year a generator went into service.", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.Column( + "operational_status_pudl", + sa.Enum("operating", "retired", "proposed"), + nullable=True, + comment="The operating status of the asset using PUDL categories.", + ), + sa.Column( + "ownership_record_type", + sa.Enum("owned", "total"), + nullable=True, + comment="Whether each generator record is for one owner or represents a total of all ownerships.", + ), + sa.Column( + "ownership_dupe", + sa.Boolean(), + nullable=True, + comment="Whether a plant part record has a duplicate record with different ownership status.", + ), + sa.Column( + "planned_generator_retirement_date", + sa.Date(), + nullable=True, + comment="Planned effective date of the scheduled retirement of the generator.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "plant_name_ppe", + sa.Text(), + nullable=True, + comment="Derived plant name that includes EIA plant name and other strings associated with ID and PK columns of the plant part.", + ), + sa.Column( + "plant_part_id_eia", + sa.Text(), + nullable=True, + comment="Contains EIA plant ID, plant part, ownership, and EIA utility id", + ), + sa.Column( + "record_count", + sa.Integer(), + nullable=True, + comment="Number of distinct generator IDs that partcipated in the aggregation for a plant part list record.", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "total_mmbtu", + sa.Float(), + nullable=True, + comment="Total annual heat content of fuel consumed by a plant part record in the plant parts list.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "plant_id_report_year", + sa.Text(), + nullable=True, + comment="PUDL plant ID and report year of the record.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_out_eia__yearly_plant_parts_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f( + "fk_out_eia__yearly_plant_parts_plant_id_eia_core_eia860__scd_generators" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f( + "fk_out_eia__yearly_plant_parts_plant_id_pudl_core_pudl__entity_plants_pudl" + ), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_out_eia__yearly_plant_parts_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f( + "fk_out_eia__yearly_plant_parts_utility_id_eia_core_eia860__scd_utilities" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_out_eia__yearly_plant_parts_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint( + "record_id_eia", name=op.f("pk_out_eia__yearly_plant_parts") + ), + ) + op.create_table( + "plant_parts_eia", + sa.Column( + "record_id_eia", + sa.Text(), + nullable=False, + comment="Identifier for EIA plant parts analysis records.", + ), + sa.Column( + "plant_id_eia", + sa.Integer(), + nullable=True, + comment="The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.", + ), + sa.Column("report_date", sa.Date(), nullable=True, comment="Date reported."), + sa.Column( + "plant_part", + sa.Enum( + "plant_unit", + "plant_prime_fuel", + "plant_operating_year", + "plant_gen", + "plant_match_ferc1", + "plant_prime_mover", + "plant_technology", + "plant", + "plant_ferc_acct", + ), + nullable=True, + comment="The part of the plant a record corresponds to.", + ), + sa.Column( + "generator_id", + sa.Text(), + nullable=True, + comment="Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!", + ), + sa.Column( + "unit_id_pudl", + sa.Integer(), + nullable=True, + comment="Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.", + ), + sa.Column( + "prime_mover_code", + sa.Text(), + nullable=True, + comment="Code for the type of prime mover (e.g. CT, CG)", + ), + sa.Column( + "energy_source_code_1", + sa.Enum( + "SG", + "WAT", + "GEO", + "NG", + "PUR", + "WC", + "JF", + "MSB", + "AB", + "SUB", + "WH", + "LFG", + "ANT", + "SGC", + "PC", + "SLW", + "RC", + "OBL", + "KER", + "DFO", + "PG", + "RFO", + "SC", + "TDF", + "MSN", + "LIG", + "OBG", + "MWH", + "OTH", + "MSW", + "WND", + "SGP", + "NUC", + "BFG", + "WDL", + "BLQ", + "SUN", + "BIT", + "OBS", + "WDS", + "OG", + "WO", + ), + nullable=True, + comment="The code representing the most predominant type of energy that fuels the generator.", + ), + sa.Column( + "technology_description", + sa.Enum( + "Petroleum Liquids", + "Nuclear", + "Municipal Solid Waste", + "Landfill Gas", + "Other Gases", + "All Other", + "Geothermal", + "Natural Gas Internal Combustion Engine", + "Conventional Steam Coal", + "Coal Integrated Gasification Combined Cycle", + "Solar Thermal without Energy Storage", + "Onshore Wind Turbine", + "Natural Gas with Compressed Air Storage", + "Solar Thermal with Energy Storage", + "Natural Gas Fired Combined Cycle", + "Other Waste Biomass", + "Conventional Hydroelectric", + "Hydroelectric Pumped Storage", + "Offshore Wind Turbine", + "Batteries", + "Wood/Wood Waste Biomass", + "Natural Gas Fired Combustion Turbine", + "Petroleum Coke", + "Flywheels", + "Hydrokinetic", + "Solar Photovoltaic", + "Natural Gas Steam Turbine", + "Other Natural Gas", + ), + nullable=True, + comment="High level description of the technology used by the generator to produce electricity.", + ), + sa.Column( + "ferc_acct_name", + sa.Enum("Hydraulic", "Nuclear", "Steam", "Other"), + nullable=True, + comment="Name of FERC account, derived from technology description and prime mover code.", + ), + sa.Column( + "utility_id_eia", + sa.Integer(), + nullable=True, + comment="The EIA Utility Identification number.", + ), + sa.Column( + "true_gran", + sa.Boolean(), + nullable=True, + comment="Indicates whether a plant part list record is associated with the highest priority plant part for all identical records.", + ), + sa.Column( + "appro_part_label", + sa.Enum( + "plant_unit", + "plant_prime_fuel", + "plant_operating_year", + "plant_gen", + "plant_match_ferc1", + "plant_prime_mover", + "plant_technology", + "plant", + "plant_ferc_acct", + ), + nullable=True, + comment="Plant part of the associated true granularity record.", + ), + sa.Column( + "appro_record_id_eia", + sa.Text(), + nullable=True, + comment="EIA record ID of the associated true granularity record.", + ), + sa.Column( + "ferc1_generator_agg_id", + sa.Integer(), + nullable=True, + comment="ID dynamically assigned by PUDL to EIA records with multiple matches to a single FERC ID in the FERC-EIA manual matching process.", + ), + sa.Column( + "capacity_eoy_mw", + sa.Float(), + nullable=True, + comment="Total end of year installed (nameplate) capacity for a plant part, in megawatts.", + ), + sa.Column( + "capacity_factor", + sa.Float(), + nullable=True, + comment="Fraction of potential generation that was actually reported for a plant part.", + ), + sa.Column( + "capacity_mw", + sa.Float(), + nullable=True, + comment="Total installed (nameplate) capacity, in megawatts.", + ), + sa.Column( + "construction_year", + sa.Integer(), + nullable=True, + comment="Year the plant's oldest still operational unit was built.", + ), + sa.Column( + "fraction_owned", + sa.Float(), + nullable=True, + comment="Proportion of generator ownership attributable to this utility.", + ), + sa.Column( + "fuel_cost_per_mmbtu", + sa.Float(), + nullable=True, + comment="Average fuel cost per mmBTU of heat content in nominal USD.", + ), + sa.Column( + "fuel_cost_per_mwh", + sa.Float(), + nullable=True, + comment="Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.", + ), + sa.Column( + "fuel_type_code_pudl", + sa.Enum( + "coal", + "gas", + "hydro", + "nuclear", + "oil", + "other", + "solar", + "waste", + "wind", + ), + nullable=True, + comment="Simplified fuel type code used in PUDL", + ), + sa.Column( + "generator_retirement_date", + sa.Date(), + nullable=True, + comment="Date of the scheduled or effected retirement of the generator.", + ), + sa.Column( + "heat_rate_mmbtu_mwh", + sa.Float(), + nullable=True, + comment="Fuel content per unit of electricity generated. Coming from MCOE calculation.", + ), + sa.Column( + "installation_year", + sa.Integer(), + nullable=True, + comment="Year the plant's most recently built unit was installed.", + ), + sa.Column( + "net_generation_mwh", + sa.Float(), + nullable=True, + comment="Net electricity generation for the specified period in megawatt-hours (MWh).", + ), + sa.Column( + "generator_operating_year", + sa.Integer(), + nullable=True, + comment="Year a generator went into service.", + ), + sa.Column( + "operational_status", + sa.Text(), + nullable=True, + comment="The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.", + ), + sa.Column( + "operational_status_pudl", + sa.Enum("operating", "retired", "proposed"), + nullable=True, + comment="The operating status of the asset using PUDL categories.", + ), + sa.Column( + "ownership_record_type", + sa.Enum("owned", "total"), + nullable=True, + comment="Whether each generator record is for one owner or represents a total of all ownerships.", + ), + sa.Column( + "ownership_dupe", + sa.Boolean(), + nullable=True, + comment="Whether a plant part record has a duplicate record with different ownership status.", + ), + sa.Column( + "planned_generator_retirement_date", + sa.Date(), + nullable=True, + comment="Planned effective date of the scheduled retirement of the generator.", + ), + sa.Column( + "plant_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL plant ID. May not be constant over time.", + ), + sa.Column("plant_name_eia", sa.Text(), nullable=True, comment="Plant name."), + sa.Column( + "plant_name_ppe", + sa.Text(), + nullable=True, + comment="Derived plant name that includes EIA plant name and other strings associated with ID and PK columns of the plant part.", + ), + sa.Column( + "plant_part_id_eia", + sa.Text(), + nullable=True, + comment="Contains EIA plant ID, plant part, ownership, and EIA utility id", + ), + sa.Column( + "record_count", + sa.Integer(), + nullable=True, + comment="Number of distinct generator IDs that partcipated in the aggregation for a plant part list record.", + ), + sa.Column( + "total_fuel_cost", + sa.Float(), + nullable=True, + comment="Total annual reported fuel costs for the plant part. Includes costs from all fuels.", + ), + sa.Column( + "total_mmbtu", + sa.Float(), + nullable=True, + comment="Total annual heat content of fuel consumed by a plant part record in the plant parts list.", + ), + sa.Column( + "utility_id_pudl", + sa.Integer(), + nullable=True, + comment="A manually assigned PUDL utility ID. May not be stable over time.", + ), + sa.Column( + "report_year", + sa.Integer(), + nullable=True, + comment="Four-digit year in which the data was reported.", + ), + sa.Column( + "plant_id_report_year", + sa.Text(), + nullable=True, + comment="PUDL plant ID and report year of the record.", + ), + sa.ForeignKeyConstraint( + ["energy_source_code_1"], + ["core_eia__codes_energy_sources.code"], + name=op.f( + "fk_plant_parts_eia_energy_source_code_1_core_eia__codes_energy_sources" + ), + ), + sa.ForeignKeyConstraint( + ["plant_id_eia", "generator_id", "report_date"], + [ + "core_eia860__scd_generators.plant_id_eia", + "core_eia860__scd_generators.generator_id", + "core_eia860__scd_generators.report_date", + ], + name=op.f("fk_plant_parts_eia_plant_id_eia_core_eia860__scd_generators"), + ), + sa.ForeignKeyConstraint( + ["plant_id_pudl"], + ["core_pudl__entity_plants_pudl.plant_id_pudl"], + name=op.f("fk_plant_parts_eia_plant_id_pudl_core_pudl__entity_plants_pudl"), + ), + sa.ForeignKeyConstraint( + ["prime_mover_code"], + ["core_eia__codes_prime_movers.code"], + name=op.f( + "fk_plant_parts_eia_prime_mover_code_core_eia__codes_prime_movers" + ), + ), + sa.ForeignKeyConstraint( + ["utility_id_eia", "report_date"], + [ + "core_eia860__scd_utilities.utility_id_eia", + "core_eia860__scd_utilities.report_date", + ], + name=op.f("fk_plant_parts_eia_utility_id_eia_core_eia860__scd_utilities"), + ), + sa.ForeignKeyConstraint( + ["utility_id_pudl"], + ["core_pudl__entity_utilities_pudl.utility_id_pudl"], + name=op.f( + "fk_plant_parts_eia_utility_id_pudl_core_pudl__entity_utilities_pudl" + ), + ), + sa.PrimaryKeyConstraint("record_id_eia", name=op.f("pk_plant_parts_eia")), + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table("plant_parts_eia") + op.drop_table("out_eia__yearly_plant_parts") + op.drop_table("out_eia__yearly_generators_by_ownership") + op.drop_table("out_eia__yearly_generators") + op.drop_table("out_eia__yearly_boilers") + op.drop_table("out_eia923__yearly_generation_fuel_by_generator_energy_source_owner") + op.drop_table("out_eia923__yearly_generation_fuel_by_generator_energy_source") + op.drop_table("out_eia923__yearly_generation_fuel_by_generator") + op.drop_table("out_eia923__yearly_generation") + op.drop_table("out_eia923__yearly_boiler_fuel") + op.drop_table("out_eia860__yearly_ownership") + op.drop_table("out_pudl__yearly_assn_eia_ferc1_plant_parts") + op.drop_table("mega_generators_eia") + op.drop_table("core_eia860__yearly_boiler_emissions_control_equipment_assn") + op.drop_table("core_eia860__scd_ownership") + op.drop_table("core_eia860__assn_boiler_stack_flue") + op.drop_table("core_eia860__assn_boiler_generator") + op.drop_table("core_eia860__assn_boiler_cooling") + op.drop_table("_out_eia__yearly_heat_rate_by_generator") + op.drop_table("_out_eia__yearly_generators") + op.drop_table("_out_eia__yearly_fuel_cost_by_generator") + op.drop_table("_out_eia__yearly_derived_generator_attributes") + op.drop_table("_out_eia__yearly_capacity_factor_by_generator") + op.drop_table("out_ferc1__yearly_steam_plants_fuel_sched402") + op.drop_table("out_ferc1__yearly_steam_plants_fuel_by_plant_sched402") + op.drop_table("out_ferc1__yearly_all_plants") + op.drop_table("out_eia__yearly_plants") + op.drop_table("out_eia923__yearly_generation_fuel_combined") + op.drop_table("out_eia923__yearly_fuel_receipts_costs") + op.drop_table("core_ferc1__yearly_steam_plants_sched402") + op.drop_table("core_ferc1__yearly_steam_plants_fuel_sched402") + op.drop_table("core_ferc1__yearly_small_plants_sched410") + op.drop_table("core_ferc1__yearly_pumped_storage_plants_sched408") + op.drop_table("core_ferc1__yearly_hydroelectric_plants_sched406") + op.drop_table("core_eia860__scd_generators") + op.drop_table("core_eia860__scd_boilers") + op.drop_table("_out_ferc1__yearly_steam_plants_sched402") + op.drop_table("_out_ferc1__yearly_small_plants_sched410") + op.drop_table("_out_ferc1__yearly_pumped_storage_plants_sched408") + op.drop_table("_out_ferc1__yearly_plants_utilities") + op.drop_table("_out_ferc1__yearly_hydroelectric_plants_sched406") + op.drop_table("_out_eia__yearly_heat_rate_by_unit") + op.drop_table("_out_eia__plants_utilities") + op.drop_table("out_ferc1__yearly_utility_plant_summary_sched200") + op.drop_table("out_ferc1__yearly_transmission_lines_sched422") + op.drop_table("out_ferc1__yearly_sales_by_rate_schedules_sched304") + op.drop_table("out_ferc1__yearly_retained_earnings_sched118") + op.drop_table("out_ferc1__yearly_purchased_power_and_exchanges_sched326") + op.drop_table("out_ferc1__yearly_plant_in_service_sched204") + op.drop_table("out_ferc1__yearly_other_regulatory_liabilities_sched278") + op.drop_table("out_ferc1__yearly_operating_revenues_sched300") + op.drop_table("out_ferc1__yearly_operating_expenses_sched320") + op.drop_table("out_ferc1__yearly_income_statements_sched114") + op.drop_table("out_ferc1__yearly_energy_sources_sched401") + op.drop_table("out_ferc1__yearly_energy_dispositions_sched401") + op.drop_table("out_ferc1__yearly_depreciation_summary_sched336") + op.drop_table("out_ferc1__yearly_depreciation_changes_sched219") + op.drop_table("out_ferc1__yearly_depreciation_by_function_sched219") + op.drop_table("out_ferc1__yearly_cash_flows_sched120") + op.drop_table("out_ferc1__yearly_balance_sheet_liabilities_sched110") + op.drop_table("out_ferc1__yearly_balance_sheet_assets_sched110") + op.drop_table("out_eia__yearly_utilities") + op.drop_table("out_eia__monthly_generators") + op.drop_table("out_eia923__monthly_generation_fuel_by_generator_energy_source") + op.drop_table("out_eia923__monthly_generation_fuel_by_generator") + op.drop_table("out_eia923__monthly_generation") + op.drop_table("out_eia923__monthly_boiler_fuel") + op.drop_table("out_eia923__generation") + op.drop_table("out_eia923__boiler_fuel") + op.drop_table("core_pudl__assn_utilities_ferc1_xbrl") + op.drop_table("core_pudl__assn_utilities_ferc1_dbf") + op.drop_table("core_pudl__assn_plants_ferc1") + op.drop_table("core_ferc1__yearly_utility_plant_summary_sched200") + op.drop_table("core_ferc1__yearly_transmission_lines_sched422") + op.drop_table("core_ferc1__yearly_sales_by_rate_schedules_sched304") + op.drop_table("core_ferc1__yearly_retained_earnings_sched118") + op.drop_table("core_ferc1__yearly_purchased_power_and_exchanges_sched326") + op.drop_table("core_ferc1__yearly_plant_in_service_sched204") + op.drop_table("core_ferc1__yearly_other_regulatory_liabilities_sched278") + op.drop_table("core_ferc1__yearly_operating_revenues_sched300") + op.drop_table("core_ferc1__yearly_operating_expenses_sched320") + op.drop_table("core_ferc1__yearly_income_statements_sched114") + op.drop_table("core_ferc1__yearly_energy_sources_sched401") + op.drop_table("core_ferc1__yearly_energy_dispositions_sched401") + op.drop_table("core_ferc1__yearly_depreciation_summary_sched336") + op.drop_table("core_ferc1__yearly_depreciation_changes_sched219") + op.drop_table("core_ferc1__yearly_depreciation_by_function_sched219") + op.drop_table("core_ferc1__yearly_cash_flows_sched120") + op.drop_table("core_ferc1__yearly_balance_sheet_liabilities_sched110") + op.drop_table("core_ferc1__yearly_balance_sheet_assets_sched110") + op.drop_table("core_epa__assn_epacamd_eia") + op.drop_table("core_eia923__monthly_generation") + op.drop_table("core_eia923__monthly_fuel_receipts_costs") + op.drop_table("core_eia923__monthly_boiler_fuel") + op.drop_table("core_eia860__scd_plants") + op.drop_table("_out_eia__monthly_heat_rate_by_generator") + op.drop_table("_out_eia__monthly_fuel_cost_by_generator") + op.drop_table("_out_eia__monthly_derived_generator_attributes") + op.drop_table("_out_eia__monthly_capacity_factor_by_generator") + op.drop_table("out_ferc714__summarized_demand") + op.drop_table("out_ferc714__respondents_with_fips") + op.drop_table("out_eia923__monthly_generation_fuel_combined") + op.drop_table("out_eia923__monthly_fuel_receipts_costs") + op.drop_table("out_eia923__generation_fuel_combined") + op.drop_table("out_eia923__fuel_receipts_costs") + op.drop_table("out_eia860__yearly_emissions_control_equipment") + op.drop_table("core_pudl__assn_utilities_plants") + op.drop_table("core_pudl__assn_utilities_ferc1") + op.drop_table("core_pudl__assn_utilities_eia") + op.drop_table("core_pudl__assn_plants_eia") + op.drop_table("core_ferc714__hourly_demand_pa") + op.drop_table("core_eia__entity_generators") + op.drop_table("core_eia__entity_boilers") + op.drop_table("core_eia923__monthly_generation_fuel_nuclear") + op.drop_table("core_eia923__monthly_generation_fuel") + op.drop_table("core_eia923__entity_coalmine") + op.drop_table("core_eia861__yearly_utility_data_rto") + op.drop_table("core_eia861__yearly_utility_data_nerc") + op.drop_table("core_eia861__yearly_utility_data_misc") + op.drop_table("core_eia861__yearly_service_territory") + op.drop_table("core_eia861__yearly_sales") + op.drop_table("core_eia861__yearly_reliability") + op.drop_table("core_eia861__yearly_operational_data_revenue") + op.drop_table("core_eia861__yearly_operational_data_misc") + op.drop_table("core_eia861__yearly_non_net_metering_misc") + op.drop_table("core_eia861__yearly_non_net_metering_customer_fuel_class") + op.drop_table("core_eia861__yearly_net_metering_misc") + op.drop_table("core_eia861__yearly_net_metering_customer_fuel_class") + op.drop_table("core_eia861__yearly_mergers") + op.drop_table("core_eia861__yearly_green_pricing") + op.drop_table("core_eia861__yearly_energy_efficiency") + op.drop_table("core_eia861__yearly_dynamic_pricing") + op.drop_table("core_eia861__yearly_distribution_systems") + op.drop_table("core_eia861__yearly_distributed_generation_tech") + op.drop_table("core_eia861__yearly_distributed_generation_misc") + op.drop_table("core_eia861__yearly_distributed_generation_fuel") + op.drop_table("core_eia861__yearly_demand_side_management_sales") + op.drop_table("core_eia861__yearly_demand_side_management_misc") + op.drop_table("core_eia861__yearly_demand_side_management_ee_dr") + op.drop_table("core_eia861__yearly_demand_response_water_heater") + op.drop_table("core_eia861__yearly_demand_response") + op.drop_table("core_eia861__yearly_advanced_metering_infrastructure") + op.drop_table("core_eia860__scd_utilities") + op.drop_table("core_eia860__scd_emissions_control_equipment") + op.drop_table("_out_eia__monthly_heat_rate_by_unit") + op.drop_table("out_ferc714__hourly_predicted_state_demand") + op.drop_table("out_eia861__compiled_geometry_utilities") + op.drop_table("out_eia861__compiled_geometry_balancing_authorities") + op.drop_table("core_pudl__entity_utilities_pudl") + op.drop_table("core_pudl__entity_plants_pudl") + op.drop_table("core_pudl__codes_subdivisions") + op.drop_table("core_pudl__codes_datasources") + op.drop_table("core_pudl__codes_data_maturities") + op.drop_table("core_ferc__codes_accounts") + op.drop_table("core_ferc714__respondent_id") + op.drop_table("core_ferc1__codes_power_purchase_types") + op.drop_table("core_epa__assn_epacamd_eia_subplant_ids") + op.drop_table("core_eia__yearly_fuel_receipts_costs_aggs") + op.drop_table("core_eia__entity_utilities") + op.drop_table("core_eia__entity_plants") + op.drop_table("core_eia__codes_wet_dry_bottom") + op.drop_table("core_eia__codes_steam_plant_types") + op.drop_table("core_eia__codes_so2_units") + op.drop_table("core_eia__codes_so2_compliance_strategies") + op.drop_table("core_eia__codes_sector_consolidated") + op.drop_table("core_eia__codes_reporting_frequencies") + op.drop_table("core_eia__codes_regulations") + op.drop_table("core_eia__codes_prime_movers") + op.drop_table("core_eia__codes_particulate_units") + op.drop_table("core_eia__codes_particulate_compliance_strategies") + op.drop_table("core_eia__codes_operational_status") + op.drop_table("core_eia__codes_nox_units") + op.drop_table("core_eia__codes_nox_control_status") + op.drop_table("core_eia__codes_nox_compliance_strategies") + op.drop_table("core_eia__codes_momentary_interruptions") + op.drop_table("core_eia__codes_mercury_compliance_strategies") + op.drop_table("core_eia__codes_fuel_types_aer") + op.drop_table("core_eia__codes_fuel_transportation_modes") + op.drop_table("core_eia__codes_firing_types") + op.drop_table("core_eia__codes_environmental_equipment_manufacturers") + op.drop_table("core_eia__codes_energy_sources") + op.drop_table("core_eia__codes_emission_control_equipment_types") + op.drop_table("core_eia__codes_contract_types") + op.drop_table("core_eia__codes_coalmine_types") + op.drop_table("core_eia__codes_boiler_types") + op.drop_table("core_eia__codes_boiler_status") + op.drop_table("core_eia__codes_boiler_generator_assn_types") + op.drop_table("core_eia__codes_balancing_authorities") + op.drop_table("core_eia__codes_averaging_periods") + op.drop_table("core_eia861__yearly_balancing_authority") + op.drop_table("core_eia861__assn_utility") + op.drop_table("core_eia861__assn_balancing_authority") + # ### end Alembic commands ### diff --git a/migrations/versions/3b8641576a41_wipe_out_schema_and_core_asset_rename.py b/migrations/versions/3b8641576a41_wipe_out_schema_and_core_asset_rename.py deleted file mode 100644 index dcdcf59fe7..0000000000 --- a/migrations/versions/3b8641576a41_wipe_out_schema_and_core_asset_rename.py +++ /dev/null @@ -1,4232 +0,0 @@ -"""Wipe out schema and core asset rename - -Revision ID: 3b8641576a41 -Revises: -Create Date: 2023-10-31 12:00:13.943396 - -""" -import sqlalchemy as sa -from alembic import op -from sqlalchemy.dialects import sqlite - -# revision identifiers, used by Alembic. -revision = '3b8641576a41' -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('core_eia861__assn_balancing_authority', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('balancing_authority_id_eia', sa.Integer(), nullable=False, comment='EIA balancing authority ID. This is often (but not always!) the same as the utility ID associated with the same legal entity.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('state', sa.Text(), nullable=False, comment='Two letter US state abbreviation.'), - sa.PrimaryKeyConstraint('report_date', 'balancing_authority_id_eia', 'utility_id_eia', 'state', name=op.f('pk_core_eia861__assn_balancing_authority')) - ) - op.create_table('core_eia861__assn_utility', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('state', sa.Text(), nullable=False, comment='Two letter US state abbreviation.'), - sa.PrimaryKeyConstraint('report_date', 'utility_id_eia', 'state', name=op.f('pk_core_eia861__assn_utility')) - ) - op.create_table('core_eia861__yearly_balancing_authority', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('balancing_authority_id_eia', sa.Integer(), nullable=False, comment='EIA balancing authority ID. This is often (but not always!) the same as the utility ID associated with the same legal entity.'), - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('balancing_authority_name_eia', sa.Text(), nullable=True, comment='Name of the balancing authority.'), - sa.PrimaryKeyConstraint('report_date', 'balancing_authority_id_eia', name=op.f('pk_core_eia861__yearly_balancing_authority')) - ) - op.create_table('core_eia__codes_averaging_periods', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_averaging_periods')) - ) - op.create_table('core_eia__codes_balancing_authorities', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_balancing_authorities')) - ) - op.create_table('core_eia__codes_boiler_generator_assn_types', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_boiler_generator_assn_types')) - ) - op.create_table('core_eia__codes_boiler_status', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_boiler_status')) - ) - op.create_table('core_eia__codes_boiler_types', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_boiler_types')) - ) - op.create_table('core_eia__codes_coalmine_types', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_coalmine_types')) - ) - op.create_table('core_eia__codes_contract_types', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_contract_types')) - ) - op.create_table('core_eia__codes_emission_control_equipment_types', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_emission_control_equipment_types')) - ) - op.create_table('core_eia__codes_energy_sources', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('fuel_units', sa.Enum('barrels', 'mcf', 'mwh', 'short_tons'), nullable=True, comment='Reported unit of measure for fuel.'), - sa.Column('min_fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Minimum heat content per physical unit of fuel in MMBtu.'), - sa.Column('max_fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Maximum heat content per physical unit of fuel in MMBtu.'), - sa.Column('fuel_group_eia', sa.Enum('fossil', 'other', 'renewable'), nullable=True, comment='High level fuel group defined in the 2021-2023 EIA Form 860 instructions, Table 28.'), - sa.Column('fuel_derived_from', sa.Enum('biomass', 'coal', 'gas', 'other', 'petroleum'), nullable=True, comment='Original fuel from which this refined fuel was derived.'), - sa.Column('fuel_phase', sa.Enum('gas', 'liquid', 'solid'), nullable=True, comment='Physical phase of matter of the fuel.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_energy_sources')) - ) - op.create_table('core_eia__codes_environmental_equipment_manufacturers', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_environmental_equipment_manufacturers')) - ) - op.create_table('core_eia__codes_firing_types', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_firing_types')) - ) - op.create_table('core_eia__codes_fuel_transportation_modes', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_fuel_transportation_modes')) - ) - op.create_table('core_eia__codes_fuel_types_aer', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_fuel_types_aer')) - ) - op.create_table('core_eia__codes_mercury_compliance_strategies', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_mercury_compliance_strategies')) - ) - op.create_table('core_eia__codes_momentary_interruptions', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_momentary_interruptions')) - ) - op.create_table('core_eia__codes_nox_compliance_strategies', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_nox_compliance_strategies')) - ) - op.create_table('core_eia__codes_nox_control_status', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_nox_control_status')) - ) - op.create_table('core_eia__codes_nox_units', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_nox_units')) - ) - op.create_table('core_eia__codes_operational_status', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_operational_status')) - ) - op.create_table('core_eia__codes_particulate_compliance_strategies', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_particulate_compliance_strategies')) - ) - op.create_table('core_eia__codes_particulate_units', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_particulate_units')) - ) - op.create_table('core_eia__codes_prime_movers', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_prime_movers')) - ) - op.create_table('core_eia__codes_regulations', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_regulations')) - ) - op.create_table('core_eia__codes_reporting_frequencies', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_reporting_frequencies')) - ) - op.create_table('core_eia__codes_sector_consolidated', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_sector_consolidated')) - ) - op.create_table('core_eia__codes_so2_compliance_strategies', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_so2_compliance_strategies')) - ) - op.create_table('core_eia__codes_so2_units', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_so2_units')) - ) - op.create_table('core_eia__codes_steam_plant_types', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_steam_plant_types')) - ) - op.create_table('core_eia__codes_wet_dry_bottom', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_eia__codes_wet_dry_bottom')) - ) - op.create_table('core_eia__entity_plants', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('city', sa.Text(), nullable=True), - sa.Column('county', sa.Text(), nullable=True, comment='County name.'), - sa.Column('latitude', sa.Float(), nullable=True, comment="Latitude of the plant's location, in degrees."), - sa.Column('longitude', sa.Float(), nullable=True, comment="Longitude of the plant's location, in degrees."), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('street_address', sa.Text(), nullable=True), - sa.Column('zip_code', sa.Text(), nullable=True, comment='Five digit US Zip Code.'), - sa.Column('timezone', sa.Enum('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu'), nullable=True, comment='IANA timezone name'), - sa.PrimaryKeyConstraint('plant_id_eia', name=op.f('pk_core_eia__entity_plants')) - ) - op.create_table('core_eia__entity_utilities', - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.PrimaryKeyConstraint('utility_id_eia', name=op.f('pk_core_eia__entity_utilities')) - ) - op.create_table('core_eia__yearly_fuel_receipts_costs_aggs', - sa.Column('fuel_agg', sa.Text(), nullable=False, comment='Category of fuel aggregation in EIA bulk electricity data.'), - sa.Column('geo_agg', sa.Text(), nullable=False, comment='Category of geographic aggregation in EIA bulk electricity data.'), - sa.Column('sector_agg', sa.Text(), nullable=False, comment='Category of sectoral aggregation in EIA bulk electricity data.'), - sa.Column('temporal_agg', sa.Text(), nullable=False, comment='Category of temporal aggregation in EIA bulk electricity data.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('fuel_received_mmbtu', sa.Float(), nullable=True, comment='Aggregated fuel receipts, in MMBtu, in EIA bulk electricity data.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.PrimaryKeyConstraint('fuel_agg', 'geo_agg', 'sector_agg', 'temporal_agg', 'report_date', name=op.f('pk_core_eia__yearly_fuel_receipts_costs_aggs')) - ) - op.create_table('core_epa__assn_epacamd_eia_subplant_ids', - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_epa', sa.Integer(), nullable=True, comment='The ORISPL ID used by EPA to refer to the plant. Usually but not always the same as plant_id_eia.'), - sa.Column('subplant_id', sa.Integer(), nullable=True, comment='Sub-plant ID links EPA CEMS emissions units to EIA units.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('emissions_unit_id_epa', sa.Text(), nullable=True, comment='Emissions (smokestack) unit monitored by EPA CEMS.'), - sa.Column('generator_id', sa.Text(), nullable=True, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!') - ) - op.create_table('core_ferc1__codes_power_purchase_types', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('label', sa.Text(), nullable=True, comment='Longer human-readable code using snake_case'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_ferc1__codes_power_purchase_types')) - ) - op.create_table('core_ferc714__respondent_id', - sa.Column('respondent_id_ferc714', sa.Integer(), nullable=False), - sa.Column('respondent_name_ferc714', sa.Text(), nullable=True), - sa.Column('eia_code', sa.Integer(), nullable=True), - sa.PrimaryKeyConstraint('respondent_id_ferc714', name=op.f('pk_core_ferc714__respondent_id')) - ) - op.create_table('core_ferc__codes_accounts', - sa.Column('ferc_account_id', sa.Text(), nullable=False, comment="Account identifier from FERC's Uniform System of Accounts for Electric Plant. Includes higher level labeled categories."), - sa.Column('ferc_account_description', sa.Text(), nullable=True), - sa.PrimaryKeyConstraint('ferc_account_id', name=op.f('pk_core_ferc__codes_accounts')) - ) - op.create_table('core_pudl__codes_data_maturities', - sa.Column('code', sa.Text(), nullable=False, comment='Originally reported short code.'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.PrimaryKeyConstraint('code', name=op.f('pk_core_pudl__codes_data_maturities')) - ) - op.create_table('core_pudl__codes_datasources', - sa.Column('datasource', sa.Enum('censusdp1tract', 'eia176', 'eia860', 'eia860m', 'eia861', 'eia923', 'eia_bulk_elec', 'eiawater', 'epacems', 'core_epa__assn_epacamd_eia', 'ferc1', 'ferc2', 'ferc6', 'ferc60', 'ferc714', 'ferceqr', 'mshamines', 'phmsagas', 'pudl'), nullable=False, comment='Code identifying a dataset available within PUDL.'), - sa.Column('partitions', sa.Text(), nullable=True, comment='The data parititions used to generate this instance of the database.'), - sa.Column('doi', sa.Text(), nullable=True, comment='Unique digitial object identifier of Zenodo archive.'), - sa.Column('pudl_version', sa.Text(), nullable=True, comment='The version of PUDL used to generate this database.'), - sa.PrimaryKeyConstraint('datasource', name=op.f('pk_core_pudl__codes_datasources')) - ) - op.create_table('core_pudl__codes_subdivisions', - sa.Column('country_code', sa.Enum('CAN', 'USA'), nullable=False, comment='Three letter ISO-3166 country code (e.g. USA or CAN).'), - sa.Column('country_name', sa.Text(), nullable=True, comment='Full country name (e.g. United States of America).'), - sa.Column('subdivision_code', sa.Enum('MI', 'NV', 'DE', 'NY', 'GA', 'NL', 'ME', 'IL', 'WA', 'WY', 'NE', 'ON', 'MS', 'IN', 'AK', 'NS', 'VA', 'NH', 'HI', 'YT', 'NM', 'AL', 'PR', 'CO', 'NB', 'PA', 'AZ', 'SD', 'MP', 'GU', 'KY', 'MN', 'ND', 'OK', 'QC', 'TN', 'UT', 'TX', 'VT', 'WI', 'NU', 'LA', 'RI', 'CT', 'NC', 'WV', 'PE', 'CA', 'AR', 'MO', 'DC', 'IA', 'SC', 'MB', 'MD', 'NT', 'FL', 'MA', 'ID', 'BC', 'MT', 'SK', 'KS', 'AB', 'NJ', 'VI', 'AS', 'OH', 'OR'), nullable=False, comment='Two-letter ISO-3166 political subdivision code (e.g. US state or Canadian provice abbreviations like CA or AB).'), - sa.Column('subdivision_name', sa.Text(), nullable=True, comment='Full name of political subdivision (e.g. US state or Canadian province names like California or Alberta.'), - sa.Column('subdivision_type', sa.Text(), nullable=True, comment='ISO-3166 political subdivision type. E.g. state, province, outlying_area.'), - sa.Column('timezone_approx', sa.Enum('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu'), nullable=True, comment='IANA timezone name of the timezone which encompasses the largest portion of the population in the associated geographic area.'), - sa.Column('state_id_fips', sa.Text(), nullable=True, comment='Two digit state FIPS code.'), - sa.Column('division_name_us_census', sa.Text(), nullable=True, comment='Longer human readable name describing the US Census division.'), - sa.Column('division_code_us_census', sa.Enum('SAT', 'NEW', 'ENC', 'WNC', 'MTN', 'PCN', 'WSC', 'MAT', 'PCC', 'ESC'), nullable=True, comment='Three-letter US Census division code as it appears in the bulk electricity data published by the EIA. Note that EIA splits the Pacific division into distinct contiguous (CA, OR, WA) and non-contiguous (AK, HI) states. For reference see this US Census region and division map: https://www2.census.gov/geo/pdfs/maps-data/maps/reference/us_regdiv.pdf'), - sa.Column('region_name_us_census', sa.Text(), nullable=True, comment='Human-readable name of a US Census region.'), - sa.Column('is_epacems_state', sa.Boolean(), nullable=True, comment="Indicates whether the associated state reports data within the EPA's Continuous Emissions Monitoring System."), - sa.PrimaryKeyConstraint('country_code', 'subdivision_code', name=op.f('pk_core_pudl__codes_subdivisions')) - ) - op.create_table('core_pudl__entity_plants_pudl', - sa.Column('plant_id_pudl', sa.Integer(), nullable=False, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_pudl', sa.Text(), nullable=True, comment='Plant name, chosen arbitrarily from the several possible plant names available in the plant matching process. Included for human readability only.'), - sa.PrimaryKeyConstraint('plant_id_pudl', name=op.f('pk_core_pudl__entity_plants_pudl')) - ) - op.create_table('core_pudl__entity_utilities_pudl', - sa.Column('utility_id_pudl', sa.Integer(), nullable=False, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_pudl', sa.Text(), nullable=True, comment='Utility name, chosen arbitrarily from the several possible utility names available in the utility matching process. Included for human readability only.'), - sa.PrimaryKeyConstraint('utility_id_pudl', name=op.f('pk_core_pudl__entity_utilities_pudl')) - ) - op.create_table('out_eia861__compiled_geometry_balancing_authorities', - sa.Column('county_id_fips', sa.Text(), nullable=False, comment='County ID from the Federal Information Processing Standard Publication 6-4.'), - sa.Column('county_name_census', sa.Text(), nullable=True, comment='County name as specified in Census DP1 Data.'), - sa.Column('population', sa.Float(), nullable=True, comment='County population, sourced from Census DP1 data.'), - sa.Column('area_km2', sa.Float(), nullable=True, comment='County area in km2.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('balancing_authority_id_eia', sa.Integer(), nullable=False, comment='EIA balancing authority ID. This is often (but not always!) the same as the utility ID associated with the same legal entity.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('county', sa.Text(), nullable=False, comment='County name.'), - sa.Column('state_id_fips', sa.Text(), nullable=True, comment='Two digit state FIPS code.'), - sa.PrimaryKeyConstraint('balancing_authority_id_eia', 'report_date', 'county_id_fips', 'county', name=op.f('pk_out_eia861__compiled_geometry_balancing_authorities')) - ) - op.create_table('out_eia861__compiled_geometry_utilities', - sa.Column('county_id_fips', sa.Text(), nullable=False, comment='County ID from the Federal Information Processing Standard Publication 6-4.'), - sa.Column('county_name_census', sa.Text(), nullable=True, comment='County name as specified in Census DP1 Data.'), - sa.Column('population', sa.Float(), nullable=True, comment='County population, sourced from Census DP1 data.'), - sa.Column('area_km2', sa.Float(), nullable=True, comment='County area in km2.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('county', sa.Text(), nullable=True, comment='County name.'), - sa.Column('state_id_fips', sa.Text(), nullable=True, comment='Two digit state FIPS code.'), - sa.PrimaryKeyConstraint('utility_id_eia', 'report_date', 'county_id_fips', name=op.f('pk_out_eia861__compiled_geometry_utilities')) - ) - op.create_table('out_ferc714__hourly_predicted_state_demand', - sa.Column('state_id_fips', sa.Text(), nullable=False, comment='Two digit state FIPS code.'), - sa.Column('utc_datetime', sqlite.DATETIME(), nullable=False), - sa.Column('demand_mwh', sa.Float(), nullable=True), - sa.Column('scaled_demand_mwh', sa.Float(), nullable=True, comment='Estimated electricity demand scaled by the total sales within a state.'), - sa.PrimaryKeyConstraint('state_id_fips', 'utc_datetime', name=op.f('pk_out_ferc714__hourly_predicted_state_demand')) - ) - op.create_table('_out_eia__monthly_heat_rate_by_unit', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=False, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk__out_eia__monthly_heat_rate_by_unit_plant_id_eia_core_eia__entity_plants')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'unit_id_pudl', name=op.f('pk__out_eia__monthly_heat_rate_by_unit')) - ) - op.create_table('core_eia860__scd_emissions_control_equipment', - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('emission_control_id_pudl', sa.Float(), nullable=False, comment='A PUDL-generated ID used to distinguish emission control units in the same report year and plant id. This ID should not be used to track units over time or between plants.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.Column('emission_control_equipment_type_code', sa.Text(), nullable=True, comment='Short code indicating the type of emission control equipment installed.'), - sa.Column('operational_status_code', sa.Text(), nullable=True, comment='The operating status of the asset.'), - sa.Column('mercury_control_id_eia', sa.Text(), nullable=True, comment='Mercury control identification number. This ID is not a unique identifier.'), - sa.Column('nox_control_id_eia', sa.Text(), nullable=True, comment='Nitrogen oxide control identification number. This ID is not a unique identifier.'), - sa.Column('particulate_control_id_eia', sa.Text(), nullable=True, comment='Particulate matter control identification number. This ID is not a unique identifier.'), - sa.Column('so2_control_id_eia', sa.Text(), nullable=True, comment='Sulfur dioxide control identification number. This ID is not a unique identifier.'), - sa.Column('acid_gas_control', sa.Boolean(), nullable=True, comment='Indicates whether the emissions control equipment controls acid (HCl) gas.'), - sa.Column('emission_control_equipment_cost', sa.Float(), nullable=True, comment='The total cost to install a piece of emission control equipment.'), - sa.Column('emission_control_operating_date', sa.Date(), nullable=True, comment='The date a piece of emissions control equipment began operating. Derived from month and year columns in the raw data.'), - sa.Column('emission_control_retirement_date', sa.Date(), nullable=True, comment='The expected or actual retirement date for a piece of emissions control equipment. Derived from month and year columns in the raw data.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia860__scd_emissions_control_equipment_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['emission_control_equipment_type_code'], ['core_eia__codes_emission_control_equipment_types.code'], name=op.f('fk_core_eia860__scd_emissions_control_equipment_emission_control_equipment_type_code_core_eia__codes_emission_control_equipment_types')), - sa.ForeignKeyConstraint(['operational_status_code'], ['core_eia__codes_operational_status.code'], name=op.f('fk_core_eia860__scd_emissions_control_equipment_operational_status_code_core_eia__codes_operational_status')), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_core_eia860__scd_emissions_control_equipment_plant_id_eia_core_eia__entity_plants')), - sa.PrimaryKeyConstraint('report_year', 'plant_id_eia', 'emission_control_id_pudl', name=op.f('pk_core_eia860__scd_emissions_control_equipment')) - ) - op.create_table('core_eia860__scd_utilities', - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('street_address', sa.Text(), nullable=True), - sa.Column('city', sa.Text(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('zip_code', sa.Text(), nullable=True, comment='Five digit US Zip Code.'), - sa.Column('plants_reported_owner', sa.Boolean(), nullable=True, comment='Is the reporting entity an owner of power plants reported on Schedule 2 of the form?'), - sa.Column('plants_reported_operator', sa.Boolean(), nullable=True, comment='Is the reporting entity an operator of power plants reported on Schedule 2 of the form?'), - sa.Column('plants_reported_asset_manager', sa.Boolean(), nullable=True, comment='Is the reporting entity an asset manager of power plants reported on Schedule 2 of the form?'), - sa.Column('plants_reported_other_relationship', sa.Boolean(), nullable=True, comment='Does the reporting entity have any other relationship to the power plants reported on Schedule 2 of the form?'), - sa.Column('entity_type', sa.Text(), nullable=True, comment='Entity type of principal owner.'), - sa.Column('attention_line', sa.Text(), nullable=True), - sa.Column('address_2', sa.Text(), nullable=True), - sa.Column('zip_code_4', sa.Text(), nullable=True, comment='Four digit US Zip Code suffix.'), - sa.Column('contact_firstname', sa.Text(), nullable=True, comment='First name of utility contact 1.'), - sa.Column('contact_lastname', sa.Text(), nullable=True, comment='Last name of utility contact 1.'), - sa.Column('contact_title', sa.Text(), nullable=True, comment='Title of of utility contact 1.'), - sa.Column('phone_number', sa.Text(), nullable=True, comment='Phone number for utility contact 1.'), - sa.Column('phone_extension', sa.Text(), nullable=True, comment='Phone extension for utility contact 1'), - sa.Column('contact_firstname_2', sa.Text(), nullable=True, comment='First name of utility contact 2.'), - sa.Column('contact_lastname_2', sa.Text(), nullable=True, comment='Last name of utility contact 2.'), - sa.Column('contact_title_2', sa.Text(), nullable=True, comment='Title of utility contact 2.'), - sa.Column('phone_number_2', sa.Text(), nullable=True, comment='Phone number for utility contact 2.'), - sa.Column('phone_extension_2', sa.Text(), nullable=True, comment='Phone extension for utility contact 2'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia860__scd_utilities_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_core_eia860__scd_utilities_utility_id_eia_core_eia__entity_utilities')), - sa.PrimaryKeyConstraint('utility_id_eia', 'report_date', name=op.f('pk_core_eia860__scd_utilities')) - ) - op.create_table('core_eia861__yearly_advanced_metering_infrastructure', - sa.Column('advanced_metering_infrastructure', sa.Integer(), nullable=True), - sa.Column('automated_meter_reading', sa.Integer(), nullable=True), - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=False, comment='EIA short code identifying a balancing authority.'), - sa.Column('customer_class', sa.Enum('commercial', 'industrial', 'direct_connection', 'other', 'residential', 'total', 'transportation'), nullable=False, comment='High level categorization of customer type.'), - sa.Column('daily_digital_access_customers', sa.Integer(), nullable=True), - sa.Column('direct_load_control_customers', sa.Integer(), nullable=True), - sa.Column('energy_served_ami_mwh', sa.Float(), nullable=True), - sa.Column('entity_type', sa.Text(), nullable=True, comment='Entity type of principal owner.'), - sa.Column('home_area_network', sa.Integer(), nullable=True), - sa.Column('non_amr_ami', sa.Integer(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('state', sa.Text(), nullable=False, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_advanced_metering_infrastructure_data_maturity_core_pudl__codes_data_maturities')), - sa.PrimaryKeyConstraint('balancing_authority_code_eia', 'customer_class', 'report_date', 'state', 'utility_id_eia', name=op.f('pk_core_eia861__yearly_advanced_metering_infrastructure')) - ) - op.create_table('core_eia861__yearly_demand_response', - sa.Column('actual_peak_demand_savings_mw', sa.Float(), nullable=True), - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=False, comment='EIA short code identifying a balancing authority.'), - sa.Column('customer_class', sa.Enum('commercial', 'industrial', 'direct_connection', 'other', 'residential', 'total', 'transportation'), nullable=False, comment='High level categorization of customer type.'), - sa.Column('customer_incentives_cost', sa.Float(), nullable=True), - sa.Column('customers', sa.Float(), nullable=True, comment='Number of customers.'), - sa.Column('energy_savings_mwh', sa.Float(), nullable=True), - sa.Column('other_costs', sa.Float(), nullable=True), - sa.Column('potential_peak_demand_savings_mw', sa.Float(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('state', sa.Text(), nullable=False, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_demand_response_data_maturity_core_pudl__codes_data_maturities')), - sa.PrimaryKeyConstraint('balancing_authority_code_eia', 'customer_class', 'report_date', 'state', 'utility_id_eia', name=op.f('pk_core_eia861__yearly_demand_response')) - ) - op.create_table('core_eia861__yearly_demand_response_water_heater', - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=False, comment='EIA short code identifying a balancing authority.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('state', sa.Text(), nullable=False, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('water_heater', sa.Integer(), nullable=True), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_demand_response_water_heater_data_maturity_core_pudl__codes_data_maturities')), - sa.PrimaryKeyConstraint('balancing_authority_code_eia', 'report_date', 'state', 'utility_id_eia', name=op.f('pk_core_eia861__yearly_demand_response_water_heater')) - ) - op.create_table('core_eia861__yearly_demand_side_management_ee_dr', - sa.Column('annual_indirect_program_cost', sa.Float(), nullable=True), - sa.Column('annual_total_cost', sa.Float(), nullable=True), - sa.Column('customer_class', sa.Enum('commercial', 'industrial', 'direct_connection', 'other', 'residential', 'total', 'transportation'), nullable=True, comment='High level categorization of customer type.'), - sa.Column('energy_efficiency_annual_actual_peak_reduction_mw', sa.Float(), nullable=True), - sa.Column('energy_efficiency_annual_cost', sa.Float(), nullable=True), - sa.Column('energy_efficiency_annual_effects_mwh', sa.Float(), nullable=True), - sa.Column('energy_efficiency_annual_incentive_payment', sa.Float(), nullable=True), - sa.Column('energy_efficiency_incremental_actual_peak_reduction_mw', sa.Float(), nullable=True), - sa.Column('energy_efficiency_incremental_effects_mwh', sa.Float(), nullable=True), - sa.Column('load_management_annual_actual_peak_reduction_mw', sa.Float(), nullable=True), - sa.Column('load_management_annual_cost', sa.Float(), nullable=True), - sa.Column('load_management_annual_effects_mwh', sa.Float(), nullable=True), - sa.Column('load_management_annual_incentive_payment', sa.Float(), nullable=True), - sa.Column('load_management_annual_potential_peak_reduction_mw', sa.Float(), nullable=True), - sa.Column('load_management_incremental_actual_peak_reduction_mw', sa.Float(), nullable=True), - sa.Column('load_management_incremental_effects_mwh', sa.Float(), nullable=True), - sa.Column('load_management_incremental_potential_peak_reduction_mw', sa.Float(), nullable=True), - sa.Column('nerc_region', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True, comment='NERC region in which the plant is located'), - sa.Column('price_responsiveness_customers', sa.Integer(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('time_responsiveness_customers', sa.Integer(), nullable=True), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_demand_side_management_ee_dr_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_demand_side_management_misc', - sa.Column('energy_savings_estimates_independently_verified', sa.Boolean(), nullable=True), - sa.Column('energy_savings_independently_verified', sa.Boolean(), nullable=True), - sa.Column('entity_type', sa.Text(), nullable=True, comment='Entity type of principal owner.'), - sa.Column('major_program_changes', sa.Boolean(), nullable=True), - sa.Column('nerc_region', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True, comment='NERC region in which the plant is located'), - sa.Column('price_responsive_programs', sa.Boolean(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('reported_as_another_company', sa.Text(), nullable=True), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('time_responsive_programs', sa.Boolean(), nullable=True), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_demand_side_management_misc_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_demand_side_management_sales', - sa.Column('nerc_region', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True, comment='NERC region in which the plant is located'), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('sales_for_resale_mwh', sa.Float(), nullable=True), - sa.Column('sales_to_ultimate_consumers_mwh', sa.Float(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_demand_side_management_sales_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_distributed_generation_fuel', - sa.Column('estimated_or_actual_fuel_data', sa.Enum('estimated', 'actual'), nullable=True), - sa.Column('fuel_class', sa.Enum('gas', 'oil', 'other', 'renewable', 'water', 'wind', 'wood'), nullable=True), - sa.Column('fuel_pct', sa.Float(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_distributed_generation_fuel_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_distributed_generation_misc', - sa.Column('backup_capacity_mw', sa.Float(), nullable=True), - sa.Column('distributed_generation_owned_capacity_mw', sa.Float(), nullable=True), - sa.Column('estimated_or_actual_capacity_data', sa.Enum('estimated', 'actual'), nullable=True), - sa.Column('generators_num_less_1_mw', sa.Float(), nullable=True), - sa.Column('generators_number', sa.Float(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('total_capacity_less_1_mw', sa.Float(), nullable=True), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_distributed_generation_misc_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_distributed_generation_tech', - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('estimated_or_actual_tech_data', sa.Enum('estimated', 'actual'), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('tech_class', sa.Enum('backup', 'chp_cogen', 'combustion_turbine', 'fuel_cell', 'hydro', 'internal_combustion', 'other', 'pv', 'steam', 'storage_pv', 'all_storage', 'total', 'virtual_pv', 'wind'), nullable=True), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_distributed_generation_tech_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_distribution_systems', - sa.Column('circuits_with_voltage_optimization', sa.Integer(), nullable=True), - sa.Column('distribution_circuits', sa.Integer(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_distribution_systems_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_dynamic_pricing', - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('critical_peak_pricing', sa.Boolean(), nullable=True), - sa.Column('critical_peak_rebate', sa.Boolean(), nullable=True), - sa.Column('customer_class', sa.Enum('commercial', 'industrial', 'direct_connection', 'other', 'residential', 'total', 'transportation'), nullable=True, comment='High level categorization of customer type.'), - sa.Column('customers', sa.Float(), nullable=True, comment='Number of customers.'), - sa.Column('real_time_pricing', sa.Boolean(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('time_of_use_pricing', sa.Boolean(), nullable=True), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('variable_peak_pricing', sa.Boolean(), nullable=True), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_dynamic_pricing_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_energy_efficiency', - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('customer_class', sa.Enum('commercial', 'industrial', 'direct_connection', 'other', 'residential', 'total', 'transportation'), nullable=True, comment='High level categorization of customer type.'), - sa.Column('customer_incentives_incremental_cost', sa.Float(), nullable=True), - sa.Column('customer_incentives_incremental_life_cycle_cost', sa.Float(), nullable=True), - sa.Column('customer_other_costs_incremental_life_cycle_cost', sa.Float(), nullable=True), - sa.Column('incremental_energy_savings_mwh', sa.Float(), nullable=True), - sa.Column('incremental_life_cycle_energy_savings_mwh', sa.Float(), nullable=True), - sa.Column('incremental_life_cycle_peak_reduction_mwh', sa.Float(), nullable=True), - sa.Column('incremental_peak_reduction_mw', sa.Float(), nullable=True), - sa.Column('other_costs_incremental_cost', sa.Float(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('weighted_average_life_years', sa.Float(), nullable=True), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_energy_efficiency_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_green_pricing', - sa.Column('customer_class', sa.Enum('commercial', 'industrial', 'direct_connection', 'other', 'residential', 'total', 'transportation'), nullable=True, comment='High level categorization of customer type.'), - sa.Column('customers', sa.Float(), nullable=True, comment='Number of customers.'), - sa.Column('green_pricing_revenue', sa.Float(), nullable=True), - sa.Column('rec_revenue', sa.Float(), nullable=True), - sa.Column('rec_sales_mwh', sa.Float(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('sales_mwh', sa.Float(), nullable=True, comment='Quantity of electricity sold in MWh.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_green_pricing_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_mergers', - sa.Column('entity_type', sa.Text(), nullable=True, comment='Entity type of principal owner.'), - sa.Column('merge_address', sa.Text(), nullable=True), - sa.Column('merge_city', sa.Text(), nullable=True), - sa.Column('merge_company', sa.Text(), nullable=True), - sa.Column('merge_date', sa.Date(), nullable=True), - sa.Column('merge_state', sa.Text(), nullable=True, comment='Two letter US state abbreviations and three letter ISO-3166-1 country codes for international mines.'), - sa.Column('new_parent', sa.Text(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('zip_code', sa.Text(), nullable=True, comment='Five digit US Zip Code.'), - sa.Column('zip_code_4', sa.Text(), nullable=True, comment='Four digit US Zip Code suffix.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_mergers_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_net_metering_customer_fuel_class', - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('customer_class', sa.Enum('commercial', 'industrial', 'direct_connection', 'other', 'residential', 'total', 'transportation'), nullable=True, comment='High level categorization of customer type.'), - sa.Column('customers', sa.Float(), nullable=True, comment='Number of customers.'), - sa.Column('energy_displaced_mwh', sa.Float(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('sold_to_utility_mwh', sa.Float(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('tech_class', sa.Enum('backup', 'chp_cogen', 'combustion_turbine', 'fuel_cell', 'hydro', 'internal_combustion', 'other', 'pv', 'steam', 'storage_pv', 'all_storage', 'total', 'virtual_pv', 'wind'), nullable=True), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_net_metering_customer_fuel_class_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_net_metering_misc', - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('pv_current_flow_type', sa.Enum('AC', 'DC'), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_net_metering_misc_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_non_net_metering_customer_fuel_class', - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('customer_class', sa.Enum('commercial', 'industrial', 'direct_connection', 'other', 'residential', 'total', 'transportation'), nullable=True, comment='High level categorization of customer type.'), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('tech_class', sa.Enum('backup', 'chp_cogen', 'combustion_turbine', 'fuel_cell', 'hydro', 'internal_combustion', 'other', 'pv', 'steam', 'storage_pv', 'all_storage', 'total', 'virtual_pv', 'wind'), nullable=True), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_non_net_metering_customer_fuel_class_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_non_net_metering_misc', - sa.Column('backup_capacity_mw', sa.Float(), nullable=True), - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('generators_number', sa.Float(), nullable=True), - sa.Column('pv_current_flow_type', sa.Enum('AC', 'DC'), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_owned_capacity_mw', sa.Float(), nullable=True), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_non_net_metering_misc_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_operational_data_misc', - sa.Column('consumed_by_facility_mwh', sa.Float(), nullable=True), - sa.Column('consumed_by_respondent_without_charge_mwh', sa.Float(), nullable=True), - sa.Column('data_observed', sa.Boolean(), nullable=True, comment='Is the value observed (True) or imputed (False).'), - sa.Column('entity_type', sa.Text(), nullable=True, comment='Entity type of principal owner.'), - sa.Column('exchange_energy_delivered_mwh', sa.Float(), nullable=True), - sa.Column('exchange_energy_received_mwh', sa.Float(), nullable=True), - sa.Column('furnished_without_charge_mwh', sa.Float(), nullable=True), - sa.Column('nerc_region', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True, comment='NERC region in which the plant is located'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('net_power_exchanged_mwh', sa.Float(), nullable=True), - sa.Column('net_wheeled_power_mwh', sa.Float(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('retail_sales_mwh', sa.Float(), nullable=True), - sa.Column('sales_for_resale_mwh', sa.Float(), nullable=True), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('summer_peak_demand_mw', sa.Float(), nullable=True), - sa.Column('total_disposition_mwh', sa.Float(), nullable=True), - sa.Column('total_energy_losses_mwh', sa.Float(), nullable=True), - sa.Column('total_sources_mwh', sa.Float(), nullable=True), - sa.Column('transmission_by_other_losses_mwh', sa.Float(), nullable=True), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('wheeled_power_delivered_mwh', sa.Float(), nullable=True), - sa.Column('wheeled_power_received_mwh', sa.Float(), nullable=True), - sa.Column('wholesale_power_purchases_mwh', sa.Float(), nullable=True), - sa.Column('winter_peak_demand_mw', sa.Float(), nullable=True), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_operational_data_misc_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_operational_data_revenue', - sa.Column('nerc_region', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True, comment='NERC region in which the plant is located'), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('revenue', sa.Float(), nullable=True), - sa.Column('revenue_class', sa.Enum('credits_or_adjustments', 'delivery_customers', 'other', 'retail_sales', 'sales_for_resale', 'total', 'transmission', 'unbundled'), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_operational_data_revenue_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_reliability', - sa.Column('caidi_w_major_event_days_minus_loss_of_service_minutes', sa.Float(), nullable=True), - sa.Column('caidi_w_major_event_days_minutes', sa.Float(), nullable=True), - sa.Column('caidi_wo_major_event_days_minutes', sa.Float(), nullable=True), - sa.Column('customers', sa.Float(), nullable=True, comment='Number of customers.'), - sa.Column('entity_type', sa.Text(), nullable=True, comment='Entity type of principal owner.'), - sa.Column('highest_distribution_voltage_kv', sa.Float(), nullable=True), - sa.Column('inactive_accounts_included', sa.Boolean(), nullable=True), - sa.Column('momentary_interruption_definition', sa.Text(), nullable=True), - sa.Column('outages_recorded_automatically', sa.Boolean(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('saidi_w_major_event_days_minus_loss_of_service_minutes', sa.Float(), nullable=True), - sa.Column('saidi_w_major_event_days_minutes', sa.Float(), nullable=True), - sa.Column('saidi_wo_major_event_days_minutes', sa.Float(), nullable=True), - sa.Column('saifi_w_major_event_days_customers', sa.Float(), nullable=True), - sa.Column('saifi_w_major_event_days_minus_loss_of_service_customers', sa.Float(), nullable=True), - sa.Column('saifi_wo_major_event_days_customers', sa.Float(), nullable=True), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('standard', sa.Enum('ieee_standard', 'other_standard'), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_reliability_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['momentary_interruption_definition'], ['core_eia__codes_momentary_interruptions.code'], name=op.f('fk_core_eia861__yearly_reliability_momentary_interruption_definition_core_eia__codes_momentary_interruptions')) - ) - op.create_table('core_eia861__yearly_sales', - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('state', sa.Text(), nullable=False, comment='Two letter US state abbreviation.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=False, comment='EIA short code identifying a balancing authority.'), - sa.Column('customer_class', sa.Enum('commercial', 'industrial', 'direct_connection', 'other', 'residential', 'total', 'transportation'), nullable=False, comment='High level categorization of customer type.'), - sa.Column('business_model', sa.Enum('retail', 'energy_services'), nullable=False), - sa.Column('data_observed', sa.Boolean(), nullable=True, comment='Is the value observed (True) or imputed (False).'), - sa.Column('entity_type', sa.Text(), nullable=True, comment='Entity type of principal owner.'), - sa.Column('service_type', sa.Enum('bundled', 'energy', 'delivery'), nullable=False), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('customers', sa.Float(), nullable=True, comment='Number of customers.'), - sa.Column('sales_mwh', sa.Float(), nullable=True, comment='Quantity of electricity sold in MWh.'), - sa.Column('sales_revenue', sa.Float(), nullable=True, comment='Revenue from electricity sold.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_sales_data_maturity_core_pudl__codes_data_maturities')), - sa.PrimaryKeyConstraint('utility_id_eia', 'state', 'report_date', 'balancing_authority_code_eia', 'customer_class', 'business_model', 'service_type', name=op.f('pk_core_eia861__yearly_sales')) - ) - op.create_table('core_eia861__yearly_service_territory', - sa.Column('county', sa.Text(), nullable=True, comment='County name.'), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('state_id_fips', sa.Text(), nullable=True, comment='Two digit state FIPS code.'), - sa.Column('county_id_fips', sa.Text(), nullable=False, comment='County ID from the Federal Information Processing Standard Publication 6-4.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_service_territory_data_maturity_core_pudl__codes_data_maturities')), - sa.PrimaryKeyConstraint('report_date', 'utility_id_eia', 'county_id_fips', name=op.f('pk_core_eia861__yearly_service_territory')) - ) - op.create_table('core_eia861__yearly_utility_data_misc', - sa.Column('alternative_fuel_vehicle_2_activity', sa.Boolean(), nullable=True), - sa.Column('alternative_fuel_vehicle_activity', sa.Boolean(), nullable=True), - sa.Column('bundled_activity', sa.Boolean(), nullable=True), - sa.Column('buying_distribution_activity', sa.Boolean(), nullable=True), - sa.Column('buying_transmission_activity', sa.Boolean(), nullable=True), - sa.Column('distribution_activity', sa.Boolean(), nullable=True), - sa.Column('entity_type', sa.Text(), nullable=True, comment='Entity type of principal owner.'), - sa.Column('generation_activity', sa.Boolean(), nullable=True), - sa.Column('nerc_region', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True, comment='NERC region in which the plant is located'), - sa.Column('operates_generating_plant', sa.Boolean(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('retail_marketing_activity', sa.Boolean(), nullable=True), - sa.Column('short_form', sa.Boolean(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('transmission_activity', sa.Boolean(), nullable=True), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('wholesale_marketing_activity', sa.Boolean(), nullable=True), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_utility_data_misc_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_utility_data_nerc', - sa.Column('nerc_region', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True, comment='NERC region in which the plant is located'), - sa.Column('nerc_regions_of_operation', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_utility_data_nerc_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia861__yearly_utility_data_rto', - sa.Column('nerc_region', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True, comment='NERC region in which the plant is located'), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('rtos_of_operation', sa.Enum('caiso', 'ercot', 'isone', 'miso', 'nyiso', 'other', 'pjm', 'spp'), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia861__yearly_utility_data_rto_data_maturity_core_pudl__codes_data_maturities')) - ) - op.create_table('core_eia923__entity_coalmine', - sa.Column('mine_id_pudl', sa.Integer(), nullable=False, comment='Dynamically assigned PUDL mine identifier.'), - sa.Column('mine_name', sa.Text(), nullable=True, comment='Coal mine name.'), - sa.Column('mine_type_code', sa.Text(), nullable=True, comment='Type of coal mine.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('county_id_fips', sa.Text(), nullable=True, comment='County ID from the Federal Information Processing Standard Publication 6-4.'), - sa.Column('mine_id_msha', sa.Integer(), nullable=True, comment='MSHA issued mine identifier.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia923__entity_coalmine_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['mine_type_code'], ['core_eia__codes_coalmine_types.code'], name=op.f('fk_core_eia923__entity_coalmine_mine_type_code_core_eia__codes_coalmine_types')), - sa.PrimaryKeyConstraint('mine_id_pudl', name=op.f('pk_core_eia923__entity_coalmine')) - ) - op.create_table('core_eia923__monthly_generation_fuel', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_type_code_aer', sa.Text(), nullable=True, comment='A partial aggregation of the reported fuel type codes into larger categories used by EIA in, for example, the Annual Energy Review (AER). Two or three letter alphanumeric.'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_units', sa.Float(), nullable=True, comment='Consumption for electric generation of the fuel type in physical unit.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia923__monthly_generation_fuel_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia923__monthly_generation_fuel_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['fuel_type_code_aer'], ['core_eia__codes_fuel_types_aer.code'], name=op.f('fk_core_eia923__monthly_generation_fuel_fuel_type_code_aer_core_eia__codes_fuel_types_aer')), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_core_eia923__monthly_generation_fuel_plant_id_eia_core_eia__entity_plants')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_core_eia923__monthly_generation_fuel_prime_mover_code_core_eia__codes_prime_movers')), - sa.PrimaryKeyConstraint('plant_id_eia', 'report_date', 'prime_mover_code', 'energy_source_code', name=op.f('pk_core_eia923__monthly_generation_fuel')) - ) - op.create_table('core_eia923__monthly_generation_fuel_nuclear', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('nuclear_unit_id', sa.Text(), nullable=False, comment='For nuclear plants only, the unit number .One digit numeric. Nuclear plants are the only type of plants for which data are shown explicitly at the generating unit level.'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_type_code_aer', sa.Text(), nullable=True, comment='A partial aggregation of the reported fuel type codes into larger categories used by EIA in, for example, the Annual Energy Review (AER). Two or three letter alphanumeric.'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_units', sa.Float(), nullable=True, comment='Consumption for electric generation of the fuel type in physical unit.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia923__monthly_generation_fuel_nuclear_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia923__monthly_generation_fuel_nuclear_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['fuel_type_code_aer'], ['core_eia__codes_fuel_types_aer.code'], name=op.f('fk_core_eia923__monthly_generation_fuel_nuclear_fuel_type_code_aer_core_eia__codes_fuel_types_aer')), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_core_eia923__monthly_generation_fuel_nuclear_plant_id_eia_core_eia__entity_plants')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_core_eia923__monthly_generation_fuel_nuclear_prime_mover_code_core_eia__codes_prime_movers')), - sa.PrimaryKeyConstraint('plant_id_eia', 'report_date', 'nuclear_unit_id', 'energy_source_code', 'prime_mover_code', name=op.f('pk_core_eia923__monthly_generation_fuel_nuclear')) - ) - op.create_table('core_eia__entity_boilers', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('boiler_manufacturer', sa.Text(), nullable=True, comment='Name of boiler manufacturer.'), - sa.Column('boiler_manufacturer_code', sa.Text(), nullable=True, comment='EIA short code for boiler manufacturer.'), - sa.ForeignKeyConstraint(['boiler_manufacturer_code'], ['core_eia__codes_environmental_equipment_manufacturers.code'], name=op.f('fk_core_eia__entity_boilers_boiler_manufacturer_code_core_eia__codes_environmental_equipment_manufacturers')), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_core_eia__entity_boilers_plant_id_eia_core_eia__entity_plants')), - sa.PrimaryKeyConstraint('plant_id_eia', 'boiler_id', name=op.f('pk_core_eia__entity_boilers')) - ) - op.create_table('core_eia__entity_generators', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('duct_burners', sa.Boolean(), nullable=True, comment='Indicates whether the unit has duct-burners for supplementary firing of the turbine exhaust gas'), - sa.Column('generator_operating_date', sa.Date(), nullable=True, comment='Date the generator began commercial operation.'), - sa.Column('topping_bottoming_code', sa.Text(), nullable=True, comment='If the generator is associated with a combined heat and power system, indicates whether the generator is part of a topping cycle or a bottoming cycle'), - sa.Column('solid_fuel_gasification', sa.Boolean(), nullable=True, comment='Indicates whether the generator is part of a solid fuel gasification system'), - sa.Column('pulverized_coal_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses pulverized coal technology'), - sa.Column('fluidized_bed_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses fluidized bed technology'), - sa.Column('subcritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses subcritical technology'), - sa.Column('supercritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses supercritical technology'), - sa.Column('ultrasupercritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses ultra-supercritical technology'), - sa.Column('stoker_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses stoker technology'), - sa.Column('other_combustion_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses other combustion technologies'), - sa.Column('bypass_heat_recovery', sa.Boolean(), nullable=True, comment='Can this generator operate while bypassing the heat recovery steam generator?'), - sa.Column('rto_iso_lmp_node_id', sa.Text(), nullable=True, comment='The designation used to identify the price node in RTO/ISO Locational Marginal Price reports'), - sa.Column('rto_iso_location_wholesale_reporting_id', sa.Text(), nullable=True, comment='The designation used to report ths specific location of the wholesale sales transactions to FERC for the Electric Quarterly Report'), - sa.Column('associated_combined_heat_power', sa.Boolean(), nullable=True, comment='Indicates whether the generator is associated with a combined heat and power system'), - sa.Column('original_planned_generator_operating_date', sa.Date(), nullable=True, comment='The date the generator was originally scheduled to be operational'), - sa.Column('operating_switch', sa.Text(), nullable=True, comment='Indicates whether the fuel switching generator can switch when operating'), - sa.Column('previously_canceled', sa.Boolean(), nullable=True, comment='Indicates whether the generator was previously reported as indefinitely postponed or canceled'), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_core_eia__entity_generators_plant_id_eia_core_eia__entity_plants')), - sa.PrimaryKeyConstraint('plant_id_eia', 'generator_id', name=op.f('pk_core_eia__entity_generators')) - ) - op.create_table('core_ferc714__hourly_demand_pa', - sa.Column('respondent_id_ferc714', sa.Integer(), nullable=False), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('utc_datetime', sqlite.DATETIME(), nullable=False), - sa.Column('timezone', sa.Enum('America/New_York', 'America/Chicago', 'America/Denver', 'America/Los_Angeles', 'America/Anchorage', 'Pacific/Honolulu'), nullable=True, comment='IANA timezone name'), - sa.Column('demand_mwh', sa.Float(), nullable=True), - sa.ForeignKeyConstraint(['respondent_id_ferc714'], ['core_ferc714__respondent_id.respondent_id_ferc714'], name=op.f('fk_core_ferc714__hourly_demand_pa_respondent_id_ferc714_core_ferc714__respondent_id')), - sa.PrimaryKeyConstraint('respondent_id_ferc714', 'utc_datetime', name=op.f('pk_core_ferc714__hourly_demand_pa')) - ) - op.create_table('core_pudl__assn_plants_eia', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_core_pudl__assn_plants_eia_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', name=op.f('pk_core_pudl__assn_plants_eia')) - ) - op.create_table('core_pudl__assn_utilities_eia', - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_core_pudl__assn_utilities_eia_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_eia', name=op.f('pk_core_pudl__assn_utilities_eia')) - ) - op.create_table('core_pudl__assn_utilities_ferc1', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_core_pudl__assn_utilities_ferc1_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', name=op.f('pk_core_pudl__assn_utilities_ferc1')) - ) - op.create_table('core_pudl__assn_utilities_plants', - sa.Column('utility_id_pudl', sa.Integer(), nullable=False, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=False, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_core_pudl__assn_utilities_plants_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_core_pudl__assn_utilities_plants_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_pudl', 'plant_id_pudl', name=op.f('pk_core_pudl__assn_utilities_plants')) - ) - op.create_table('out_eia860__yearly_emissions_control_equipment', - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('emission_control_id_pudl', sa.Float(), nullable=False, comment='A PUDL-generated ID used to distinguish emission control units in the same report year and plant id. This ID should not be used to track units over time or between plants.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.Column('emission_control_equipment_type_code', sa.Text(), nullable=True, comment='Short code indicating the type of emission control equipment installed.'), - sa.Column('operational_status_code', sa.Text(), nullable=True, comment='The operating status of the asset.'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.Column('mercury_control_id_eia', sa.Text(), nullable=True, comment='Mercury control identification number. This ID is not a unique identifier.'), - sa.Column('nox_control_id_eia', sa.Text(), nullable=True, comment='Nitrogen oxide control identification number. This ID is not a unique identifier.'), - sa.Column('particulate_control_id_eia', sa.Text(), nullable=True, comment='Particulate matter control identification number. This ID is not a unique identifier.'), - sa.Column('so2_control_id_eia', sa.Text(), nullable=True, comment='Sulfur dioxide control identification number. This ID is not a unique identifier.'), - sa.Column('acid_gas_control', sa.Boolean(), nullable=True, comment='Indicates whether the emissions control equipment controls acid (HCl) gas.'), - sa.Column('emission_control_equipment_cost', sa.Float(), nullable=True, comment='The total cost to install a piece of emission control equipment.'), - sa.Column('emission_control_operating_date', sa.Date(), nullable=True, comment='The date a piece of emissions control equipment began operating. Derived from month and year columns in the raw data.'), - sa.Column('emission_control_retirement_date', sa.Date(), nullable=True, comment='The expected or actual retirement date for a piece of emissions control equipment. Derived from month and year columns in the raw data.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_out_eia860__yearly_emissions_control_equipment_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['emission_control_equipment_type_code'], ['core_eia__codes_emission_control_equipment_types.code'], name=op.f('fk_out_eia860__yearly_emissions_control_equipment_emission_control_equipment_type_code_core_eia__codes_emission_control_equipment_types')), - sa.ForeignKeyConstraint(['operational_status_code'], ['core_eia__codes_operational_status.code'], name=op.f('fk_out_eia860__yearly_emissions_control_equipment_operational_status_code_core_eia__codes_operational_status')), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_out_eia860__yearly_emissions_control_equipment_plant_id_eia_core_eia__entity_plants')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia860__yearly_emissions_control_equipment_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia860__yearly_emissions_control_equipment_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia860__yearly_emissions_control_equipment_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('report_year', 'plant_id_eia', 'emission_control_id_pudl', name=op.f('pk_out_eia860__yearly_emissions_control_equipment')) - ) - op.create_table('out_eia923__fuel_receipts_costs', - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('contract_type_code', sa.Enum('S', 'C', 'NC', 'T'), nullable=True, comment='Purchase type under which receipts occurred in the reporting month. C: Contract, NC: New Contract, S: Spot Purchase, T: Tolling Agreement.'), - sa.Column('contract_expiration_date', sa.Date(), nullable=True, comment='Date contract expires.Format: MMYY.'), - sa.Column('energy_source_code', sa.Text(), nullable=True, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_group_code', sa.Enum('petroleum', 'other_gas', 'petroleum_coke', 'natural_gas', 'coal'), nullable=True, comment='Fuel groups used in the Electric Power Monthly'), - sa.Column('supplier_name', sa.Text(), nullable=True, comment='Company that sold the fuel to the plant or, in the case of Natural Gas, pipline owner.'), - sa.Column('fuel_received_units', sa.Float(), nullable=True, comment='Quanity of fuel received in tons, barrel, or Mcf.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('bulk_agg_fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Fuel cost per mmbtu reported in the EIA bulk electricity data. This is an aggregate average fuel price for a whole state, region, month, sector, etc. Used to fill in missing fuel prices.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('sulfur_content_pct', sa.Float(), nullable=True, comment='Sulfur content percentage by weight to the nearest 0.01 percent.'), - sa.Column('ash_content_pct', sa.Float(), nullable=True, comment='Ash content percentage by weight to the nearest 0.1 percent.'), - sa.Column('mercury_content_ppm', sa.Float(), nullable=True, comment='Mercury content in parts per million (ppm) to the nearest 0.001 ppm.'), - sa.Column('primary_transportation_mode_code', sa.Text(), nullable=True, comment='Transportation mode for the longest distance transported.'), - sa.Column('secondary_transportation_mode_code', sa.Text(), nullable=True, comment='Transportation mode for the second longest distance transported.'), - sa.Column('natural_gas_transport_code', sa.Enum('firm', 'interruptible'), nullable=True, comment='Contract type for natural gas transportation service.'), - sa.Column('natural_gas_delivery_contract_type_code', sa.Enum('firm', 'interruptible'), nullable=True, comment='Contract type for natrual gas delivery service:'), - sa.Column('moisture_content_pct', sa.Float(), nullable=True), - sa.Column('chlorine_content_ppm', sa.Float(), nullable=True), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.Column('mine_id_msha', sa.Integer(), nullable=True, comment='MSHA issued mine identifier.'), - sa.Column('mine_name', sa.Text(), nullable=True, comment='Coal mine name.'), - sa.Column('mine_state', sa.Text(), nullable=True, comment='State where the coal mine is located. Two letter abbreviation.'), - sa.Column('coalmine_county_id_fips', sa.Text(), nullable=True, comment='County ID from the Federal Information Processing Standard Publication 6-4. This is the county where the coal mine is located.'), - sa.Column('mine_type_code', sa.Text(), nullable=True, comment='Type of coal mine.'), - sa.ForeignKeyConstraint(['contract_type_code'], ['core_eia__codes_contract_types.code'], name=op.f('fk_out_eia923__fuel_receipts_costs_contract_type_code_core_eia__codes_contract_types')), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_out_eia923__fuel_receipts_costs_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia923__fuel_receipts_costs_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['mine_type_code'], ['core_eia__codes_coalmine_types.code'], name=op.f('fk_out_eia923__fuel_receipts_costs_mine_type_code_core_eia__codes_coalmine_types')), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_out_eia923__fuel_receipts_costs_plant_id_eia_core_eia__entity_plants')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__fuel_receipts_costs_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['primary_transportation_mode_code'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia923__fuel_receipts_costs_primary_transportation_mode_code_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['secondary_transportation_mode_code'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia923__fuel_receipts_costs_secondary_transportation_mode_code_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia923__fuel_receipts_costs_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__fuel_receipts_costs_utility_id_pudl_core_pudl__entity_utilities_pudl')) - ) - op.create_table('out_eia923__generation_fuel_combined', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_type_code_aer', sa.Text(), nullable=True, comment='A partial aggregation of the reported fuel type codes into larger categories used by EIA in, for example, the Annual Energy Review (AER). Two or three letter alphanumeric.'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_units', sa.Float(), nullable=True, comment='Consumption for electric generation of the fuel type in physical unit.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_out_eia923__generation_fuel_combined_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia923__generation_fuel_combined_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['fuel_type_code_aer'], ['core_eia__codes_fuel_types_aer.code'], name=op.f('fk_out_eia923__generation_fuel_combined_fuel_type_code_aer_core_eia__codes_fuel_types_aer')), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_out_eia923__generation_fuel_combined_plant_id_eia_core_eia__entity_plants')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__generation_fuel_combined_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia923__generation_fuel_combined_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia923__generation_fuel_combined_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__generation_fuel_combined_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'report_date', 'prime_mover_code', 'energy_source_code', name=op.f('pk_out_eia923__generation_fuel_combined')) - ) - op.create_table('out_eia923__monthly_fuel_receipts_costs', - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_received_units', sa.Float(), nullable=True, comment='Quanity of fuel received in tons, barrel, or Mcf.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('sulfur_content_pct', sa.Float(), nullable=True, comment='Sulfur content percentage by weight to the nearest 0.01 percent.'), - sa.Column('ash_content_pct', sa.Float(), nullable=True, comment='Ash content percentage by weight to the nearest 0.1 percent.'), - sa.Column('mercury_content_ppm', sa.Float(), nullable=True, comment='Mercury content in parts per million (ppm) to the nearest 0.001 ppm.'), - sa.Column('moisture_content_pct', sa.Float(), nullable=True), - sa.Column('chlorine_content_ppm', sa.Float(), nullable=True), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_out_eia923__monthly_fuel_receipts_costs_plant_id_eia_core_eia__entity_plants')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__monthly_fuel_receipts_costs_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia923__monthly_fuel_receipts_costs_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__monthly_fuel_receipts_costs_utility_id_pudl_core_pudl__entity_utilities_pudl')) - ) - op.create_table('out_eia923__monthly_generation_fuel_combined', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_units', sa.Float(), nullable=True, comment='Consumption for electric generation of the fuel type in physical unit.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia923__monthly_generation_fuel_combined_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_out_eia923__monthly_generation_fuel_combined_plant_id_eia_core_eia__entity_plants')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__monthly_generation_fuel_combined_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia923__monthly_generation_fuel_combined_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia923__monthly_generation_fuel_combined_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__monthly_generation_fuel_combined_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'report_date', 'prime_mover_code', 'energy_source_code', name=op.f('pk_out_eia923__monthly_generation_fuel_combined')) - ) - op.create_table('out_ferc714__respondents_with_fips', - sa.Column('eia_code', sa.Integer(), nullable=True), - sa.Column('respondent_type', sa.Enum('utility', 'balancing_authority'), nullable=True), - sa.Column('respondent_id_ferc714', sa.Integer(), nullable=True), - sa.Column('respondent_name_ferc714', sa.Text(), nullable=True), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('balancing_authority_id_eia', sa.Integer(), nullable=True, comment='EIA balancing authority ID. This is often (but not always!) the same as the utility ID associated with the same legal entity.'), - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('balancing_authority_name_eia', sa.Text(), nullable=True, comment='Name of the balancing authority.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('county', sa.Text(), nullable=True, comment='County name.'), - sa.Column('state_id_fips', sa.Text(), nullable=True, comment='Two digit state FIPS code.'), - sa.Column('county_id_fips', sa.Text(), nullable=True, comment='County ID from the Federal Information Processing Standard Publication 6-4.'), - sa.ForeignKeyConstraint(['respondent_id_ferc714'], ['core_ferc714__respondent_id.respondent_id_ferc714'], name=op.f('fk_out_ferc714__respondents_with_fips_respondent_id_ferc714_core_ferc714__respondent_id')) - ) - op.create_table('out_ferc714__summarized_demand', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('respondent_id_ferc714', sa.Integer(), nullable=False), - sa.Column('demand_annual_mwh', sa.Float(), nullable=True), - sa.Column('population', sa.Float(), nullable=True, comment='County population, sourced from Census DP1 data.'), - sa.Column('area_km2', sa.Float(), nullable=True, comment='County area in km2.'), - sa.Column('population_density_km2', sa.Float(), nullable=True, comment='Average population per sq. km area of a service territory.'), - sa.Column('demand_annual_per_capita_mwh', sa.Float(), nullable=True, comment='Per-capita annual demand, averaged using Census county-level population estimates.'), - sa.Column('demand_density_mwh_km2', sa.Float(), nullable=True, comment='Annual demand per km2 of a given service territory.'), - sa.Column('eia_code', sa.Integer(), nullable=True), - sa.Column('respondent_type', sa.Enum('utility', 'balancing_authority'), nullable=True), - sa.Column('respondent_name_ferc714', sa.Text(), nullable=True), - sa.Column('balancing_authority_id_eia', sa.Integer(), nullable=True, comment='EIA balancing authority ID. This is often (but not always!) the same as the utility ID associated with the same legal entity.'), - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('balancing_authority_name_eia', sa.Text(), nullable=True, comment='Name of the balancing authority.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.ForeignKeyConstraint(['respondent_id_ferc714'], ['core_ferc714__respondent_id.respondent_id_ferc714'], name=op.f('fk_out_ferc714__summarized_demand_respondent_id_ferc714_core_ferc714__respondent_id')), - sa.PrimaryKeyConstraint('respondent_id_ferc714', 'report_date', name=op.f('pk_out_ferc714__summarized_demand')) - ) - op.create_table('_out_eia__monthly_capacity_factor_by_generator', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk__out_eia__monthly_capacity_factor_by_generator_plant_id_eia_core_eia__entity_generators')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk__out_eia__monthly_capacity_factor_by_generator')) - ) - op.create_table('_out_eia__monthly_derived_generator_attributes', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('total_mmbtu', sa.Float(), nullable=True, comment='Total annual heat content of fuel consumed by a plant part record in the plant parts list.'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk__out_eia__monthly_derived_generator_attributes_plant_id_eia_core_eia__entity_generators')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk__out_eia__monthly_derived_generator_attributes')) - ) - op.create_table('_out_eia__monthly_fuel_cost_by_generator', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('fuel_type_count', sa.Integer(), nullable=True, comment='A count of how many different simple energy sources there are associated with a generator.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk__out_eia__monthly_fuel_cost_by_generator_plant_id_eia_core_eia__entity_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk__out_eia__monthly_fuel_cost_by_generator_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk__out_eia__monthly_fuel_cost_by_generator_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk__out_eia__monthly_fuel_cost_by_generator_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk__out_eia__monthly_fuel_cost_by_generator')) - ) - op.create_table('_out_eia__monthly_heat_rate_by_generator', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_type_count', sa.Integer(), nullable=True, comment='A count of how many different simple energy sources there are associated with a generator.'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk__out_eia__monthly_heat_rate_by_generator_plant_id_eia_core_eia__entity_generators')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk__out_eia__monthly_heat_rate_by_generator_prime_mover_code_core_eia__codes_prime_movers')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk__out_eia__monthly_heat_rate_by_generator')) - ) - op.create_table('core_eia860__scd_plants', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('ash_impoundment', sa.Boolean(), nullable=True, comment='Is there an ash impoundment (e.g. pond, reservoir) at the plant?'), - sa.Column('ash_impoundment_lined', sa.Boolean(), nullable=True, comment='If there is an ash impoundment at the plant, is the impoundment lined?'), - sa.Column('ash_impoundment_status', sa.Text(), nullable=True, comment='If there is an ash impoundment at the plant, the ash impoundment status as of December 31 of the reporting year.'), - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('balancing_authority_name_eia', sa.Text(), nullable=True, comment='Name of the balancing authority.'), - sa.Column('datum', sa.Text(), nullable=True, comment='Geodetic coordinate system identifier (e.g. NAD27, NAD83, or WGS84).'), - sa.Column('energy_storage', sa.Boolean(), nullable=True, comment='Indicates if the facility has energy storage capabilities.'), - sa.Column('ferc_cogen_docket_no', sa.Text(), nullable=True, comment='The docket number relating to the FERC cogenerator status. See FERC Form 556.'), - sa.Column('ferc_cogen_status', sa.Boolean(), nullable=True, comment='Indicates whether the plant has FERC qualifying facility cogenerator status. See FERC Form 556.'), - sa.Column('ferc_exempt_wholesale_generator_docket_no', sa.Text(), nullable=True, comment='The docket number relating to the FERC qualifying facility exempt wholesale generator status.'), - sa.Column('ferc_exempt_wholesale_generator', sa.Boolean(), nullable=True, comment='Indicates whether the plant has FERC qualifying facility exempt wholesale generator status'), - sa.Column('ferc_small_power_producer_docket_no', sa.Text(), nullable=True, comment='The docket number relating to the FERC qualifying facility small power producer status. See FERC Form 556.'), - sa.Column('ferc_small_power_producer', sa.Boolean(), nullable=True, comment='Indicates whether the plant has FERC qualifying facility small power producer status. See FERC Form 556.'), - sa.Column('ferc_qualifying_facility_docket_no', sa.Text(), nullable=True, comment='The docket number relating to the FERC qualifying facility cogenerator status. See FERC Form 556.'), - sa.Column('grid_voltage_1_kv', sa.Float(), nullable=True, comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities"), - sa.Column('grid_voltage_2_kv', sa.Float(), nullable=True, comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities"), - sa.Column('grid_voltage_3_kv', sa.Float(), nullable=True, comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities"), - sa.Column('iso_rto_code', sa.Text(), nullable=True, comment="The code of the plant's ISO or RTO. NA if not reported in that year."), - sa.Column('liquefied_natural_gas_storage', sa.Boolean(), nullable=True, comment='Indicates if the facility have the capability to store the natural gas in the form of liquefied natural gas.'), - sa.Column('natural_gas_local_distribution_company', sa.Text(), nullable=True, comment='Names of Local Distribution Company (LDC), connected to natural gas burning power plants.'), - sa.Column('natural_gas_storage', sa.Boolean(), nullable=True, comment='Indicates if the facility have on-site storage of natural gas.'), - sa.Column('natural_gas_pipeline_name_1', sa.Text(), nullable=True, comment='The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.'), - sa.Column('natural_gas_pipeline_name_2', sa.Text(), nullable=True, comment='The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.'), - sa.Column('natural_gas_pipeline_name_3', sa.Text(), nullable=True, comment='The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.'), - sa.Column('nerc_region', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True, comment='NERC region in which the plant is located'), - sa.Column('net_metering', sa.Boolean(), nullable=True, comment='Did this plant have a net metering agreement in effect during the reporting year? (Only displayed for facilities that report the sun or wind as an energy source). This field was only reported up until 2015'), - sa.Column('pipeline_notes', sa.Text(), nullable=True, comment='Additional owner or operator of natural gas pipeline.'), - sa.Column('primary_purpose_id_naics', sa.Integer(), nullable=True, comment='North American Industry Classification System (NAICS) code that best describes the primary purpose of the reporting plant'), - sa.Column('regulatory_status_code', sa.Text(), nullable=True, comment='Indicates whether the plant is regulated or non-regulated.'), - sa.Column('reporting_frequency_code', sa.Enum('A', 'AM', 'M'), nullable=True, comment='Code that specifies what time period data has to be reported (i.e. monthly data or annual totals) and how often the power plant reports this data to EIA. See reporting_frequencies_eia for more details.'), - sa.Column('sector_id_eia', sa.Integer(), nullable=True, comment='EIA assigned sector ID, corresponding to high level NAICS sector, designated by the primary purpose, regulatory status and plant-level combined heat and power status'), - sa.Column('sector_name_eia', sa.Text(), nullable=True, comment='EIA assigned sector name, corresponding to high level NAICS sector, designated by the primary purpose, regulatory status and plant-level combined heat and power status'), - sa.Column('service_area', sa.Text(), nullable=True, comment="Service area in which plant is located; for unregulated companies, it's the electric utility with which plant is interconnected"), - sa.Column('transmission_distribution_owner_id', sa.Integer(), nullable=True, comment='EIA-assigned code for owner of transmission/distribution system to which the plant is interconnected.'), - sa.Column('transmission_distribution_owner_name', sa.Text(), nullable=True, comment='Name of the owner of the transmission or distribution system to which the plant is interconnected.'), - sa.Column('transmission_distribution_owner_state', sa.Text(), nullable=True, comment='State location for owner of transmission/distribution system to which the plant is interconnected.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('water_source', sa.Text(), nullable=True, comment='Name of water source associated with the plant.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['balancing_authority_code_eia'], ['core_eia__codes_balancing_authorities.code'], name=op.f('fk_core_eia860__scd_plants_balancing_authority_code_eia_core_eia__codes_balancing_authorities')), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia860__scd_plants_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_core_eia860__scd_plants_plant_id_eia_core_eia__entity_plants')), - sa.ForeignKeyConstraint(['reporting_frequency_code'], ['core_eia__codes_reporting_frequencies.code'], name=op.f('fk_core_eia860__scd_plants_reporting_frequency_code_core_eia__codes_reporting_frequencies')), - sa.ForeignKeyConstraint(['sector_id_eia'], ['core_eia__codes_sector_consolidated.code'], name=op.f('fk_core_eia860__scd_plants_sector_id_eia_core_eia__codes_sector_consolidated')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_core_eia860__scd_plants_utility_id_eia_core_eia860__scd_utilities')), - sa.PrimaryKeyConstraint('plant_id_eia', 'report_date', name=op.f('pk_core_eia860__scd_plants')) - ) - op.create_table('core_eia923__monthly_boiler_fuel', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('sulfur_content_pct', sa.Float(), nullable=True, comment='Sulfur content percentage by weight to the nearest 0.01 percent.'), - sa.Column('ash_content_pct', sa.Float(), nullable=True, comment='Ash content percentage by weight to the nearest 0.1 percent.'), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia923__monthly_boiler_fuel_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id'], ['core_eia__entity_boilers.plant_id_eia', 'core_eia__entity_boilers.boiler_id'], name=op.f('fk_core_eia923__monthly_boiler_fuel_plant_id_eia_core_eia__entity_boilers')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_core_eia923__monthly_boiler_fuel_prime_mover_code_core_eia__codes_prime_movers')), - sa.PrimaryKeyConstraint('plant_id_eia', 'boiler_id', 'energy_source_code', 'prime_mover_code', 'report_date', name=op.f('pk_core_eia923__monthly_boiler_fuel')) - ) - op.create_table('core_eia923__monthly_fuel_receipts_costs', - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('contract_type_code', sa.Enum('S', 'C', 'NC', 'T'), nullable=True, comment='Purchase type under which receipts occurred in the reporting month. C: Contract, NC: New Contract, S: Spot Purchase, T: Tolling Agreement.'), - sa.Column('contract_expiration_date', sa.Date(), nullable=True, comment='Date contract expires.Format: MMYY.'), - sa.Column('energy_source_code', sa.Text(), nullable=True, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_group_code', sa.Enum('petroleum', 'other_gas', 'petroleum_coke', 'natural_gas', 'coal'), nullable=True, comment='Fuel groups used in the Electric Power Monthly'), - sa.Column('mine_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL mine identifier.'), - sa.Column('supplier_name', sa.Text(), nullable=True, comment='Company that sold the fuel to the plant or, in the case of Natural Gas, pipline owner.'), - sa.Column('fuel_received_units', sa.Float(), nullable=True, comment='Quanity of fuel received in tons, barrel, or Mcf.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('sulfur_content_pct', sa.Float(), nullable=True, comment='Sulfur content percentage by weight to the nearest 0.01 percent.'), - sa.Column('ash_content_pct', sa.Float(), nullable=True, comment='Ash content percentage by weight to the nearest 0.1 percent.'), - sa.Column('mercury_content_ppm', sa.Float(), nullable=True, comment='Mercury content in parts per million (ppm) to the nearest 0.001 ppm.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('primary_transportation_mode_code', sa.Text(), nullable=True, comment='Transportation mode for the longest distance transported.'), - sa.Column('secondary_transportation_mode_code', sa.Text(), nullable=True, comment='Transportation mode for the second longest distance transported.'), - sa.Column('natural_gas_transport_code', sa.Enum('firm', 'interruptible'), nullable=True, comment='Contract type for natural gas transportation service.'), - sa.Column('natural_gas_delivery_contract_type_code', sa.Enum('firm', 'interruptible'), nullable=True, comment='Contract type for natrual gas delivery service:'), - sa.Column('moisture_content_pct', sa.Float(), nullable=True), - sa.Column('chlorine_content_ppm', sa.Float(), nullable=True), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['contract_type_code'], ['core_eia__codes_contract_types.code'], name=op.f('fk_core_eia923__monthly_fuel_receipts_costs_contract_type_code_core_eia__codes_contract_types')), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia923__monthly_fuel_receipts_costs_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia923__monthly_fuel_receipts_costs_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['mine_id_pudl'], ['core_eia923__entity_coalmine.mine_id_pudl'], name=op.f('fk_core_eia923__monthly_fuel_receipts_costs_mine_id_pudl_core_eia923__entity_coalmine')), - sa.ForeignKeyConstraint(['plant_id_eia'], ['core_eia__entity_plants.plant_id_eia'], name=op.f('fk_core_eia923__monthly_fuel_receipts_costs_plant_id_eia_core_eia__entity_plants')), - sa.ForeignKeyConstraint(['primary_transportation_mode_code'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_core_eia923__monthly_fuel_receipts_costs_primary_transportation_mode_code_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['secondary_transportation_mode_code'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_core_eia923__monthly_fuel_receipts_costs_secondary_transportation_mode_code_core_eia__codes_fuel_transportation_modes')) - ) - op.create_table('core_eia923__monthly_generation', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia923__monthly_generation_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk_core_eia923__monthly_generation_plant_id_eia_core_eia__entity_generators')), - sa.PrimaryKeyConstraint('plant_id_eia', 'generator_id', 'report_date', name=op.f('pk_core_eia923__monthly_generation')) - ) - op.create_table('core_epa__assn_epacamd_eia', - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('plant_id_epa', sa.Integer(), nullable=True, comment='The ORISPL ID used by EPA to refer to the plant. Usually but not always the same as plant_id_eia.'), - sa.Column('emissions_unit_id_epa', sa.Text(), nullable=True, comment='Emissions (smokestack) unit monitored by EPA CEMS.'), - sa.Column('generator_id_epa', sa.Text(), nullable=True, comment='Generator ID used by the EPA.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('boiler_id', sa.Text(), nullable=True, comment='Alphanumeric boiler ID.'), - sa.Column('generator_id', sa.Text(), nullable=True, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id'], ['core_eia__entity_boilers.plant_id_eia', 'core_eia__entity_boilers.boiler_id'], name=op.f('fk_core_epa__assn_epacamd_eia_plant_id_eia_core_eia__entity_boilers')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk_core_epa__assn_epacamd_eia_plant_id_eia_core_eia__entity_generators')) - ) - op.create_table('core_ferc1__yearly_balance_sheet_assets', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('asset_type', sa.Text(), nullable=False, comment='Type of asset being reported to the core_ferc1__yearly_balance_sheet_assets table.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('starting_balance', sa.Float(), nullable=True, comment='Account balance at beginning of year.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_balance_sheet_assets_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'asset_type', name=op.f('pk_core_ferc1__yearly_balance_sheet_assets')) - ) - op.create_table('core_ferc1__yearly_balance_sheet_liabilities', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('starting_balance', sa.Float(), nullable=True, comment='Account balance at beginning of year.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('liability_type', sa.Text(), nullable=False, comment='Type of liability being reported to the core_ferc1__yearly_balance_sheet_liabilities table.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_balance_sheet_liabilities_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'liability_type', name=op.f('pk_core_ferc1__yearly_balance_sheet_liabilities')) - ) - op.create_table('core_ferc1__yearly_cash_flow', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('amount_type', sa.Text(), nullable=False, comment='Label describing the type of amount being reported. This could be a balance or a change in value.'), - sa.Column('amount', sa.Float(), nullable=True, comment='Reported amount of dollars. This could be a balance or a change in value.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_cash_flow_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'amount_type', name=op.f('pk_core_ferc1__yearly_cash_flow')) - ) - op.create_table('core_ferc1__yearly_depreciation_amortization_summary', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('plant_function', sa.Text(), nullable=False, comment='Functional role played by utility plant (steam production, nuclear production, distribution, transmission, etc.).'), - sa.Column('ferc_account_label', sa.Text(), nullable=False, comment='Long FERC account identifier derived from values reported in the XBRL taxonomies. May also refer to aggregations of individual FERC accounts.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('utility_type', sa.Text(), nullable=True, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_depreciation_amortization_summary_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'plant_function', 'ferc_account_label', name=op.f('pk_core_ferc1__yearly_depreciation_amortization_summary')) - ) - op.create_table('core_ferc1__yearly_electric_energy_dispositions', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('energy_disposition_type', sa.Text(), nullable=False, comment='Type of energy disposition reported in the core_ferc1__yearly_electric_energy_dispositions. Dispositions include sales to customers, re-sales of energy, energy used internally, losses, etc.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.Column('energy_mwh', sa.Float(), nullable=True, comment='Sources and uses of energy in MWh.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_electric_energy_dispositions_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'energy_disposition_type', name=op.f('pk_core_ferc1__yearly_electric_energy_dispositions')) - ) - op.create_table('core_ferc1__yearly_electric_energy_sources', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('energy_source_type', sa.Text(), nullable=False, comment='Type of energy source reported in the core_ferc1__yearly_electric_energy_sources table. There are three groups of energy sources: generation, power exchanges and transmission.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.Column('energy_mwh', sa.Float(), nullable=True, comment='Sources and uses of energy in MWh.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_electric_energy_sources_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'energy_source_type', name=op.f('pk_core_ferc1__yearly_electric_energy_sources')) - ) - op.create_table('core_ferc1__yearly_electric_operating_expenses', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('expense_type', sa.Text(), nullable=False, comment='The type of expense.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_type', sa.Text(), nullable=True, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_electric_operating_expenses_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'expense_type', name=op.f('pk_core_ferc1__yearly_electric_operating_expenses')) - ) - op.create_table('core_ferc1__yearly_electric_operating_revenues', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('revenue_type', sa.Text(), nullable=False, comment='Label describing types of revenues.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('sales_mwh', sa.Float(), nullable=True, comment='Quantity of electricity sold in MWh.'), - sa.Column('avg_customers_per_month', sa.Float(), nullable=True, comment='Average number of customers per month.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('utility_type', sa.Text(), nullable=True, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_electric_operating_revenues_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'revenue_type', name=op.f('pk_core_ferc1__yearly_electric_operating_revenues')) - ) - op.create_table('core_ferc1__yearly_electric_plant_depreciation_changes', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('depreciation_type', sa.Text(), nullable=False, comment='Type of depreciation provision within FERC Account 108, including cost ofremoval, depreciation expenses, salvage, cost of retired plant, etc.'), - sa.Column('plant_status', sa.Text(), nullable=False, comment='Utility plant financial status (in service, future, leased, total).'), - sa.Column('utility_type', sa.Text(), nullable=False, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_electric_plant_depreciation_changes_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'depreciation_type', 'plant_status', 'utility_type', name=op.f('pk_core_ferc1__yearly_electric_plant_depreciation_changes')) - ) - op.create_table('core_ferc1__yearly_electric_plant_depreciation_functional', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('depreciation_type', sa.Text(), nullable=True, comment='Type of depreciation provision within FERC Account 108, including cost ofremoval, depreciation expenses, salvage, cost of retired plant, etc.'), - sa.Column('plant_function', sa.Text(), nullable=False, comment='Functional role played by utility plant (steam production, nuclear production, distribution, transmission, etc.).'), - sa.Column('plant_status', sa.Text(), nullable=False, comment='Utility plant financial status (in service, future, leased, total).'), - sa.Column('utility_type', sa.Text(), nullable=False, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_electric_plant_depreciation_functional_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'plant_function', 'plant_status', 'utility_type', name=op.f('pk_core_ferc1__yearly_electric_plant_depreciation_functional')) - ) - op.create_table('core_ferc1__yearly_electricity_sales_by_rate_schedule', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('rate_schedule_type', sa.Text(), nullable=True, comment='Categorization of rate schedule type.'), - sa.Column('billing_status', sa.Text(), nullable=True, comment='Whether an amount is billed, unbilled, or both. Billed amounts pertain to the exchange of energy and unbilled amounts pertain to other sources of revenue such as contracts with peaker plants to keep them on standby or charging rent to host cell antennas on transmission towers.'), - sa.Column('rate_schedule_description', sa.Text(), nullable=True, comment='Free-form description of what the rate schedule name is. Not standardized. Often a sub-category of rate_schedule_type.'), - sa.Column('sales_mwh', sa.Float(), nullable=True, comment='Quantity of electricity sold in MWh.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('avg_customers_per_month', sa.Float(), nullable=True, comment='Average number of customers per month.'), - sa.Column('kwh_per_customer', sa.Float(), nullable=True, comment='kwh per customer.'), - sa.Column('revenue_per_kwh', sa.Float(), nullable=True), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_electricity_sales_by_rate_schedule_utility_id_ferc1_core_pudl__assn_utilities_ferc1')) - ) - op.create_table('core_ferc1__yearly_income_statement', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_type', sa.Text(), nullable=False, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('income_type', sa.Text(), nullable=False, comment='Type of income reported in income_statement_ferc1 table.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_income_statement_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'utility_type', 'income_type', name=op.f('pk_core_ferc1__yearly_income_statement')) - ) - op.create_table('core_ferc1__yearly_other_regulatory_liabilities', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('starting_balance', sa.Float(), nullable=True, comment='Account balance at beginning of year.'), - sa.Column('increase_in_other_regulatory_liabilities', sa.Float(), nullable=True, comment='The increase during the reporting period of other regulatory liabilities.'), - sa.Column('account_detail', sa.Text(), nullable=True, comment='Description of the account number credited from making debit adjustment to other regulatory liabilities.'), - sa.Column('decrease_in_other_regulatory_liabilities', sa.Float(), nullable=True, comment='The decrease during the reporting period of other regulatory liabilities.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_other_regulatory_liabilities_utility_id_ferc1_core_pudl__assn_utilities_ferc1')) - ) - op.create_table('core_ferc1__yearly_plant_in_service', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('ferc_account_label', sa.Text(), nullable=False, comment='Long FERC account identifier derived from values reported in the XBRL taxonomies. May also refer to aggregations of individual FERC accounts.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.Column('starting_balance', sa.Float(), nullable=True, comment='Account balance at beginning of year.'), - sa.Column('additions', sa.Float(), nullable=True, comment='Cost of acquisition of items classified within the account.'), - sa.Column('retirements', sa.Float(), nullable=True, comment='Cost of disposal of items classified within the account.'), - sa.Column('adjustments', sa.Float(), nullable=True, comment='Cost of adjustments to the account.'), - sa.Column('transfers', sa.Float(), nullable=True, comment='Cost of transfers into (out of) the account.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_type', sa.Text(), nullable=True, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_plant_in_service_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'ferc_account_label', name=op.f('pk_core_ferc1__yearly_plant_in_service')) - ) - op.create_table('core_ferc1__yearly_purchased_power', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('seller_name', sa.Text(), nullable=True, comment='Name of the seller, or the other party in an exchange transaction.'), - sa.Column('purchase_type_code', sa.Text(), nullable=True, comment="Categorization based on the original contractual terms and conditions of the service. Must be one of 'requirements', 'long_firm', 'intermediate_firm', 'short_firm', 'long_unit', 'intermediate_unit', 'electricity_exchange', 'other_service', or 'adjustment'. Requirements service is ongoing high reliability service, with load integrated into system resource planning. 'Long term' means 5+ years. 'Intermediate term' is 1-5 years. 'Short term' is less than 1 year. 'Firm' means not interruptible for economic reasons. 'unit' indicates service from a particular designated generating unit. 'exchange' is an in-kind transaction."), - sa.Column('tariff', sa.Text(), nullable=True, comment='FERC Rate Schedule Number or Tariff. (Note: may be incomplete if originally reported on multiple lines.)'), - sa.Column('billing_demand_mw', sa.Float(), nullable=True, comment='Monthly average billing demand (for requirements purchases, and any transactions involving demand charges). In megawatts.'), - sa.Column('non_coincident_peak_demand_mw', sa.Float(), nullable=True, comment='Average monthly non-coincident peak (NCP) demand (for requirements purhcases, and any transactions involving demand charges). Monthly NCP demand is the maximum metered hourly (60-minute integration) demand in a month. In megawatts.'), - sa.Column('coincident_peak_demand_mw', sa.Float(), nullable=True, comment="Average monthly coincident peak (CP) demand (for requirements purchases, and any transactions involving demand charges). Monthly CP demand is the metered demand during the hour (60-minute integration) in which the supplier's system reaches its monthly peak. In megawatts."), - sa.Column('purchased_mwh', sa.Float(), nullable=True, comment='Megawatt-hours shown on bills rendered to the respondent. Includes both electricity purchased for storage and non-storage purposes, which were lumped together prior to 2021.'), - sa.Column('purchased_storage_mwh', sa.Float(), nullable=True, comment='Number of megawatt hours purchased during the period for energy storage.'), - sa.Column('purchased_other_than_storage_mwh', sa.Float(), nullable=True, comment='Number of megawatt hours purchased during the period for other than energy storage.'), - sa.Column('received_mwh', sa.Float(), nullable=True, comment='Gross megawatt-hours received in power exchanges and used as the basis for settlement.'), - sa.Column('delivered_mwh', sa.Float(), nullable=True, comment='Gross megawatt-hours delivered in power exchanges and used as the basis for settlement.'), - sa.Column('demand_charges', sa.Float(), nullable=True, comment='Demand charges (USD).'), - sa.Column('energy_charges', sa.Float(), nullable=True, comment='Energy charges (USD).'), - sa.Column('other_charges', sa.Float(), nullable=True, comment='Other charges, including out-of-period adjustments (USD).'), - sa.Column('total_settlement', sa.Float(), nullable=True, comment='Sum of demand, energy, and other charges (USD). For power exchanges, the settlement amount for the net receipt of energy. If more energy was delivered than received, this amount is negative.'), - sa.ForeignKeyConstraint(['purchase_type_code'], ['core_ferc1__codes_power_purchase_types.code'], name=op.f('fk_core_ferc1__yearly_purchased_power_purchase_type_code_core_ferc1__codes_power_purchase_types')), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_purchased_power_utility_id_ferc1_core_pudl__assn_utilities_ferc1')) - ) - op.create_table('core_ferc1__yearly_retained_earnings', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('earnings_type', sa.Text(), nullable=False, comment='Label describing types of earnings.'), - sa.Column('starting_balance', sa.Float(), nullable=True, comment='Account balance at beginning of year.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_retained_earnings_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'earnings_type', name=op.f('pk_core_ferc1__yearly_retained_earnings')) - ) - op.create_table('core_ferc1__yearly_transmission_statistics', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('start_point', sa.Text(), nullable=True, comment='The starting point of a transmission line.'), - sa.Column('end_point', sa.Text(), nullable=True, comment='The end point of a transmission line.'), - sa.Column('operating_voltage_kv', sa.Float(), nullable=True, comment='The operating voltage, expressed kilo-volts, for three-phase 60 cycle alternative current transmission lines.'), - sa.Column('designed_voltage_kv', sa.Float(), nullable=True, comment='Manufactured (Designed) voltage, expressed in kilo-volts, for three-phase 60 cycle alternative current transmission lines'), - sa.Column('supporting_structure_type', sa.Text(), nullable=True, comment='Supporting structure of the transmission line.'), - sa.Column('transmission_line_length_miles', sa.Float(), nullable=True, comment='Length (in pole miles or circuit miles (if transmission lines are underground)) for lines that are stand alone structures (whose cost are reported on a stand-alone basis).'), - sa.Column('transmission_line_and_structures_length_miles', sa.Float(), nullable=True, comment='Length (in pole miles or circuit miles (if transmission lines are underground)) for lines that are agrregated with other lines / structures (whose cost are aggregated and combined with other structures).'), - sa.Column('num_transmission_circuits', sa.Integer(), nullable=True, comment='Number of circuits in a transmission line.'), - sa.Column('conductor_size_and_material', sa.Text(), nullable=True, comment='Size of transmission conductor and material of the transmission line.'), - sa.Column('capex_land', sa.Float(), nullable=True, comment='Cost of Land and land rights for the transmission line.'), - sa.Column('capex_other', sa.Float(), nullable=True, comment='Construction and other costs for the transmission line.'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total costs for the transmission line.'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Operating expenses for the transmission line.'), - sa.Column('opex_maintenance', sa.Float(), nullable=True, comment='Maintenance expenses for the transmission line.'), - sa.Column('opex_rents', sa.Float(), nullable=True, comment='Rent expenses for the transmission line.'), - sa.Column('opex_total', sa.Float(), nullable=True, comment='Overall expenses for the transmission line.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_transmission_statistics_utility_id_ferc1_core_pudl__assn_utilities_ferc1')) - ) - op.create_table('core_ferc1__yearly_utility_plant_summary', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_type', sa.Text(), nullable=False, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('utility_type_other', sa.Text(), nullable=True, comment='Freeform description of type of utility reported in one of the other three other utility_type sections in the core_ferc1__yearly_utility_plant_summary table. This field is reported only in the DBF reporting years (1994-2020).'), - sa.Column('utility_plant_asset_type', sa.Text(), nullable=False, comment='Type of utility plant asset reported in the core_ferc1__yearly_utility_plant_summary table. Assets include those leased to others, held for future use, construction work-in-progress and details of accumulated depreciation.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_ferc1__yearly_utility_plant_summary_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'utility_type', 'utility_plant_asset_type', name=op.f('pk_core_ferc1__yearly_utility_plant_summary')) - ) - op.create_table('core_pudl__assn_plants_ferc1', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=False, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_core_pudl__assn_plants_ferc1_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_pudl__assn_plants_ferc1_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'plant_name_ferc1', name=op.f('pk_core_pudl__assn_plants_ferc1')) - ) - op.create_table('core_pudl__assn_utilities_ferc1_dbf', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_ferc1_dbf', sa.Integer(), nullable=False, comment='FERC-assigned respondent_id from DBF reporting years, identifying the reporting entity. Stable from year to year.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_pudl__assn_utilities_ferc1_dbf_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1_dbf', name=op.f('pk_core_pudl__assn_utilities_ferc1_dbf')) - ) - op.create_table('core_pudl__assn_utilities_ferc1_xbrl', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_ferc1_xbrl', sa.Text(), nullable=False, comment='FERC-assigned entity_id from XBRL reporting years, identifying the reporting entity. Stable from year to year.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_core_pudl__assn_utilities_ferc1_xbrl_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.PrimaryKeyConstraint('utility_id_ferc1_xbrl', name=op.f('pk_core_pudl__assn_utilities_ferc1_xbrl')) - ) - op.create_table('out_eia923__boiler_fuel', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('sulfur_content_pct', sa.Float(), nullable=True, comment='Sulfur content percentage by weight to the nearest 0.01 percent.'), - sa.Column('ash_content_pct', sa.Float(), nullable=True, comment='Ash content percentage by weight to the nearest 0.1 percent.'), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia923__boiler_fuel_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id'], ['core_eia__entity_boilers.plant_id_eia', 'core_eia__entity_boilers.boiler_id'], name=op.f('fk_out_eia923__boiler_fuel_plant_id_eia_core_eia__entity_boilers')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__boiler_fuel_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia923__boiler_fuel_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia923__boiler_fuel_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__boiler_fuel_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'boiler_id', 'energy_source_code', 'prime_mover_code', 'report_date', name=op.f('pk_out_eia923__boiler_fuel')) - ) - op.create_table('out_eia923__generation', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_out_eia923__generation_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk_out_eia923__generation_plant_id_eia_core_eia__entity_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__generation_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia923__generation_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__generation_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'generator_id', 'report_date', name=op.f('pk_out_eia923__generation')) - ) - op.create_table('out_eia923__monthly_boiler_fuel', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('sulfur_content_pct', sa.Float(), nullable=True, comment='Sulfur content percentage by weight to the nearest 0.01 percent.'), - sa.Column('ash_content_pct', sa.Float(), nullable=True, comment='Ash content percentage by weight to the nearest 0.1 percent.'), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia923__monthly_boiler_fuel_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id'], ['core_eia__entity_boilers.plant_id_eia', 'core_eia__entity_boilers.boiler_id'], name=op.f('fk_out_eia923__monthly_boiler_fuel_plant_id_eia_core_eia__entity_boilers')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__monthly_boiler_fuel_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia923__monthly_boiler_fuel_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia923__monthly_boiler_fuel_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__monthly_boiler_fuel_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'boiler_id', 'energy_source_code', 'prime_mover_code', 'report_date', name=op.f('pk_out_eia923__monthly_boiler_fuel')) - ) - op.create_table('out_eia923__monthly_generation', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk_out_eia923__monthly_generation_plant_id_eia_core_eia__entity_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__monthly_generation_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia923__monthly_generation_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__monthly_generation_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'generator_id', 'report_date', name=op.f('pk_out_eia923__monthly_generation')) - ) - op.create_table('out_eia923__monthly_generation_fuel_by_generator', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk_out_eia923__monthly_generation_fuel_by_generator_plant_id_eia_core_eia__entity_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__monthly_generation_fuel_by_generator_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia923__monthly_generation_fuel_by_generator_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__monthly_generation_fuel_by_generator_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk_out_eia923__monthly_generation_fuel_by_generator')) - ) - op.create_table('out_eia923__monthly_generation_fuel_by_generator_energy_source', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('energy_source_code_num', sa.Enum('energy_source_code_1', 'energy_source_code_2', 'energy_source_code_3', 'energy_source_code_4', 'energy_source_code_5', 'energy_source_code_6', 'energy_source_code_7', 'energy_source_code_8'), nullable=True, comment='Name of the energy_source_code_N column that this energy source code was reported in for the generator referenced in the same record.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia923__monthly_generation_fuel_by_generator_energy_source_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk_out_eia923__monthly_generation_fuel_by_generator_energy_source_plant_id_eia_core_eia__entity_generators')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia923__monthly_generation_fuel_by_generator_energy_source_prime_mover_code_core_eia__codes_prime_movers')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', 'prime_mover_code', 'energy_source_code', name=op.f('pk_out_eia923__monthly_generation_fuel_by_generator_energy_source')) - ) - op.create_table('out_eia__monthly_generators', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('technology_description', sa.Text(), nullable=True, comment='High level description of the technology used by the generator to produce electricity.'), - sa.Column('energy_source_code_1', sa.Text(), nullable=True, comment='The code representing the most predominant type of energy that fuels the generator.'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('generator_operating_date', sa.Date(), nullable=True, comment='Date the generator began commercial operation.'), - sa.Column('generator_retirement_date', sa.Date(), nullable=True, comment='Date of the scheduled or effected retirement of the generator.'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('planned_generator_retirement_date', sa.Date(), nullable=True, comment='Planned effective date of the scheduled retirement of the generator.'), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('total_mmbtu', sa.Float(), nullable=True, comment='Total annual heat content of fuel consumed by a plant part record in the plant parts list.'), - sa.Column('associated_combined_heat_power', sa.Boolean(), nullable=True, comment='Indicates whether the generator is associated with a combined heat and power system'), - sa.Column('bga_source', sa.Text(), nullable=True, comment='The source from where the unit_id_pudl is compiled. The unit_id_pudl comes directly from EIA 860, or string association (which looks at all the boilers and generators that are not associated with a unit and tries to find a matching string in the respective collection of boilers or generator), or from a unit connection (where the unit_id_eia is employed to find additional boiler generator connections).'), - sa.Column('bypass_heat_recovery', sa.Boolean(), nullable=True, comment='Can this generator operate while bypassing the heat recovery steam generator?'), - sa.Column('carbon_capture', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses carbon capture technology.'), - sa.Column('city', sa.Text(), nullable=True), - sa.Column('cofire_fuels', sa.Boolean(), nullable=True, comment='Can the generator co-fire fuels?.'), - sa.Column('county', sa.Text(), nullable=True, comment='County name.'), - sa.Column('current_planned_generator_operating_date', sa.Date(), nullable=True, comment='The most recently updated effective date on which the generator is scheduled to start operation'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.Column('deliver_power_transgrid', sa.Boolean(), nullable=True, comment='Indicate whether the generator can deliver power to the transmission grid.'), - sa.Column('distributed_generation', sa.Boolean(), nullable=True, comment='Whether the generator is considered distributed generation'), - sa.Column('duct_burners', sa.Boolean(), nullable=True, comment='Indicates whether the unit has duct-burners for supplementary firing of the turbine exhaust gas'), - sa.Column('energy_source_1_transport_1', sa.Text(), nullable=True, comment='Primary mode of transport for energy source 1.'), - sa.Column('energy_source_1_transport_2', sa.Text(), nullable=True, comment='Secondary mode of transport for energy source 1.'), - sa.Column('energy_source_1_transport_3', sa.Text(), nullable=True, comment='Tertiary mode of transport for energy source 1.'), - sa.Column('energy_source_2_transport_1', sa.Text(), nullable=True, comment='Primary mode of transport for energy source 2.'), - sa.Column('energy_source_2_transport_2', sa.Text(), nullable=True, comment='Secondary mode of transport for energy source 2.'), - sa.Column('energy_source_2_transport_3', sa.Text(), nullable=True, comment='Tertiary mode of transport for energy source 2.'), - sa.Column('energy_source_code_2', sa.Text(), nullable=True, comment='The code representing the second most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_3', sa.Text(), nullable=True, comment='The code representing the third most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_4', sa.Text(), nullable=True, comment='The code representing the fourth most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_5', sa.Text(), nullable=True, comment='The code representing the fifth most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_6', sa.Text(), nullable=True, comment='The code representing the sixth most predominant type of energy that fuels the generator'), - sa.Column('energy_storage_capacity_mwh', sa.Float(), nullable=True, comment='Energy storage capacity in MWh (e.g. for batteries).'), - sa.Column('ferc_qualifying_facility', sa.Boolean(), nullable=True, comment='Indicatates whether or not a generator is a qualifying FERC cogeneation facility.'), - sa.Column('fluidized_bed_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses fluidized bed technology'), - sa.Column('fuel_type_count', sa.Integer(), nullable=True, comment='A count of how many different simple energy sources there are associated with a generator.'), - sa.Column('latitude', sa.Float(), nullable=True, comment="Latitude of the plant's location, in degrees."), - sa.Column('longitude', sa.Float(), nullable=True, comment="Longitude of the plant's location, in degrees."), - sa.Column('minimum_load_mw', sa.Float(), nullable=True, comment='The minimum load at which the generator can operate at continuosuly.'), - sa.Column('multiple_fuels', sa.Boolean(), nullable=True, comment='Can the generator burn multiple fuels?'), - sa.Column('nameplate_power_factor', sa.Float(), nullable=True, comment='The nameplate power factor of the generator.'), - sa.Column('net_capacity_mwdc', sa.Float(), nullable=True, comment='Generation capacity in megawatts of direct current that is subject to a net metering agreement. Typically used for behind-the-meter solar PV.'), - sa.Column('operating_switch', sa.Text(), nullable=True, comment='Indicates whether the fuel switching generator can switch when operating'), - sa.Column('operational_status_code', sa.Text(), nullable=True, comment='The operating status of the asset.'), - sa.Column('original_planned_generator_operating_date', sa.Date(), nullable=True, comment='The date the generator was originally scheduled to be operational'), - sa.Column('other_combustion_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses other combustion technologies'), - sa.Column('other_modifications_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter commercial operation after any other planned modification is complete.'), - sa.Column('other_planned_modifications', sa.Boolean(), nullable=True, comment='Indicates whether there are there other modifications planned for the generator.'), - sa.Column('owned_by_non_utility', sa.Boolean(), nullable=True, comment='Whether any part of generator is owned by a nonutilty'), - sa.Column('ownership_code', sa.Text(), nullable=True, comment='Identifies the ownership for each generator.'), - sa.Column('planned_derate_date', sa.Date(), nullable=True, comment='Planned effective month that the generator is scheduled to enter operation after the derate modification.'), - sa.Column('planned_energy_source_code_1', sa.Text(), nullable=True, comment='New energy source code for the planned repowered generator.'), - sa.Column('planned_modifications', sa.Boolean(), nullable=True, comment='Indicates whether there are any planned capacity uprates/derates, repowering, other modifications, or generator retirements scheduled for the next 5 years.'), - sa.Column('planned_net_summer_capacity_derate_mw', sa.Float(), nullable=True, comment='Decrease in summer capacity expected to be realized from the derate modification to the equipment.'), - sa.Column('planned_net_summer_capacity_uprate_mw', sa.Float(), nullable=True, comment='Increase in summer capacity expected to be realized from the modification to the equipment.'), - sa.Column('planned_net_winter_capacity_derate_mw', sa.Float(), nullable=True, comment='Decrease in winter capacity expected to be realized from the derate modification to the equipment.'), - sa.Column('planned_net_winter_capacity_uprate_mw', sa.Float(), nullable=True, comment='Increase in winter capacity expected to be realized from the uprate modification to the equipment.'), - sa.Column('planned_new_capacity_mw', sa.Float(), nullable=True, comment='The expected new namplate capacity for the generator.'), - sa.Column('planned_new_prime_mover_code', sa.Text(), nullable=True, comment='New prime mover for the planned repowered generator.'), - sa.Column('planned_repower_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter operation after the repowering is complete.'), - sa.Column('planned_uprate_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter operation after the uprate modification.'), - sa.Column('previously_canceled', sa.Boolean(), nullable=True, comment='Indicates whether the generator was previously reported as indefinitely postponed or canceled'), - sa.Column('pulverized_coal_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses pulverized coal technology'), - sa.Column('reactive_power_output_mvar', sa.Float(), nullable=True, comment='Reactive Power Output (MVAr)'), - sa.Column('rto_iso_lmp_node_id', sa.Text(), nullable=True, comment='The designation used to identify the price node in RTO/ISO Locational Marginal Price reports'), - sa.Column('rto_iso_location_wholesale_reporting_id', sa.Text(), nullable=True, comment='The designation used to report ths specific location of the wholesale sales transactions to FERC for the Electric Quarterly Report'), - sa.Column('solid_fuel_gasification', sa.Boolean(), nullable=True, comment='Indicates whether the generator is part of a solid fuel gasification system'), - sa.Column('startup_source_code_1', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_2', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_3', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_4', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('stoker_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses stoker technology'), - sa.Column('street_address', sa.Text(), nullable=True), - sa.Column('subcritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses subcritical technology'), - sa.Column('summer_capacity_estimate', sa.Boolean(), nullable=True, comment='Whether the summer capacity value was an estimate'), - sa.Column('summer_capacity_mw', sa.Float(), nullable=True, comment='The net summer capacity.'), - sa.Column('summer_estimated_capability_mw', sa.Float(), nullable=True, comment='EIA estimated summer capacity (in MWh).'), - sa.Column('supercritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses supercritical technology'), - sa.Column('switch_oil_gas', sa.Boolean(), nullable=True, comment='Indicates whether the generator switch between oil and natural gas.'), - sa.Column('syncronized_transmission_grid', sa.Boolean(), nullable=True, comment='Indicates whether standby generators (SB status) can be synchronized to the grid.'), - sa.Column('time_cold_shutdown_full_load_code', sa.Text(), nullable=True, comment='The minimum amount of time required to bring the unit to full load from shutdown.'), - sa.Column('timezone', sa.Enum('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu'), nullable=True, comment='IANA timezone name'), - sa.Column('topping_bottoming_code', sa.Text(), nullable=True, comment='If the generator is associated with a combined heat and power system, indicates whether the generator is part of a topping cycle or a bottoming cycle'), - sa.Column('turbines_inverters_hydrokinetics', sa.Integer(), nullable=True, comment='Number of wind turbines, or hydrokinetic buoys.'), - sa.Column('turbines_num', sa.Integer(), nullable=True, comment='Number of wind turbines, or hydrokinetic buoys.'), - sa.Column('ultrasupercritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses ultra-supercritical technology'), - sa.Column('uprate_derate_completed_date', sa.Date(), nullable=True, comment='The date when the uprate or derate was completed.'), - sa.Column('uprate_derate_during_year', sa.Boolean(), nullable=True, comment='Was an uprate or derate completed on this generator during the reporting year?'), - sa.Column('winter_capacity_estimate', sa.Boolean(), nullable=True, comment='Whether the winter capacity value was an estimate'), - sa.Column('winter_capacity_mw', sa.Float(), nullable=True, comment='The net winter capacity.'), - sa.Column('winter_estimated_capability_mw', sa.Float(), nullable=True, comment='EIA estimated winter capacity (in MWh).'), - sa.Column('zip_code', sa.Text(), nullable=True, comment='Five digit US Zip Code.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_out_eia__monthly_generators_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['energy_source_1_transport_1'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_1_transport_1_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_1_transport_2'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_1_transport_2_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_1_transport_3'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_1_transport_3_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_1'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_2_transport_1_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_2'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_2_transport_2_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_3'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_2_transport_3_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_2'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_code_2_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_3'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_code_3_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_4'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_code_4_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_5'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_code_5_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_6'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_energy_source_code_6_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['operational_status_code'], ['core_eia__codes_operational_status.code'], name=op.f('fk_out_eia__monthly_generators_operational_status_code_core_eia__codes_operational_status')), - sa.ForeignKeyConstraint(['planned_energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_planned_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['planned_new_prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia__monthly_generators_planned_new_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk_out_eia__monthly_generators_plant_id_eia_core_eia__entity_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia__monthly_generators_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia__monthly_generators_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['startup_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_startup_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_2'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_startup_source_code_2_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_3'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_startup_source_code_3_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_4'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__monthly_generators_startup_source_code_4_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['utility_id_eia'], ['core_eia__entity_utilities.utility_id_eia'], name=op.f('fk_out_eia__monthly_generators_utility_id_eia_core_eia__entity_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia__monthly_generators_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk_out_eia__monthly_generators')) - ) - op.create_table('out_eia__yearly_utilities', - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('street_address', sa.Text(), nullable=True), - sa.Column('city', sa.Text(), nullable=True), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('zip_code', sa.Text(), nullable=True, comment='Five digit US Zip Code.'), - sa.Column('plants_reported_owner', sa.Boolean(), nullable=True, comment='Is the reporting entity an owner of power plants reported on Schedule 2 of the form?'), - sa.Column('plants_reported_operator', sa.Boolean(), nullable=True, comment='Is the reporting entity an operator of power plants reported on Schedule 2 of the form?'), - sa.Column('plants_reported_asset_manager', sa.Boolean(), nullable=True, comment='Is the reporting entity an asset manager of power plants reported on Schedule 2 of the form?'), - sa.Column('plants_reported_other_relationship', sa.Boolean(), nullable=True, comment='Does the reporting entity have any other relationship to the power plants reported on Schedule 2 of the form?'), - sa.Column('entity_type', sa.Text(), nullable=True, comment='Entity type of principal owner.'), - sa.Column('attention_line', sa.Text(), nullable=True), - sa.Column('address_2', sa.Text(), nullable=True), - sa.Column('zip_code_4', sa.Text(), nullable=True, comment='Four digit US Zip Code suffix.'), - sa.Column('contact_firstname', sa.Text(), nullable=True, comment='First name of utility contact 1.'), - sa.Column('contact_lastname', sa.Text(), nullable=True, comment='Last name of utility contact 1.'), - sa.Column('contact_title', sa.Text(), nullable=True, comment='Title of of utility contact 1.'), - sa.Column('phone_number', sa.Text(), nullable=True, comment='Phone number for utility contact 1.'), - sa.Column('phone_extension', sa.Text(), nullable=True, comment='Phone extension for utility contact 1'), - sa.Column('contact_firstname_2', sa.Text(), nullable=True, comment='First name of utility contact 2.'), - sa.Column('contact_lastname_2', sa.Text(), nullable=True, comment='Last name of utility contact 2.'), - sa.Column('contact_title_2', sa.Text(), nullable=True, comment='Title of utility contact 2.'), - sa.Column('phone_number_2', sa.Text(), nullable=True, comment='Phone number for utility contact 2.'), - sa.Column('phone_extension_2', sa.Text(), nullable=True, comment='Phone extension for utility contact 2'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_out_eia__yearly_utilities_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia__yearly_utilities_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia__yearly_utilities_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_eia', 'report_date', name=op.f('pk_out_eia__yearly_utilities')) - ) - op.create_table('out_ferc1__yearly_balance_sheet_assets', - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('asset_type', sa.Text(), nullable=False, comment='Type of asset being reported to the core_ferc1__yearly_balance_sheet_assets table.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.Column('starting_balance', sa.Float(), nullable=True, comment='Account balance at beginning of year.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_balance_sheet_assets_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_balance_sheet_assets_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'asset_type', name=op.f('pk_out_ferc1__yearly_balance_sheet_assets')) - ) - op.create_table('out_ferc1__yearly_balance_sheet_liabilities', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('starting_balance', sa.Float(), nullable=True, comment='Account balance at beginning of year.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('liability_type', sa.Text(), nullable=False, comment='Type of liability being reported to the core_ferc1__yearly_balance_sheet_liabilities table.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_balance_sheet_liabilities_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_balance_sheet_liabilities_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'liability_type', name=op.f('pk_out_ferc1__yearly_balance_sheet_liabilities')) - ) - op.create_table('out_ferc1__yearly_cash_flow', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('amount_type', sa.Text(), nullable=False, comment='Label describing the type of amount being reported. This could be a balance or a change in value.'), - sa.Column('amount', sa.Float(), nullable=True, comment='Reported amount of dollars. This could be a balance or a change in value.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_cash_flow_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_cash_flow_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'amount_type', name=op.f('pk_out_ferc1__yearly_cash_flow')) - ) - op.create_table('out_ferc1__yearly_depreciation_amortization_summary', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('plant_function', sa.Text(), nullable=False, comment='Functional role played by utility plant (steam production, nuclear production, distribution, transmission, etc.).'), - sa.Column('ferc_account_label', sa.Text(), nullable=False, comment='Long FERC account identifier derived from values reported in the XBRL taxonomies. May also refer to aggregations of individual FERC accounts.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('utility_type', sa.Text(), nullable=True, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_depreciation_amortization_summary_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_depreciation_amortization_summary_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'plant_function', 'ferc_account_label', name=op.f('pk_out_ferc1__yearly_depreciation_amortization_summary')) - ) - op.create_table('out_ferc1__yearly_electric_energy_dispositions', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('energy_disposition_type', sa.Text(), nullable=False, comment='Type of energy disposition reported in the core_ferc1__yearly_electric_energy_dispositions. Dispositions include sales to customers, re-sales of energy, energy used internally, losses, etc.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.Column('energy_mwh', sa.Float(), nullable=True, comment='Sources and uses of energy in MWh.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_electric_energy_dispositions_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_electric_energy_dispositions_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'energy_disposition_type', name=op.f('pk_out_ferc1__yearly_electric_energy_dispositions')) - ) - op.create_table('out_ferc1__yearly_electric_energy_sources', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('energy_source_type', sa.Text(), nullable=False, comment='Type of energy source reported in the core_ferc1__yearly_electric_energy_sources table. There are three groups of energy sources: generation, power exchanges and transmission.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.Column('energy_mwh', sa.Float(), nullable=True, comment='Sources and uses of energy in MWh.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_electric_energy_sources_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_electric_energy_sources_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'energy_source_type', name=op.f('pk_out_ferc1__yearly_electric_energy_sources')) - ) - op.create_table('out_ferc1__yearly_electric_operating_expenses', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('expense_type', sa.Text(), nullable=False, comment='The type of expense.'), - sa.Column('utility_type', sa.Text(), nullable=True, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_electric_operating_expenses_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_electric_operating_expenses_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'expense_type', name=op.f('pk_out_ferc1__yearly_electric_operating_expenses')) - ) - op.create_table('out_ferc1__yearly_electric_operating_revenues', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('revenue_type', sa.Text(), nullable=False, comment='Label describing types of revenues.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('sales_mwh', sa.Float(), nullable=True, comment='Quantity of electricity sold in MWh.'), - sa.Column('avg_customers_per_month', sa.Float(), nullable=True, comment='Average number of customers per month.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('utility_type', sa.Text(), nullable=True, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_electric_operating_revenues_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_electric_operating_revenues_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'revenue_type', name=op.f('pk_out_ferc1__yearly_electric_operating_revenues')) - ) - op.create_table('out_ferc1__yearly_electric_plant_depreciation_changes', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('depreciation_type', sa.Text(), nullable=False, comment='Type of depreciation provision within FERC Account 108, including cost ofremoval, depreciation expenses, salvage, cost of retired plant, etc.'), - sa.Column('plant_status', sa.Text(), nullable=False, comment='Utility plant financial status (in service, future, leased, total).'), - sa.Column('utility_type', sa.Text(), nullable=False, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_electric_plant_depreciation_changes_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_electric_plant_depreciation_changes_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'depreciation_type', 'plant_status', 'utility_type', name=op.f('pk_out_ferc1__yearly_electric_plant_depreciation_changes')) - ) - op.create_table('out_ferc1__yearly_electric_plant_depreciation_functional', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('depreciation_type', sa.Text(), nullable=True, comment='Type of depreciation provision within FERC Account 108, including cost ofremoval, depreciation expenses, salvage, cost of retired plant, etc.'), - sa.Column('plant_function', sa.Text(), nullable=False, comment='Functional role played by utility plant (steam production, nuclear production, distribution, transmission, etc.).'), - sa.Column('plant_status', sa.Text(), nullable=False, comment='Utility plant financial status (in service, future, leased, total).'), - sa.Column('utility_type', sa.Text(), nullable=False, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_electric_plant_depreciation_functional_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_electric_plant_depreciation_functional_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'plant_function', 'plant_status', 'utility_type', name=op.f('pk_out_ferc1__yearly_electric_plant_depreciation_functional')) - ) - op.create_table('out_ferc1__yearly_electricity_sales_by_rate_schedule', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('rate_schedule_type', sa.Text(), nullable=True, comment='Categorization of rate schedule type.'), - sa.Column('billing_status', sa.Text(), nullable=True, comment='Whether an amount is billed, unbilled, or both. Billed amounts pertain to the exchange of energy and unbilled amounts pertain to other sources of revenue such as contracts with peaker plants to keep them on standby or charging rent to host cell antennas on transmission towers.'), - sa.Column('rate_schedule_description', sa.Text(), nullable=True, comment='Free-form description of what the rate schedule name is. Not standardized. Often a sub-category of rate_schedule_type.'), - sa.Column('sales_mwh', sa.Float(), nullable=True, comment='Quantity of electricity sold in MWh.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('avg_customers_per_month', sa.Float(), nullable=True, comment='Average number of customers per month.'), - sa.Column('kwh_per_customer', sa.Float(), nullable=True, comment='kwh per customer.'), - sa.Column('revenue_per_kwh', sa.Float(), nullable=True), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_electricity_sales_by_rate_schedule_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_electricity_sales_by_rate_schedule_utility_id_pudl_core_pudl__entity_utilities_pudl')) - ) - op.create_table('out_ferc1__yearly_income_statement', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_type', sa.Text(), nullable=False, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('income_type', sa.Text(), nullable=False, comment='Type of income reported in income_statement_ferc1 table.'), - sa.Column('dollar_value', sa.Float(), nullable=True, comment='Dollar value of reported income, expense, asset, or liability.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_income_statement_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_income_statement_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'utility_type', 'income_type', name=op.f('pk_out_ferc1__yearly_income_statement')) - ) - op.create_table('out_ferc1__yearly_other_regulatory_liabilities', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('description', sa.Text(), nullable=True, comment='Long human-readable description of the meaning of a code/label.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('starting_balance', sa.Float(), nullable=True, comment='Account balance at beginning of year.'), - sa.Column('increase_in_other_regulatory_liabilities', sa.Float(), nullable=True, comment='The increase during the reporting period of other regulatory liabilities.'), - sa.Column('account_detail', sa.Text(), nullable=True, comment='Description of the account number credited from making debit adjustment to other regulatory liabilities.'), - sa.Column('decrease_in_other_regulatory_liabilities', sa.Float(), nullable=True, comment='The decrease during the reporting period of other regulatory liabilities.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_other_regulatory_liabilities_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_other_regulatory_liabilities_utility_id_pudl_core_pudl__entity_utilities_pudl')) - ) - op.create_table('out_ferc1__yearly_plant_in_service', - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('utility_type', sa.Text(), nullable=True, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('additions', sa.Float(), nullable=True, comment='Cost of acquisition of items classified within the account.'), - sa.Column('adjustments', sa.Float(), nullable=True, comment='Cost of adjustments to the account.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('ferc_account_label', sa.Text(), nullable=False, comment='Long FERC account identifier derived from values reported in the XBRL taxonomies. May also refer to aggregations of individual FERC accounts.'), - sa.Column('retirements', sa.Float(), nullable=True, comment='Cost of disposal of items classified within the account.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.Column('starting_balance', sa.Float(), nullable=True, comment='Account balance at beginning of year.'), - sa.Column('transfers', sa.Float(), nullable=True, comment='Cost of transfers into (out of) the account.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_plant_in_service_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_plant_in_service_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'ferc_account_label', name=op.f('pk_out_ferc1__yearly_plant_in_service')) - ) - op.create_table('out_ferc1__yearly_purchased_power', - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('seller_name', sa.Text(), nullable=True, comment='Name of the seller, or the other party in an exchange transaction.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('billing_demand_mw', sa.Float(), nullable=True, comment='Monthly average billing demand (for requirements purchases, and any transactions involving demand charges). In megawatts.'), - sa.Column('coincident_peak_demand_mw', sa.Float(), nullable=True, comment="Average monthly coincident peak (CP) demand (for requirements purchases, and any transactions involving demand charges). Monthly CP demand is the metered demand during the hour (60-minute integration) in which the supplier's system reaches its monthly peak. In megawatts."), - sa.Column('delivered_mwh', sa.Float(), nullable=True, comment='Gross megawatt-hours delivered in power exchanges and used as the basis for settlement.'), - sa.Column('demand_charges', sa.Float(), nullable=True, comment='Demand charges (USD).'), - sa.Column('energy_charges', sa.Float(), nullable=True, comment='Energy charges (USD).'), - sa.Column('non_coincident_peak_demand_mw', sa.Float(), nullable=True, comment='Average monthly non-coincident peak (NCP) demand (for requirements purhcases, and any transactions involving demand charges). Monthly NCP demand is the maximum metered hourly (60-minute integration) demand in a month. In megawatts.'), - sa.Column('other_charges', sa.Float(), nullable=True, comment='Other charges, including out-of-period adjustments (USD).'), - sa.Column('purchase_type_code', sa.Text(), nullable=True, comment="Categorization based on the original contractual terms and conditions of the service. Must be one of 'requirements', 'long_firm', 'intermediate_firm', 'short_firm', 'long_unit', 'intermediate_unit', 'electricity_exchange', 'other_service', or 'adjustment'. Requirements service is ongoing high reliability service, with load integrated into system resource planning. 'Long term' means 5+ years. 'Intermediate term' is 1-5 years. 'Short term' is less than 1 year. 'Firm' means not interruptible for economic reasons. 'unit' indicates service from a particular designated generating unit. 'exchange' is an in-kind transaction."), - sa.Column('purchased_mwh', sa.Float(), nullable=True, comment='Megawatt-hours shown on bills rendered to the respondent. Includes both electricity purchased for storage and non-storage purposes, which were lumped together prior to 2021.'), - sa.Column('purchased_storage_mwh', sa.Float(), nullable=True, comment='Number of megawatt hours purchased during the period for energy storage.'), - sa.Column('purchased_other_than_storage_mwh', sa.Float(), nullable=True, comment='Number of megawatt hours purchased during the period for other than energy storage.'), - sa.Column('received_mwh', sa.Float(), nullable=True, comment='Gross megawatt-hours received in power exchanges and used as the basis for settlement.'), - sa.Column('tariff', sa.Text(), nullable=True, comment='FERC Rate Schedule Number or Tariff. (Note: may be incomplete if originally reported on multiple lines.)'), - sa.Column('total_settlement', sa.Float(), nullable=True, comment='Sum of demand, energy, and other charges (USD). For power exchanges, the settlement amount for the net receipt of energy. If more energy was delivered than received, this amount is negative.'), - sa.ForeignKeyConstraint(['purchase_type_code'], ['core_ferc1__codes_power_purchase_types.code'], name=op.f('fk_out_ferc1__yearly_purchased_power_purchase_type_code_core_ferc1__codes_power_purchase_types')), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_purchased_power_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_purchased_power_utility_id_pudl_core_pudl__entity_utilities_pudl')) - ) - op.create_table('out_ferc1__yearly_retained_earnings', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('earnings_type', sa.Text(), nullable=False, comment='Label describing types of earnings.'), - sa.Column('starting_balance', sa.Float(), nullable=True, comment='Account balance at beginning of year.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('balance', sa.Text(), nullable=True, comment='Indication of whether a column is a credit or debit, as reported in the XBRL taxonomy.'), - sa.Column('ferc_account', sa.Text(), nullable=True, comment="Actual FERC Account number (e.g. '359.1') if available, or a PUDL assigned ID when FERC accounts have been split or combined in reporting."), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_retained_earnings_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_retained_earnings_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'earnings_type', name=op.f('pk_out_ferc1__yearly_retained_earnings')) - ) - op.create_table('out_ferc1__yearly_transmission_statistics', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('start_point', sa.Text(), nullable=True, comment='The starting point of a transmission line.'), - sa.Column('end_point', sa.Text(), nullable=True, comment='The end point of a transmission line.'), - sa.Column('operating_voltage_kv', sa.Float(), nullable=True, comment='The operating voltage, expressed kilo-volts, for three-phase 60 cycle alternative current transmission lines.'), - sa.Column('designed_voltage_kv', sa.Float(), nullable=True, comment='Manufactured (Designed) voltage, expressed in kilo-volts, for three-phase 60 cycle alternative current transmission lines'), - sa.Column('supporting_structure_type', sa.Text(), nullable=True, comment='Supporting structure of the transmission line.'), - sa.Column('transmission_line_length_miles', sa.Float(), nullable=True, comment='Length (in pole miles or circuit miles (if transmission lines are underground)) for lines that are stand alone structures (whose cost are reported on a stand-alone basis).'), - sa.Column('transmission_line_and_structures_length_miles', sa.Float(), nullable=True, comment='Length (in pole miles or circuit miles (if transmission lines are underground)) for lines that are agrregated with other lines / structures (whose cost are aggregated and combined with other structures).'), - sa.Column('num_transmission_circuits', sa.Integer(), nullable=True, comment='Number of circuits in a transmission line.'), - sa.Column('conductor_size_and_material', sa.Text(), nullable=True, comment='Size of transmission conductor and material of the transmission line.'), - sa.Column('capex_land', sa.Float(), nullable=True, comment='Cost of plant: land and land rights (USD).'), - sa.Column('capex_other', sa.Float(), nullable=True, comment='Other costs associated with the plant (USD).'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_maintenance', sa.Float(), nullable=True, comment='Production expenses: Maintenance (USD).'), - sa.Column('opex_rents', sa.Float(), nullable=True, comment='Production expenses: rents (USD).'), - sa.Column('opex_total', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_transmission_statistics_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_transmission_statistics_utility_id_pudl_core_pudl__entity_utilities_pudl')) - ) - op.create_table('out_ferc1__yearly_utility_plant_summary', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_type', sa.Text(), nullable=False, comment='Listing of utility plant types. Examples include Electric Utility, Gas Utility, and Other Utility.'), - sa.Column('utility_type_other', sa.Text(), nullable=True, comment='Freeform description of type of utility reported in one of the other three other utility_type sections in the core_ferc1__yearly_utility_plant_summary table. This field is reported only in the DBF reporting years (1994-2020).'), - sa.Column('utility_plant_asset_type', sa.Text(), nullable=False, comment='Type of utility plant asset reported in the core_ferc1__yearly_utility_plant_summary table. Assets include those leased to others, held for future use, construction work-in-progress and details of accumulated depreciation.'), - sa.Column('row_type_xbrl', sa.Enum('calculated_value', 'reported_value', 'correction'), nullable=True, comment='Indicates whether the value reported in the row is calculated, or uniquely reported within the table.'), - sa.Column('ending_balance', sa.Float(), nullable=True, comment='Account balance at end of year.'), - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.ForeignKeyConstraint(['utility_id_ferc1'], ['core_pudl__assn_utilities_ferc1.utility_id_ferc1'], name=op.f('fk_out_ferc1__yearly_utility_plant_summary_utility_id_ferc1_core_pudl__assn_utilities_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_utility_plant_summary_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'report_year', 'utility_type', 'utility_plant_asset_type', name=op.f('pk_out_ferc1__yearly_utility_plant_summary')) - ) - op.create_table('_out_eia__plants_utilities', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.ForeignKeyConstraint(['plant_id_eia', 'report_date'], ['core_eia860__scd_plants.plant_id_eia', 'core_eia860__scd_plants.report_date'], name=op.f('fk__out_eia__plants_utilities_plant_id_eia_core_eia860__scd_plants')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk__out_eia__plants_utilities_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk__out_eia__plants_utilities_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk__out_eia__plants_utilities_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'utility_id_eia', name=op.f('pk__out_eia__plants_utilities')) - ) - op.create_table('_out_eia__yearly_heat_rate_by_unit', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=False, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.ForeignKeyConstraint(['plant_id_eia', 'report_date'], ['core_eia860__scd_plants.plant_id_eia', 'core_eia860__scd_plants.report_date'], name=op.f('fk__out_eia__yearly_heat_rate_by_unit_plant_id_eia_core_eia860__scd_plants')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'unit_id_pudl', name=op.f('pk__out_eia__yearly_heat_rate_by_unit')) - ) - op.create_table('_out_ferc1__yearly_hydro_plants', - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('record_id', sa.Text(), nullable=False, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('asset_retirement_cost', sa.Float(), nullable=True, comment='Asset retirement cost (USD).'), - sa.Column('avg_num_employees', sa.Float(), nullable=True), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('capex_equipment', sa.Float(), nullable=True, comment='Cost of plant: equipment (USD).'), - sa.Column('capex_facilities', sa.Float(), nullable=True, comment='Cost of plant: reservoirs, dams, and waterways (USD).'), - sa.Column('capex_land', sa.Float(), nullable=True, comment='Cost of plant: land and land rights (USD).'), - sa.Column('capex_per_mw', sa.Float(), nullable=True, comment='Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.'), - sa.Column('capex_roads', sa.Float(), nullable=True, comment='Cost of plant: roads, railroads, and bridges (USD).'), - sa.Column('capex_structures', sa.Float(), nullable=True, comment='Cost of plant: structures and improvements (USD).'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('construction_type', sa.Enum('conventional', 'outdoor', 'semioutdoor'), nullable=True, comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings."), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('installation_year', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('net_capacity_adverse_conditions_mw', sa.Float(), nullable=True, comment='Net plant capability under the least favorable operating conditions, in megawatts.'), - sa.Column('net_capacity_favorable_conditions_mw', sa.Float(), nullable=True, comment='Net plant capability under the most favorable operating conditions, in megawatts.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('opex_dams', sa.Float(), nullable=True, comment='Production expenses: maintenance of reservoirs, dams, and waterways (USD).'), - sa.Column('opex_electric', sa.Float(), nullable=True, comment='Production expenses: electric expenses (USD).'), - sa.Column('opex_engineering', sa.Float(), nullable=True, comment='Production expenses: maintenance, supervision, and engineering (USD).'), - sa.Column('opex_generation_misc', sa.Float(), nullable=True, comment='Production expenses: miscellaneous power generation expenses (USD).'), - sa.Column('opex_hydraulic', sa.Float(), nullable=True, comment='Production expenses: hydraulic expenses (USD).'), - sa.Column('opex_misc_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of miscellaneous hydraulic plant (USD).'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_per_mwh', sa.Float(), nullable=True, comment='Total production expenses (USD per MWh generated).'), - sa.Column('opex_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of electric plant (USD).'), - sa.Column('opex_rents', sa.Float(), nullable=True, comment='Production expenses: rents (USD).'), - sa.Column('opex_structures', sa.Float(), nullable=True, comment='Production expenses: maintenance of structures (USD).'), - sa.Column('opex_total', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('opex_total_nonfuel', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('opex_water_for_power', sa.Float(), nullable=True, comment='Production expenses: water for power (USD).'), - sa.Column('peak_demand_mw', sa.Float(), nullable=True, comment='Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.'), - sa.Column('plant_hours_connected_while_generating', sa.Float(), nullable=True, comment='Hours the plant was connected to load while generating in the report year.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_type', sa.Text(), nullable=True), - sa.Column('project_num', sa.Integer(), nullable=True, comment='FERC Licensed Project Number.'), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk__out_ferc1__yearly_hydro_plants_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk__out_ferc1__yearly_hydro_plants_utility_id_ferc1_core_pudl__assn_plants_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk__out_ferc1__yearly_hydro_plants_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('record_id', name=op.f('pk__out_ferc1__yearly_hydro_plants')) - ) - op.create_table('_out_ferc1__yearly_plants_utilities', - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=False, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk__out_ferc1__yearly_plants_utilities_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk__out_ferc1__yearly_plants_utilities_utility_id_ferc1_core_pudl__assn_plants_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk__out_ferc1__yearly_plants_utilities_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('utility_id_ferc1', 'plant_name_ferc1', name=op.f('pk__out_ferc1__yearly_plants_utilities')) - ) - op.create_table('_out_ferc1__yearly_pumped_storage_plants', - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('record_id', sa.Text(), nullable=False, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('asset_retirement_cost', sa.Float(), nullable=True, comment='Asset retirement cost (USD).'), - sa.Column('avg_num_employees', sa.Float(), nullable=True), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('capex_equipment_electric', sa.Float(), nullable=True, comment='Cost of plant: accessory electric equipment (USD).'), - sa.Column('capex_equipment_misc', sa.Float(), nullable=True, comment='Cost of plant: miscellaneous power plant equipment (USD).'), - sa.Column('capex_facilities', sa.Float(), nullable=True, comment='Cost of plant: reservoirs, dams, and waterways (USD).'), - sa.Column('capex_land', sa.Float(), nullable=True, comment='Cost of plant: land and land rights (USD).'), - sa.Column('capex_per_mw', sa.Float(), nullable=True, comment='Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.'), - sa.Column('capex_roads', sa.Float(), nullable=True, comment='Cost of plant: roads, railroads, and bridges (USD).'), - sa.Column('capex_structures', sa.Float(), nullable=True, comment='Cost of plant: structures and improvements (USD).'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('capex_wheels_turbines_generators', sa.Float(), nullable=True, comment='Cost of plant: water wheels, turbines, and generators (USD).'), - sa.Column('construction_type', sa.Enum('conventional', 'outdoor', 'semioutdoor'), nullable=True, comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings."), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('energy_used_for_pumping_mwh', sa.Float(), nullable=True, comment='Energy used for pumping, in megawatt-hours.'), - sa.Column('installation_year', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('net_load_mwh', sa.Float(), nullable=True, comment='Net output for load (net generation - energy used for pumping) in megawatt-hours.'), - sa.Column('opex_dams', sa.Float(), nullable=True, comment='Production expenses: maintenance of reservoirs, dams, and waterways (USD).'), - sa.Column('opex_electric', sa.Float(), nullable=True, comment='Production expenses: electric expenses (USD).'), - sa.Column('opex_engineering', sa.Float(), nullable=True, comment='Production expenses: maintenance, supervision, and engineering (USD).'), - sa.Column('opex_generation_misc', sa.Float(), nullable=True, comment='Production expenses: miscellaneous power generation expenses (USD).'), - sa.Column('opex_misc_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of miscellaneous hydraulic plant (USD).'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_per_mwh', sa.Float(), nullable=True, comment='Total production expenses (USD per MWh generated).'), - sa.Column('opex_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of electric plant (USD).'), - sa.Column('opex_production_before_pumping', sa.Float(), nullable=True, comment='Total production expenses before pumping (USD).'), - sa.Column('opex_pumped_storage', sa.Float(), nullable=True, comment='Production expenses: pumped storage (USD).'), - sa.Column('opex_pumping', sa.Float(), nullable=True, comment='Production expenses: We are here to PUMP YOU UP! (USD).'), - sa.Column('opex_rents', sa.Float(), nullable=True, comment='Production expenses: rents (USD).'), - sa.Column('opex_structures', sa.Float(), nullable=True, comment='Production expenses: maintenance of structures (USD).'), - sa.Column('opex_total', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('opex_total_nonfuel', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('opex_water_for_power', sa.Float(), nullable=True, comment='Production expenses: water for power (USD).'), - sa.Column('peak_demand_mw', sa.Float(), nullable=True, comment='Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.'), - sa.Column('plant_capability_mw', sa.Float(), nullable=True, comment='Net plant capability in megawatts.'), - sa.Column('plant_hours_connected_while_generating', sa.Float(), nullable=True, comment='Hours the plant was connected to load while generating in the report year.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('project_num', sa.Integer(), nullable=True, comment='FERC Licensed Project Number.'), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk__out_ferc1__yearly_pumped_storage_plants_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk__out_ferc1__yearly_pumped_storage_plants_utility_id_ferc1_core_pudl__assn_plants_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk__out_ferc1__yearly_pumped_storage_plants_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('record_id', name=op.f('pk__out_ferc1__yearly_pumped_storage_plants')) - ) - op.create_table('_out_ferc1__yearly_small_plants', - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('record_id', sa.Text(), nullable=False, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('capex_per_mw', sa.Float(), nullable=True, comment='Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_type', sa.Text(), nullable=True), - sa.Column('license_id_ferc1', sa.Integer(), nullable=True, comment='FERC issued operating license ID for the facility, if available. This value is extracted from the original plant name where possible.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('opex_fuel', sa.Float(), nullable=True, comment='Production expenses: fuel (USD).'), - sa.Column('opex_maintenance', sa.Float(), nullable=True, comment='Production expenses: Maintenance (USD).'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_total', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('opex_total_nonfuel', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('peak_demand_mw', sa.Float(), nullable=True, comment='Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.'), - sa.Column('plant_type', sa.Text(), nullable=True), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk__out_ferc1__yearly_small_plants_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk__out_ferc1__yearly_small_plants_utility_id_ferc1_core_pudl__assn_plants_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk__out_ferc1__yearly_small_plants_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('record_id', name=op.f('pk__out_ferc1__yearly_small_plants')) - ) - op.create_table('_out_ferc1__yearly_steam_plants', - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_id_ferc1', sa.Integer(), nullable=True, comment='Algorithmically assigned PUDL FERC Plant ID. WARNING: NOT STABLE BETWEEN PUDL DB INITIALIZATIONS.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('asset_retirement_cost', sa.Float(), nullable=True, comment='Asset retirement cost (USD).'), - sa.Column('avg_num_employees', sa.Float(), nullable=True), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('capex_annual_addition', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total`.'), - sa.Column('capex_annual_addition_rolling', sa.Float(), nullable=True, comment='Year-to-date capital addition into `capex_total`.'), - sa.Column('capex_annual_per_kw', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total` per kw.'), - sa.Column('capex_annual_per_mw', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total` per MW.'), - sa.Column('capex_annual_per_mw_rolling', sa.Float(), nullable=True, comment='Year-to-date capital addition into `capex_total` per MW.'), - sa.Column('capex_annual_per_mwh', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total` per MWh.'), - sa.Column('capex_annual_per_mwh_rolling', sa.Float(), nullable=True, comment='Year-to-date capital addition into `capex_total` per MWh.'), - sa.Column('capex_equipment', sa.Float(), nullable=True, comment='Cost of plant: equipment (USD).'), - sa.Column('capex_land', sa.Float(), nullable=True, comment='Cost of plant: land and land rights (USD).'), - sa.Column('capex_per_mw', sa.Float(), nullable=True, comment='Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.'), - sa.Column('capex_structures', sa.Float(), nullable=True, comment='Cost of plant: structures and improvements (USD).'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('capex_wo_retirement_total', sa.Float(), nullable=True, comment='Total cost of plant (USD) without retirements.'), - sa.Column('construction_type', sa.Enum('conventional', 'outdoor', 'semioutdoor'), nullable=True, comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings."), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('installation_year', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('not_water_limited_capacity_mw', sa.Float(), nullable=True, comment='Plant capacity in MW when not limited by condenser water.'), - sa.Column('opex_allowances', sa.Float(), nullable=True, comment='Allowances.'), - sa.Column('opex_boiler', sa.Float(), nullable=True, comment='Maintenance of boiler (or reactor) plant.'), - sa.Column('opex_coolants', sa.Float(), nullable=True, comment='Cost of coolants and water (nuclear plants only)'), - sa.Column('opex_electric', sa.Float(), nullable=True, comment='Production expenses: electric expenses (USD).'), - sa.Column('opex_engineering', sa.Float(), nullable=True, comment='Production expenses: maintenance, supervision, and engineering (USD).'), - sa.Column('opex_fuel', sa.Float(), nullable=True, comment='Production expenses: fuel (USD).'), - sa.Column('opex_fuel_per_mwh', sa.Float(), nullable=True, comment='Production expenses: fuel (USD) per megawatt-hour (Mwh).'), - sa.Column('opex_misc_power', sa.Float(), nullable=True, comment='Miscellaneous steam (or nuclear) expenses.'), - sa.Column('opex_misc_steam', sa.Float(), nullable=True, comment='Maintenance of miscellaneous steam (or nuclear) plant.'), - sa.Column('opex_nonfuel_per_mwh', sa.Float(), nullable=True, comment='Investments in non-fuel production expenses per Mwh.'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_per_mwh', sa.Float(), nullable=True, comment='Total production expenses (USD per MWh generated).'), - sa.Column('opex_plants', sa.Float(), nullable=True, comment='Maintenance of electrical plant.'), - sa.Column('opex_production_total', sa.Float(), nullable=True, comment='Total operating expenses.'), - sa.Column('opex_rents', sa.Float(), nullable=True, comment='Production expenses: rents (USD).'), - sa.Column('opex_steam', sa.Float(), nullable=True, comment='Steam expenses.'), - sa.Column('opex_steam_other', sa.Float(), nullable=True, comment='Steam from other sources.'), - sa.Column('opex_structures', sa.Float(), nullable=True, comment='Production expenses: maintenance of structures (USD).'), - sa.Column('opex_total_nonfuel', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('opex_transfer', sa.Float(), nullable=True, comment='Steam transferred (Credit).'), - sa.Column('peak_demand_mw', sa.Float(), nullable=True, comment='Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.'), - sa.Column('plant_capability_mw', sa.Float(), nullable=True, comment='Net plant capability in megawatts.'), - sa.Column('plant_hours_connected_while_generating', sa.Float(), nullable=True, comment='Hours the plant was connected to load while generating in the report year.'), - sa.Column('plant_type', sa.Text(), nullable=True), - sa.Column('record_id', sa.Text(), nullable=False, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('water_limited_capacity_mw', sa.Float(), nullable=True, comment='Plant capacity in MW when limited by condenser water.'), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk__out_ferc1__yearly_steam_plants_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk__out_ferc1__yearly_steam_plants_utility_id_ferc1_core_pudl__assn_plants_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk__out_ferc1__yearly_steam_plants_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('record_id', name=op.f('pk__out_ferc1__yearly_steam_plants')) - ) - op.create_table('core_eia860__scd_boilers', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('boiler_operating_date', sa.Date(), nullable=True, comment='Date the boiler began or is planned to begin commercial operation.'), - sa.Column('boiler_status', sa.Text(), nullable=True, comment='EIA short code identifying boiler operational status.'), - sa.Column('boiler_retirement_date', sa.Date(), nullable=True, comment='Date of the scheduled or effected retirement of the boiler.'), - sa.Column('boiler_type', sa.Text(), nullable=True, comment='EIA short code indicating the standards under which the boiler is operating as described in the U.S. EPA regulation under 40 CFR.'), - sa.Column('firing_type_1', sa.Text(), nullable=True, comment='EIA short code indicating the type of firing used by this boiler.'), - sa.Column('firing_type_2', sa.Text(), nullable=True, comment='EIA short code indicating the type of firing used by this boiler.'), - sa.Column('firing_type_3', sa.Text(), nullable=True, comment='EIA short code indicating the type of firing used by this boiler.'), - sa.Column('firing_rate_using_coal_tons_per_hour', sa.Float(), nullable=True, comment='Design firing rate at maximum continuous steam flow for coal to the nearest 0.1 ton per hour.'), - sa.Column('firing_rate_using_oil_bbls_per_hour', sa.Float(), nullable=True, comment='Design firing rate at maximum continuous steam flow for pet coke to the nearest 0.1 barrels per hour.'), - sa.Column('firing_rate_using_gas_mcf_per_hour', sa.Float(), nullable=True, comment='Design firing rate at maximum continuous steam flow for gas to the nearest 0.1 cubic feet per hour.'), - sa.Column('firing_rate_using_other_fuels', sa.Float(), nullable=True, comment='Design firing rate at maximum continuous steam flow for energy sources other than coal, petroleum, or natural gas.'), - sa.Column('boiler_fuel_code_1', sa.Text(), nullable=True, comment='The code representing the most predominant type of energy that fuels the boiler.'), - sa.Column('boiler_fuel_code_2', sa.Text(), nullable=True, comment='The code representing the second most predominant type of energy that fuels the boiler.'), - sa.Column('boiler_fuel_code_3', sa.Text(), nullable=True, comment='The code representing the third most predominant type of energy that fuels the boiler.'), - sa.Column('boiler_fuel_code_4', sa.Text(), nullable=True, comment='The code representing the fourth most predominant type of energy that fuels the boiler.'), - sa.Column('waste_heat_input_mmbtu_per_hour', sa.Float(), nullable=True, comment='Design waste-heat input rate at maximum continuous steam flow where a waste-heat boiler is a boiler that receives all or a substantial portion of its energy input from the noncumbustible exhaust gases of a separate fuel-burning process (MMBtu per hour).'), - sa.Column('wet_dry_bottom', sa.Text(), nullable=True, comment='Wet or Dry Bottom where Wet Bottom is defined as slag tanks that are installed at furnace throat to contain and remove molten ash from the furnace, and Dry Bottom is defined as having no slag tanks at furnace throat area, throat area is clear, and bottom ash drops through throat to bottom ash water hoppers.'), - sa.Column('fly_ash_reinjection', sa.Boolean(), nullable=True, comment='Indicates whether the boiler is capable of re-injecting fly ash.'), - sa.Column('hrsg', sa.Boolean(), nullable=True, comment='indicates if the boiler is a heat recovery steam generator (HRSG).'), - sa.Column('max_steam_flow_1000_lbs_per_hour', sa.Float(), nullable=True, comment='Maximum continuous steam flow at 100 percent load.'), - sa.Column('turndown_ratio', sa.Float(), nullable=True, comment='The turndown ratio for the boiler.'), - sa.Column('efficiency_100pct_load', sa.Float(), nullable=True, comment='Boiler efficiency percentage when burning at 100 percent load to the nearest 0.1 percent.'), - sa.Column('efficiency_50pct_load', sa.Float(), nullable=True, comment='Boiler efficiency percentage when burning at 50 percent load to the nearest 0.1 percent.'), - sa.Column('air_flow_100pct_load_cubic_feet_per_minute', sa.Float(), nullable=True, comment='Total air flow including excess air at 100 percent load, reported at standard temperature and pressure (i.e. 68 F and one atmosphere pressure).'), - sa.Column('new_source_review', sa.Boolean(), nullable=True, comment='Indicates whether the boiler is subject to New Source Review requirements.'), - sa.Column('new_source_review_date', sa.Date(), nullable=True, comment='Month of issued New Source Review permit.'), - sa.Column('new_source_review_permit', sa.Text(), nullable=True, comment='New Source Review permit number.'), - sa.Column('regulation_particulate', sa.Text(), nullable=True, comment='EIA short code for most stringent type of statute or regulation code under which the boiler is operating for particulate matter control standards.'), - sa.Column('regulation_so2', sa.Text(), nullable=True, comment='EIA short code for most stringent type of statute or regulation code under which the boiler is operating for sulfur dioxide control standards.'), - sa.Column('regulation_nox', sa.Text(), nullable=True, comment='EIA short code for most stringent type of statute or regulation code under which the boiler is operating for nitrogen oxide control standards.'), - sa.Column('standard_particulate_rate', sa.Float(), nullable=True, comment='Numeric value for the unit of measurement specified for particulate matter.'), - sa.Column('standard_so2_rate', sa.Float(), nullable=True, comment='Numeric value for the unit of measurement specified for sulfur dioxide.'), - sa.Column('standard_nox_rate', sa.Float(), nullable=True, comment='Numeric value for the unit of measurement specified for nitrogen oxide.'), - sa.Column('unit_particulate', sa.Text(), nullable=True, comment='Numeric value for the unit of measurement specified for particulate matter.'), - sa.Column('unit_so2', sa.Text(), nullable=True, comment='Numeric value for the unit of measurement specified for sulfur dioxide.'), - sa.Column('unit_nox', sa.Text(), nullable=True, comment='Numeric value for the unit of measurement specified for nitrogen oxide.'), - sa.Column('compliance_year_particulate', sa.Integer(), nullable=True, comment='Year boiler was or is expected to be in compliance with federal, state and/or local regulations for particulate matter emissions.'), - sa.Column('compliance_year_nox', sa.Integer(), nullable=True, comment='Year boiler was or is expected to be in compliance with federal, state and/or local regulations for nitrogen oxide emissions.'), - sa.Column('compliance_year_so2', sa.Integer(), nullable=True, comment='Year boiler was or is expected to be in compliance with federal, state and/or local regulations for sulfur dioxide emissions.'), - sa.Column('particulate_control_out_of_compliance_strategy_1', sa.Text(), nullable=True, comment='If boiler is not in compliance with particulate matter regulations, strategy for compliance.'), - sa.Column('particulate_control_out_of_compliance_strategy_2', sa.Text(), nullable=True, comment='If boiler is not in compliance with particulate matter regulations, strategy for compliance.'), - sa.Column('particulate_control_out_of_compliance_strategy_3', sa.Text(), nullable=True, comment='If boiler is not in compliance with particulate matter regulations, strategy for compliance.'), - sa.Column('so2_control_out_of_compliance_strategy_1', sa.Text(), nullable=True, comment='If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.'), - sa.Column('so2_control_out_of_compliance_strategy_2', sa.Text(), nullable=True, comment='If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.'), - sa.Column('so2_control_out_of_compliance_strategy_3', sa.Text(), nullable=True, comment='If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.'), - sa.Column('so2_control_existing_caaa_compliance_strategy_1', sa.Text(), nullable=True, comment='Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_existing_caaa_compliance_strategy_2', sa.Text(), nullable=True, comment='Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_existing_caaa_compliance_strategy_3', sa.Text(), nullable=True, comment='Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_planned_caaa_compliance_strategy_1', sa.Text(), nullable=True, comment='Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_planned_caaa_compliance_strategy_2', sa.Text(), nullable=True, comment='Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_planned_caaa_compliance_strategy_3', sa.Text(), nullable=True, comment='Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_out_of_compliance_strategy_1', sa.Text(), nullable=True, comment='If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.'), - sa.Column('nox_control_out_of_compliance_strategy_2', sa.Text(), nullable=True, comment='If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.'), - sa.Column('nox_control_out_of_compliance_strategy_3', sa.Text(), nullable=True, comment='If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.'), - sa.Column('nox_control_existing_caaa_compliance_strategy_1', sa.Text(), nullable=True, comment='Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_existing_caaa_compliance_strategy_2', sa.Text(), nullable=True, comment='Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_existing_caaa_compliance_strategy_3', sa.Text(), nullable=True, comment='Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_planned_caaa_compliance_strategy_1', sa.Text(), nullable=True, comment='Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_planned_caaa_compliance_strategy_2', sa.Text(), nullable=True, comment='Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_planned_caaa_compliance_strategy_3', sa.Text(), nullable=True, comment='Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('compliance_year_mercury', sa.Integer(), nullable=True, comment='Year boiler was or is expected to be in compliance with federal, state and/or local regulations for mercury emissions.'), - sa.Column('mercury_control_existing_strategy_1', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_existing_strategy_2', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_existing_strategy_3', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_existing_strategy_4', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_existing_strategy_5', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_existing_strategy_6', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_proposed_strategy_1', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_proposed_strategy_2', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_proposed_strategy_3', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent mercury regulation.'), - sa.Column('nox_control_existing_strategy_1', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_existing_strategy_2', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_existing_strategy_3', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_manufacturer', sa.Text(), nullable=True, comment='Name of nitrogen oxide control manufacturer.'), - sa.Column('nox_control_manufacturer_code', sa.Text(), nullable=True, comment='Code indicating the nitrogen oxide control burner manufacturer.'), - sa.Column('nox_control_proposed_strategy_1', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_proposed_strategy_2', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_proposed_strategy_3', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_status_code', sa.Text(), nullable=True, comment='Nitrogen oxide control status code.'), - sa.Column('regulation_mercury', sa.Text(), nullable=True, comment='Most stringent type of statute or regulation code under which the boiler is operating for mercury control standards.'), - sa.Column('so2_control_existing_strategy_1', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('so2_control_existing_strategy_2', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('so2_control_existing_strategy_3', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('so2_control_proposed_strategy_1', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('so2_control_proposed_strategy_2', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('so2_control_proposed_strategy_3', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('standard_so2_percent_scrubbed', sa.Float(), nullable=True, comment='The percent of sulfur dioxide to be scrubbed specified by the most stringent sulfur dioxide regulation.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['boiler_fuel_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_boilers_boiler_fuel_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['boiler_fuel_code_2'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_boilers_boiler_fuel_code_2_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['boiler_fuel_code_3'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_boilers_boiler_fuel_code_3_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['boiler_fuel_code_4'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_boilers_boiler_fuel_code_4_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['boiler_status'], ['core_eia__codes_boiler_status.code'], name=op.f('fk_core_eia860__scd_boilers_boiler_status_core_eia__codes_boiler_status')), - sa.ForeignKeyConstraint(['boiler_type'], ['core_eia__codes_boiler_types.code'], name=op.f('fk_core_eia860__scd_boilers_boiler_type_core_eia__codes_boiler_types')), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia860__scd_boilers_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['firing_type_1'], ['core_eia__codes_firing_types.code'], name=op.f('fk_core_eia860__scd_boilers_firing_type_1_core_eia__codes_firing_types')), - sa.ForeignKeyConstraint(['firing_type_2'], ['core_eia__codes_firing_types.code'], name=op.f('fk_core_eia860__scd_boilers_firing_type_2_core_eia__codes_firing_types')), - sa.ForeignKeyConstraint(['firing_type_3'], ['core_eia__codes_firing_types.code'], name=op.f('fk_core_eia860__scd_boilers_firing_type_3_core_eia__codes_firing_types')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_1'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_mercury_control_existing_strategy_1_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_2'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_mercury_control_existing_strategy_2_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_3'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_mercury_control_existing_strategy_3_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_4'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_mercury_control_existing_strategy_4_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_5'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_mercury_control_existing_strategy_5_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_6'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_mercury_control_existing_strategy_6_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_proposed_strategy_1'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_mercury_control_proposed_strategy_1_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_proposed_strategy_2'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_mercury_control_proposed_strategy_2_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_proposed_strategy_3'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_mercury_control_proposed_strategy_3_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_existing_caaa_compliance_strategy_1'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_existing_caaa_compliance_strategy_1_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_existing_caaa_compliance_strategy_2'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_existing_caaa_compliance_strategy_2_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_existing_caaa_compliance_strategy_3'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_existing_caaa_compliance_strategy_3_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_manufacturer_code'], ['core_eia__codes_environmental_equipment_manufacturers.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_manufacturer_code_core_eia__codes_environmental_equipment_manufacturers')), - sa.ForeignKeyConstraint(['nox_control_out_of_compliance_strategy_1'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_out_of_compliance_strategy_1_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_out_of_compliance_strategy_2'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_out_of_compliance_strategy_2_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_out_of_compliance_strategy_3'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_out_of_compliance_strategy_3_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_planned_caaa_compliance_strategy_1'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_planned_caaa_compliance_strategy_1_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_planned_caaa_compliance_strategy_2'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_planned_caaa_compliance_strategy_2_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_planned_caaa_compliance_strategy_3'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_planned_caaa_compliance_strategy_3_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_status_code'], ['core_eia__codes_nox_control_status.code'], name=op.f('fk_core_eia860__scd_boilers_nox_control_status_code_core_eia__codes_nox_control_status')), - sa.ForeignKeyConstraint(['particulate_control_out_of_compliance_strategy_1'], ['core_eia__codes_particulate_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_particulate_control_out_of_compliance_strategy_1_core_eia__codes_particulate_compliance_strategies')), - sa.ForeignKeyConstraint(['particulate_control_out_of_compliance_strategy_2'], ['core_eia__codes_particulate_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_particulate_control_out_of_compliance_strategy_2_core_eia__codes_particulate_compliance_strategies')), - sa.ForeignKeyConstraint(['particulate_control_out_of_compliance_strategy_3'], ['core_eia__codes_particulate_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_particulate_control_out_of_compliance_strategy_3_core_eia__codes_particulate_compliance_strategies')), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id'], ['core_eia__entity_boilers.plant_id_eia', 'core_eia__entity_boilers.boiler_id'], name=op.f('fk_core_eia860__scd_boilers_plant_id_eia_core_eia__entity_boilers')), - sa.ForeignKeyConstraint(['plant_id_eia', 'report_date'], ['core_eia860__scd_plants.plant_id_eia', 'core_eia860__scd_plants.report_date'], name=op.f('fk_core_eia860__scd_boilers_plant_id_eia_core_eia860__scd_plants')), - sa.ForeignKeyConstraint(['regulation_mercury'], ['core_eia__codes_regulations.code'], name=op.f('fk_core_eia860__scd_boilers_regulation_mercury_core_eia__codes_regulations')), - sa.ForeignKeyConstraint(['regulation_nox'], ['core_eia__codes_regulations.code'], name=op.f('fk_core_eia860__scd_boilers_regulation_nox_core_eia__codes_regulations')), - sa.ForeignKeyConstraint(['regulation_particulate'], ['core_eia__codes_regulations.code'], name=op.f('fk_core_eia860__scd_boilers_regulation_particulate_core_eia__codes_regulations')), - sa.ForeignKeyConstraint(['regulation_so2'], ['core_eia__codes_regulations.code'], name=op.f('fk_core_eia860__scd_boilers_regulation_so2_core_eia__codes_regulations')), - sa.ForeignKeyConstraint(['so2_control_existing_caaa_compliance_strategy_1'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_so2_control_existing_caaa_compliance_strategy_1_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_existing_caaa_compliance_strategy_2'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_so2_control_existing_caaa_compliance_strategy_2_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_existing_caaa_compliance_strategy_3'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_so2_control_existing_caaa_compliance_strategy_3_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_out_of_compliance_strategy_1'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_so2_control_out_of_compliance_strategy_1_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_out_of_compliance_strategy_2'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_so2_control_out_of_compliance_strategy_2_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_out_of_compliance_strategy_3'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_so2_control_out_of_compliance_strategy_3_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_planned_caaa_compliance_strategy_1'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_so2_control_planned_caaa_compliance_strategy_1_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_planned_caaa_compliance_strategy_2'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_so2_control_planned_caaa_compliance_strategy_2_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_planned_caaa_compliance_strategy_3'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_core_eia860__scd_boilers_so2_control_planned_caaa_compliance_strategy_3_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['unit_nox'], ['core_eia__codes_nox_units.code'], name=op.f('fk_core_eia860__scd_boilers_unit_nox_core_eia__codes_nox_units')), - sa.ForeignKeyConstraint(['unit_particulate'], ['core_eia__codes_particulate_units.code'], name=op.f('fk_core_eia860__scd_boilers_unit_particulate_core_eia__codes_particulate_units')), - sa.ForeignKeyConstraint(['unit_so2'], ['core_eia__codes_so2_units.code'], name=op.f('fk_core_eia860__scd_boilers_unit_so2_core_eia__codes_so2_units')), - sa.ForeignKeyConstraint(['wet_dry_bottom'], ['core_eia__codes_wet_dry_bottom.code'], name=op.f('fk_core_eia860__scd_boilers_wet_dry_bottom_core_eia__codes_wet_dry_bottom')), - sa.PrimaryKeyConstraint('plant_id_eia', 'boiler_id', 'report_date', name=op.f('pk_core_eia860__scd_boilers')) - ) - op.create_table('core_eia860__scd_generators', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('operational_status_code', sa.Text(), nullable=True, comment='The operating status of the asset.'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.Column('ownership_code', sa.Text(), nullable=True, comment='Identifies the ownership for each generator.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('summer_capacity_mw', sa.Float(), nullable=True, comment='The net summer capacity.'), - sa.Column('summer_capacity_estimate', sa.Boolean(), nullable=True, comment='Whether the summer capacity value was an estimate'), - sa.Column('winter_capacity_mw', sa.Float(), nullable=True, comment='The net winter capacity.'), - sa.Column('winter_capacity_estimate', sa.Boolean(), nullable=True, comment='Whether the winter capacity value was an estimate'), - sa.Column('net_capacity_mwdc', sa.Float(), nullable=True, comment='Generation capacity in megawatts of direct current that is subject to a net metering agreement. Typically used for behind-the-meter solar PV.'), - sa.Column('energy_storage_capacity_mwh', sa.Float(), nullable=True, comment='Energy storage capacity in MWh (e.g. for batteries).'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('energy_source_code_1', sa.Text(), nullable=True, comment='The code representing the most predominant type of energy that fuels the generator.'), - sa.Column('energy_source_code_2', sa.Text(), nullable=True, comment='The code representing the second most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_3', sa.Text(), nullable=True, comment='The code representing the third most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_4', sa.Text(), nullable=True, comment='The code representing the fourth most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_5', sa.Text(), nullable=True, comment='The code representing the fifth most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_6', sa.Text(), nullable=True, comment='The code representing the sixth most predominant type of energy that fuels the generator'), - sa.Column('energy_source_1_transport_1', sa.Text(), nullable=True, comment='Primary mode of transport for energy source 1.'), - sa.Column('energy_source_1_transport_2', sa.Text(), nullable=True, comment='Secondary mode of transport for energy source 1.'), - sa.Column('energy_source_1_transport_3', sa.Text(), nullable=True, comment='Tertiary mode of transport for energy source 1.'), - sa.Column('energy_source_2_transport_1', sa.Text(), nullable=True, comment='Primary mode of transport for energy source 2.'), - sa.Column('energy_source_2_transport_2', sa.Text(), nullable=True, comment='Secondary mode of transport for energy source 2.'), - sa.Column('energy_source_2_transport_3', sa.Text(), nullable=True, comment='Tertiary mode of transport for energy source 2.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('multiple_fuels', sa.Boolean(), nullable=True, comment='Can the generator burn multiple fuels?'), - sa.Column('deliver_power_transgrid', sa.Boolean(), nullable=True, comment='Indicate whether the generator can deliver power to the transmission grid.'), - sa.Column('distributed_generation', sa.Boolean(), nullable=True, comment='Whether the generator is considered distributed generation'), - sa.Column('syncronized_transmission_grid', sa.Boolean(), nullable=True, comment='Indicates whether standby generators (SB status) can be synchronized to the grid.'), - sa.Column('turbines_num', sa.Integer(), nullable=True, comment='Number of wind turbines, or hydrokinetic buoys.'), - sa.Column('planned_modifications', sa.Boolean(), nullable=True, comment='Indicates whether there are any planned capacity uprates/derates, repowering, other modifications, or generator retirements scheduled for the next 5 years.'), - sa.Column('planned_net_summer_capacity_uprate_mw', sa.Float(), nullable=True, comment='Increase in summer capacity expected to be realized from the modification to the equipment.'), - sa.Column('planned_net_winter_capacity_uprate_mw', sa.Float(), nullable=True, comment='Increase in winter capacity expected to be realized from the uprate modification to the equipment.'), - sa.Column('planned_uprate_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter operation after the uprate modification.'), - sa.Column('planned_net_summer_capacity_derate_mw', sa.Float(), nullable=True, comment='Decrease in summer capacity expected to be realized from the derate modification to the equipment.'), - sa.Column('planned_net_winter_capacity_derate_mw', sa.Float(), nullable=True, comment='Decrease in winter capacity expected to be realized from the derate modification to the equipment.'), - sa.Column('planned_derate_date', sa.Date(), nullable=True, comment='Planned effective month that the generator is scheduled to enter operation after the derate modification.'), - sa.Column('planned_new_prime_mover_code', sa.Text(), nullable=True, comment='New prime mover for the planned repowered generator.'), - sa.Column('planned_energy_source_code_1', sa.Text(), nullable=True, comment='New energy source code for the planned repowered generator.'), - sa.Column('planned_repower_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter operation after the repowering is complete.'), - sa.Column('other_planned_modifications', sa.Boolean(), nullable=True, comment='Indicates whether there are there other modifications planned for the generator.'), - sa.Column('other_modifications_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter commercial operation after any other planned modification is complete.'), - sa.Column('planned_generator_retirement_date', sa.Date(), nullable=True, comment='Planned effective date of the scheduled retirement of the generator.'), - sa.Column('carbon_capture', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses carbon capture technology.'), - sa.Column('startup_source_code_1', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_2', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_3', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_4', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('technology_description', sa.Text(), nullable=True, comment='High level description of the technology used by the generator to produce electricity.'), - sa.Column('turbines_inverters_hydrokinetics', sa.Integer(), nullable=True, comment='Number of wind turbines, or hydrokinetic buoys.'), - sa.Column('time_cold_shutdown_full_load_code', sa.Text(), nullable=True, comment='The minimum amount of time required to bring the unit to full load from shutdown.'), - sa.Column('planned_new_capacity_mw', sa.Float(), nullable=True, comment='The expected new namplate capacity for the generator.'), - sa.Column('cofire_fuels', sa.Boolean(), nullable=True, comment='Can the generator co-fire fuels?.'), - sa.Column('switch_oil_gas', sa.Boolean(), nullable=True, comment='Indicates whether the generator switch between oil and natural gas.'), - sa.Column('nameplate_power_factor', sa.Float(), nullable=True, comment='The nameplate power factor of the generator.'), - sa.Column('minimum_load_mw', sa.Float(), nullable=True, comment='The minimum load at which the generator can operate at continuosuly.'), - sa.Column('uprate_derate_during_year', sa.Boolean(), nullable=True, comment='Was an uprate or derate completed on this generator during the reporting year?'), - sa.Column('uprate_derate_completed_date', sa.Date(), nullable=True, comment='The date when the uprate or derate was completed.'), - sa.Column('current_planned_generator_operating_date', sa.Date(), nullable=True, comment='The most recently updated effective date on which the generator is scheduled to start operation'), - sa.Column('summer_estimated_capability_mw', sa.Float(), nullable=True, comment='EIA estimated summer capacity (in MWh).'), - sa.Column('winter_estimated_capability_mw', sa.Float(), nullable=True, comment='EIA estimated winter capacity (in MWh).'), - sa.Column('generator_retirement_date', sa.Date(), nullable=True, comment='Date of the scheduled or effected retirement of the generator.'), - sa.Column('owned_by_non_utility', sa.Boolean(), nullable=True, comment='Whether any part of generator is owned by a nonutilty'), - sa.Column('reactive_power_output_mvar', sa.Float(), nullable=True, comment='Reactive Power Output (MVAr)'), - sa.Column('ferc_qualifying_facility', sa.Boolean(), nullable=True, comment='Indicatates whether or not a generator is a qualifying FERC cogeneation facility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia860__scd_generators_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['energy_source_1_transport_1'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_1_transport_1_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_1_transport_2'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_1_transport_2_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_1_transport_3'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_1_transport_3_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_1'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_2_transport_1_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_2'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_2_transport_2_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_3'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_2_transport_3_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_2'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_code_2_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_3'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_code_3_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_4'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_code_4_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_5'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_code_5_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_6'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_energy_source_code_6_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['operational_status_code'], ['core_eia__codes_operational_status.code'], name=op.f('fk_core_eia860__scd_generators_operational_status_code_core_eia__codes_operational_status')), - sa.ForeignKeyConstraint(['planned_energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_planned_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['planned_new_prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_core_eia860__scd_generators_planned_new_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id'], ['core_eia__entity_generators.plant_id_eia', 'core_eia__entity_generators.generator_id'], name=op.f('fk_core_eia860__scd_generators_plant_id_eia_core_eia__entity_generators')), - sa.ForeignKeyConstraint(['plant_id_eia', 'report_date'], ['core_eia860__scd_plants.plant_id_eia', 'core_eia860__scd_plants.report_date'], name=op.f('fk_core_eia860__scd_generators_plant_id_eia_core_eia860__scd_plants')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_core_eia860__scd_generators_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['startup_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_startup_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_2'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_startup_source_code_2_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_3'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_startup_source_code_3_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_4'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_core_eia860__scd_generators_startup_source_code_4_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_core_eia860__scd_generators_utility_id_eia_core_eia860__scd_utilities')), - sa.PrimaryKeyConstraint('plant_id_eia', 'generator_id', 'report_date', name=op.f('pk_core_eia860__scd_generators')) - ) - op.create_table('core_ferc1__yearly_fuel', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_units', sa.Enum('mmbtu', 'gramsU', 'kg', 'mwhth', 'kgal', 'bbl', 'klbs', 'mcf', 'gal', 'mwdth', 'btu', 'ton'), nullable=True, comment='Reported unit of measure for fuel.'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_cost_per_unit_burned', sa.Float(), nullable=True, comment='Average cost of fuel consumed in the report year per reported fuel unit (USD).'), - sa.Column('fuel_cost_per_unit_delivered', sa.Float(), nullable=True, comment='Average cost of fuel delivered in the report year per reported fuel unit (USD).'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk_core_ferc1__yearly_fuel_utility_id_ferc1_core_pudl__assn_plants_ferc1')) - ) - op.create_table('core_ferc1__yearly_plants_hydro', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('project_num', sa.Integer(), nullable=True, comment='FERC Licensed Project Number.'), - sa.Column('plant_type', sa.Enum('hydro', 'storage', 'run_of_river_with_storage', 'na_category', 'run_of_river'), nullable=True), - sa.Column('construction_type', sa.Enum('conventional', 'outdoor', 'semioutdoor'), nullable=True, comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings."), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('installation_year', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('peak_demand_mw', sa.Float(), nullable=True, comment='Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.'), - sa.Column('plant_hours_connected_while_generating', sa.Float(), nullable=True, comment='Hours the plant was connected to load while generating in the report year.'), - sa.Column('net_capacity_favorable_conditions_mw', sa.Float(), nullable=True, comment='Net plant capability under the most favorable operating conditions, in megawatts.'), - sa.Column('net_capacity_adverse_conditions_mw', sa.Float(), nullable=True, comment='Net plant capability under the least favorable operating conditions, in megawatts.'), - sa.Column('avg_num_employees', sa.Float(), nullable=True), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('capex_land', sa.Float(), nullable=True, comment='Cost of plant: land and land rights (USD).'), - sa.Column('capex_structures', sa.Float(), nullable=True, comment='Cost of plant: structures and improvements (USD).'), - sa.Column('capex_facilities', sa.Float(), nullable=True, comment='Cost of plant: reservoirs, dams, and waterways (USD).'), - sa.Column('capex_equipment', sa.Float(), nullable=True, comment='Cost of plant: equipment (USD).'), - sa.Column('capex_roads', sa.Float(), nullable=True, comment='Cost of plant: roads, railroads, and bridges (USD).'), - sa.Column('asset_retirement_cost', sa.Float(), nullable=True, comment='Asset retirement cost (USD).'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('capex_per_mw', sa.Float(), nullable=True, comment='Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_water_for_power', sa.Float(), nullable=True, comment='Production expenses: water for power (USD).'), - sa.Column('opex_hydraulic', sa.Float(), nullable=True, comment='Production expenses: hydraulic expenses (USD).'), - sa.Column('opex_electric', sa.Float(), nullable=True, comment='Production expenses: electric expenses (USD).'), - sa.Column('opex_generation_misc', sa.Float(), nullable=True, comment='Production expenses: miscellaneous power generation expenses (USD).'), - sa.Column('opex_rents', sa.Float(), nullable=True, comment='Production expenses: rents (USD).'), - sa.Column('opex_engineering', sa.Float(), nullable=True, comment='Production expenses: maintenance, supervision, and engineering (USD).'), - sa.Column('opex_structures', sa.Float(), nullable=True, comment='Production expenses: maintenance of structures (USD).'), - sa.Column('opex_dams', sa.Float(), nullable=True, comment='Production expenses: maintenance of reservoirs, dams, and waterways (USD).'), - sa.Column('opex_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of electric plant (USD).'), - sa.Column('opex_misc_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of miscellaneous hydraulic plant (USD).'), - sa.Column('opex_total', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('opex_per_mwh', sa.Float(), nullable=True, comment='Total production expenses (USD per MWh generated).'), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk_core_ferc1__yearly_plants_hydro_utility_id_ferc1_core_pudl__assn_plants_ferc1')) - ) - op.create_table('core_ferc1__yearly_plants_pumped_storage', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('project_num', sa.Integer(), nullable=True, comment='FERC Licensed Project Number.'), - sa.Column('construction_type', sa.Enum('conventional', 'outdoor', 'semioutdoor'), nullable=True, comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings."), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('installation_year', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('peak_demand_mw', sa.Float(), nullable=True, comment='Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.'), - sa.Column('plant_hours_connected_while_generating', sa.Float(), nullable=True, comment='Hours the plant was connected to load while generating in the report year.'), - sa.Column('plant_capability_mw', sa.Float(), nullable=True, comment='Net plant capability in megawatts.'), - sa.Column('avg_num_employees', sa.Float(), nullable=True), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('energy_used_for_pumping_mwh', sa.Float(), nullable=True, comment='Energy used for pumping, in megawatt-hours.'), - sa.Column('net_load_mwh', sa.Float(), nullable=True, comment='Net output for load (net generation - energy used for pumping) in megawatt-hours.'), - sa.Column('capex_land', sa.Float(), nullable=True, comment='Cost of plant: land and land rights (USD).'), - sa.Column('capex_structures', sa.Float(), nullable=True, comment='Cost of plant: structures and improvements (USD).'), - sa.Column('capex_facilities', sa.Float(), nullable=True, comment='Cost of plant: reservoirs, dams, and waterways (USD).'), - sa.Column('capex_wheels_turbines_generators', sa.Float(), nullable=True, comment='Cost of plant: water wheels, turbines, and generators (USD).'), - sa.Column('capex_equipment_electric', sa.Float(), nullable=True, comment='Cost of plant: accessory electric equipment (USD).'), - sa.Column('capex_equipment_misc', sa.Float(), nullable=True, comment='Cost of plant: miscellaneous power plant equipment (USD).'), - sa.Column('capex_roads', sa.Float(), nullable=True, comment='Cost of plant: roads, railroads, and bridges (USD).'), - sa.Column('asset_retirement_cost', sa.Float(), nullable=True, comment='Asset retirement cost (USD).'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('capex_per_mw', sa.Float(), nullable=True, comment='Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_water_for_power', sa.Float(), nullable=True, comment='Production expenses: water for power (USD).'), - sa.Column('opex_pumped_storage', sa.Float(), nullable=True, comment='Production expenses: pumped storage (USD).'), - sa.Column('opex_electric', sa.Float(), nullable=True, comment='Production expenses: electric expenses (USD).'), - sa.Column('opex_generation_misc', sa.Float(), nullable=True, comment='Production expenses: miscellaneous power generation expenses (USD).'), - sa.Column('opex_rents', sa.Float(), nullable=True, comment='Production expenses: rents (USD).'), - sa.Column('opex_engineering', sa.Float(), nullable=True, comment='Production expenses: maintenance, supervision, and engineering (USD).'), - sa.Column('opex_structures', sa.Float(), nullable=True, comment='Production expenses: maintenance of structures (USD).'), - sa.Column('opex_dams', sa.Float(), nullable=True, comment='Production expenses: maintenance of reservoirs, dams, and waterways (USD).'), - sa.Column('opex_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of electric plant (USD).'), - sa.Column('opex_misc_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of miscellaneous hydraulic plant (USD).'), - sa.Column('opex_production_before_pumping', sa.Float(), nullable=True, comment='Total production expenses before pumping (USD).'), - sa.Column('opex_pumping', sa.Float(), nullable=True, comment='Production expenses: We are here to PUMP YOU UP! (USD).'), - sa.Column('opex_total', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('opex_per_mwh', sa.Float(), nullable=True, comment='Total production expenses (USD per MWh generated).'), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk_core_ferc1__yearly_plants_pumped_storage_utility_id_ferc1_core_pudl__assn_plants_ferc1')) - ) - op.create_table('core_ferc1__yearly_plants_small', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('plant_type', sa.Text(), nullable=True), - sa.Column('license_id_ferc1', sa.Integer(), nullable=True, comment='FERC issued operating license ID for the facility, if available. This value is extracted from the original plant name where possible.'), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('peak_demand_mw', sa.Float(), nullable=True, comment='Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('capex_per_mw', sa.Float(), nullable=True, comment='Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_fuel', sa.Float(), nullable=True, comment='Production expenses: fuel (USD).'), - sa.Column('opex_maintenance', sa.Float(), nullable=True, comment='Production expenses: Maintenance (USD).'), - sa.Column('fuel_type', sa.Text(), nullable=True), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk_core_ferc1__yearly_plants_small_utility_id_ferc1_core_pudl__assn_plants_ferc1')) - ) - op.create_table('core_ferc1__yearly_plants_steam', - sa.Column('record_id', sa.Text(), nullable=True, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('plant_id_ferc1', sa.Integer(), nullable=True, comment='Algorithmically assigned PUDL FERC Plant ID. WARNING: NOT STABLE BETWEEN PUDL DB INITIALIZATIONS.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('plant_type', sa.Enum('internal_combustion', 'combustion_turbine', 'photovoltaic', 'solar_thermal', 'na_category', 'nuclear', 'steam', 'geothermal', 'combined_cycle', 'wind'), nullable=True), - sa.Column('construction_type', sa.Enum('conventional', 'outdoor', 'semioutdoor'), nullable=True, comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings."), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('installation_year', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('peak_demand_mw', sa.Float(), nullable=True, comment='Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.'), - sa.Column('plant_hours_connected_while_generating', sa.Float(), nullable=True, comment='Hours the plant was connected to load while generating in the report year.'), - sa.Column('plant_capability_mw', sa.Float(), nullable=True, comment='Net plant capability in megawatts.'), - sa.Column('water_limited_capacity_mw', sa.Float(), nullable=True, comment='Plant capacity in MW when limited by condenser water.'), - sa.Column('not_water_limited_capacity_mw', sa.Float(), nullable=True, comment='Plant capacity in MW when not limited by condenser water.'), - sa.Column('avg_num_employees', sa.Float(), nullable=True), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('capex_land', sa.Float(), nullable=True, comment='Cost of plant: land and land rights (USD).'), - sa.Column('capex_structures', sa.Float(), nullable=True, comment='Cost of plant: structures and improvements (USD).'), - sa.Column('capex_equipment', sa.Float(), nullable=True, comment='Cost of plant: equipment (USD).'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('capex_per_mw', sa.Float(), nullable=True, comment='Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_fuel', sa.Float(), nullable=True, comment='Production expenses: fuel (USD).'), - sa.Column('opex_coolants', sa.Float(), nullable=True, comment='Cost of coolants and water (nuclear plants only)'), - sa.Column('opex_steam', sa.Float(), nullable=True, comment='Steam expenses.'), - sa.Column('opex_steam_other', sa.Float(), nullable=True, comment='Steam from other sources.'), - sa.Column('opex_transfer', sa.Float(), nullable=True, comment='Steam transferred (Credit).'), - sa.Column('opex_electric', sa.Float(), nullable=True, comment='Production expenses: electric expenses (USD).'), - sa.Column('opex_misc_power', sa.Float(), nullable=True, comment='Miscellaneous steam (or nuclear) expenses.'), - sa.Column('opex_rents', sa.Float(), nullable=True, comment='Production expenses: rents (USD).'), - sa.Column('opex_allowances', sa.Float(), nullable=True, comment='Allowances.'), - sa.Column('opex_engineering', sa.Float(), nullable=True, comment='Production expenses: maintenance, supervision, and engineering (USD).'), - sa.Column('opex_structures', sa.Float(), nullable=True, comment='Production expenses: maintenance of structures (USD).'), - sa.Column('opex_boiler', sa.Float(), nullable=True, comment='Maintenance of boiler (or reactor) plant.'), - sa.Column('opex_plants', sa.Float(), nullable=True, comment='Maintenance of electrical plant.'), - sa.Column('opex_misc_steam', sa.Float(), nullable=True, comment='Maintenance of miscellaneous steam (or nuclear) plant.'), - sa.Column('opex_production_total', sa.Float(), nullable=True, comment='Total operating expenses.'), - sa.Column('opex_per_mwh', sa.Float(), nullable=True, comment='Total production expenses (USD per MWh generated).'), - sa.Column('asset_retirement_cost', sa.Float(), nullable=True, comment='Asset retirement cost (USD).'), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk_core_ferc1__yearly_plants_steam_utility_id_ferc1_core_pudl__assn_plants_ferc1')) - ) - op.create_table('out_eia923__yearly_fuel_receipts_costs', - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_received_units', sa.Float(), nullable=True, comment='Quanity of fuel received in tons, barrel, or Mcf.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('sulfur_content_pct', sa.Float(), nullable=True, comment='Sulfur content percentage by weight to the nearest 0.01 percent.'), - sa.Column('ash_content_pct', sa.Float(), nullable=True, comment='Ash content percentage by weight to the nearest 0.1 percent.'), - sa.Column('mercury_content_ppm', sa.Float(), nullable=True, comment='Mercury content in parts per million (ppm) to the nearest 0.001 ppm.'), - sa.Column('moisture_content_pct', sa.Float(), nullable=True), - sa.Column('chlorine_content_ppm', sa.Float(), nullable=True), - sa.ForeignKeyConstraint(['plant_id_eia', 'report_date'], ['core_eia860__scd_plants.plant_id_eia', 'core_eia860__scd_plants.report_date'], name=op.f('fk_out_eia923__yearly_fuel_receipts_costs_plant_id_eia_core_eia860__scd_plants')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__yearly_fuel_receipts_costs_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia923__yearly_fuel_receipts_costs_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__yearly_fuel_receipts_costs_utility_id_pudl_core_pudl__entity_utilities_pudl')) - ) - op.create_table('out_eia923__yearly_generation_fuel_combined', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_units', sa.Float(), nullable=True, comment='Consumption for electric generation of the fuel type in physical unit.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia923__yearly_generation_fuel_combined_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'report_date'], ['core_eia860__scd_plants.plant_id_eia', 'core_eia860__scd_plants.report_date'], name=op.f('fk_out_eia923__yearly_generation_fuel_combined_plant_id_eia_core_eia860__scd_plants')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__yearly_generation_fuel_combined_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia923__yearly_generation_fuel_combined_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia923__yearly_generation_fuel_combined_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__yearly_generation_fuel_combined_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'report_date', 'prime_mover_code', 'energy_source_code', name=op.f('pk_out_eia923__yearly_generation_fuel_combined')) - ) - op.create_table('out_eia__yearly_plants', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('city', sa.Text(), nullable=True), - sa.Column('county', sa.Text(), nullable=True, comment='County name.'), - sa.Column('latitude', sa.Float(), nullable=True, comment="Latitude of the plant's location, in degrees."), - sa.Column('longitude', sa.Float(), nullable=True, comment="Longitude of the plant's location, in degrees."), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('street_address', sa.Text(), nullable=True), - sa.Column('zip_code', sa.Text(), nullable=True, comment='Five digit US Zip Code.'), - sa.Column('timezone', sa.Enum('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu'), nullable=True, comment='IANA timezone name'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('ash_impoundment', sa.Boolean(), nullable=True, comment='Is there an ash impoundment (e.g. pond, reservoir) at the plant?'), - sa.Column('ash_impoundment_lined', sa.Boolean(), nullable=True, comment='If there is an ash impoundment at the plant, is the impoundment lined?'), - sa.Column('ash_impoundment_status', sa.Text(), nullable=True, comment='If there is an ash impoundment at the plant, the ash impoundment status as of December 31 of the reporting year.'), - sa.Column('balancing_authority_code_eia', sa.Text(), nullable=True, comment='EIA short code identifying a balancing authority.'), - sa.Column('balancing_authority_name_eia', sa.Text(), nullable=True, comment='Name of the balancing authority.'), - sa.Column('datum', sa.Text(), nullable=True, comment='Geodetic coordinate system identifier (e.g. NAD27, NAD83, or WGS84).'), - sa.Column('energy_storage', sa.Boolean(), nullable=True, comment='Indicates if the facility has energy storage capabilities.'), - sa.Column('ferc_cogen_docket_no', sa.Text(), nullable=True, comment='The docket number relating to the FERC cogenerator status. See FERC Form 556.'), - sa.Column('ferc_cogen_status', sa.Boolean(), nullable=True, comment='Indicates whether the plant has FERC qualifying facility cogenerator status. See FERC Form 556.'), - sa.Column('ferc_exempt_wholesale_generator_docket_no', sa.Text(), nullable=True, comment='The docket number relating to the FERC qualifying facility exempt wholesale generator status.'), - sa.Column('ferc_exempt_wholesale_generator', sa.Boolean(), nullable=True, comment='Indicates whether the plant has FERC qualifying facility exempt wholesale generator status'), - sa.Column('ferc_small_power_producer_docket_no', sa.Text(), nullable=True, comment='The docket number relating to the FERC qualifying facility small power producer status. See FERC Form 556.'), - sa.Column('ferc_small_power_producer', sa.Boolean(), nullable=True, comment='Indicates whether the plant has FERC qualifying facility small power producer status. See FERC Form 556.'), - sa.Column('ferc_qualifying_facility_docket_no', sa.Text(), nullable=True, comment='The docket number relating to the FERC qualifying facility cogenerator status. See FERC Form 556.'), - sa.Column('grid_voltage_1_kv', sa.Float(), nullable=True, comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities"), - sa.Column('grid_voltage_2_kv', sa.Float(), nullable=True, comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities"), - sa.Column('grid_voltage_3_kv', sa.Float(), nullable=True, comment="Plant's grid voltage at point of interconnection to transmission or distibution facilities"), - sa.Column('iso_rto_code', sa.Text(), nullable=True, comment="The code of the plant's ISO or RTO. NA if not reported in that year."), - sa.Column('liquefied_natural_gas_storage', sa.Boolean(), nullable=True, comment='Indicates if the facility have the capability to store the natural gas in the form of liquefied natural gas.'), - sa.Column('natural_gas_local_distribution_company', sa.Text(), nullable=True, comment='Names of Local Distribution Company (LDC), connected to natural gas burning power plants.'), - sa.Column('natural_gas_storage', sa.Boolean(), nullable=True, comment='Indicates if the facility have on-site storage of natural gas.'), - sa.Column('natural_gas_pipeline_name_1', sa.Text(), nullable=True, comment='The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.'), - sa.Column('natural_gas_pipeline_name_2', sa.Text(), nullable=True, comment='The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.'), - sa.Column('natural_gas_pipeline_name_3', sa.Text(), nullable=True, comment='The name of the owner or operator of natural gas pipeline that connects directly to this facility or that connects to a lateral pipeline owned by this facility.'), - sa.Column('nerc_region', sa.Enum('BASN', 'CALN', 'CALS', 'DSW', 'ASCC', 'ISONE', 'ERCOT', 'NORW', 'NYISO', 'PJM', 'ROCK', 'ECAR', 'FRCC', 'HICC', 'MAAC', 'MAIN', 'MAPP', 'MRO', 'NPCC', 'RFC', 'SERC', 'SPP', 'TRE', 'WECC', 'WSCC', 'MISO', 'ECAR_MAAC', 'MAPP_WECC', 'RFC_SERC', 'SPP_WECC', 'MRO_WECC', 'ERCOT_SPP', 'SPP_TRE', 'ERCOT_TRE', 'MISO_TRE', 'VI', 'GU', 'PR', 'AS', 'UNK'), nullable=True, comment='NERC region in which the plant is located'), - sa.Column('net_metering', sa.Boolean(), nullable=True, comment='Did this plant have a net metering agreement in effect during the reporting year? (Only displayed for facilities that report the sun or wind as an energy source). This field was only reported up until 2015'), - sa.Column('pipeline_notes', sa.Text(), nullable=True, comment='Additional owner or operator of natural gas pipeline.'), - sa.Column('primary_purpose_id_naics', sa.Integer(), nullable=True, comment='North American Industry Classification System (NAICS) code that best describes the primary purpose of the reporting plant'), - sa.Column('regulatory_status_code', sa.Text(), nullable=True, comment='Indicates whether the plant is regulated or non-regulated.'), - sa.Column('reporting_frequency_code', sa.Enum('A', 'AM', 'M'), nullable=True, comment='Code that specifies what time period data has to be reported (i.e. monthly data or annual totals) and how often the power plant reports this data to EIA. See reporting_frequencies_eia for more details.'), - sa.Column('sector_id_eia', sa.Integer(), nullable=True, comment='EIA assigned sector ID, corresponding to high level NAICS sector, designated by the primary purpose, regulatory status and plant-level combined heat and power status'), - sa.Column('sector_name_eia', sa.Text(), nullable=True, comment='EIA assigned sector name, corresponding to high level NAICS sector, designated by the primary purpose, regulatory status and plant-level combined heat and power status'), - sa.Column('service_area', sa.Text(), nullable=True, comment="Service area in which plant is located; for unregulated companies, it's the electric utility with which plant is interconnected"), - sa.Column('transmission_distribution_owner_id', sa.Integer(), nullable=True, comment='EIA-assigned code for owner of transmission/distribution system to which the plant is interconnected.'), - sa.Column('transmission_distribution_owner_name', sa.Text(), nullable=True, comment='Name of the owner of the transmission or distribution system to which the plant is interconnected.'), - sa.Column('transmission_distribution_owner_state', sa.Text(), nullable=True, comment='State location for owner of transmission/distribution system to which the plant is interconnected.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('water_source', sa.Text(), nullable=True, comment='Name of water source associated with the plant.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('balancing_authority_code_eia_consistent_rate', sa.Float(), nullable=True, comment='Percentage consistency of balancing authority code across entity records.'), - sa.ForeignKeyConstraint(['balancing_authority_code_eia'], ['core_eia__codes_balancing_authorities.code'], name=op.f('fk_out_eia__yearly_plants_balancing_authority_code_eia_core_eia__codes_balancing_authorities')), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_out_eia__yearly_plants_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['plant_id_eia', 'report_date'], ['core_eia860__scd_plants.plant_id_eia', 'core_eia860__scd_plants.report_date'], name=op.f('fk_out_eia__yearly_plants_plant_id_eia_core_eia860__scd_plants')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia__yearly_plants_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['reporting_frequency_code'], ['core_eia__codes_reporting_frequencies.code'], name=op.f('fk_out_eia__yearly_plants_reporting_frequency_code_core_eia__codes_reporting_frequencies')), - sa.ForeignKeyConstraint(['sector_id_eia'], ['core_eia__codes_sector_consolidated.code'], name=op.f('fk_out_eia__yearly_plants_sector_id_eia_core_eia__codes_sector_consolidated')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia__yearly_plants_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia__yearly_plants_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'report_date', name=op.f('pk_out_eia__yearly_plants')) - ) - op.create_table('out_ferc1__yearly_all_plants', - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_id_ferc1', sa.Integer(), nullable=True, comment='Algorithmically assigned PUDL FERC Plant ID. WARNING: NOT STABLE BETWEEN PUDL DB INITIALIZATIONS.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('asset_retirement_cost', sa.Float(), nullable=True, comment='Asset retirement cost (USD).'), - sa.Column('avg_num_employees', sa.Float(), nullable=True), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('capex_annual_addition', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total`.'), - sa.Column('capex_annual_addition_rolling', sa.Float(), nullable=True, comment='Year-to-date capital addition into `capex_total`.'), - sa.Column('capex_annual_per_kw', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total` per kw.'), - sa.Column('capex_annual_per_mw', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total` per MW.'), - sa.Column('capex_annual_per_mw_rolling', sa.Float(), nullable=True, comment='Year-to-date capital addition into `capex_total` per MW.'), - sa.Column('capex_annual_per_mwh', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total` per MWh.'), - sa.Column('capex_annual_per_mwh_rolling', sa.Float(), nullable=True, comment='Year-to-date capital addition into `capex_total` per MWh.'), - sa.Column('capex_equipment', sa.Float(), nullable=True, comment='Cost of plant: equipment (USD).'), - sa.Column('capex_land', sa.Float(), nullable=True, comment='Cost of plant: land and land rights (USD).'), - sa.Column('capex_per_mw', sa.Float(), nullable=True, comment='Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.'), - sa.Column('capex_structures', sa.Float(), nullable=True, comment='Cost of plant: structures and improvements (USD).'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('capex_wo_retirement_total', sa.Float(), nullable=True, comment='Total cost of plant (USD) without retirements.'), - sa.Column('construction_type', sa.Enum('conventional', 'outdoor', 'semioutdoor'), nullable=True, comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings."), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('installation_year', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('not_water_limited_capacity_mw', sa.Float(), nullable=True, comment='Plant capacity in MW when not limited by condenser water.'), - sa.Column('opex_allowances', sa.Float(), nullable=True, comment='Allowances.'), - sa.Column('opex_boiler', sa.Float(), nullable=True, comment='Maintenance of boiler (or reactor) plant.'), - sa.Column('opex_coolants', sa.Float(), nullable=True, comment='Cost of coolants and water (nuclear plants only)'), - sa.Column('opex_electric', sa.Float(), nullable=True, comment='Production expenses: electric expenses (USD).'), - sa.Column('opex_engineering', sa.Float(), nullable=True, comment='Production expenses: maintenance, supervision, and engineering (USD).'), - sa.Column('opex_fuel', sa.Float(), nullable=True, comment='Production expenses: fuel (USD).'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('opex_misc_power', sa.Float(), nullable=True, comment='Miscellaneous steam (or nuclear) expenses.'), - sa.Column('opex_misc_steam', sa.Float(), nullable=True, comment='Maintenance of miscellaneous steam (or nuclear) plant.'), - sa.Column('opex_nonfuel_per_mwh', sa.Float(), nullable=True, comment='Investments in non-fuel production expenses per Mwh.'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_per_mwh', sa.Float(), nullable=True, comment='Total production expenses (USD per MWh generated).'), - sa.Column('opex_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of electric plant (USD).'), - sa.Column('opex_production_total', sa.Float(), nullable=True, comment='Total operating expenses.'), - sa.Column('opex_rents', sa.Float(), nullable=True, comment='Production expenses: rents (USD).'), - sa.Column('opex_steam', sa.Float(), nullable=True, comment='Steam expenses.'), - sa.Column('opex_steam_other', sa.Float(), nullable=True, comment='Steam from other sources.'), - sa.Column('opex_structures', sa.Float(), nullable=True, comment='Production expenses: maintenance of structures (USD).'), - sa.Column('opex_total_nonfuel', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('opex_transfer', sa.Float(), nullable=True, comment='Steam transferred (Credit).'), - sa.Column('peak_demand_mw', sa.Float(), nullable=True, comment='Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.'), - sa.Column('plant_capability_mw', sa.Float(), nullable=True, comment='Net plant capability in megawatts.'), - sa.Column('plant_hours_connected_while_generating', sa.Float(), nullable=True, comment='Hours the plant was connected to load while generating in the report year.'), - sa.Column('plant_type', sa.Text(), nullable=True), - sa.Column('record_id', sa.Text(), nullable=False, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('water_limited_capacity_mw', sa.Float(), nullable=True, comment='Plant capacity in MW when limited by condenser water.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_type', sa.Text(), nullable=True), - sa.Column('license_id_ferc1', sa.Integer(), nullable=True, comment='FERC issued operating license ID for the facility, if available. This value is extracted from the original plant name where possible.'), - sa.Column('opex_maintenance', sa.Float(), nullable=True, comment='Production expenses: Maintenance (USD).'), - sa.Column('opex_total', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('capex_facilities', sa.Float(), nullable=True, comment='Cost of plant: reservoirs, dams, and waterways (USD).'), - sa.Column('capex_roads', sa.Float(), nullable=True, comment='Cost of plant: roads, railroads, and bridges (USD).'), - sa.Column('net_capacity_adverse_conditions_mw', sa.Float(), nullable=True, comment='Net plant capability under the least favorable operating conditions, in megawatts.'), - sa.Column('net_capacity_favorable_conditions_mw', sa.Float(), nullable=True, comment='Net plant capability under the most favorable operating conditions, in megawatts.'), - sa.Column('opex_dams', sa.Float(), nullable=True, comment='Production expenses: maintenance of reservoirs, dams, and waterways (USD).'), - sa.Column('opex_generation_misc', sa.Float(), nullable=True, comment='Production expenses: miscellaneous power generation expenses (USD).'), - sa.Column('opex_hydraulic', sa.Float(), nullable=True, comment='Production expenses: hydraulic expenses (USD).'), - sa.Column('opex_misc_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of miscellaneous hydraulic plant (USD).'), - sa.Column('opex_water_for_power', sa.Float(), nullable=True, comment='Production expenses: water for power (USD).'), - sa.Column('ferc_license_id', sa.Text(), nullable=True, comment='The FERC license ID of a project.'), - sa.Column('capex_equipment_electric', sa.Float(), nullable=True, comment='Cost of plant: accessory electric equipment (USD).'), - sa.Column('capex_equipment_misc', sa.Float(), nullable=True, comment='Cost of plant: miscellaneous power plant equipment (USD).'), - sa.Column('capex_wheels_turbines_generators', sa.Float(), nullable=True, comment='Cost of plant: water wheels, turbines, and generators (USD).'), - sa.Column('energy_used_for_pumping_mwh', sa.Float(), nullable=True, comment='Energy used for pumping, in megawatt-hours.'), - sa.Column('net_load_mwh', sa.Float(), nullable=True, comment='Net output for load (net generation - energy used for pumping) in megawatt-hours.'), - sa.Column('opex_production_before_pumping', sa.Float(), nullable=True, comment='Total production expenses before pumping (USD).'), - sa.Column('opex_pumped_storage', sa.Float(), nullable=True, comment='Production expenses: pumped storage (USD).'), - sa.Column('opex_pumping', sa.Float(), nullable=True, comment='Production expenses: We are here to PUMP YOU UP! (USD).'), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_ferc1__yearly_all_plants_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk_out_ferc1__yearly_all_plants_utility_id_ferc1_core_pudl__assn_plants_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_all_plants_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('record_id', name=op.f('pk_out_ferc1__yearly_all_plants')) - ) - op.create_table('out_ferc1__yearly_fuel', - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_total_cost', sa.Float(), nullable=True, comment='Total cost of consumed fuel.'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_cost_per_unit_burned', sa.Float(), nullable=True, comment='Average cost of fuel consumed in the report year per reported fuel unit (USD).'), - sa.Column('fuel_cost_per_unit_delivered', sa.Float(), nullable=True, comment='Average cost of fuel delivered in the report year per reported fuel unit (USD).'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_units', sa.Enum('mmbtu', 'gramsU', 'kg', 'mwhth', 'kgal', 'bbl', 'klbs', 'mcf', 'gal', 'mwdth', 'btu', 'ton'), nullable=True, comment='Reported unit of measure for fuel.'), - sa.Column('record_id', sa.Text(), nullable=False, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_ferc1__yearly_fuel_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk_out_ferc1__yearly_fuel_utility_id_ferc1_core_pudl__assn_plants_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_fuel_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('record_id', name=op.f('pk_out_ferc1__yearly_fuel')) - ) - op.create_table('out_ferc1__yearly_fuel_by_plant', - sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=False, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=False, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('coal_fraction_cost', sa.Float(), nullable=True, comment='Coal cost as a percentage of overall fuel cost.'), - sa.Column('coal_fraction_mmbtu', sa.Float(), nullable=True, comment='Coal heat content as a percentage of overall fuel heat content (mmBTU).'), - sa.Column('fuel_cost', sa.Float(), nullable=True, comment='Total fuel cost for plant (in $USD).'), - sa.Column('fuel_mmbtu', sa.Float(), nullable=True, comment='Total heat content for plant (in MMBtu).'), - sa.Column('gas_fraction_cost', sa.Float(), nullable=True, comment='Natural gas cost as a percentage of overall fuel cost.'), - sa.Column('gas_fraction_mmbtu', sa.Float(), nullable=True, comment='Natural gas heat content as a percentage of overall fuel heat content (MMBtu).'), - sa.Column('nuclear_fraction_cost', sa.Float(), nullable=True, comment='Nuclear cost as a percentage of overall fuel cost.'), - sa.Column('nuclear_fraction_mmbtu', sa.Float(), nullable=True, comment='Nuclear heat content as a percentage of overall fuel heat content (MMBtu).'), - sa.Column('oil_fraction_cost', sa.Float(), nullable=True, comment='Oil cost as a percentage of overall fuel cost.'), - sa.Column('oil_fraction_mmbtu', sa.Float(), nullable=True, comment='Oil heat content as a percentage of overall fuel heat content (MMBtu).'), - sa.Column('primary_fuel_by_cost', sa.Text(), nullable=True, comment='Primary fuel for plant as a percentage of cost.'), - sa.Column('primary_fuel_by_mmbtu', sa.Text(), nullable=True, comment='Primary fuel for plant as a percentage of heat content.'), - sa.Column('waste_fraction_cost', sa.Float(), nullable=True, comment='Waste-heat cost as a percentage of overall fuel cost.'), - sa.Column('waste_fraction_mmbtu', sa.Float(), nullable=True, comment='Waste-heat heat content as a percentage of overall fuel heat content (MMBtu).'), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_ferc1__yearly_fuel_by_plant_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk_out_ferc1__yearly_fuel_by_plant_utility_id_ferc1_core_pudl__assn_plants_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_ferc1__yearly_fuel_by_plant_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('report_year', 'utility_id_ferc1', 'plant_name_ferc1', name=op.f('pk_out_ferc1__yearly_fuel_by_plant')) - ) - op.create_table('_out_eia__yearly_capacity_factor_by_generator', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk__out_eia__yearly_capacity_factor_by_generator_plant_id_eia_core_eia860__scd_generators')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk__out_eia__yearly_capacity_factor_by_generator')) - ) - op.create_table('_out_eia__yearly_derived_generator_attributes', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('total_mmbtu', sa.Float(), nullable=True, comment='Total annual heat content of fuel consumed by a plant part record in the plant parts list.'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk__out_eia__yearly_derived_generator_attributes_plant_id_eia_core_eia860__scd_generators')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk__out_eia__yearly_derived_generator_attributes')) - ) - op.create_table('_out_eia__yearly_fuel_cost_by_generator', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('fuel_type_count', sa.Integer(), nullable=True, comment='A count of how many different simple energy sources there are associated with a generator.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk__out_eia__yearly_fuel_cost_by_generator_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk__out_eia__yearly_fuel_cost_by_generator_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk__out_eia__yearly_fuel_cost_by_generator_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk__out_eia__yearly_fuel_cost_by_generator_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk__out_eia__yearly_fuel_cost_by_generator')) - ) - op.create_table('_out_eia__yearly_generators', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('associated_combined_heat_power', sa.Boolean(), nullable=True, comment='Indicates whether the generator is associated with a combined heat and power system'), - sa.Column('bga_source', sa.Text(), nullable=True, comment='The source from where the unit_id_pudl is compiled. The unit_id_pudl comes directly from EIA 860, or string association (which looks at all the boilers and generators that are not associated with a unit and tries to find a matching string in the respective collection of boilers or generator), or from a unit connection (where the unit_id_eia is employed to find additional boiler generator connections).'), - sa.Column('bypass_heat_recovery', sa.Boolean(), nullable=True, comment='Can this generator operate while bypassing the heat recovery steam generator?'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('carbon_capture', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses carbon capture technology.'), - sa.Column('city', sa.Text(), nullable=True), - sa.Column('cofire_fuels', sa.Boolean(), nullable=True, comment='Can the generator co-fire fuels?.'), - sa.Column('county', sa.Text(), nullable=True, comment='County name.'), - sa.Column('current_planned_generator_operating_date', sa.Date(), nullable=True, comment='The most recently updated effective date on which the generator is scheduled to start operation'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.Column('deliver_power_transgrid', sa.Boolean(), nullable=True, comment='Indicate whether the generator can deliver power to the transmission grid.'), - sa.Column('distributed_generation', sa.Boolean(), nullable=True, comment='Whether the generator is considered distributed generation'), - sa.Column('duct_burners', sa.Boolean(), nullable=True, comment='Indicates whether the unit has duct-burners for supplementary firing of the turbine exhaust gas'), - sa.Column('energy_source_1_transport_1', sa.Text(), nullable=True, comment='Primary mode of transport for energy source 1.'), - sa.Column('energy_source_1_transport_2', sa.Text(), nullable=True, comment='Secondary mode of transport for energy source 1.'), - sa.Column('energy_source_1_transport_3', sa.Text(), nullable=True, comment='Tertiary mode of transport for energy source 1.'), - sa.Column('energy_source_2_transport_1', sa.Text(), nullable=True, comment='Primary mode of transport for energy source 2.'), - sa.Column('energy_source_2_transport_2', sa.Text(), nullable=True, comment='Secondary mode of transport for energy source 2.'), - sa.Column('energy_source_2_transport_3', sa.Text(), nullable=True, comment='Tertiary mode of transport for energy source 2.'), - sa.Column('energy_source_code_1', sa.Text(), nullable=True, comment='The code representing the most predominant type of energy that fuels the generator.'), - sa.Column('energy_source_code_2', sa.Text(), nullable=True, comment='The code representing the second most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_3', sa.Text(), nullable=True, comment='The code representing the third most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_4', sa.Text(), nullable=True, comment='The code representing the fourth most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_5', sa.Text(), nullable=True, comment='The code representing the fifth most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_6', sa.Text(), nullable=True, comment='The code representing the sixth most predominant type of energy that fuels the generator'), - sa.Column('energy_storage_capacity_mwh', sa.Float(), nullable=True, comment='Energy storage capacity in MWh (e.g. for batteries).'), - sa.Column('ferc_qualifying_facility', sa.Boolean(), nullable=True, comment='Indicatates whether or not a generator is a qualifying FERC cogeneation facility.'), - sa.Column('fluidized_bed_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses fluidized bed technology'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_type_count', sa.Integer(), nullable=True, comment='A count of how many different simple energy sources there are associated with a generator.'), - sa.Column('generator_operating_date', sa.Date(), nullable=True, comment='Date the generator began commercial operation.'), - sa.Column('generator_retirement_date', sa.Date(), nullable=True, comment='Date of the scheduled or effected retirement of the generator.'), - sa.Column('latitude', sa.Float(), nullable=True, comment="Latitude of the plant's location, in degrees."), - sa.Column('longitude', sa.Float(), nullable=True, comment="Longitude of the plant's location, in degrees."), - sa.Column('minimum_load_mw', sa.Float(), nullable=True, comment='The minimum load at which the generator can operate at continuosuly.'), - sa.Column('multiple_fuels', sa.Boolean(), nullable=True, comment='Can the generator burn multiple fuels?'), - sa.Column('nameplate_power_factor', sa.Float(), nullable=True, comment='The nameplate power factor of the generator.'), - sa.Column('net_capacity_mwdc', sa.Float(), nullable=True, comment='Generation capacity in megawatts of direct current that is subject to a net metering agreement. Typically used for behind-the-meter solar PV.'), - sa.Column('operating_switch', sa.Text(), nullable=True, comment='Indicates whether the fuel switching generator can switch when operating'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.Column('operational_status_code', sa.Text(), nullable=True, comment='The operating status of the asset.'), - sa.Column('original_planned_generator_operating_date', sa.Date(), nullable=True, comment='The date the generator was originally scheduled to be operational'), - sa.Column('other_combustion_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses other combustion technologies'), - sa.Column('other_modifications_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter commercial operation after any other planned modification is complete.'), - sa.Column('other_planned_modifications', sa.Boolean(), nullable=True, comment='Indicates whether there are there other modifications planned for the generator.'), - sa.Column('owned_by_non_utility', sa.Boolean(), nullable=True, comment='Whether any part of generator is owned by a nonutilty'), - sa.Column('ownership_code', sa.Text(), nullable=True, comment='Identifies the ownership for each generator.'), - sa.Column('planned_derate_date', sa.Date(), nullable=True, comment='Planned effective month that the generator is scheduled to enter operation after the derate modification.'), - sa.Column('planned_energy_source_code_1', sa.Text(), nullable=True, comment='New energy source code for the planned repowered generator.'), - sa.Column('planned_generator_retirement_date', sa.Date(), nullable=True, comment='Planned effective date of the scheduled retirement of the generator.'), - sa.Column('planned_modifications', sa.Boolean(), nullable=True, comment='Indicates whether there are any planned capacity uprates/derates, repowering, other modifications, or generator retirements scheduled for the next 5 years.'), - sa.Column('planned_net_summer_capacity_derate_mw', sa.Float(), nullable=True, comment='Decrease in summer capacity expected to be realized from the derate modification to the equipment.'), - sa.Column('planned_net_summer_capacity_uprate_mw', sa.Float(), nullable=True, comment='Increase in summer capacity expected to be realized from the modification to the equipment.'), - sa.Column('planned_net_winter_capacity_derate_mw', sa.Float(), nullable=True, comment='Decrease in winter capacity expected to be realized from the derate modification to the equipment.'), - sa.Column('planned_net_winter_capacity_uprate_mw', sa.Float(), nullable=True, comment='Increase in winter capacity expected to be realized from the uprate modification to the equipment.'), - sa.Column('planned_new_capacity_mw', sa.Float(), nullable=True, comment='The expected new namplate capacity for the generator.'), - sa.Column('planned_new_prime_mover_code', sa.Text(), nullable=True, comment='New prime mover for the planned repowered generator.'), - sa.Column('planned_repower_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter operation after the repowering is complete.'), - sa.Column('planned_uprate_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter operation after the uprate modification.'), - sa.Column('previously_canceled', sa.Boolean(), nullable=True, comment='Indicates whether the generator was previously reported as indefinitely postponed or canceled'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('pulverized_coal_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses pulverized coal technology'), - sa.Column('reactive_power_output_mvar', sa.Float(), nullable=True, comment='Reactive Power Output (MVAr)'), - sa.Column('rto_iso_lmp_node_id', sa.Text(), nullable=True, comment='The designation used to identify the price node in RTO/ISO Locational Marginal Price reports'), - sa.Column('rto_iso_location_wholesale_reporting_id', sa.Text(), nullable=True, comment='The designation used to report ths specific location of the wholesale sales transactions to FERC for the Electric Quarterly Report'), - sa.Column('solid_fuel_gasification', sa.Boolean(), nullable=True, comment='Indicates whether the generator is part of a solid fuel gasification system'), - sa.Column('startup_source_code_1', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_2', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_3', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_4', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('stoker_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses stoker technology'), - sa.Column('street_address', sa.Text(), nullable=True), - sa.Column('subcritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses subcritical technology'), - sa.Column('summer_capacity_estimate', sa.Boolean(), nullable=True, comment='Whether the summer capacity value was an estimate'), - sa.Column('summer_capacity_mw', sa.Float(), nullable=True, comment='The net summer capacity.'), - sa.Column('summer_estimated_capability_mw', sa.Float(), nullable=True, comment='EIA estimated summer capacity (in MWh).'), - sa.Column('supercritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses supercritical technology'), - sa.Column('switch_oil_gas', sa.Boolean(), nullable=True, comment='Indicates whether the generator switch between oil and natural gas.'), - sa.Column('syncronized_transmission_grid', sa.Boolean(), nullable=True, comment='Indicates whether standby generators (SB status) can be synchronized to the grid.'), - sa.Column('technology_description', sa.Text(), nullable=True, comment='High level description of the technology used by the generator to produce electricity.'), - sa.Column('time_cold_shutdown_full_load_code', sa.Text(), nullable=True, comment='The minimum amount of time required to bring the unit to full load from shutdown.'), - sa.Column('timezone', sa.Enum('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu'), nullable=True, comment='IANA timezone name'), - sa.Column('topping_bottoming_code', sa.Text(), nullable=True, comment='If the generator is associated with a combined heat and power system, indicates whether the generator is part of a topping cycle or a bottoming cycle'), - sa.Column('turbines_inverters_hydrokinetics', sa.Integer(), nullable=True, comment='Number of wind turbines, or hydrokinetic buoys.'), - sa.Column('turbines_num', sa.Integer(), nullable=True, comment='Number of wind turbines, or hydrokinetic buoys.'), - sa.Column('ultrasupercritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses ultra-supercritical technology'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('uprate_derate_completed_date', sa.Date(), nullable=True, comment='The date when the uprate or derate was completed.'), - sa.Column('uprate_derate_during_year', sa.Boolean(), nullable=True, comment='Was an uprate or derate completed on this generator during the reporting year?'), - sa.Column('winter_capacity_estimate', sa.Boolean(), nullable=True, comment='Whether the winter capacity value was an estimate'), - sa.Column('winter_capacity_mw', sa.Float(), nullable=True, comment='The net winter capacity.'), - sa.Column('winter_estimated_capability_mw', sa.Float(), nullable=True, comment='EIA estimated winter capacity (in MWh).'), - sa.Column('zip_code', sa.Text(), nullable=True, comment='Five digit US Zip Code.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk__out_eia__yearly_generators_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['energy_source_1_transport_1'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_1_transport_1_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_1_transport_2'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_1_transport_2_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_1_transport_3'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_1_transport_3_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_1'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_2_transport_1_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_2'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_2_transport_2_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_3'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_2_transport_3_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_2'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_code_2_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_3'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_code_3_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_4'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_code_4_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_5'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_code_5_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_6'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_energy_source_code_6_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['operational_status_code'], ['core_eia__codes_operational_status.code'], name=op.f('fk__out_eia__yearly_generators_operational_status_code_core_eia__codes_operational_status')), - sa.ForeignKeyConstraint(['planned_energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_planned_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['planned_new_prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk__out_eia__yearly_generators_planned_new_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk__out_eia__yearly_generators_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk__out_eia__yearly_generators_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk__out_eia__yearly_generators_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['startup_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_startup_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_2'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_startup_source_code_2_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_3'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_startup_source_code_3_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_4'], ['core_eia__codes_energy_sources.code'], name=op.f('fk__out_eia__yearly_generators_startup_source_code_4_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk__out_eia__yearly_generators_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk__out_eia__yearly_generators_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'generator_id', 'report_date', name=op.f('pk__out_eia__yearly_generators')) - ) - op.create_table('_out_eia__yearly_heat_rate_by_generator', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_type_count', sa.Integer(), nullable=True, comment='A count of how many different simple energy sources there are associated with a generator.'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk__out_eia__yearly_heat_rate_by_generator_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk__out_eia__yearly_heat_rate_by_generator_prime_mover_code_core_eia__codes_prime_movers')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk__out_eia__yearly_heat_rate_by_generator')) - ) - op.create_table('core_eia860__assn_boiler_cooling', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('cooling_id_eia', sa.Text(), nullable=False, comment='The cooling system identification number reported to EIA.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia860__assn_boiler_cooling_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id', 'report_date'], ['core_eia860__scd_boilers.plant_id_eia', 'core_eia860__scd_boilers.boiler_id', 'core_eia860__scd_boilers.report_date'], name=op.f('fk_core_eia860__assn_boiler_cooling_plant_id_eia_core_eia860__scd_boilers')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'boiler_id', 'cooling_id_eia', name=op.f('pk_core_eia860__assn_boiler_cooling')) - ) - op.create_table('core_eia860__assn_boiler_generator', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('unit_id_eia', sa.Text(), nullable=True, comment='EIA-assigned unit identification code.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('boiler_generator_assn_type_code', sa.Text(), nullable=True, comment='Indicates whether boiler associations with generator during the year were actual or theoretical. Only available before 2013.'), - sa.Column('steam_plant_type_code', sa.Integer(), nullable=True, comment='Code that describes types of steam plants from EIA 860. See steam_plant_types_eia table for more details.'), - sa.Column('bga_source', sa.Text(), nullable=True, comment='The source from where the unit_id_pudl is compiled. The unit_id_pudl comes directly from EIA 860, or string association (which looks at all the boilers and generators that are not associated with a unit and tries to find a matching string in the respective collection of boilers or generator), or from a unit connection (where the unit_id_eia is employed to find additional boiler generator connections).'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['boiler_generator_assn_type_code'], ['core_eia__codes_boiler_generator_assn_types.code'], name=op.f('fk_core_eia860__assn_boiler_generator_boiler_generator_assn_type_code_core_eia__codes_boiler_generator_assn_types')), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia860__assn_boiler_generator_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id', 'report_date'], ['core_eia860__scd_boilers.plant_id_eia', 'core_eia860__scd_boilers.boiler_id', 'core_eia860__scd_boilers.report_date'], name=op.f('fk_core_eia860__assn_boiler_generator_plant_id_eia_core_eia860__scd_boilers')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_core_eia860__assn_boiler_generator_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['steam_plant_type_code'], ['core_eia__codes_steam_plant_types.code'], name=op.f('fk_core_eia860__assn_boiler_generator_steam_plant_type_code_core_eia__codes_steam_plant_types')), - sa.PrimaryKeyConstraint('plant_id_eia', 'report_date', 'generator_id', 'boiler_id', name=op.f('pk_core_eia860__assn_boiler_generator')) - ) - op.create_table('core_eia860__assn_boiler_stack_flue', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('stack_id_eia', sa.Text(), nullable=True, comment='The stack identification value reported to EIA. Stacks or chimneys are the place where emissions from the combustion process are released into the atmosphere. This field was reported in conjunction with flue_id_eia until 2013 when stack_flue_id_eia took their place.'), - sa.Column('flue_id_eia', sa.Text(), nullable=True, comment='The flue identification value reported to EIA. The flue is a duct, pipe, or opening that transports exhast gases through the stack. This field was reported in conjunction with stack_id_eia until 2013 when stack_flue_id_eia took their place.'), - sa.Column('stack_flue_id_eia', sa.Text(), nullable=True, comment='The stack or flue identification value reported to EIA. This denotes the place where emissions from the combusion process are released into the atmosphere. Prior to 2013, this was reported as `stack_id_eia` and `flue_id_eia`.'), - sa.Column('stack_flue_id_pudl', sa.Text(), nullable=False, comment='A stack and/or flue identification value created by PUDL for use as part of the primary key for the stack flue equipment and boiler association tables. For 2013 and onward, this value is equal to the value for stack_flue_id_eia. Prior to 2013, this value is equal to the value for stack_id_eia and the value for flue_id_eia seperated by an underscore or just the stack_flue_eia in cases where flue_id_eia is NA.'), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id', 'report_date'], ['core_eia860__scd_boilers.plant_id_eia', 'core_eia860__scd_boilers.boiler_id', 'core_eia860__scd_boilers.report_date'], name=op.f('fk_core_eia860__assn_boiler_stack_flue_plant_id_eia_core_eia860__scd_boilers')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'boiler_id', 'stack_flue_id_pudl', name=op.f('pk_core_eia860__assn_boiler_stack_flue')) - ) - op.create_table('core_eia860__scd_ownership', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('owner_utility_id_eia', sa.Integer(), nullable=False, comment='The EIA utility Identification number for the owner company that is responsible for the day-to-day operations of the generator, not the operator utility.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('owner_utility_name_eia', sa.Text(), nullable=True, comment='The name of the EIA owner utility.'), - sa.Column('owner_state', sa.Enum('MI', 'NV', 'DE', 'NY', 'GA', 'NL', 'ME', 'IL', 'WA', 'WY', 'NE', 'ON', 'MS', 'IN', 'AK', 'NS', 'VA', 'NH', 'HI', 'YT', 'NM', 'AL', 'PR', 'CO', 'NB', 'PA', 'AZ', 'SD', 'MP', 'GU', 'KY', 'MN', 'ND', 'OK', 'QC', 'TN', 'UT', 'TX', 'VT', 'WI', 'NU', 'LA', 'RI', 'CT', 'NC', 'WV', 'PE', 'CA', 'AR', 'MO', 'DC', 'IA', 'SC', 'MB', 'MD', 'NT', 'FL', 'MA', 'ID', 'BC', 'MT', 'SK', 'KS', 'AB', 'NJ', 'VI', 'AS', 'OH', 'OR'), nullable=True, comment='Two letter ISO-3166 political subdivision code.'), - sa.Column('owner_city', sa.Text(), nullable=True, comment='City of owner.'), - sa.Column('owner_country', sa.Enum('CAN', 'USA'), nullable=True, comment='Three letter ISO-3166 country code.'), - sa.Column('owner_street_address', sa.Text(), nullable=True, comment='Steet address of owner.'), - sa.Column('owner_zip_code', sa.Text(), nullable=True, comment='Zip code of owner.'), - sa.Column('fraction_owned', sa.Float(), nullable=True, comment='Proportion of generator ownership attributable to this utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia860__scd_ownership_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['owner_utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_core_eia860__scd_ownership_owner_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_core_eia860__scd_ownership_plant_id_eia_core_eia860__scd_generators')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', 'owner_utility_id_eia', name=op.f('pk_core_eia860__scd_ownership')) - ) - op.create_table('core_eia860__yearly_boiler_emissions_control_equipment_assn', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('emission_control_id_type', sa.Text(), nullable=False, comment='The type of emissions control id: so2, nox, particulate, or mercury.'), - sa.Column('emission_control_id_eia', sa.Text(), nullable=False, comment="The emission control ID used to collect so2, nox, particulate, and mercury emissions data. This column should be used in conjunction with emissions_control_type as it's not guaranteed to be unique."), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_core_eia860__yearly_boiler_emissions_control_equipment_assn_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id', 'report_date'], ['core_eia860__scd_boilers.plant_id_eia', 'core_eia860__scd_boilers.boiler_id', 'core_eia860__scd_boilers.report_date'], name=op.f('fk_core_eia860__yearly_boiler_emissions_control_equipment_assn_plant_id_eia_core_eia860__scd_boilers')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'boiler_id', 'emission_control_id_type', 'emission_control_id_eia', name=op.f('pk_core_eia860__yearly_boiler_emissions_control_equipment_assn')) - ) - op.create_table('mega_generators_eia', - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=True, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('technology_description', sa.Text(), nullable=True, comment='High level description of the technology used by the generator to produce electricity.'), - sa.Column('energy_source_code_1', sa.Text(), nullable=True, comment='The code representing the most predominant type of energy that fuels the generator.'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('generator_operating_date', sa.Date(), nullable=True, comment='Date the generator began commercial operation.'), - sa.Column('generator_retirement_date', sa.Date(), nullable=True, comment='Date of the scheduled or effected retirement of the generator.'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('planned_generator_retirement_date', sa.Date(), nullable=True, comment='Planned effective date of the scheduled retirement of the generator.'), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('total_mmbtu', sa.Float(), nullable=True, comment='Total annual heat content of fuel consumed by a plant part record in the plant parts list.'), - sa.Column('ferc_acct_name', sa.Enum('Hydraulic', 'Nuclear', 'Steam', 'Other'), nullable=True, comment='Name of FERC account, derived from technology description and prime mover code.'), - sa.Column('generator_operating_year', sa.Integer(), nullable=True, comment='Year a generator went into service.'), - sa.Column('operational_status_pudl', sa.Enum('operating', 'retired', 'proposed'), nullable=True, comment='The operating status of the asset using PUDL categories.'), - sa.Column('capacity_eoy_mw', sa.Float(), nullable=True, comment='Total end of year installed (nameplate) capacity for a plant part, in megawatts.'), - sa.Column('fraction_owned', sa.Float(), nullable=True, comment='Proportion of generator ownership attributable to this utility.'), - sa.Column('ownership_record_type', sa.Enum('owned', 'total'), nullable=True, comment='Whether each generator record is for one owner or represents a total of all ownerships.'), - sa.ForeignKeyConstraint(['energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_mega_generators_eia_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_mega_generators_eia_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_mega_generators_eia_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_mega_generators_eia_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_mega_generators_eia_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_mega_generators_eia_utility_id_pudl_core_pudl__entity_utilities_pudl')) - ) - op.create_table('out__yearly_plants_all_ferc1_plant_parts_eia', - sa.Column('record_id_ferc1', sa.Text(), nullable=False, comment='Identifier indicating original FERC Form 1 source record. format: {table_name}_{report_year}_{report_prd}_{respondent_id}_{spplmnt_num}_{row_number}. Unique within FERC Form 1 DB tables which are not row-mapped.'), - sa.Column('record_id_eia', sa.Text(), nullable=True, comment='Identifier for EIA plant parts analysis records.'), - sa.Column('match_type', sa.Text(), nullable=True, comment='Indicates the source and validation of the match between EIA and FERC. Match types include matches was generated from the model, verified by the training data, overridden by the training data, etc.'), - sa.Column('plant_name_ppe', sa.Text(), nullable=True, comment='Derived plant name that includes EIA plant name and other strings associated with ID and PK columns of the plant part.'), - sa.Column('plant_part', sa.Enum('plant_technology', 'plant_unit', 'plant_prime_fuel', 'plant_prime_mover', 'plant_gen', 'plant', 'plant_match_ferc1', 'plant_ferc_acct', 'plant_operating_year'), nullable=True, comment='The part of the plant a record corresponds to.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('ownership_record_type', sa.Enum('owned', 'total'), nullable=True, comment='Whether each generator record is for one owner or represents a total of all ownerships.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=True, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('energy_source_code_1', sa.Text(), nullable=True, comment='The code representing the most predominant type of energy that fuels the generator.'), - sa.Column('technology_description', sa.Text(), nullable=True, comment='High level description of the technology used by the generator to produce electricity.'), - sa.Column('ferc_acct_name', sa.Enum('Hydraulic', 'Nuclear', 'Steam', 'Other'), nullable=True, comment='Name of FERC account, derived from technology description and prime mover code.'), - sa.Column('generator_operating_year', sa.Integer(), nullable=True, comment='Year a generator went into service.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('true_gran', sa.Boolean(), nullable=True, comment='Indicates whether a plant part list record is associated with the highest priority plant part for all identical records.'), - sa.Column('appro_part_label', sa.Enum('plant_technology', 'plant_unit', 'plant_prime_fuel', 'plant_prime_mover', 'plant_gen', 'plant', 'plant_match_ferc1', 'plant_ferc_acct', 'plant_operating_year'), nullable=True, comment='Plant part of the associated true granularity record.'), - sa.Column('appro_record_id_eia', sa.Text(), nullable=True, comment='EIA record ID of the associated true granularity record.'), - sa.Column('record_count', sa.Integer(), nullable=True, comment='Number of distinct generator IDs that partcipated in the aggregation for a plant part list record.'), - sa.Column('fraction_owned', sa.Float(), nullable=True, comment='Proportion of generator ownership attributable to this utility.'), - sa.Column('ownership_dupe', sa.Boolean(), nullable=True, comment='Whether a plant part record has a duplicate record with different ownership status.'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.Column('operational_status_pudl', sa.Enum('operating', 'retired', 'proposed'), nullable=True, comment='The operating status of the asset using PUDL categories.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('total_fuel_cost_eia', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('fuel_cost_per_mmbtu_eia', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('net_generation_mwh_eia', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('capacity_mw_eia', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('capacity_factor_eia', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('total_mmbtu_eia', sa.Float(), nullable=True, comment='Total annual heat content of fuel consumed by a plant part record in the plant parts list.'), - sa.Column('heat_rate_mmbtu_mwh_eia', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('fuel_type_code_pudl_eia', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('installation_year_eia', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('plant_part_id_eia', sa.Text(), nullable=True, comment='Contains EIA plant ID, plant part, ownership, and EIA utility id'), - sa.Column('utility_id_ferc1', sa.Integer(), nullable=True, comment='PUDL-assigned utility ID, identifying a FERC1 utility. This is an auto-incremented ID and is not expected to be stable from year to year.'), - sa.Column('utility_name_ferc1', sa.Text(), nullable=True, comment='Name of the responding utility, as it is reported in FERC Form 1. For human readability only.'), - sa.Column('plant_id_ferc1', sa.Integer(), nullable=True, comment='Algorithmically assigned PUDL FERC Plant ID. WARNING: NOT STABLE BETWEEN PUDL DB INITIALIZATIONS.'), - sa.Column('plant_name_ferc1', sa.Text(), nullable=True, comment='Name of the plant, as reported to FERC. This is a freeform string, not guaranteed to be consistent across references to the same plant.'), - sa.Column('asset_retirement_cost', sa.Float(), nullable=True, comment='Asset retirement cost (USD).'), - sa.Column('avg_num_employees', sa.Float(), nullable=True), - sa.Column('capacity_factor_ferc1', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('capacity_mw_ferc1', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('capex_annual_addition', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total`.'), - sa.Column('capex_annual_addition_rolling', sa.Float(), nullable=True, comment='Year-to-date capital addition into `capex_total`.'), - sa.Column('capex_annual_per_kw', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total` per kw.'), - sa.Column('capex_annual_per_mw', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total` per MW.'), - sa.Column('capex_annual_per_mw_rolling', sa.Float(), nullable=True, comment='Year-to-date capital addition into `capex_total` per MW.'), - sa.Column('capex_annual_per_mwh', sa.Float(), nullable=True, comment='Annual capital addition into `capex_total` per MWh.'), - sa.Column('capex_annual_per_mwh_rolling', sa.Float(), nullable=True, comment='Year-to-date capital addition into `capex_total` per MWh.'), - sa.Column('capex_equipment', sa.Float(), nullable=True, comment='Cost of plant: equipment (USD).'), - sa.Column('capex_land', sa.Float(), nullable=True, comment='Cost of plant: land and land rights (USD).'), - sa.Column('capex_per_mw', sa.Float(), nullable=True, comment='Cost of plant per megawatt of installed (nameplate) capacity. Nominal USD.'), - sa.Column('capex_structures', sa.Float(), nullable=True, comment='Cost of plant: structures and improvements (USD).'), - sa.Column('capex_total', sa.Float(), nullable=True, comment='Total cost of plant (USD).'), - sa.Column('capex_wo_retirement_total', sa.Float(), nullable=True, comment='Total cost of plant (USD) without retirements.'), - sa.Column('construction_type', sa.Enum('conventional', 'outdoor', 'semioutdoor'), nullable=True, comment="Type of plant construction ('outdoor', 'semioutdoor', or 'conventional'). Categorized by PUDL based on our best guess of intended value in FERC1 freeform strings."), - sa.Column('construction_year_eia', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('construction_year_ferc1', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('installation_year_ferc1', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('net_generation_mwh_ferc1', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('not_water_limited_capacity_mw', sa.Float(), nullable=True, comment='Plant capacity in MW when not limited by condenser water.'), - sa.Column('opex_allowances', sa.Float(), nullable=True, comment='Allowances.'), - sa.Column('opex_boiler', sa.Float(), nullable=True, comment='Maintenance of boiler (or reactor) plant.'), - sa.Column('opex_coolants', sa.Float(), nullable=True, comment='Cost of coolants and water (nuclear plants only)'), - sa.Column('opex_electric', sa.Float(), nullable=True, comment='Production expenses: electric expenses (USD).'), - sa.Column('opex_engineering', sa.Float(), nullable=True, comment='Production expenses: maintenance, supervision, and engineering (USD).'), - sa.Column('opex_fuel', sa.Float(), nullable=True, comment='Production expenses: fuel (USD).'), - sa.Column('fuel_cost_per_mwh_eia', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('fuel_cost_per_mwh_ferc1', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('opex_misc_power', sa.Float(), nullable=True, comment='Miscellaneous steam (or nuclear) expenses.'), - sa.Column('opex_misc_steam', sa.Float(), nullable=True, comment='Maintenance of miscellaneous steam (or nuclear) plant.'), - sa.Column('opex_nonfuel_per_mwh', sa.Float(), nullable=True, comment='Investments in non-fuel production expenses per Mwh.'), - sa.Column('opex_operations', sa.Float(), nullable=True, comment='Production expenses: operations, supervision, and engineering (USD).'), - sa.Column('opex_per_mwh', sa.Float(), nullable=True, comment='Total production expenses (USD per MWh generated).'), - sa.Column('opex_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of electric plant (USD).'), - sa.Column('opex_production_total', sa.Float(), nullable=True, comment='Total operating expenses.'), - sa.Column('opex_rents', sa.Float(), nullable=True, comment='Production expenses: rents (USD).'), - sa.Column('opex_steam', sa.Float(), nullable=True, comment='Steam expenses.'), - sa.Column('opex_steam_other', sa.Float(), nullable=True, comment='Steam from other sources.'), - sa.Column('opex_structures', sa.Float(), nullable=True, comment='Production expenses: maintenance of structures (USD).'), - sa.Column('opex_total_nonfuel', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('opex_transfer', sa.Float(), nullable=True, comment='Steam transferred (Credit).'), - sa.Column('peak_demand_mw', sa.Float(), nullable=True, comment='Net peak demand for 60 minutes. Note: in some cases peak demand for other time periods may have been reported instead, if hourly peak demand was unavailable.'), - sa.Column('plant_capability_mw', sa.Float(), nullable=True, comment='Net plant capability in megawatts.'), - sa.Column('plant_hours_connected_while_generating', sa.Float(), nullable=True, comment='Hours the plant was connected to load while generating in the report year.'), - sa.Column('plant_type', sa.Text(), nullable=True), - sa.Column('water_limited_capacity_mw', sa.Float(), nullable=True, comment='Plant capacity in MW when limited by condenser water.'), - sa.Column('fuel_cost_per_mmbtu_ferc1', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_type', sa.Text(), nullable=True), - sa.Column('license_id_ferc1', sa.Integer(), nullable=True, comment='FERC issued operating license ID for the facility, if available. This value is extracted from the original plant name where possible.'), - sa.Column('opex_maintenance', sa.Float(), nullable=True, comment='Production expenses: Maintenance (USD).'), - sa.Column('opex_total', sa.Float(), nullable=True, comment='Total production expenses, excluding fuel (USD).'), - sa.Column('capex_facilities', sa.Float(), nullable=True, comment='Cost of plant: reservoirs, dams, and waterways (USD).'), - sa.Column('capex_roads', sa.Float(), nullable=True, comment='Cost of plant: roads, railroads, and bridges (USD).'), - sa.Column('net_capacity_adverse_conditions_mw', sa.Float(), nullable=True, comment='Net plant capability under the least favorable operating conditions, in megawatts.'), - sa.Column('net_capacity_favorable_conditions_mw', sa.Float(), nullable=True, comment='Net plant capability under the most favorable operating conditions, in megawatts.'), - sa.Column('opex_dams', sa.Float(), nullable=True, comment='Production expenses: maintenance of reservoirs, dams, and waterways (USD).'), - sa.Column('opex_generation_misc', sa.Float(), nullable=True, comment='Production expenses: miscellaneous power generation expenses (USD).'), - sa.Column('opex_hydraulic', sa.Float(), nullable=True, comment='Production expenses: hydraulic expenses (USD).'), - sa.Column('opex_misc_plant', sa.Float(), nullable=True, comment='Production expenses: maintenance of miscellaneous hydraulic plant (USD).'), - sa.Column('opex_water_for_power', sa.Float(), nullable=True, comment='Production expenses: water for power (USD).'), - sa.Column('ferc_license_id', sa.Text(), nullable=True, comment='The FERC license ID of a project.'), - sa.Column('capex_equipment_electric', sa.Float(), nullable=True, comment='Cost of plant: accessory electric equipment (USD).'), - sa.Column('capex_equipment_misc', sa.Float(), nullable=True, comment='Cost of plant: miscellaneous power plant equipment (USD).'), - sa.Column('capex_wheels_turbines_generators', sa.Float(), nullable=True, comment='Cost of plant: water wheels, turbines, and generators (USD).'), - sa.Column('energy_used_for_pumping_mwh', sa.Float(), nullable=True, comment='Energy used for pumping, in megawatt-hours.'), - sa.Column('net_load_mwh', sa.Float(), nullable=True, comment='Net output for load (net generation - energy used for pumping) in megawatt-hours.'), - sa.Column('opex_production_before_pumping', sa.Float(), nullable=True, comment='Total production expenses before pumping (USD).'), - sa.Column('opex_pumped_storage', sa.Float(), nullable=True, comment='Production expenses: pumped storage (USD).'), - sa.Column('opex_pumping', sa.Float(), nullable=True, comment='Production expenses: We are here to PUMP YOU UP! (USD).'), - sa.Column('total_fuel_cost_ferc1', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('total_mmbtu_ferc1', sa.Float(), nullable=True, comment='Total annual heat content of fuel consumed by a plant part record in the plant parts list.'), - sa.Column('fuel_type_code_pudl_ferc1', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('heat_rate_mmbtu_mwh_ferc1', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Calculated from FERC reported fuel consumption and net generation.'), - sa.ForeignKeyConstraint(['energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out__yearly_plants_all_ferc1_plant_parts_eia_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_out__yearly_plants_all_ferc1_plant_parts_eia_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out__yearly_plants_all_ferc1_plant_parts_eia_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out__yearly_plants_all_ferc1_plant_parts_eia_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out__yearly_plants_all_ferc1_plant_parts_eia_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_ferc1', 'plant_name_ferc1'], ['core_pudl__assn_plants_ferc1.utility_id_ferc1', 'core_pudl__assn_plants_ferc1.plant_name_ferc1'], name=op.f('fk_out__yearly_plants_all_ferc1_plant_parts_eia_utility_id_ferc1_core_pudl__assn_plants_ferc1')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out__yearly_plants_all_ferc1_plant_parts_eia_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('record_id_ferc1', name=op.f('pk_out__yearly_plants_all_ferc1_plant_parts_eia')) - ) - op.create_table('out_eia860__yearly_ownership', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('owner_utility_id_eia', sa.Integer(), nullable=False, comment='The EIA utility Identification number for the owner company that is responsible for the day-to-day operations of the generator, not the operator utility.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('owner_utility_name_eia', sa.Text(), nullable=True, comment='The name of the EIA owner utility.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('owner_state', sa.Enum('MI', 'NV', 'DE', 'NY', 'GA', 'NL', 'ME', 'IL', 'WA', 'WY', 'NE', 'ON', 'MS', 'IN', 'AK', 'NS', 'VA', 'NH', 'HI', 'YT', 'NM', 'AL', 'PR', 'CO', 'NB', 'PA', 'AZ', 'SD', 'MP', 'GU', 'KY', 'MN', 'ND', 'OK', 'QC', 'TN', 'UT', 'TX', 'VT', 'WI', 'NU', 'LA', 'RI', 'CT', 'NC', 'WV', 'PE', 'CA', 'AR', 'MO', 'DC', 'IA', 'SC', 'MB', 'MD', 'NT', 'FL', 'MA', 'ID', 'BC', 'MT', 'SK', 'KS', 'AB', 'NJ', 'VI', 'AS', 'OH', 'OR'), nullable=True, comment='Two letter ISO-3166 political subdivision code.'), - sa.Column('owner_city', sa.Text(), nullable=True, comment='City of owner.'), - sa.Column('owner_country', sa.Enum('CAN', 'USA'), nullable=True, comment='Three letter ISO-3166 country code.'), - sa.Column('owner_street_address', sa.Text(), nullable=True, comment='Steet address of owner.'), - sa.Column('owner_zip_code', sa.Text(), nullable=True, comment='Zip code of owner.'), - sa.Column('fraction_owned', sa.Float(), nullable=True, comment='Proportion of generator ownership attributable to this utility.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_out_eia860__yearly_ownership_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['owner_utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia860__yearly_ownership_owner_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_out_eia860__yearly_ownership_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia860__yearly_ownership_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia860__yearly_ownership_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', 'owner_utility_id_eia', name=op.f('pk_out_eia860__yearly_ownership')) - ) - op.create_table('out_eia923__yearly_boiler_fuel', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('fuel_consumed_units', sa.Float(), nullable=True, comment='Consumption of the fuel type in physical unit. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_mmbtu_per_unit', sa.Float(), nullable=True, comment='Heat content of the fuel in millions of Btus per physical unit.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('sulfur_content_pct', sa.Float(), nullable=True, comment='Sulfur content percentage by weight to the nearest 0.01 percent.'), - sa.Column('ash_content_pct', sa.Float(), nullable=True, comment='Ash content percentage by weight to the nearest 0.1 percent.'), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia923__yearly_boiler_fuel_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id', 'report_date'], ['core_eia860__scd_boilers.plant_id_eia', 'core_eia860__scd_boilers.boiler_id', 'core_eia860__scd_boilers.report_date'], name=op.f('fk_out_eia923__yearly_boiler_fuel_plant_id_eia_core_eia860__scd_boilers')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__yearly_boiler_fuel_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia923__yearly_boiler_fuel_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia923__yearly_boiler_fuel_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__yearly_boiler_fuel_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'boiler_id', 'energy_source_code', 'prime_mover_code', 'report_date', name=op.f('pk_out_eia923__yearly_boiler_fuel')) - ) - op.create_table('out_eia923__yearly_generation', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_out_eia923__yearly_generation_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__yearly_generation_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia923__yearly_generation_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__yearly_generation_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('plant_id_eia', 'generator_id', 'report_date', name=op.f('pk_out_eia923__yearly_generation')) - ) - op.create_table('out_eia923__yearly_generation_fuel_by_generator', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_out_eia923__yearly_generation_fuel_by_generator_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia923__yearly_generation_fuel_by_generator_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia923__yearly_generation_fuel_by_generator_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia923__yearly_generation_fuel_by_generator_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk_out_eia923__yearly_generation_fuel_by_generator')) - ) - op.create_table('out_eia923__yearly_generation_fuel_by_generator_energy_source', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('energy_source_code_num', sa.Enum('energy_source_code_1', 'energy_source_code_2', 'energy_source_code_3', 'energy_source_code_4', 'energy_source_code_5', 'energy_source_code_6', 'energy_source_code_7', 'energy_source_code_8'), nullable=True, comment='Name of the energy_source_code_N column that this energy source code was reported in for the generator referenced in the same record.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_prime_mover_code_core_eia__codes_prime_movers')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', 'prime_mover_code', 'energy_source_code', name=op.f('pk_out_eia923__yearly_generation_fuel_by_generator_energy_source')) - ) - op.create_table('out_eia923__yearly_generation_fuel_by_generator_energy_source_owner', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('prime_mover_code', sa.Text(), nullable=False, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('energy_source_code', sa.Text(), nullable=False, comment='A 2-3 letter code indicating the energy source (e.g. fuel type) associated with the record.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=False, comment='The EIA Utility Identification number.'), - sa.Column('ownership_record_type', sa.Enum('owned', 'total'), nullable=False, comment='Whether each generator record is for one owner or represents a total of all ownerships.'), - sa.Column('fraction_owned', sa.Float(), nullable=True, comment='Proportion of generator ownership attributable to this utility.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('energy_source_code_num', sa.Enum('energy_source_code_1', 'energy_source_code_2', 'energy_source_code_3', 'energy_source_code_4', 'energy_source_code_5', 'energy_source_code_6', 'energy_source_code_7', 'energy_source_code_8'), nullable=True, comment='Name of the energy_source_code_N column that this energy source code was reported in for the generator referenced in the same record.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('fuel_consumed_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel in physical unit, year to date. Note: this is the total quantity consumed for both electricity and, in the case of combined heat and power plants, process steam production.'), - sa.Column('fuel_consumed_for_electricity_mmbtu', sa.Float(), nullable=True, comment='Total consumption of fuel to produce electricity, in physical unit, year to date.'), - sa.ForeignKeyConstraint(['energy_source_code'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_owner_energy_source_code_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_owner_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia923__yearly_generation_fuel_by_generator_energy_source_owner_prime_mover_code_core_eia__codes_prime_movers')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', 'prime_mover_code', 'energy_source_code', 'utility_id_eia', 'ownership_record_type', name=op.f('pk_out_eia923__yearly_generation_fuel_by_generator_energy_source_owner')) - ) - op.create_table('out_eia__yearly_boilers', - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('boiler_id', sa.Text(), nullable=False, comment='Alphanumeric boiler ID.'), - sa.Column('air_flow_100pct_load_cubic_feet_per_minute', sa.Float(), nullable=True, comment='Total air flow including excess air at 100 percent load, reported at standard temperature and pressure (i.e. 68 F and one atmosphere pressure).'), - sa.Column('boiler_fuel_code_1', sa.Text(), nullable=True, comment='The code representing the most predominant type of energy that fuels the boiler.'), - sa.Column('boiler_fuel_code_2', sa.Text(), nullable=True, comment='The code representing the second most predominant type of energy that fuels the boiler.'), - sa.Column('boiler_fuel_code_3', sa.Text(), nullable=True, comment='The code representing the third most predominant type of energy that fuels the boiler.'), - sa.Column('boiler_fuel_code_4', sa.Text(), nullable=True, comment='The code representing the fourth most predominant type of energy that fuels the boiler.'), - sa.Column('boiler_manufacturer', sa.Text(), nullable=True, comment='Name of boiler manufacturer.'), - sa.Column('boiler_manufacturer_code', sa.Text(), nullable=True, comment='EIA short code for boiler manufacturer.'), - sa.Column('boiler_operating_date', sa.Date(), nullable=True, comment='Date the boiler began or is planned to begin commercial operation.'), - sa.Column('boiler_retirement_date', sa.Date(), nullable=True, comment='Date of the scheduled or effected retirement of the boiler.'), - sa.Column('boiler_status', sa.Text(), nullable=True, comment='EIA short code identifying boiler operational status.'), - sa.Column('boiler_type', sa.Text(), nullable=True, comment='EIA short code indicating the standards under which the boiler is operating as described in the U.S. EPA regulation under 40 CFR.'), - sa.Column('city', sa.Text(), nullable=True), - sa.Column('compliance_year_mercury', sa.Integer(), nullable=True, comment='Year boiler was or is expected to be in compliance with federal, state and/or local regulations for mercury emissions.'), - sa.Column('compliance_year_nox', sa.Integer(), nullable=True, comment='Year boiler was or is expected to be in compliance with federal, state and/or local regulations for nitrogen oxide emissions.'), - sa.Column('compliance_year_particulate', sa.Integer(), nullable=True, comment='Year boiler was or is expected to be in compliance with federal, state and/or local regulations for particulate matter emissions.'), - sa.Column('compliance_year_so2', sa.Integer(), nullable=True, comment='Year boiler was or is expected to be in compliance with federal, state and/or local regulations for sulfur dioxide emissions.'), - sa.Column('county', sa.Text(), nullable=True, comment='County name.'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.Column('efficiency_100pct_load', sa.Float(), nullable=True, comment='Boiler efficiency percentage when burning at 100 percent load to the nearest 0.1 percent.'), - sa.Column('efficiency_50pct_load', sa.Float(), nullable=True, comment='Boiler efficiency percentage when burning at 50 percent load to the nearest 0.1 percent.'), - sa.Column('firing_rate_using_coal_tons_per_hour', sa.Float(), nullable=True, comment='Design firing rate at maximum continuous steam flow for coal to the nearest 0.1 ton per hour.'), - sa.Column('firing_rate_using_gas_mcf_per_hour', sa.Float(), nullable=True, comment='Design firing rate at maximum continuous steam flow for gas to the nearest 0.1 cubic feet per hour.'), - sa.Column('firing_rate_using_oil_bbls_per_hour', sa.Float(), nullable=True, comment='Design firing rate at maximum continuous steam flow for pet coke to the nearest 0.1 barrels per hour.'), - sa.Column('firing_rate_using_other_fuels', sa.Float(), nullable=True, comment='Design firing rate at maximum continuous steam flow for energy sources other than coal, petroleum, or natural gas.'), - sa.Column('firing_type_1', sa.Text(), nullable=True, comment='EIA short code indicating the type of firing used by this boiler.'), - sa.Column('firing_type_2', sa.Text(), nullable=True, comment='EIA short code indicating the type of firing used by this boiler.'), - sa.Column('firing_type_3', sa.Text(), nullable=True, comment='EIA short code indicating the type of firing used by this boiler.'), - sa.Column('fly_ash_reinjection', sa.Boolean(), nullable=True, comment='Indicates whether the boiler is capable of re-injecting fly ash.'), - sa.Column('hrsg', sa.Boolean(), nullable=True, comment='indicates if the boiler is a heat recovery steam generator (HRSG).'), - sa.Column('latitude', sa.Float(), nullable=True, comment="Latitude of the plant's location, in degrees."), - sa.Column('longitude', sa.Float(), nullable=True, comment="Longitude of the plant's location, in degrees."), - sa.Column('max_steam_flow_1000_lbs_per_hour', sa.Float(), nullable=True, comment='Maximum continuous steam flow at 100 percent load.'), - sa.Column('mercury_control_existing_strategy_1', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_existing_strategy_2', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_existing_strategy_3', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_existing_strategy_4', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_existing_strategy_5', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_existing_strategy_6', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_proposed_strategy_1', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_proposed_strategy_2', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent mercury regulation.'), - sa.Column('mercury_control_proposed_strategy_3', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent mercury regulation.'), - sa.Column('new_source_review', sa.Boolean(), nullable=True, comment='Indicates whether the boiler is subject to New Source Review requirements.'), - sa.Column('new_source_review_date', sa.Date(), nullable=True, comment='Month of issued New Source Review permit.'), - sa.Column('new_source_review_permit', sa.Text(), nullable=True, comment='New Source Review permit number.'), - sa.Column('nox_control_existing_caaa_compliance_strategy_1', sa.Text(), nullable=True, comment='Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_existing_caaa_compliance_strategy_2', sa.Text(), nullable=True, comment='Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_existing_caaa_compliance_strategy_3', sa.Text(), nullable=True, comment='Existing strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_existing_strategy_1', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_existing_strategy_2', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_existing_strategy_3', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_manufacturer', sa.Text(), nullable=True, comment='Name of nitrogen oxide control manufacturer.'), - sa.Column('nox_control_manufacturer_code', sa.Text(), nullable=True, comment='Code indicating the nitrogen oxide control burner manufacturer.'), - sa.Column('nox_control_out_of_compliance_strategy_1', sa.Text(), nullable=True, comment='If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.'), - sa.Column('nox_control_out_of_compliance_strategy_2', sa.Text(), nullable=True, comment='If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.'), - sa.Column('nox_control_out_of_compliance_strategy_3', sa.Text(), nullable=True, comment='If boiler is not in compliance with nitrogen oxide regulations, strategy for compliance.'), - sa.Column('nox_control_planned_caaa_compliance_strategy_1', sa.Text(), nullable=True, comment='Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_planned_caaa_compliance_strategy_2', sa.Text(), nullable=True, comment='Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_planned_caaa_compliance_strategy_3', sa.Text(), nullable=True, comment='Planned strategies to meet the nitrogen oxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('nox_control_proposed_strategy_1', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_proposed_strategy_2', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_proposed_strategy_3', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent nitrogen oxide regulation.'), - sa.Column('nox_control_status_code', sa.Text(), nullable=True, comment='Nitrogen oxide control status code.'), - sa.Column('particulate_control_out_of_compliance_strategy_1', sa.Text(), nullable=True, comment='If boiler is not in compliance with particulate matter regulations, strategy for compliance.'), - sa.Column('particulate_control_out_of_compliance_strategy_2', sa.Text(), nullable=True, comment='If boiler is not in compliance with particulate matter regulations, strategy for compliance.'), - sa.Column('particulate_control_out_of_compliance_strategy_3', sa.Text(), nullable=True, comment='If boiler is not in compliance with particulate matter regulations, strategy for compliance.'), - sa.Column('regulation_mercury', sa.Text(), nullable=True, comment='Most stringent type of statute or regulation code under which the boiler is operating for mercury control standards.'), - sa.Column('regulation_nox', sa.Text(), nullable=True, comment='EIA short code for most stringent type of statute or regulation code under which the boiler is operating for nitrogen oxide control standards.'), - sa.Column('regulation_particulate', sa.Text(), nullable=True, comment='EIA short code for most stringent type of statute or regulation code under which the boiler is operating for particulate matter control standards.'), - sa.Column('regulation_so2', sa.Text(), nullable=True, comment='EIA short code for most stringent type of statute or regulation code under which the boiler is operating for sulfur dioxide control standards.'), - sa.Column('so2_control_existing_caaa_compliance_strategy_1', sa.Text(), nullable=True, comment='Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_existing_caaa_compliance_strategy_2', sa.Text(), nullable=True, comment='Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_existing_caaa_compliance_strategy_3', sa.Text(), nullable=True, comment='Existing strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_existing_strategy_1', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('so2_control_existing_strategy_2', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('so2_control_existing_strategy_3', sa.Text(), nullable=True, comment='Existing strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('so2_control_out_of_compliance_strategy_1', sa.Text(), nullable=True, comment='If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.'), - sa.Column('so2_control_out_of_compliance_strategy_2', sa.Text(), nullable=True, comment='If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.'), - sa.Column('so2_control_out_of_compliance_strategy_3', sa.Text(), nullable=True, comment='If boiler is not in compliance with sulfur dioxide regulations, strategy for compliance.'), - sa.Column('so2_control_planned_caaa_compliance_strategy_1', sa.Text(), nullable=True, comment='Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_planned_caaa_compliance_strategy_2', sa.Text(), nullable=True, comment='Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_planned_caaa_compliance_strategy_3', sa.Text(), nullable=True, comment='Planned strategies to meet the sulfur dioxide requirements of Title IV of the Clean Air Act Amendment of 1990.'), - sa.Column('so2_control_proposed_strategy_1', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('so2_control_proposed_strategy_2', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('so2_control_proposed_strategy_3', sa.Text(), nullable=True, comment='Proposed strategy to comply with the most stringent sulfur dioxide regulation.'), - sa.Column('standard_nox_rate', sa.Float(), nullable=True, comment='Numeric value for the unit of measurement specified for nitrogen oxide.'), - sa.Column('standard_particulate_rate', sa.Float(), nullable=True, comment='Numeric value for the unit of measurement specified for particulate matter.'), - sa.Column('standard_so2_percent_scrubbed', sa.Float(), nullable=True, comment='The percent of sulfur dioxide to be scrubbed specified by the most stringent sulfur dioxide regulation.'), - sa.Column('standard_so2_rate', sa.Float(), nullable=True, comment='Numeric value for the unit of measurement specified for sulfur dioxide.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('street_address', sa.Text(), nullable=True), - sa.Column('timezone', sa.Enum('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu'), nullable=True, comment='IANA timezone name'), - sa.Column('turndown_ratio', sa.Float(), nullable=True, comment='The turndown ratio for the boiler.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('unit_nox', sa.Text(), nullable=True, comment='Numeric value for the unit of measurement specified for nitrogen oxide.'), - sa.Column('unit_particulate', sa.Text(), nullable=True, comment='Numeric value for the unit of measurement specified for particulate matter.'), - sa.Column('unit_so2', sa.Text(), nullable=True, comment='Numeric value for the unit of measurement specified for sulfur dioxide.'), - sa.Column('waste_heat_input_mmbtu_per_hour', sa.Float(), nullable=True, comment='Design waste-heat input rate at maximum continuous steam flow where a waste-heat boiler is a boiler that receives all or a substantial portion of its energy input from the noncumbustible exhaust gases of a separate fuel-burning process (MMBtu per hour).'), - sa.Column('wet_dry_bottom', sa.Text(), nullable=True, comment='Wet or Dry Bottom where Wet Bottom is defined as slag tanks that are installed at furnace throat to contain and remove molten ash from the furnace, and Dry Bottom is defined as having no slag tanks at furnace throat area, throat area is clear, and bottom ash drops through throat to bottom ash water hoppers.'), - sa.Column('zip_code', sa.Text(), nullable=True, comment='Five digit US Zip Code.'), - sa.ForeignKeyConstraint(['boiler_fuel_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_boilers_boiler_fuel_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['boiler_fuel_code_2'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_boilers_boiler_fuel_code_2_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['boiler_fuel_code_3'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_boilers_boiler_fuel_code_3_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['boiler_fuel_code_4'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_boilers_boiler_fuel_code_4_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['boiler_manufacturer_code'], ['core_eia__codes_environmental_equipment_manufacturers.code'], name=op.f('fk_out_eia__yearly_boilers_boiler_manufacturer_code_core_eia__codes_environmental_equipment_manufacturers')), - sa.ForeignKeyConstraint(['boiler_status'], ['core_eia__codes_boiler_status.code'], name=op.f('fk_out_eia__yearly_boilers_boiler_status_core_eia__codes_boiler_status')), - sa.ForeignKeyConstraint(['boiler_type'], ['core_eia__codes_boiler_types.code'], name=op.f('fk_out_eia__yearly_boilers_boiler_type_core_eia__codes_boiler_types')), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_out_eia__yearly_boilers_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['firing_type_1'], ['core_eia__codes_firing_types.code'], name=op.f('fk_out_eia__yearly_boilers_firing_type_1_core_eia__codes_firing_types')), - sa.ForeignKeyConstraint(['firing_type_2'], ['core_eia__codes_firing_types.code'], name=op.f('fk_out_eia__yearly_boilers_firing_type_2_core_eia__codes_firing_types')), - sa.ForeignKeyConstraint(['firing_type_3'], ['core_eia__codes_firing_types.code'], name=op.f('fk_out_eia__yearly_boilers_firing_type_3_core_eia__codes_firing_types')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_1'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_mercury_control_existing_strategy_1_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_2'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_mercury_control_existing_strategy_2_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_3'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_mercury_control_existing_strategy_3_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_4'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_mercury_control_existing_strategy_4_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_5'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_mercury_control_existing_strategy_5_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_existing_strategy_6'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_mercury_control_existing_strategy_6_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_proposed_strategy_1'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_mercury_control_proposed_strategy_1_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_proposed_strategy_2'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_mercury_control_proposed_strategy_2_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['mercury_control_proposed_strategy_3'], ['core_eia__codes_mercury_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_mercury_control_proposed_strategy_3_core_eia__codes_mercury_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_existing_caaa_compliance_strategy_1'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_existing_caaa_compliance_strategy_1_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_existing_caaa_compliance_strategy_2'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_existing_caaa_compliance_strategy_2_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_existing_caaa_compliance_strategy_3'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_existing_caaa_compliance_strategy_3_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_manufacturer_code'], ['core_eia__codes_environmental_equipment_manufacturers.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_manufacturer_code_core_eia__codes_environmental_equipment_manufacturers')), - sa.ForeignKeyConstraint(['nox_control_out_of_compliance_strategy_1'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_out_of_compliance_strategy_1_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_out_of_compliance_strategy_2'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_out_of_compliance_strategy_2_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_out_of_compliance_strategy_3'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_out_of_compliance_strategy_3_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_planned_caaa_compliance_strategy_1'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_planned_caaa_compliance_strategy_1_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_planned_caaa_compliance_strategy_2'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_planned_caaa_compliance_strategy_2_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_planned_caaa_compliance_strategy_3'], ['core_eia__codes_nox_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_planned_caaa_compliance_strategy_3_core_eia__codes_nox_compliance_strategies')), - sa.ForeignKeyConstraint(['nox_control_status_code'], ['core_eia__codes_nox_control_status.code'], name=op.f('fk_out_eia__yearly_boilers_nox_control_status_code_core_eia__codes_nox_control_status')), - sa.ForeignKeyConstraint(['particulate_control_out_of_compliance_strategy_1'], ['core_eia__codes_particulate_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_particulate_control_out_of_compliance_strategy_1_core_eia__codes_particulate_compliance_strategies')), - sa.ForeignKeyConstraint(['particulate_control_out_of_compliance_strategy_2'], ['core_eia__codes_particulate_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_particulate_control_out_of_compliance_strategy_2_core_eia__codes_particulate_compliance_strategies')), - sa.ForeignKeyConstraint(['particulate_control_out_of_compliance_strategy_3'], ['core_eia__codes_particulate_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_particulate_control_out_of_compliance_strategy_3_core_eia__codes_particulate_compliance_strategies')), - sa.ForeignKeyConstraint(['plant_id_eia', 'boiler_id', 'report_date'], ['core_eia860__scd_boilers.plant_id_eia', 'core_eia860__scd_boilers.boiler_id', 'core_eia860__scd_boilers.report_date'], name=op.f('fk_out_eia__yearly_boilers_plant_id_eia_core_eia860__scd_boilers')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia__yearly_boilers_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['regulation_mercury'], ['core_eia__codes_regulations.code'], name=op.f('fk_out_eia__yearly_boilers_regulation_mercury_core_eia__codes_regulations')), - sa.ForeignKeyConstraint(['regulation_nox'], ['core_eia__codes_regulations.code'], name=op.f('fk_out_eia__yearly_boilers_regulation_nox_core_eia__codes_regulations')), - sa.ForeignKeyConstraint(['regulation_particulate'], ['core_eia__codes_regulations.code'], name=op.f('fk_out_eia__yearly_boilers_regulation_particulate_core_eia__codes_regulations')), - sa.ForeignKeyConstraint(['regulation_so2'], ['core_eia__codes_regulations.code'], name=op.f('fk_out_eia__yearly_boilers_regulation_so2_core_eia__codes_regulations')), - sa.ForeignKeyConstraint(['so2_control_existing_caaa_compliance_strategy_1'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_so2_control_existing_caaa_compliance_strategy_1_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_existing_caaa_compliance_strategy_2'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_so2_control_existing_caaa_compliance_strategy_2_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_existing_caaa_compliance_strategy_3'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_so2_control_existing_caaa_compliance_strategy_3_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_out_of_compliance_strategy_1'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_so2_control_out_of_compliance_strategy_1_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_out_of_compliance_strategy_2'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_so2_control_out_of_compliance_strategy_2_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_out_of_compliance_strategy_3'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_so2_control_out_of_compliance_strategy_3_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_planned_caaa_compliance_strategy_1'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_so2_control_planned_caaa_compliance_strategy_1_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_planned_caaa_compliance_strategy_2'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_so2_control_planned_caaa_compliance_strategy_2_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['so2_control_planned_caaa_compliance_strategy_3'], ['core_eia__codes_so2_compliance_strategies.code'], name=op.f('fk_out_eia__yearly_boilers_so2_control_planned_caaa_compliance_strategy_3_core_eia__codes_so2_compliance_strategies')), - sa.ForeignKeyConstraint(['unit_nox'], ['core_eia__codes_nox_units.code'], name=op.f('fk_out_eia__yearly_boilers_unit_nox_core_eia__codes_nox_units')), - sa.ForeignKeyConstraint(['unit_particulate'], ['core_eia__codes_particulate_units.code'], name=op.f('fk_out_eia__yearly_boilers_unit_particulate_core_eia__codes_particulate_units')), - sa.ForeignKeyConstraint(['unit_so2'], ['core_eia__codes_so2_units.code'], name=op.f('fk_out_eia__yearly_boilers_unit_so2_core_eia__codes_so2_units')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia__yearly_boilers_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia__yearly_boilers_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.ForeignKeyConstraint(['wet_dry_bottom'], ['core_eia__codes_wet_dry_bottom.code'], name=op.f('fk_out_eia__yearly_boilers_wet_dry_bottom_core_eia__codes_wet_dry_bottom')), - sa.PrimaryKeyConstraint('plant_id_eia', 'boiler_id', 'report_date', name=op.f('pk_out_eia__yearly_boilers')) - ) - op.create_table('out_eia__yearly_generators', - sa.Column('plant_id_eia', sa.Integer(), nullable=False, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=False, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('report_date', sa.Date(), nullable=False, comment='Date reported.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('technology_description', sa.Text(), nullable=True, comment='High level description of the technology used by the generator to produce electricity.'), - sa.Column('energy_source_code_1', sa.Text(), nullable=True, comment='The code representing the most predominant type of energy that fuels the generator.'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('generator_operating_date', sa.Date(), nullable=True, comment='Date the generator began commercial operation.'), - sa.Column('generator_retirement_date', sa.Date(), nullable=True, comment='Date of the scheduled or effected retirement of the generator.'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('planned_generator_retirement_date', sa.Date(), nullable=True, comment='Planned effective date of the scheduled retirement of the generator.'), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('total_mmbtu', sa.Float(), nullable=True, comment='Total annual heat content of fuel consumed by a plant part record in the plant parts list.'), - sa.Column('associated_combined_heat_power', sa.Boolean(), nullable=True, comment='Indicates whether the generator is associated with a combined heat and power system'), - sa.Column('bga_source', sa.Text(), nullable=True, comment='The source from where the unit_id_pudl is compiled. The unit_id_pudl comes directly from EIA 860, or string association (which looks at all the boilers and generators that are not associated with a unit and tries to find a matching string in the respective collection of boilers or generator), or from a unit connection (where the unit_id_eia is employed to find additional boiler generator connections).'), - sa.Column('bypass_heat_recovery', sa.Boolean(), nullable=True, comment='Can this generator operate while bypassing the heat recovery steam generator?'), - sa.Column('carbon_capture', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses carbon capture technology.'), - sa.Column('city', sa.Text(), nullable=True), - sa.Column('cofire_fuels', sa.Boolean(), nullable=True, comment='Can the generator co-fire fuels?.'), - sa.Column('county', sa.Text(), nullable=True, comment='County name.'), - sa.Column('current_planned_generator_operating_date', sa.Date(), nullable=True, comment='The most recently updated effective date on which the generator is scheduled to start operation'), - sa.Column('data_maturity', sa.Text(), nullable=True, comment='Level of maturity of the data record. Some data sources report less-than-final data. PUDL sometimes includes this data, but use at your own risk.'), - sa.Column('deliver_power_transgrid', sa.Boolean(), nullable=True, comment='Indicate whether the generator can deliver power to the transmission grid.'), - sa.Column('distributed_generation', sa.Boolean(), nullable=True, comment='Whether the generator is considered distributed generation'), - sa.Column('duct_burners', sa.Boolean(), nullable=True, comment='Indicates whether the unit has duct-burners for supplementary firing of the turbine exhaust gas'), - sa.Column('energy_source_1_transport_1', sa.Text(), nullable=True, comment='Primary mode of transport for energy source 1.'), - sa.Column('energy_source_1_transport_2', sa.Text(), nullable=True, comment='Secondary mode of transport for energy source 1.'), - sa.Column('energy_source_1_transport_3', sa.Text(), nullable=True, comment='Tertiary mode of transport for energy source 1.'), - sa.Column('energy_source_2_transport_1', sa.Text(), nullable=True, comment='Primary mode of transport for energy source 2.'), - sa.Column('energy_source_2_transport_2', sa.Text(), nullable=True, comment='Secondary mode of transport for energy source 2.'), - sa.Column('energy_source_2_transport_3', sa.Text(), nullable=True, comment='Tertiary mode of transport for energy source 2.'), - sa.Column('energy_source_code_2', sa.Text(), nullable=True, comment='The code representing the second most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_3', sa.Text(), nullable=True, comment='The code representing the third most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_4', sa.Text(), nullable=True, comment='The code representing the fourth most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_5', sa.Text(), nullable=True, comment='The code representing the fifth most predominant type of energy that fuels the generator'), - sa.Column('energy_source_code_6', sa.Text(), nullable=True, comment='The code representing the sixth most predominant type of energy that fuels the generator'), - sa.Column('energy_storage_capacity_mwh', sa.Float(), nullable=True, comment='Energy storage capacity in MWh (e.g. for batteries).'), - sa.Column('ferc_qualifying_facility', sa.Boolean(), nullable=True, comment='Indicatates whether or not a generator is a qualifying FERC cogeneation facility.'), - sa.Column('fluidized_bed_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses fluidized bed technology'), - sa.Column('fuel_type_count', sa.Integer(), nullable=True, comment='A count of how many different simple energy sources there are associated with a generator.'), - sa.Column('latitude', sa.Float(), nullable=True, comment="Latitude of the plant's location, in degrees."), - sa.Column('longitude', sa.Float(), nullable=True, comment="Longitude of the plant's location, in degrees."), - sa.Column('minimum_load_mw', sa.Float(), nullable=True, comment='The minimum load at which the generator can operate at continuosuly.'), - sa.Column('multiple_fuels', sa.Boolean(), nullable=True, comment='Can the generator burn multiple fuels?'), - sa.Column('nameplate_power_factor', sa.Float(), nullable=True, comment='The nameplate power factor of the generator.'), - sa.Column('net_capacity_mwdc', sa.Float(), nullable=True, comment='Generation capacity in megawatts of direct current that is subject to a net metering agreement. Typically used for behind-the-meter solar PV.'), - sa.Column('operating_switch', sa.Text(), nullable=True, comment='Indicates whether the fuel switching generator can switch when operating'), - sa.Column('operational_status_code', sa.Text(), nullable=True, comment='The operating status of the asset.'), - sa.Column('original_planned_generator_operating_date', sa.Date(), nullable=True, comment='The date the generator was originally scheduled to be operational'), - sa.Column('other_combustion_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses other combustion technologies'), - sa.Column('other_modifications_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter commercial operation after any other planned modification is complete.'), - sa.Column('other_planned_modifications', sa.Boolean(), nullable=True, comment='Indicates whether there are there other modifications planned for the generator.'), - sa.Column('owned_by_non_utility', sa.Boolean(), nullable=True, comment='Whether any part of generator is owned by a nonutilty'), - sa.Column('ownership_code', sa.Text(), nullable=True, comment='Identifies the ownership for each generator.'), - sa.Column('planned_derate_date', sa.Date(), nullable=True, comment='Planned effective month that the generator is scheduled to enter operation after the derate modification.'), - sa.Column('planned_energy_source_code_1', sa.Text(), nullable=True, comment='New energy source code for the planned repowered generator.'), - sa.Column('planned_modifications', sa.Boolean(), nullable=True, comment='Indicates whether there are any planned capacity uprates/derates, repowering, other modifications, or generator retirements scheduled for the next 5 years.'), - sa.Column('planned_net_summer_capacity_derate_mw', sa.Float(), nullable=True, comment='Decrease in summer capacity expected to be realized from the derate modification to the equipment.'), - sa.Column('planned_net_summer_capacity_uprate_mw', sa.Float(), nullable=True, comment='Increase in summer capacity expected to be realized from the modification to the equipment.'), - sa.Column('planned_net_winter_capacity_derate_mw', sa.Float(), nullable=True, comment='Decrease in winter capacity expected to be realized from the derate modification to the equipment.'), - sa.Column('planned_net_winter_capacity_uprate_mw', sa.Float(), nullable=True, comment='Increase in winter capacity expected to be realized from the uprate modification to the equipment.'), - sa.Column('planned_new_capacity_mw', sa.Float(), nullable=True, comment='The expected new namplate capacity for the generator.'), - sa.Column('planned_new_prime_mover_code', sa.Text(), nullable=True, comment='New prime mover for the planned repowered generator.'), - sa.Column('planned_repower_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter operation after the repowering is complete.'), - sa.Column('planned_uprate_date', sa.Date(), nullable=True, comment='Planned effective date that the generator is scheduled to enter operation after the uprate modification.'), - sa.Column('previously_canceled', sa.Boolean(), nullable=True, comment='Indicates whether the generator was previously reported as indefinitely postponed or canceled'), - sa.Column('pulverized_coal_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses pulverized coal technology'), - sa.Column('reactive_power_output_mvar', sa.Float(), nullable=True, comment='Reactive Power Output (MVAr)'), - sa.Column('rto_iso_lmp_node_id', sa.Text(), nullable=True, comment='The designation used to identify the price node in RTO/ISO Locational Marginal Price reports'), - sa.Column('rto_iso_location_wholesale_reporting_id', sa.Text(), nullable=True, comment='The designation used to report ths specific location of the wholesale sales transactions to FERC for the Electric Quarterly Report'), - sa.Column('solid_fuel_gasification', sa.Boolean(), nullable=True, comment='Indicates whether the generator is part of a solid fuel gasification system'), - sa.Column('startup_source_code_1', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_2', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_3', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('startup_source_code_4', sa.Text(), nullable=True, comment='The code representing the first, second, third or fourth start-up and flame stabilization energy source used by the combustion unit(s) associated with this generator.'), - sa.Column('state', sa.Text(), nullable=True, comment='Two letter US state abbreviation.'), - sa.Column('stoker_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses stoker technology'), - sa.Column('street_address', sa.Text(), nullable=True), - sa.Column('subcritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses subcritical technology'), - sa.Column('summer_capacity_estimate', sa.Boolean(), nullable=True, comment='Whether the summer capacity value was an estimate'), - sa.Column('summer_capacity_mw', sa.Float(), nullable=True, comment='The net summer capacity.'), - sa.Column('summer_estimated_capability_mw', sa.Float(), nullable=True, comment='EIA estimated summer capacity (in MWh).'), - sa.Column('supercritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses supercritical technology'), - sa.Column('switch_oil_gas', sa.Boolean(), nullable=True, comment='Indicates whether the generator switch between oil and natural gas.'), - sa.Column('syncronized_transmission_grid', sa.Boolean(), nullable=True, comment='Indicates whether standby generators (SB status) can be synchronized to the grid.'), - sa.Column('time_cold_shutdown_full_load_code', sa.Text(), nullable=True, comment='The minimum amount of time required to bring the unit to full load from shutdown.'), - sa.Column('timezone', sa.Enum('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu'), nullable=True, comment='IANA timezone name'), - sa.Column('topping_bottoming_code', sa.Text(), nullable=True, comment='If the generator is associated with a combined heat and power system, indicates whether the generator is part of a topping cycle or a bottoming cycle'), - sa.Column('turbines_inverters_hydrokinetics', sa.Integer(), nullable=True, comment='Number of wind turbines, or hydrokinetic buoys.'), - sa.Column('turbines_num', sa.Integer(), nullable=True, comment='Number of wind turbines, or hydrokinetic buoys.'), - sa.Column('ultrasupercritical_tech', sa.Boolean(), nullable=True, comment='Indicates whether the generator uses ultra-supercritical technology'), - sa.Column('uprate_derate_completed_date', sa.Date(), nullable=True, comment='The date when the uprate or derate was completed.'), - sa.Column('uprate_derate_during_year', sa.Boolean(), nullable=True, comment='Was an uprate or derate completed on this generator during the reporting year?'), - sa.Column('winter_capacity_estimate', sa.Boolean(), nullable=True, comment='Whether the winter capacity value was an estimate'), - sa.Column('winter_capacity_mw', sa.Float(), nullable=True, comment='The net winter capacity.'), - sa.Column('winter_estimated_capability_mw', sa.Float(), nullable=True, comment='EIA estimated winter capacity (in MWh).'), - sa.Column('zip_code', sa.Text(), nullable=True, comment='Five digit US Zip Code.'), - sa.ForeignKeyConstraint(['data_maturity'], ['core_pudl__codes_data_maturities.code'], name=op.f('fk_out_eia__yearly_generators_data_maturity_core_pudl__codes_data_maturities')), - sa.ForeignKeyConstraint(['energy_source_1_transport_1'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_1_transport_1_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_1_transport_2'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_1_transport_2_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_1_transport_3'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_1_transport_3_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_1'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_2_transport_1_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_2'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_2_transport_2_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_2_transport_3'], ['core_eia__codes_fuel_transportation_modes.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_2_transport_3_core_eia__codes_fuel_transportation_modes')), - sa.ForeignKeyConstraint(['energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_2'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_code_2_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_3'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_code_3_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_4'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_code_4_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_5'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_code_5_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['energy_source_code_6'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_energy_source_code_6_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['operational_status_code'], ['core_eia__codes_operational_status.code'], name=op.f('fk_out_eia__yearly_generators_operational_status_code_core_eia__codes_operational_status')), - sa.ForeignKeyConstraint(['planned_energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_planned_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['planned_new_prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia__yearly_generators_planned_new_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_out_eia__yearly_generators_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia__yearly_generators_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia__yearly_generators_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['startup_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_startup_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_2'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_startup_source_code_2_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_3'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_startup_source_code_3_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['startup_source_code_4'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_startup_source_code_4_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia__yearly_generators_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia__yearly_generators_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('report_date', 'plant_id_eia', 'generator_id', name=op.f('pk_out_eia__yearly_generators')) - ) - op.create_table('out_eia__yearly_generators_by_ownership', - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('generator_id', sa.Text(), nullable=True, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('utility_name_eia', sa.Text(), nullable=True, comment='The name of the utility.'), - sa.Column('technology_description', sa.Text(), nullable=True, comment='High level description of the technology used by the generator to produce electricity.'), - sa.Column('energy_source_code_1', sa.Text(), nullable=True, comment='The code representing the most predominant type of energy that fuels the generator.'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('generator_operating_date', sa.Date(), nullable=True, comment='Date the generator began commercial operation.'), - sa.Column('generator_retirement_date', sa.Date(), nullable=True, comment='Date of the scheduled or effected retirement of the generator.'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('planned_generator_retirement_date', sa.Date(), nullable=True, comment='Planned effective date of the scheduled retirement of the generator.'), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('fuel_cost_from_eiaapi', sa.Boolean(), nullable=True, comment='Indicates whether the fuel cost was derived from the EIA API.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('total_mmbtu', sa.Float(), nullable=True, comment='Total annual heat content of fuel consumed by a plant part record in the plant parts list.'), - sa.Column('ferc_acct_name', sa.Enum('Hydraulic', 'Nuclear', 'Steam', 'Other'), nullable=True, comment='Name of FERC account, derived from technology description and prime mover code.'), - sa.Column('generator_operating_year', sa.Integer(), nullable=True, comment='Year a generator went into service.'), - sa.Column('operational_status_pudl', sa.Enum('operating', 'retired', 'proposed'), nullable=True, comment='The operating status of the asset using PUDL categories.'), - sa.Column('capacity_eoy_mw', sa.Float(), nullable=True, comment='Total end of year installed (nameplate) capacity for a plant part, in megawatts.'), - sa.Column('fraction_owned', sa.Float(), nullable=True, comment='Proportion of generator ownership attributable to this utility.'), - sa.Column('ownership_record_type', sa.Enum('owned', 'total'), nullable=True, comment='Whether each generator record is for one owner or represents a total of all ownerships.'), - sa.ForeignKeyConstraint(['energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_generators_by_ownership_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_out_eia__yearly_generators_by_ownership_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia__yearly_generators_by_ownership_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia__yearly_generators_by_ownership_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia__yearly_generators_by_ownership_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia__yearly_generators_by_ownership_utility_id_pudl_core_pudl__entity_utilities_pudl')) - ) - op.create_table('out_eia__yearly_plant_parts', - sa.Column('record_id_eia', sa.Text(), nullable=False, comment='Identifier for EIA plant parts analysis records.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('plant_part', sa.Enum('plant_technology', 'plant_unit', 'plant_prime_fuel', 'plant_prime_mover', 'plant_gen', 'plant', 'plant_match_ferc1', 'plant_ferc_acct', 'plant_operating_year'), nullable=True, comment='The part of the plant a record corresponds to.'), - sa.Column('generator_id', sa.Text(), nullable=True, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('energy_source_code_1', sa.Text(), nullable=True, comment='The code representing the most predominant type of energy that fuels the generator.'), - sa.Column('technology_description', sa.Text(), nullable=True, comment='High level description of the technology used by the generator to produce electricity.'), - sa.Column('ferc_acct_name', sa.Enum('Hydraulic', 'Nuclear', 'Steam', 'Other'), nullable=True, comment='Name of FERC account, derived from technology description and prime mover code.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('true_gran', sa.Boolean(), nullable=True, comment='Indicates whether a plant part list record is associated with the highest priority plant part for all identical records.'), - sa.Column('appro_part_label', sa.Enum('plant_technology', 'plant_unit', 'plant_prime_fuel', 'plant_prime_mover', 'plant_gen', 'plant', 'plant_match_ferc1', 'plant_ferc_acct', 'plant_operating_year'), nullable=True, comment='Plant part of the associated true granularity record.'), - sa.Column('appro_record_id_eia', sa.Text(), nullable=True, comment='EIA record ID of the associated true granularity record.'), - sa.Column('ferc1_generator_agg_id', sa.Integer(), nullable=True, comment='ID dynamically assigned by PUDL to EIA records with multiple matches to a single FERC ID in the FERC-EIA manual matching process.'), - sa.Column('capacity_eoy_mw', sa.Float(), nullable=True, comment='Total end of year installed (nameplate) capacity for a plant part, in megawatts.'), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('fraction_owned', sa.Float(), nullable=True, comment='Proportion of generator ownership attributable to this utility.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('generator_retirement_date', sa.Date(), nullable=True, comment='Date of the scheduled or effected retirement of the generator.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('installation_year', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('generator_operating_year', sa.Integer(), nullable=True, comment='Year a generator went into service.'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.Column('operational_status_pudl', sa.Enum('operating', 'retired', 'proposed'), nullable=True, comment='The operating status of the asset using PUDL categories.'), - sa.Column('ownership_record_type', sa.Enum('owned', 'total'), nullable=True, comment='Whether each generator record is for one owner or represents a total of all ownerships.'), - sa.Column('ownership_dupe', sa.Boolean(), nullable=True, comment='Whether a plant part record has a duplicate record with different ownership status.'), - sa.Column('planned_generator_retirement_date', sa.Date(), nullable=True, comment='Planned effective date of the scheduled retirement of the generator.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('plant_name_ppe', sa.Text(), nullable=True, comment='Derived plant name that includes EIA plant name and other strings associated with ID and PK columns of the plant part.'), - sa.Column('plant_part_id_eia', sa.Text(), nullable=True, comment='Contains EIA plant ID, plant part, ownership, and EIA utility id'), - sa.Column('record_count', sa.Integer(), nullable=True, comment='Number of distinct generator IDs that partcipated in the aggregation for a plant part list record.'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('total_mmbtu', sa.Float(), nullable=True, comment='Total annual heat content of fuel consumed by a plant part record in the plant parts list.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('plant_id_report_year', sa.Text(), nullable=True, comment='PUDL plant ID and report year of the record.'), - sa.ForeignKeyConstraint(['energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_out_eia__yearly_plant_parts_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_out_eia__yearly_plant_parts_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_out_eia__yearly_plant_parts_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_out_eia__yearly_plant_parts_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_out_eia__yearly_plant_parts_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_out_eia__yearly_plant_parts_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('record_id_eia', name=op.f('pk_out_eia__yearly_plant_parts')) - ) - op.create_table('plant_parts_eia', - sa.Column('record_id_eia', sa.Text(), nullable=False, comment='Identifier for EIA plant parts analysis records.'), - sa.Column('plant_id_eia', sa.Integer(), nullable=True, comment='The unique six-digit facility identification number, also called an ORISPL, assigned by the Energy Information Administration.'), - sa.Column('report_date', sa.Date(), nullable=True, comment='Date reported.'), - sa.Column('plant_part', sa.Enum('plant_technology', 'plant_unit', 'plant_prime_fuel', 'plant_prime_mover', 'plant_gen', 'plant', 'plant_match_ferc1', 'plant_ferc_acct', 'plant_operating_year'), nullable=True, comment='The part of the plant a record corresponds to.'), - sa.Column('generator_id', sa.Text(), nullable=True, comment='Generator ID is usually numeric, but sometimes includes letters. Make sure you treat it as a string!'), - sa.Column('unit_id_pudl', sa.Integer(), nullable=True, comment='Dynamically assigned PUDL unit id. WARNING: This ID is not guaranteed to be static long term as the input data and algorithm may evolve over time.'), - sa.Column('prime_mover_code', sa.Text(), nullable=True, comment='Code for the type of prime mover (e.g. CT, CG)'), - sa.Column('energy_source_code_1', sa.Enum('TDF', 'SGP', 'SLW', 'PUR', 'SG', 'OBL', 'OTH', 'MSB', 'SUB', 'WND', 'MSW', 'RC', 'OBS', 'WDS', 'WAT', 'PG', 'OBG', 'WDL', 'DFO', 'SUN', 'LIG', 'SGC', 'RFO', 'MSN', 'ANT', 'LFG', 'KER', 'WC', 'PC', 'OG', 'BFG', 'BIT', 'BLQ', 'WH', 'SC', 'NG', 'JF', 'GEO', 'MWH', 'AB', 'NUC', 'WO'), nullable=True, comment='The code representing the most predominant type of energy that fuels the generator.'), - sa.Column('technology_description', sa.Enum('Solar Photovoltaic', 'Conventional Steam Coal', 'Solar Thermal with Energy Storage', 'Batteries', 'Landfill Gas', 'Petroleum Liquids', 'Other Waste Biomass', 'Natural Gas Fired Combustion Turbine', 'Coal Integrated Gasification Combined Cycle', 'Hydroelectric Pumped Storage', 'Natural Gas with Compressed Air Storage', 'Offshore Wind Turbine', 'Other Natural Gas', 'Natural Gas Internal Combustion Engine', 'Nuclear', 'Wood/Wood Waste Biomass', 'Natural Gas Steam Turbine', 'Geothermal', 'Flywheels', 'Hydrokinetic', 'Municipal Solid Waste', 'Conventional Hydroelectric', 'Natural Gas Fired Combined Cycle', 'Petroleum Coke', 'Solar Thermal without Energy Storage', 'All Other', 'Onshore Wind Turbine', 'Other Gases'), nullable=True, comment='High level description of the technology used by the generator to produce electricity.'), - sa.Column('ferc_acct_name', sa.Enum('Hydraulic', 'Nuclear', 'Steam', 'Other'), nullable=True, comment='Name of FERC account, derived from technology description and prime mover code.'), - sa.Column('utility_id_eia', sa.Integer(), nullable=True, comment='The EIA Utility Identification number.'), - sa.Column('true_gran', sa.Boolean(), nullable=True, comment='Indicates whether a plant part list record is associated with the highest priority plant part for all identical records.'), - sa.Column('appro_part_label', sa.Enum('plant_technology', 'plant_unit', 'plant_prime_fuel', 'plant_prime_mover', 'plant_gen', 'plant', 'plant_match_ferc1', 'plant_ferc_acct', 'plant_operating_year'), nullable=True, comment='Plant part of the associated true granularity record.'), - sa.Column('appro_record_id_eia', sa.Text(), nullable=True, comment='EIA record ID of the associated true granularity record.'), - sa.Column('ferc1_generator_agg_id', sa.Integer(), nullable=True, comment='ID dynamically assigned by PUDL to EIA records with multiple matches to a single FERC ID in the FERC-EIA manual matching process.'), - sa.Column('capacity_eoy_mw', sa.Float(), nullable=True, comment='Total end of year installed (nameplate) capacity for a plant part, in megawatts.'), - sa.Column('capacity_factor', sa.Float(), nullable=True, comment='Fraction of potential generation that was actually reported for a plant part.'), - sa.Column('capacity_mw', sa.Float(), nullable=True, comment='Total installed (nameplate) capacity, in megawatts.'), - sa.Column('construction_year', sa.Integer(), nullable=True, comment="Year the plant's oldest still operational unit was built."), - sa.Column('fraction_owned', sa.Float(), nullable=True, comment='Proportion of generator ownership attributable to this utility.'), - sa.Column('fuel_cost_per_mmbtu', sa.Float(), nullable=True, comment='Average fuel cost per mmBTU of heat content in nominal USD.'), - sa.Column('fuel_cost_per_mwh', sa.Float(), nullable=True, comment='Derived from MCOE, a unit level value. Average fuel cost per MWh of heat content in nominal USD.'), - sa.Column('fuel_type_code_pudl', sa.Enum('coal', 'gas', 'hydro', 'nuclear', 'oil', 'other', 'solar', 'waste', 'wind'), nullable=True, comment='Simplified fuel type code used in PUDL'), - sa.Column('generator_retirement_date', sa.Date(), nullable=True, comment='Date of the scheduled or effected retirement of the generator.'), - sa.Column('heat_rate_mmbtu_mwh', sa.Float(), nullable=True, comment='Fuel content per unit of electricity generated. Coming from MCOE calculation.'), - sa.Column('installation_year', sa.Integer(), nullable=True, comment="Year the plant's most recently built unit was installed."), - sa.Column('net_generation_mwh', sa.Float(), nullable=True, comment='Net electricity generation for the specified period in megawatt-hours (MWh).'), - sa.Column('generator_operating_year', sa.Integer(), nullable=True, comment='Year a generator went into service.'), - sa.Column('operational_status', sa.Text(), nullable=True, comment='The operating status of the asset. For generators this is based on which tab the generator was listed in in EIA 860.'), - sa.Column('operational_status_pudl', sa.Enum('operating', 'retired', 'proposed'), nullable=True, comment='The operating status of the asset using PUDL categories.'), - sa.Column('ownership_record_type', sa.Enum('owned', 'total'), nullable=True, comment='Whether each generator record is for one owner or represents a total of all ownerships.'), - sa.Column('ownership_dupe', sa.Boolean(), nullable=True, comment='Whether a plant part record has a duplicate record with different ownership status.'), - sa.Column('planned_generator_retirement_date', sa.Date(), nullable=True, comment='Planned effective date of the scheduled retirement of the generator.'), - sa.Column('plant_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL plant ID. May not be constant over time.'), - sa.Column('plant_name_eia', sa.Text(), nullable=True, comment='Plant name.'), - sa.Column('plant_name_ppe', sa.Text(), nullable=True, comment='Derived plant name that includes EIA plant name and other strings associated with ID and PK columns of the plant part.'), - sa.Column('plant_part_id_eia', sa.Text(), nullable=True, comment='Contains EIA plant ID, plant part, ownership, and EIA utility id'), - sa.Column('record_count', sa.Integer(), nullable=True, comment='Number of distinct generator IDs that partcipated in the aggregation for a plant part list record.'), - sa.Column('total_fuel_cost', sa.Float(), nullable=True, comment='Total annual reported fuel costs for the plant part. Includes costs from all fuels.'), - sa.Column('total_mmbtu', sa.Float(), nullable=True, comment='Total annual heat content of fuel consumed by a plant part record in the plant parts list.'), - sa.Column('utility_id_pudl', sa.Integer(), nullable=True, comment='A manually assigned PUDL utility ID. May not be stable over time.'), - sa.Column('report_year', sa.Integer(), nullable=True, comment='Four-digit year in which the data was reported.'), - sa.Column('plant_id_report_year', sa.Text(), nullable=True, comment='PUDL plant ID and report year of the record.'), - sa.ForeignKeyConstraint(['energy_source_code_1'], ['core_eia__codes_energy_sources.code'], name=op.f('fk_plant_parts_eia_energy_source_code_1_core_eia__codes_energy_sources')), - sa.ForeignKeyConstraint(['plant_id_eia', 'generator_id', 'report_date'], ['core_eia860__scd_generators.plant_id_eia', 'core_eia860__scd_generators.generator_id', 'core_eia860__scd_generators.report_date'], name=op.f('fk_plant_parts_eia_plant_id_eia_core_eia860__scd_generators')), - sa.ForeignKeyConstraint(['plant_id_pudl'], ['core_pudl__entity_plants_pudl.plant_id_pudl'], name=op.f('fk_plant_parts_eia_plant_id_pudl_core_pudl__entity_plants_pudl')), - sa.ForeignKeyConstraint(['prime_mover_code'], ['core_eia__codes_prime_movers.code'], name=op.f('fk_plant_parts_eia_prime_mover_code_core_eia__codes_prime_movers')), - sa.ForeignKeyConstraint(['utility_id_eia', 'report_date'], ['core_eia860__scd_utilities.utility_id_eia', 'core_eia860__scd_utilities.report_date'], name=op.f('fk_plant_parts_eia_utility_id_eia_core_eia860__scd_utilities')), - sa.ForeignKeyConstraint(['utility_id_pudl'], ['core_pudl__entity_utilities_pudl.utility_id_pudl'], name=op.f('fk_plant_parts_eia_utility_id_pudl_core_pudl__entity_utilities_pudl')), - sa.PrimaryKeyConstraint('record_id_eia', name=op.f('pk_plant_parts_eia')) - ) - # ### end Alembic commands ### - - -def downgrade() -> None: - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('plant_parts_eia') - op.drop_table('out_eia__yearly_plant_parts') - op.drop_table('out_eia__yearly_generators_by_ownership') - op.drop_table('out_eia__yearly_generators') - op.drop_table('out_eia__yearly_boilers') - op.drop_table('out_eia923__yearly_generation_fuel_by_generator_energy_source_owner') - op.drop_table('out_eia923__yearly_generation_fuel_by_generator_energy_source') - op.drop_table('out_eia923__yearly_generation_fuel_by_generator') - op.drop_table('out_eia923__yearly_generation') - op.drop_table('out_eia923__yearly_boiler_fuel') - op.drop_table('out_eia860__yearly_ownership') - op.drop_table('out__yearly_plants_all_ferc1_plant_parts_eia') - op.drop_table('mega_generators_eia') - op.drop_table('core_eia860__yearly_boiler_emissions_control_equipment_assn') - op.drop_table('core_eia860__scd_ownership') - op.drop_table('core_eia860__assn_boiler_stack_flue') - op.drop_table('core_eia860__assn_boiler_generator') - op.drop_table('core_eia860__assn_boiler_cooling') - op.drop_table('_out_eia__yearly_heat_rate_by_generator') - op.drop_table('_out_eia__yearly_generators') - op.drop_table('_out_eia__yearly_fuel_cost_by_generator') - op.drop_table('_out_eia__yearly_derived_generator_attributes') - op.drop_table('_out_eia__yearly_capacity_factor_by_generator') - op.drop_table('out_ferc1__yearly_fuel_by_plant') - op.drop_table('out_ferc1__yearly_fuel') - op.drop_table('out_ferc1__yearly_all_plants') - op.drop_table('out_eia__yearly_plants') - op.drop_table('out_eia923__yearly_generation_fuel_combined') - op.drop_table('out_eia923__yearly_fuel_receipts_costs') - op.drop_table('core_ferc1__yearly_plants_steam') - op.drop_table('core_ferc1__yearly_plants_small') - op.drop_table('core_ferc1__yearly_plants_pumped_storage') - op.drop_table('core_ferc1__yearly_plants_hydro') - op.drop_table('core_ferc1__yearly_fuel') - op.drop_table('core_eia860__scd_generators') - op.drop_table('core_eia860__scd_boilers') - op.drop_table('_out_ferc1__yearly_steam_plants') - op.drop_table('_out_ferc1__yearly_small_plants') - op.drop_table('_out_ferc1__yearly_pumped_storage_plants') - op.drop_table('_out_ferc1__yearly_plants_utilities') - op.drop_table('_out_ferc1__yearly_hydro_plants') - op.drop_table('_out_eia__yearly_heat_rate_by_unit') - op.drop_table('_out_eia__plants_utilities') - op.drop_table('out_ferc1__yearly_utility_plant_summary') - op.drop_table('out_ferc1__yearly_transmission_statistics') - op.drop_table('out_ferc1__yearly_retained_earnings') - op.drop_table('out_ferc1__yearly_purchased_power') - op.drop_table('out_ferc1__yearly_plant_in_service') - op.drop_table('out_ferc1__yearly_other_regulatory_liabilities') - op.drop_table('out_ferc1__yearly_income_statement') - op.drop_table('out_ferc1__yearly_electricity_sales_by_rate_schedule') - op.drop_table('out_ferc1__yearly_electric_plant_depreciation_functional') - op.drop_table('out_ferc1__yearly_electric_plant_depreciation_changes') - op.drop_table('out_ferc1__yearly_electric_operating_revenues') - op.drop_table('out_ferc1__yearly_electric_operating_expenses') - op.drop_table('out_ferc1__yearly_electric_energy_sources') - op.drop_table('out_ferc1__yearly_electric_energy_dispositions') - op.drop_table('out_ferc1__yearly_depreciation_amortization_summary') - op.drop_table('out_ferc1__yearly_cash_flow') - op.drop_table('out_ferc1__yearly_balance_sheet_liabilities') - op.drop_table('out_ferc1__yearly_balance_sheet_assets') - op.drop_table('out_eia__yearly_utilities') - op.drop_table('out_eia__monthly_generators') - op.drop_table('out_eia923__monthly_generation_fuel_by_generator_energy_source') - op.drop_table('out_eia923__monthly_generation_fuel_by_generator') - op.drop_table('out_eia923__monthly_generation') - op.drop_table('out_eia923__monthly_boiler_fuel') - op.drop_table('out_eia923__generation') - op.drop_table('out_eia923__boiler_fuel') - op.drop_table('core_pudl__assn_utilities_ferc1_xbrl') - op.drop_table('core_pudl__assn_utilities_ferc1_dbf') - op.drop_table('core_pudl__assn_plants_ferc1') - op.drop_table('core_ferc1__yearly_utility_plant_summary') - op.drop_table('core_ferc1__yearly_transmission_statistics') - op.drop_table('core_ferc1__yearly_retained_earnings') - op.drop_table('core_ferc1__yearly_purchased_power') - op.drop_table('core_ferc1__yearly_plant_in_service') - op.drop_table('core_ferc1__yearly_other_regulatory_liabilities') - op.drop_table('core_ferc1__yearly_income_statement') - op.drop_table('core_ferc1__yearly_electricity_sales_by_rate_schedule') - op.drop_table('core_ferc1__yearly_electric_plant_depreciation_functional') - op.drop_table('core_ferc1__yearly_electric_plant_depreciation_changes') - op.drop_table('core_ferc1__yearly_electric_operating_revenues') - op.drop_table('core_ferc1__yearly_electric_operating_expenses') - op.drop_table('core_ferc1__yearly_electric_energy_sources') - op.drop_table('core_ferc1__yearly_electric_energy_dispositions') - op.drop_table('core_ferc1__yearly_depreciation_amortization_summary') - op.drop_table('core_ferc1__yearly_cash_flow') - op.drop_table('core_ferc1__yearly_balance_sheet_liabilities') - op.drop_table('core_ferc1__yearly_balance_sheet_assets') - op.drop_table('core_epa__assn_epacamd_eia') - op.drop_table('core_eia923__monthly_generation') - op.drop_table('core_eia923__monthly_fuel_receipts_costs') - op.drop_table('core_eia923__monthly_boiler_fuel') - op.drop_table('core_eia860__scd_plants') - op.drop_table('_out_eia__monthly_heat_rate_by_generator') - op.drop_table('_out_eia__monthly_fuel_cost_by_generator') - op.drop_table('_out_eia__monthly_derived_generator_attributes') - op.drop_table('_out_eia__monthly_capacity_factor_by_generator') - op.drop_table('out_ferc714__summarized_demand') - op.drop_table('out_ferc714__respondents_with_fips') - op.drop_table('out_eia923__monthly_generation_fuel_combined') - op.drop_table('out_eia923__monthly_fuel_receipts_costs') - op.drop_table('out_eia923__generation_fuel_combined') - op.drop_table('out_eia923__fuel_receipts_costs') - op.drop_table('out_eia860__yearly_emissions_control_equipment') - op.drop_table('core_pudl__assn_utilities_plants') - op.drop_table('core_pudl__assn_utilities_ferc1') - op.drop_table('core_pudl__assn_utilities_eia') - op.drop_table('core_pudl__assn_plants_eia') - op.drop_table('core_ferc714__hourly_demand_pa') - op.drop_table('core_eia__entity_generators') - op.drop_table('core_eia__entity_boilers') - op.drop_table('core_eia923__monthly_generation_fuel_nuclear') - op.drop_table('core_eia923__monthly_generation_fuel') - op.drop_table('core_eia923__entity_coalmine') - op.drop_table('core_eia861__yearly_utility_data_rto') - op.drop_table('core_eia861__yearly_utility_data_nerc') - op.drop_table('core_eia861__yearly_utility_data_misc') - op.drop_table('core_eia861__yearly_service_territory') - op.drop_table('core_eia861__yearly_sales') - op.drop_table('core_eia861__yearly_reliability') - op.drop_table('core_eia861__yearly_operational_data_revenue') - op.drop_table('core_eia861__yearly_operational_data_misc') - op.drop_table('core_eia861__yearly_non_net_metering_misc') - op.drop_table('core_eia861__yearly_non_net_metering_customer_fuel_class') - op.drop_table('core_eia861__yearly_net_metering_misc') - op.drop_table('core_eia861__yearly_net_metering_customer_fuel_class') - op.drop_table('core_eia861__yearly_mergers') - op.drop_table('core_eia861__yearly_green_pricing') - op.drop_table('core_eia861__yearly_energy_efficiency') - op.drop_table('core_eia861__yearly_dynamic_pricing') - op.drop_table('core_eia861__yearly_distribution_systems') - op.drop_table('core_eia861__yearly_distributed_generation_tech') - op.drop_table('core_eia861__yearly_distributed_generation_misc') - op.drop_table('core_eia861__yearly_distributed_generation_fuel') - op.drop_table('core_eia861__yearly_demand_side_management_sales') - op.drop_table('core_eia861__yearly_demand_side_management_misc') - op.drop_table('core_eia861__yearly_demand_side_management_ee_dr') - op.drop_table('core_eia861__yearly_demand_response_water_heater') - op.drop_table('core_eia861__yearly_demand_response') - op.drop_table('core_eia861__yearly_advanced_metering_infrastructure') - op.drop_table('core_eia860__scd_utilities') - op.drop_table('core_eia860__scd_emissions_control_equipment') - op.drop_table('_out_eia__monthly_heat_rate_by_unit') - op.drop_table('out_ferc714__hourly_predicted_state_demand') - op.drop_table('out_eia861__compiled_geometry_utilities') - op.drop_table('out_eia861__compiled_geometry_balancing_authorities') - op.drop_table('core_pudl__entity_utilities_pudl') - op.drop_table('core_pudl__entity_plants_pudl') - op.drop_table('core_pudl__codes_subdivisions') - op.drop_table('core_pudl__codes_datasources') - op.drop_table('core_pudl__codes_data_maturities') - op.drop_table('core_ferc__codes_accounts') - op.drop_table('core_ferc714__respondent_id') - op.drop_table('core_ferc1__codes_power_purchase_types') - op.drop_table('core_epa__assn_epacamd_eia_subplant_ids') - op.drop_table('core_eia__yearly_fuel_receipts_costs_aggs') - op.drop_table('core_eia__entity_utilities') - op.drop_table('core_eia__entity_plants') - op.drop_table('core_eia__codes_wet_dry_bottom') - op.drop_table('core_eia__codes_steam_plant_types') - op.drop_table('core_eia__codes_so2_units') - op.drop_table('core_eia__codes_so2_compliance_strategies') - op.drop_table('core_eia__codes_sector_consolidated') - op.drop_table('core_eia__codes_reporting_frequencies') - op.drop_table('core_eia__codes_regulations') - op.drop_table('core_eia__codes_prime_movers') - op.drop_table('core_eia__codes_particulate_units') - op.drop_table('core_eia__codes_particulate_compliance_strategies') - op.drop_table('core_eia__codes_operational_status') - op.drop_table('core_eia__codes_nox_units') - op.drop_table('core_eia__codes_nox_control_status') - op.drop_table('core_eia__codes_nox_compliance_strategies') - op.drop_table('core_eia__codes_momentary_interruptions') - op.drop_table('core_eia__codes_mercury_compliance_strategies') - op.drop_table('core_eia__codes_fuel_types_aer') - op.drop_table('core_eia__codes_fuel_transportation_modes') - op.drop_table('core_eia__codes_firing_types') - op.drop_table('core_eia__codes_environmental_equipment_manufacturers') - op.drop_table('core_eia__codes_energy_sources') - op.drop_table('core_eia__codes_emission_control_equipment_types') - op.drop_table('core_eia__codes_contract_types') - op.drop_table('core_eia__codes_coalmine_types') - op.drop_table('core_eia__codes_boiler_types') - op.drop_table('core_eia__codes_boiler_status') - op.drop_table('core_eia__codes_boiler_generator_assn_types') - op.drop_table('core_eia__codes_balancing_authorities') - op.drop_table('core_eia__codes_averaging_periods') - op.drop_table('core_eia861__yearly_balancing_authority') - op.drop_table('core_eia861__assn_utility') - op.drop_table('core_eia861__assn_balancing_authority') - # ### end Alembic commands ### diff --git a/src/pudl/analysis/__init__.py b/src/pudl/analysis/__init__.py index 3b489e3d8e..44b2019e7a 100644 --- a/src/pudl/analysis/__init__.py +++ b/src/pudl/analysis/__init__.py @@ -7,8 +7,8 @@ """ from . import ( allocate_gen_fuel, + eia_ferc1_record_linkage, epacamd_eia, - ferc1_eia_record_linkage, mcoe, plant_parts_eia, service_territory, diff --git a/src/pudl/analysis/classify_plants_ferc1.py b/src/pudl/analysis/classify_plants_ferc1.py index 0f2729f176..5cd7733bae 100644 --- a/src/pudl/analysis/classify_plants_ferc1.py +++ b/src/pudl/analysis/classify_plants_ferc1.py @@ -625,7 +625,7 @@ def fuel_by_plant_ferc1( Args: fuel_df: Pandas DataFrame resembling the post-transform - result for the core_ferc1__yearly_fuel table. + result for the core_ferc1__yearly_steam_plants_fuel_sched402 table. thresh: A value between 0.5 and 1.0 indicating the minimum fraction of overall heat content that must have been provided by a fuel in a plant-year for it to be considered the "primary" fuel for the plant in that year. @@ -633,11 +633,11 @@ def fuel_by_plant_ferc1( Returns: DataFrame with a single record for each plant-year, including the columns - required to merge it with the core_ferc1__yearly_plants_steam table/DataFrame (report_year, - utility_id_ferc1, and plant_name) as well as totals for fuel mmbtu consumed in - that plant-year, and the cost of fuel in that year, the proportions of heat - content and fuel costs for each fuel in that year, and a column that labels the - plant's primary fuel for that year. + required to merge it with the :ref:`core_ferc1__yearly_steam_plants_sched402` + table/DataFrame (report_year, utility_id_ferc1, and plant_name) as well as + totals for fuel mmbtu consumed in that plant-year, and the cost of fuel in that + year, the proportions of heat content and fuel costs for each fuel in that year, + and a column that labels the plant's primary fuel for that year. Raises: AssertionError: If the DataFrame input does not have the columns required to @@ -661,7 +661,8 @@ def fuel_by_plant_ferc1( # Calculate per-fuel derived values and add them to the DataFrame df = ( # Really there should *not* be any duplicates here but... there's a - # bug somewhere that introduces them into the core_ferc1__yearly_fuel table. + # bug somewhere that introduces them into the + # core_ferc1__yearly_steam_plants_fuel_sched402 table. fuel_df[keep_cols] .drop_duplicates() # Calculate totals for each record based on per-unit values: diff --git a/src/pudl/analysis/ferc1_eia_record_linkage.py b/src/pudl/analysis/eia_ferc1_record_linkage.py similarity index 98% rename from src/pudl/analysis/ferc1_eia_record_linkage.py rename to src/pudl/analysis/eia_ferc1_record_linkage.py index b29913046c..874342202f 100644 --- a/src/pudl/analysis/ferc1_eia_record_linkage.py +++ b/src/pudl/analysis/eia_ferc1_record_linkage.py @@ -55,22 +55,22 @@ io_manager_key="pudl_sqlite_io_manager", compute_kind="Python", ) -def out__yearly_plants_all_ferc1_plant_parts_eia( +def out_pudl__yearly_assn_eia_ferc1_plant_parts( out_ferc1__yearly_all_plants: pd.DataFrame, - out_ferc1__yearly_fuel_by_plant: pd.DataFrame, + out_ferc1__yearly_steam_plants_fuel_by_plant_sched402: pd.DataFrame, out_eia__yearly_plant_parts: pd.DataFrame, ) -> pd.DataFrame: """Coordinate the connection between FERC1 plants and EIA plant-parts. Args: out_ferc1__yearly_all_plants: Table of all of the FERC1-reporting plants. - out_ferc1__yearly_fuel_by_plant: Table of the fuel reported aggregated to the FERC1 - plant-level. + out_ferc1__yearly_steam_plants_fuel_by_plant_sched402: Table of the fuel + reported aggregated to the FERC1 plant-level. out_eia__yearly_plant_parts: The EIA plant parts list. """ inputs = InputManager( out_ferc1__yearly_all_plants, - out_ferc1__yearly_fuel_by_plant, + out_ferc1__yearly_steam_plants_fuel_by_plant_sched402, out_eia__yearly_plant_parts, ) # compile/cache inputs upfront. Hopefully we can catch any errors in inputs early. @@ -100,7 +100,7 @@ def out__yearly_plants_all_ferc1_plant_parts_eia( add_null_overrides ) # Override specified values with NA record_id_eia connects_ferc1_eia = Resource.from_id( - "out__yearly_plants_all_ferc1_plant_parts_eia" + "out_pudl__yearly_assn_eia_ferc1_plant_parts" ).enforce_schema(connects_ferc1_eia) return connects_ferc1_eia @@ -696,7 +696,7 @@ def prep_train_connections( one_to_many = ( pd.read_csv( importlib.resources.files("pudl.package_data.glue") - / "ferc1_eia_one_to_many.csv" + / "eia_ferc1_one_to_many.csv" ) .pipe(pudl.helpers.cleanstrings_snake, ["record_id_eia"]) .drop_duplicates(subset=["record_id_ferc1", "record_id_eia"]) @@ -744,7 +744,7 @@ def prep_train_connections( train_df = ( pd.read_csv( - importlib.resources.files("pudl.package_data.glue") / "ferc1_eia_train.csv" + importlib.resources.files("pudl.package_data.glue") / "eia_ferc1_train.csv" ) .pipe(pudl.helpers.cleanstrings_snake, ["record_id_eia"]) .drop_duplicates(subset=["record_id_ferc1", "record_id_eia"]) @@ -1032,7 +1032,7 @@ def add_null_overrides(connects_ferc1_eia): logger.info("Overriding specified record_id_ferc1 values with NA record_id_eia") # Get record_id_ferc1 values that should be overriden to have no EIA match null_overrides = pd.read_csv( - importlib.resources.files("pudl.package_data.glue") / "ferc1_eia_null.csv" + importlib.resources.files("pudl.package_data.glue") / "eia_ferc1_null.csv" ).pipe( restrict_train_connections_on_date_range, id_col="record_id_ferc1", diff --git a/src/pudl/analysis/ferc1_eia_train.py b/src/pudl/analysis/eia_ferc1_train.py similarity index 94% rename from src/pudl/analysis/ferc1_eia_train.py rename to src/pudl/analysis/eia_ferc1_train.py index 23f69c387c..f441219b3f 100644 --- a/src/pudl/analysis/ferc1_eia_train.py +++ b/src/pudl/analysis/eia_ferc1_train.py @@ -149,25 +149,25 @@ def _is_best_match( return df -def _prep_ferc1_eia(ferc1_eia, utils_eia860) -> pd.DataFrame: +def _prep_eia_ferc1(eia_ferc1, utils_eia860) -> pd.DataFrame: """Prep FERC-EIA for use in override output sheet pre-utility subgroups. Args: - ferc1_eia (pd.DataFrame): The dataframe resulting from pudl_out.ferc1_eia(). + eia_ferc1 (pd.DataFrame): The dataframe resulting from pudl_out.ferc1_eia(). utils_eia860 (pd.DataFrame): The dataframe resulting from pudl_out.utils_eia860. Returns: - pd.DataFrame: A version of the ferc1_eia table that's been modified for + pd.DataFrame: A version of the eia_ferc1 table that's been modified for the purposes of creating an manual mapping spreadsheet. """ logger.debug("Prepping FERC-EIA table") # Only want to keep the plant_name_ppe field which replaces plant_name_eia - ferc1_eia_prep = ferc1_eia.copy().drop(columns="plant_name_eia") + eia_ferc1_prep = eia_ferc1.copy().drop(columns="plant_name_eia") # Add utility_name_eia - this must happen before renaming the cols or else there # will be duplicate utility_name_eia columns. utils_eia860.loc[:, "report_year"] = utils_eia860.report_date.dt.year - ferc1_eia_prep = pd.merge( - ferc1_eia_prep, + eia_ferc1_prep = pd.merge( + eia_ferc1_prep, utils_eia860[["utility_id_eia", "utility_name_eia", "report_year"]].copy(), on=["utility_id_eia", "report_year"], how="left", @@ -176,43 +176,43 @@ def _prep_ferc1_eia(ferc1_eia, utils_eia860) -> pd.DataFrame: # Add the new columns to the df for new_col in [x for x in RENAME_COLS_FERC1_EIA if "new_" in x]: - ferc1_eia_prep.loc[:, new_col] = pd.NA + eia_ferc1_prep.loc[:, new_col] = pd.NA # Rename the columns, and remove unwanted columns from ferc-eia table - ferc1_eia_prep = ferc1_eia_prep.rename(columns=RENAME_COLS_FERC1_EIA)[ + eia_ferc1_prep = eia_ferc1_prep.rename(columns=RENAME_COLS_FERC1_EIA)[ list(RENAME_COLS_FERC1_EIA.values()) ] # Add in pct diff values for pct_diff_col in [x for x in RENAME_COLS_FERC1_EIA.values() if "_pct_diff" in x]: - ferc1_eia_prep = _pct_diff(ferc1_eia_prep, pct_diff_col) + eia_ferc1_prep = _pct_diff(eia_ferc1_prep, pct_diff_col) # Add in fuel_type_code_pudl diff (qualitative bool) - ferc1_eia_prep["fuel_type_code_pudl_diff"] = False - ferc1_eia_prep_nona = ferc1_eia_prep[ - ferc1_eia_prep.fuel_type_code_pudl_eia.notna() - & ferc1_eia_prep.fuel_type_code_pudl_ferc1.notna() + eia_ferc1_prep["fuel_type_code_pudl_diff"] = False + eia_ferc1_prep_nona = eia_ferc1_prep[ + eia_ferc1_prep.fuel_type_code_pudl_eia.notna() + & eia_ferc1_prep.fuel_type_code_pudl_ferc1.notna() ].copy() - ferc1_eia_prep_nona["fuel_type_code_pudl_diff"] = ( - ferc1_eia_prep_nona.fuel_type_code_pudl_eia - == ferc1_eia_prep_nona.fuel_type_code_pudl_ferc1 + eia_ferc1_prep_nona["fuel_type_code_pudl_diff"] = ( + eia_ferc1_prep_nona.fuel_type_code_pudl_eia + == eia_ferc1_prep_nona.fuel_type_code_pudl_ferc1 ) - ferc1_eia_prep.update(ferc1_eia_prep_nona) + eia_ferc1_prep.update(eia_ferc1_prep_nona) # Add in installation_year diff (diff vs. pct_diff) - ferc1_eia_prep.loc[ - ferc1_eia_prep.installation_year_ferc1.notna(), "installation_year_ferc1" - ] = ferc1_eia_prep.installation_year_ferc1.astype("Int64") + eia_ferc1_prep.loc[ + eia_ferc1_prep.installation_year_ferc1.notna(), "installation_year_ferc1" + ] = eia_ferc1_prep.installation_year_ferc1.astype("Int64") - ferc1_eia_prep.loc[ - ferc1_eia_prep.installation_year_eia.notna() - & ferc1_eia_prep.installation_year_ferc1.notna(), + eia_ferc1_prep.loc[ + eia_ferc1_prep.installation_year_eia.notna() + & eia_ferc1_prep.installation_year_ferc1.notna(), "installation_year_diff", ] = ( - ferc1_eia_prep.installation_year_eia - ferc1_eia_prep.installation_year_ferc1 + eia_ferc1_prep.installation_year_eia - eia_ferc1_prep.installation_year_ferc1 ) # Add best match col - ferc1_eia_prep = _is_best_match(ferc1_eia_prep) - return ferc1_eia_prep + eia_ferc1_prep = _is_best_match(eia_ferc1_prep) + return eia_ferc1_prep def _prep_ppe(ppe, utils_eia860) -> pd.DataFrame: @@ -291,9 +291,9 @@ def _get_util_year_subsets(inputs_dict, util_id_eia_list, years) -> dict: or year subset" ) - if df_name == "ferc1_eia": + if df_name == "eia_ferc1": # Add column with excel formula to check if the override record id is the - # same as the AI assigend id. Doing this here instead of prep_ferc1_eia + # same as the AI assigend id. Doing this here instead of prep_eia_ferc1 # because it is based on row index number which is changes when you take a # subset of the data. subset_df = subset_df.reset_index(drop=True) @@ -338,7 +338,7 @@ def _output_override_spreadsheet( def generate_all_override_spreadsheets( - ferc1_eia, ppe, utils_eia860, util_dict, years, output_dir_path + eia_ferc1, ppe, utils_eia860, util_dict, years, output_dir_path ) -> None: """Output override spreadsheets for all specified utilities and years. @@ -346,7 +346,7 @@ def generate_all_override_spreadsheets( output directory. Args: - ferc1_eia (pd.DataFrame): The dataframe resulting from pudl_out.ferc1_eia(). + eia_ferc1 (pd.DataFrame): The dataframe resulting from pudl_out.ferc1_eia(). ppe (pd.DataFrame): The dataframe resulting from pudl_out.plant_parts_eia utils_eia860 (pd.DataFrame): The dataframe resulting from pudl_out.utils_eia860. util_dict (dict): A dictionary with keys that are the names of utility @@ -360,7 +360,7 @@ def generate_all_override_spreadsheets( # Generate full input tables # inputs_dict = _generate_input_dfs(pudl_out) inputs_dict = { - "ferc1_eia": _prep_ferc1_eia(ferc1_eia, utils_eia860), + "eia_ferc1": _prep_eia_ferc1(eia_ferc1, utils_eia860), "ppe": _prep_ppe(ppe, utils_eia860), } @@ -427,7 +427,7 @@ def check_if_already_in_training(training_data, validated_connections): def validate_override_fixes( validated_connections, ppe, - ferc1_eia, + eia_ferc1, training_data, expect_override_overrides=False, allow_mismatched_utilities=True, @@ -439,7 +439,7 @@ def validate_override_fixes( directory that is ready to be added to be validated and subsumed into the training data. ppe (pd.DataFrame): The dataframe resulting from pudl_out.plant_parts_eia - ferc1_eia (pd.DataFrame): The dataframe resulting from pudl_out.ferc1_eia + eia_ferc1 (pd.DataFrame): The dataframe resulting from pudl_out.ferc1_eia training_data (pd.DataFrame): The current FERC-EIA training data expect_override_overrides (boolean): Whether you expect the tables to have overridden matches already in the training data. @@ -496,7 +496,7 @@ def validate_override_fixes( ) # It's unlikely that this changed, but check FERC id too just in case! - actual_ferc_ids = ferc1_eia.record_id_ferc1.unique() + actual_ferc_ids = eia_ferc1.record_id_ferc1.unique() _check_id_consistency( "record_id_ferc1", only_overrides, actual_ferc_ids, "values that don't exist" ) @@ -686,7 +686,7 @@ def _add_to_one_to_many_overrides(one_to_many, current_one_to_many_path) -> None def validate_and_add_to_training( utils_eia860, ppe, - ferc1_eia, + eia_ferc1, input_dir_path, expect_override_overrides=False, allow_mismatched_utilities=True, @@ -712,12 +712,12 @@ def validate_and_add_to_training( pandas.DataFrame: A DataFrame with all of the new overrides combined. """ glue_resource_path = importlib.resources.files("pudl.package_data.glue") - path_to_current_training = glue_resource_path / "ferc1_eia_train.csv" + path_to_current_training = glue_resource_path / "eia_ferc1_train.csv" path_to_new_training = input_dir_path current_training_df = pd.read_csv(path_to_current_training) - path_to_null_overrides = glue_resource_path / "ferc1_eia_null.csv" + path_to_null_overrides = glue_resource_path / "eia_ferc1_null.csv" if one_to_many: - path_to_one_to_many = glue_resource_path / "ferc1_eia_one_to_many.csv" + path_to_one_to_many = glue_resource_path / "eia_ferc1_one_to_many.csv" override_cols = [ "record_id_eia", "record_id_ferc1", @@ -742,7 +742,7 @@ def validate_and_add_to_training( file_df = file_raw.pipe( validate_override_fixes, ppe, - ferc1_eia, + eia_ferc1, current_training_df, expect_override_overrides=expect_override_overrides, allow_mismatched_utilities=allow_mismatched_utilities, @@ -766,7 +766,7 @@ def validate_and_add_to_training( multi_file_df = multi_df.pipe( validate_override_fixes, ppe=ppe, - ferc1_eia=ferc1_eia, + eia_ferc1=eia_ferc1, training_data=current_training_df, expect_override_overrides=expect_override_overrides, allow_mismatched_utilities=allow_mismatched_utilities, diff --git a/src/pudl/analysis/plant_parts_eia.py b/src/pudl/analysis/plant_parts_eia.py index 1a1cc5b5df..ff0a93d759 100644 --- a/src/pudl/analysis/plant_parts_eia.py +++ b/src/pudl/analysis/plant_parts_eia.py @@ -645,7 +645,7 @@ def execute(self, gens_mega, plants_eia860, utils_eia860): plant_parts_eia=plant_parts_eia, part_name="plant_match_ferc1", path_to_one_to_many=resources.files("pudl.package_data.glue").joinpath( - "ferc1_eia_one_to_many.csv", + "eia_ferc1_one_to_many.csv", ), ) self.plant_parts_eia = TrueGranLabeler().execute(self.plant_parts_eia) @@ -761,7 +761,7 @@ def add_one_to_many( assert ( double_df.empty - ), f"The following record ids have >1 faked part. Double-check these records or move them to the ferc1_eia_null.csv: {one_to_many.loc[one_to_many.gen_id.isin(orig_ids.record_id_eia), 'record_id_ferc1'].drop_duplicates().tolist()}" + ), f"The following record ids have >1 faked part. Double-check these records or move them to the eia_ferc1_null.csv: {one_to_many.loc[one_to_many.gen_id.isin(orig_ids.record_id_eia), 'record_id_ferc1'].drop_duplicates().tolist()}" return pd.concat([plant_parts_eia, part_df]) diff --git a/src/pudl/etl/__init__.py b/src/pudl/etl/__init__.py index bb5f5c9a5a..d9a67dc897 100644 --- a/src/pudl/etl/__init__.py +++ b/src/pudl/etl/__init__.py @@ -77,8 +77,8 @@ [pudl.analysis.state_demand], group_name="out_state_demand_ferc714" ), *load_assets_from_modules( - [pudl.analysis.plant_parts_eia, pudl.analysis.ferc1_eia_record_linkage], - group_name="ferc1_eia_record_linkage", + [pudl.analysis.plant_parts_eia, pudl.analysis.eia_ferc1_record_linkage], + group_name="eia_ferc1_record_linkage", ), ) diff --git a/src/pudl/etl/analysis_assets.py b/src/pudl/etl/analysis_assets.py index a605000bb9..37455f5d48 100644 --- a/src/pudl/etl/analysis_assets.py +++ b/src/pudl/etl/analysis_assets.py @@ -9,7 +9,7 @@ * state_demand_assets * depreciation_assets * plant_parts_eia_assets -* ferc1_eia_record_linkage_assets +* eia_ferc1_record_linkage_assets Not sure what the right organization is but they'll be defined across a bunch of different modules. Eventually I imagine these would just be the novel derived values, diff --git a/src/pudl/extract/ferc1.py b/src/pudl/extract/ferc1.py index 6c7f2d4c12..3e0c89068f 100644 --- a/src/pudl/extract/ferc1.py +++ b/src/pudl/extract/ferc1.py @@ -100,67 +100,67 @@ logger = pudl.logging_helpers.get_logger(__name__) TABLE_NAME_MAP_FERC1: dict[str, dict[str, str]] = { - "core_ferc1__yearly_fuel": { + "core_ferc1__yearly_steam_plants_fuel_sched402": { "dbf": "f1_fuel", "xbrl": "steam_electric_generating_plant_statistics_large_plants_fuel_statistics_402", }, - "core_ferc1__yearly_plants_steam": { + "core_ferc1__yearly_steam_plants_sched402": { "dbf": "f1_steam", "xbrl": "steam_electric_generating_plant_statistics_large_plants_402", }, - "core_ferc1__yearly_plants_small": { + "core_ferc1__yearly_small_plants_sched410": { "dbf": "f1_gnrt_plant", "xbrl": "generating_plant_statistics_410", }, - "core_ferc1__yearly_plants_hydro": { + "core_ferc1__yearly_hydroelectric_plants_sched406": { "dbf": "f1_hydro", "xbrl": "hydroelectric_generating_plant_statistics_large_plants_406", }, - "core_ferc1__yearly_plants_pumped_storage": { + "core_ferc1__yearly_pumped_storage_plants_sched408": { "dbf": "f1_pumped_storage", "xbrl": "pumped_storage_generating_plant_statistics_large_plants_408", }, - "core_ferc1__yearly_plant_in_service": { + "core_ferc1__yearly_plant_in_service_sched204": { "dbf": "f1_plant_in_srvce", "xbrl": "electric_plant_in_service_204", }, - "core_ferc1__yearly_purchased_power": { + "core_ferc1__yearly_purchased_power_and_exchanges_sched326": { "dbf": "f1_purchased_pwr", "xbrl": "purchased_power_326", }, - "core_ferc1__yearly_electric_energy_sources": { + "core_ferc1__yearly_energy_sources_sched401": { "dbf": "f1_elctrc_erg_acct", "xbrl": "electric_energy_account_401a", }, - "core_ferc1__yearly_electric_energy_dispositions": { + "core_ferc1__yearly_energy_dispositions_sched401": { "dbf": "f1_elctrc_erg_acct", "xbrl": "electric_energy_account_401a", }, - "core_ferc1__yearly_utility_plant_summary": { + "core_ferc1__yearly_utility_plant_summary_sched200": { "dbf": "f1_utltyplnt_smmry", "xbrl": "summary_of_utility_plant_and_accumulated_provisions_for_depreciation_amortization_and_depletion_200", }, - "core_ferc1__yearly_transmission_statistics": { + "core_ferc1__yearly_transmission_lines_sched422": { "dbf": "f1_xmssn_line", "xbrl": "transmission_line_statistics_422", }, - "core_ferc1__yearly_electric_operating_expenses": { + "core_ferc1__yearly_operating_expenses_sched320": { "dbf": "f1_elc_op_mnt_expn", "xbrl": "electric_operations_and_maintenance_expenses_320", }, - "core_ferc1__yearly_balance_sheet_liabilities": { + "core_ferc1__yearly_balance_sheet_liabilities_sched110": { "dbf": "f1_bal_sheet_cr", "xbrl": "comparative_balance_sheet_liabilities_and_other_credits_110", }, - "core_ferc1__yearly_balance_sheet_assets": { + "core_ferc1__yearly_balance_sheet_assets_sched110": { "dbf": "f1_comp_balance_db", "xbrl": "comparative_balance_sheet_assets_and_other_debits_110", }, - "core_ferc1__yearly_income_statement": { + "core_ferc1__yearly_income_statements_sched114": { "dbf": ["f1_income_stmnt", "f1_incm_stmnt_2"], "xbrl": "statement_of_income_114", }, - "core_ferc1__yearly_retained_earnings": { + "core_ferc1__yearly_retained_earnings_sched118": { "dbf": "f1_retained_erng", "xbrl": "retained_earnings_118", }, @@ -168,27 +168,27 @@ "dbf": "f1_retained_erng", "xbrl": "retained_earnings_appropriations_118", }, - "core_ferc1__yearly_depreciation_amortization_summary": { + "core_ferc1__yearly_depreciation_summary_sched336": { "dbf": "f1_dacs_epda", "xbrl": "summary_of_depreciation_and_amortization_charges_section_a_336", }, - "core_ferc1__yearly_electric_plant_depreciation_changes": { + "core_ferc1__yearly_depreciation_changes_sched219": { "dbf": "f1_accumdepr_prvsn", "xbrl": "accumulated_provision_for_depreciation_of_electric_utility_plant_changes_section_a_219", }, - "core_ferc1__yearly_electric_plant_depreciation_functional": { + "core_ferc1__yearly_depreciation_by_function_sched219": { "dbf": "f1_accumdepr_prvsn", "xbrl": "accumulated_provision_for_depreciation_of_electric_utility_plant_functional_classification_section_b_219", }, - "core_ferc1__yearly_electric_operating_revenues": { + "core_ferc1__yearly_operating_revenues_sched300": { "dbf": "f1_elctrc_oper_rev", "xbrl": "electric_operating_revenues_300", }, - "core_ferc1__yearly_cash_flow": { + "core_ferc1__yearly_cash_flows_sched120": { "dbf": "f1_cash_flow", "xbrl": "statement_of_cash_flows_120", }, - "core_ferc1__yearly_electricity_sales_by_rate_schedule": { + "core_ferc1__yearly_sales_by_rate_schedules_sched304": { "dbf": "f1_sales_by_sched", "xbrl": [ "sales_of_electricity_by_rate_schedules_account_440_residential_304", @@ -202,7 +202,7 @@ "sales_of_electricity_by_rate_schedules_account_totals_304", ], }, - "core_ferc1__yearly_other_regulatory_liabilities": { + "core_ferc1__yearly_other_regulatory_liabilities_sched278": { "dbf": "f1_othr_reg_liab", "xbrl": "other_regulatory_liabilities_account_254_278", }, diff --git a/src/pudl/glue/ferc1_eia.py b/src/pudl/glue/ferc1_eia.py index c370bf1297..2154c7d764 100644 --- a/src/pudl/glue/ferc1_eia.py +++ b/src/pudl/glue/ferc1_eia.py @@ -255,11 +255,11 @@ def get_plants_ferc1_raw_job() -> JobDefinition: This job expects ferc1.sqlite and ferc_xbrl.sqlite databases to be populated. """ plant_tables = [ - "core_ferc1__yearly_plants_hydro", - "core_ferc1__yearly_plants_small", - "core_ferc1__yearly_plants_pumped_storage", - "core_ferc1__yearly_plants_steam", - "core_ferc1__yearly_fuel", # bc it has plants/is associated w/ the steam table + "core_ferc1__yearly_hydroelectric_plants_sched406", + "core_ferc1__yearly_small_plants_sched410", + "core_ferc1__yearly_pumped_storage_plants_sched408", + "core_ferc1__yearly_steam_plants_sched402", + "core_ferc1__yearly_steam_plants_fuel_sched402", # bc it has plants/is associated w/ the steam table ] @asset(ins={table_name: AssetIn() for table_name in plant_tables}) diff --git a/src/pudl/metadata/fields.py b/src/pudl/metadata/fields.py index 09839a8ec3..3afc710a52 100644 --- a/src/pudl/metadata/fields.py +++ b/src/pudl/metadata/fields.py @@ -106,7 +106,7 @@ }, "asset_type": { "type": "string", - "description": "Type of asset being reported to the core_ferc1__yearly_balance_sheet_assets table.", + "description": "Type of asset being reported to the core_ferc1__yearly_balance_sheet_assets_sched110 table.", }, "associated_combined_heat_power": { "type": "boolean", @@ -709,7 +709,7 @@ "energy_displaced_mwh": {"type": "number", "unit": "MWh"}, "energy_disposition_type": { "type": "string", - "description": "Type of energy disposition reported in the core_ferc1__yearly_electric_energy_dispositions. Dispositions include sales to customers, re-sales of energy, energy used internally, losses, etc.", + "description": "Type of energy disposition reported in the core_ferc1__yearly_energy_dispositions_sched401. Dispositions include sales to customers, re-sales of energy, energy used internally, losses, etc.", }, "energy_efficiency_annual_actual_peak_reduction_mw": { "type": "number", @@ -800,7 +800,7 @@ }, "energy_source_type": { "type": "string", - "description": "Type of energy source reported in the core_ferc1__yearly_electric_energy_sources table. There are three groups of energy sources: generation, power exchanges and transmission.", + "description": "Type of energy source reported in the core_ferc1__yearly_energy_sources_sched401 table. There are three groups of energy sources: generation, power exchanges and transmission.", }, "energy_storage": { "type": "boolean", @@ -1314,7 +1314,7 @@ }, "liability_type": { "type": "string", - "description": "Type of liability being reported to the core_ferc1__yearly_balance_sheet_liabilities table.", + "description": "Type of liability being reported to the core_ferc1__yearly_balance_sheet_liabilities_sched110 table.", }, "license_id_ferc1": { "type": "integer", @@ -2826,7 +2826,7 @@ "utility_owned_capacity_mw": {"type": "number", "unit": "MW"}, "utility_plant_asset_type": { "type": "string", - "description": "Type of utility plant asset reported in the core_ferc1__yearly_utility_plant_summary table. Assets include those leased to others, held for future use, construction work-in-progress and details of accumulated depreciation.", + "description": "Type of utility plant asset reported in the core_ferc1__yearly_utility_plant_summary_sched200 table. Assets include those leased to others, held for future use, construction work-in-progress and details of accumulated depreciation.", }, "utility_pobox": {"type": "string"}, "utility_type": { @@ -2835,7 +2835,7 @@ }, "utility_type_other": { "type": "string", - "description": "Freeform description of type of utility reported in one of the other three other utility_type sections in the core_ferc1__yearly_utility_plant_summary table. This field is reported only in the DBF reporting years (1994-2020).", + "description": "Freeform description of type of utility reported in one of the other three other utility_type sections in the core_ferc1__yearly_utility_plant_summary_sched200 table. This field is reported only in the DBF reporting years (1994-2020).", }, "variable_peak_pricing": {"type": "boolean"}, "virtual_capacity_mw": {"type": "number", "unit": "MW"}, @@ -2957,7 +2957,7 @@ FIELD_METADATA_BY_RESOURCE: dict[str, dict[str, Any]] = { "sector_consolidated_eia": {"code": {"type": "integer"}}, - "core_ferc1__yearly_plants_hydro": { + "core_ferc1__yearly_hydroelectric_plants_sched406": { "plant_type": { "type": "string", "constraints": { @@ -2975,7 +2975,7 @@ }, } }, - "core_ferc1__yearly_plants_steam": { + "core_ferc1__yearly_steam_plants_sched402": { "plant_type": { "type": "string", "constraints": { @@ -3011,7 +3011,7 @@ }, "technology_description": {"constraints": {"enum": set(TECH_DESCRIPTIONS)}}, }, - "core_ferc1__yearly_transmission_statistics": { + "core_ferc1__yearly_transmission_lines_sched422": { "capex_land": { "description": "Cost of Land and land rights for the transmission line." }, diff --git a/src/pudl/metadata/resources/ferc1.py b/src/pudl/metadata/resources/ferc1.py index 8593fd01cb..21fc44f9ac 100644 --- a/src/pudl/metadata/resources/ferc1.py +++ b/src/pudl/metadata/resources/ferc1.py @@ -4,7 +4,7 @@ from pudl.metadata.codes import CODE_METADATA RESOURCE_METADATA: dict[str, dict[str, Any]] = { - "core_ferc1__yearly_balance_sheet_assets": { + "core_ferc1__yearly_balance_sheet_assets_sched110": { "description": "Comparative Balance Sheet (Assets and Other Debits). Schedule 110.", "schema": { "fields": [ @@ -28,7 +28,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_balance_sheet_liabilities": { + "core_ferc1__yearly_balance_sheet_liabilities_sched110": { "description": "Comparative balance sheet (liabilities and other credits)", "schema": { "fields": [ @@ -52,7 +52,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_cash_flow": { + "core_ferc1__yearly_cash_flows_sched120": { "description": "The structured portion of the FERC1 cash flow table - Schedule 120.", "schema": { "fields": [ @@ -74,7 +74,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_depreciation_amortization_summary": { + "core_ferc1__yearly_depreciation_summary_sched336": { "description": ( "Depreciation and Amortization of Electric Plant (Account 403, 404, 405) " "Section A: Summary of depreciation and amortization changes. " @@ -103,7 +103,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_electric_energy_sources": { + "core_ferc1__yearly_energy_sources_sched401": { "description": ( "Electric Energy Account, sources only. Schedule 401a. Amount of " "electricity the utility obtained from each of several sources, by year." @@ -127,7 +127,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_electric_energy_dispositions": { + "core_ferc1__yearly_energy_dispositions_sched401": { "description": ( "Electric Energy Account, dispositions only. Schedule 401a. Electricity " "utilities delived to end users, internal losses, etc." @@ -151,7 +151,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_electric_operating_expenses": { + "core_ferc1__yearly_operating_expenses_sched320": { "description": ( "Operating and maintenance costs associated with producing electricty, " "reported in Schedule 320 of FERC Form 1." @@ -173,7 +173,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_electric_plant_depreciation_changes": { + "core_ferc1__yearly_depreciation_changes_sched219": { "description": ( "Accumulated provision for depreciation of electric utility plant " "(Account 108). Schedule 219 Section A: balances and changes during year." @@ -203,7 +203,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_electric_plant_depreciation_functional": { + "core_ferc1__yearly_depreciation_by_function_sched219": { "description": ( "Accumulated provision for depreciation of electric utility plant " "(Account 108). Schedule 219 Section B: Functional plant classifications." @@ -233,7 +233,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_electricity_sales_by_rate_schedule": { + "core_ferc1__yearly_sales_by_rate_schedules_sched304": { "description": ( """The pre-2021 data in this table (extracted from FoxProDB vs. XBRL) is extremely unstructured. Where the post-2020 data (from XBRL) sorts the data @@ -317,7 +317,7 @@ "etl_group": "static_ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_fuel": { + "core_ferc1__yearly_steam_plants_fuel_sched402": { "description": "Annual fuel cost and quantity for steam plants with a capacity of 25+ MW, internal combustion and gas-turbine plants of 10+ MW, and all nuclear plants. As reported on page 402 of FERC Form 1 and extracted from the f1_fuel table in FERC's FoxPro Database.", "schema": { "fields": [ @@ -338,7 +338,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_income_statement": { + "core_ferc1__yearly_income_statements_sched114": { "description": "Statement of Income. Schedule 114.", "schema": { "fields": [ @@ -363,7 +363,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_other_regulatory_liabilities": { + "core_ferc1__yearly_other_regulatory_liabilities_sched278": { "description": "Other regulatory liabilities, including rate order docket number.", "schema": { "fields": [ @@ -381,7 +381,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_plant_in_service": { + "core_ferc1__yearly_plant_in_service_sched204": { "description": ( "Balances and changes to FERC Electric Plant in Service accounts, as " "reported on FERC Form 1, Schedule 204. Data originally from the " @@ -432,7 +432,7 @@ "etl_group": "glue", "field_namespace": "ferc1", }, - "core_ferc1__yearly_plants_hydro": { + "core_ferc1__yearly_hydroelectric_plants_sched406": { "description": ( "Hydroelectric generating plant statistics for large plants. Large plants " "have an installed nameplate capacity of more than 10 MW. As reported on " @@ -484,7 +484,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_plants_pumped_storage": { + "core_ferc1__yearly_pumped_storage_plants_sched408": { "description": ( "Generating plant statistics for hydroelectric pumped storage plants with " "an installed nameplate capacity of 10+ MW. As reported in Scheudle 408 of " @@ -540,7 +540,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_plants_small": { + "core_ferc1__yearly_small_plants_sched410": { "description": """The generating plant statistics for internal combustion plants, gas turbine-plants, conventional hydro plants, and pumped storage plants with less than 10 MW installed nameplate capacity and steam plants with less than 25 MW @@ -581,7 +581,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_plants_steam": { + "core_ferc1__yearly_steam_plants_sched402": { "description": ( "Generating plant statistics for steam plants with a capacity of 25+ MW, " "internal combustion and gas-turbine plants of 10+ MW, and all nuclear " @@ -648,7 +648,7 @@ "etl_group": "static_ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_purchased_power": { + "core_ferc1__yearly_purchased_power_and_exchanges_sched326": { "description": ( "Purchased Power (Account 555) including power exchanges (transactions " "involving a balancing of debits and credits for energy, capacity, etc.) " @@ -682,7 +682,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_transmission_statistics": { + "core_ferc1__yearly_transmission_lines_sched422": { "description": ( "Transmission Line Statistics. Schedule 422 of FERC Form 1. Information " "describing transmission lines, the cost of lines, annual operating and " @@ -746,7 +746,7 @@ "etl_group": "glue", "field_namespace": "ferc1", }, - "core_ferc1__yearly_utility_plant_summary": { + "core_ferc1__yearly_utility_plant_summary_sched200": { "description": ( "Summary of utility plant and accumulated provisions for depreciation, " "amortization and depletion of utilty plant assets reported annually at " @@ -774,7 +774,7 @@ "etl_group": "ferc1", "field_namespace": "ferc1", }, - "core_ferc1__yearly_retained_earnings": { + "core_ferc1__yearly_retained_earnings_sched118": { "description": "Retained Earnings - The structed part of schedule 118.", "schema": { "fields": [ @@ -808,7 +808,7 @@ "field_namespace": "ferc1", "create_database_schema": False, }, - "core_ferc1__yearly_electric_operating_revenues": { + "core_ferc1__yearly_operating_revenues_sched300": { "description": ( "Electric operating revenues - The structed part of schedule 300." "There are a number of revenue_type's that do not have sales_mwh," @@ -854,7 +854,7 @@ "etl_group": "outputs", "sources": ["ferc1"], }, - "out_ferc1__yearly_balance_sheet_assets": { + "out_ferc1__yearly_balance_sheet_assets_sched110": { "description": "Denormalized table that contains FERC balance sheet asset information.", "schema": { "fields": [ @@ -880,7 +880,7 @@ "etl_group": "outputs", "sources": ["ferc1"], }, - "out_ferc1__yearly_balance_sheet_liabilities": { + "out_ferc1__yearly_balance_sheet_liabilities_sched110": { "description": "Denormalized table that contains FERC balance sheet liability information.", "schema": { "fields": [ @@ -906,7 +906,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_cash_flow": { + "out_ferc1__yearly_cash_flows_sched120": { "description": "Denormalized table that contains FERC cash flow information.", "schema": { "fields": [ @@ -930,7 +930,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_depreciation_amortization_summary": { + "out_ferc1__yearly_depreciation_summary_sched336": { "description": "Denormalized table that contains FERC depreciation amortization information.", "schema": { "fields": [ @@ -956,7 +956,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_electric_energy_dispositions": { + "out_ferc1__yearly_energy_dispositions_sched401": { "description": "Denormalized table that contains FERC electric energy dispositions information.", "schema": { "fields": [ @@ -979,7 +979,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_electric_energy_sources": { + "out_ferc1__yearly_energy_sources_sched401": { "description": "Denormalized table that contains FERC electric energy sources information.", "schema": { "fields": [ @@ -1002,7 +1002,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_electric_operating_expenses": { + "out_ferc1__yearly_operating_expenses_sched320": { "description": "Denormalized table that contains FERC electric operating expense information.", "schema": { "fields": [ @@ -1023,7 +1023,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_electric_operating_revenues": { + "out_ferc1__yearly_operating_revenues_sched300": { "description": "Denormalized table that contains FERC electric operating revenue information.", "schema": { "fields": [ @@ -1050,7 +1050,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_electric_plant_depreciation_changes": { + "out_ferc1__yearly_depreciation_changes_sched219": { "description": "Denormalized table that contains FERC electric plant depreciation changes information.", "schema": { "fields": [ @@ -1079,7 +1079,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_electric_plant_depreciation_functional": { + "out_ferc1__yearly_depreciation_by_function_sched219": { "description": ( "Denormalized accumulated provision for depreciation of electric utility " "plant (Account 108). Schedule 219 Section B: Functional plant classifications." @@ -1111,7 +1111,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_electricity_sales_by_rate_schedule": { + "out_ferc1__yearly_sales_by_rate_schedules_sched304": { "description": "Denormalized table that contains FERC electricity sales by rate schedule information.", "schema": { "fields": [ @@ -1134,7 +1134,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_income_statement": { + "out_ferc1__yearly_income_statements_sched114": { "description": "Denormalized table that contains FERC income statement information.", "schema": { "fields": [ @@ -1161,7 +1161,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_other_regulatory_liabilities": { + "out_ferc1__yearly_other_regulatory_liabilities_sched278": { "description": "Denormalized table that contains FERC other regulatory liabilities information.", "schema": { "fields": [ @@ -1181,7 +1181,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_retained_earnings": { + "out_ferc1__yearly_retained_earnings_sched118": { "description": "Denormalized table that contains FERC retained earnings information.", "schema": { "fields": [ @@ -1207,7 +1207,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_transmission_statistics": { + "out_ferc1__yearly_transmission_lines_sched422": { "description": "Denormalized table that contains FERC transmission statistics information.", "schema": { "fields": [ @@ -1238,7 +1238,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_utility_plant_summary": { + "out_ferc1__yearly_utility_plant_summary_sched200": { "description": "Denormalized table that contains FERC utility plant summary information.", "schema": { "fields": [ @@ -1264,7 +1264,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "_out_ferc1__yearly_steam_plants": { + "_out_ferc1__yearly_steam_plants_sched402": { "description": "Denormalized table that contains steam plant information from FERC Form 1.", "schema": { "fields": [ @@ -1332,7 +1332,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "_out_ferc1__yearly_small_plants": { + "_out_ferc1__yearly_small_plants_sched410": { "description": "Denormalized table that contains small plant information from FERC Form 1.", "schema": { "fields": [ @@ -1367,7 +1367,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "_out_ferc1__yearly_hydro_plants": { + "_out_ferc1__yearly_hydroelectric_plants_sched406": { "description": "Denormalized table that contains small plant information from FERC Form 1.", "schema": { "fields": [ @@ -1422,7 +1422,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "_out_ferc1__yearly_pumped_storage_plants": { + "_out_ferc1__yearly_pumped_storage_plants_sched408": { "description": "Denormalized table that contains pumped storage plant information from FERC Form 1.", "schema": { "fields": [ @@ -1481,7 +1481,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_fuel": { + "out_ferc1__yearly_steam_plants_fuel_sched402": { "description": "Denormalized table that contains fuel information from FERC Form 1.", "schema": { "fields": [ @@ -1510,7 +1510,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_purchased_power": { + "out_ferc1__yearly_purchased_power_and_exchanges_sched326": { "description": "Denormalized table of FERC Form 1 Purchased Power data.", "schema": { "fields": [ @@ -1540,7 +1540,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_plant_in_service": { + "out_ferc1__yearly_plant_in_service_sched204": { "description": "Denormalized table of FERC Form 1 Electric Plant in Service data.", "schema": { "fields": [ @@ -1655,7 +1655,7 @@ "etl_group": "outputs", "field_namespace": "ferc1", }, - "out_ferc1__yearly_fuel_by_plant": { + "out_ferc1__yearly_steam_plants_fuel_by_plant_sched402": { "description": "A table summarizing FERC fuel data by plant, using FERC Form 1 data.", "schema": { "fields": [ diff --git a/src/pudl/metadata/resources/ferc1_eia_record_linkage.py b/src/pudl/metadata/resources/ferc1_eia_record_linkage.py index e6cb93a781..3c04c82ab0 100644 --- a/src/pudl/metadata/resources/ferc1_eia_record_linkage.py +++ b/src/pudl/metadata/resources/ferc1_eia_record_linkage.py @@ -123,7 +123,7 @@ "etl_group": "outputs", "field_namespace": "eia", }, - "out__yearly_plants_all_ferc1_plant_parts_eia": { + "out_pudl__yearly_assn_eia_ferc1_plant_parts": { "description": """This table links power plant data reported in FERC Form 1 to related EIA data. It answers the question "What EIA data reported about plants or generators should be associated with a given plant record found in the FERC Form 1." diff --git a/src/pudl/output/ferc1.py b/src/pudl/output/ferc1.py index 7a32ffa3c1..909891d371 100644 --- a/src/pudl/output/ferc1.py +++ b/src/pudl/output/ferc1.py @@ -25,7 +25,7 @@ EXPLOSION_CALCULATION_TOLERANCES: dict[str, GroupMetricChecks] = { - "core_ferc1__yearly_income_statement": GroupMetricChecks( + "core_ferc1__yearly_income_statements_sched114": GroupMetricChecks( groups_to_check=[ "ungrouped", "report_year", @@ -55,7 +55,7 @@ ), ), ), - "core_ferc1__yearly_balance_sheet_assets": GroupMetricChecks( + "core_ferc1__yearly_balance_sheet_assets_sched110": GroupMetricChecks( groups_to_check=[ "ungrouped", "report_year", @@ -85,7 +85,7 @@ ), ), ), - "core_ferc1__yearly_balance_sheet_liabilities": GroupMetricChecks( + "core_ferc1__yearly_balance_sheet_liabilities_sched110": GroupMetricChecks( groups_to_check=[ "ungrouped", "report_year", @@ -132,9 +132,9 @@ def _out_ferc1__yearly_plants_utilities( @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def _out_ferc1__yearly_steam_plants( +def _out_ferc1__yearly_steam_plants_sched402( _out_ferc1__yearly_plants_utilities: pd.DataFrame, - core_ferc1__yearly_plants_steam: pd.DataFrame, + core_ferc1__yearly_steam_plants_sched402: pd.DataFrame, ) -> pd.DataFrame: """Select and joins some useful fields from the FERC Form 1 steam table. @@ -147,13 +147,13 @@ def _out_ferc1__yearly_steam_plants( Args: _out_ferc1__yearly_plants_utilities: Denormalized dataframe of FERC Form 1 plants and utilities data. - core_ferc1__yearly_plants_steam: The normalized FERC Form 1 steam table. + core_ferc1__yearly_steam_plants_sched402: The normalized FERC Form 1 steam table. Returns: A DataFrame containing useful fields from the FERC Form 1 steam table. """ steam_df = ( - core_ferc1__yearly_plants_steam.merge( + core_ferc1__yearly_steam_plants_sched402.merge( _out_ferc1__yearly_plants_utilities, on=["utility_id_ferc1", "plant_name_ferc1"], how="left", @@ -187,13 +187,13 @@ def _out_ferc1__yearly_steam_plants( @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def _out_ferc1__yearly_small_plants( - core_ferc1__yearly_plants_small: pd.DataFrame, +def _out_ferc1__yearly_small_plants_sched410( + core_ferc1__yearly_small_plants_sched410: pd.DataFrame, _out_ferc1__yearly_plants_utilities: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe related to the FERC Form 1 small plants.""" plants_small_df = ( - core_ferc1__yearly_plants_small.merge( + core_ferc1__yearly_small_plants_sched410.merge( _out_ferc1__yearly_plants_utilities, on=["utility_id_ferc1", "plant_name_ferc1"], how="left", @@ -224,13 +224,13 @@ def _out_ferc1__yearly_small_plants( @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def _out_ferc1__yearly_hydro_plants( - core_ferc1__yearly_plants_hydro: pd.DataFrame, +def _out_ferc1__yearly_hydroelectric_plants_sched406( + core_ferc1__yearly_hydroelectric_plants_sched406: pd.DataFrame, _out_ferc1__yearly_plants_utilities: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe related to the FERC Form 1 hydro plants.""" plants_hydro_df = ( - core_ferc1__yearly_plants_hydro.merge( + core_ferc1__yearly_hydroelectric_plants_sched406.merge( _out_ferc1__yearly_plants_utilities, on=["utility_id_ferc1", "plant_name_ferc1"], how="left", @@ -255,13 +255,13 @@ def _out_ferc1__yearly_hydro_plants( @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def _out_ferc1__yearly_pumped_storage_plants( - core_ferc1__yearly_plants_pumped_storage: pd.DataFrame, +def _out_ferc1__yearly_pumped_storage_plants_sched408( + core_ferc1__yearly_pumped_storage_plants_sched408: pd.DataFrame, _out_ferc1__yearly_plants_utilities: pd.DataFrame, ) -> pd.DataFrame: """Pull a dataframe of FERC Form 1 Pumped Storage plant data.""" pumped_storage_df = ( - core_ferc1__yearly_plants_pumped_storage.merge( + core_ferc1__yearly_pumped_storage_plants_sched408.merge( _out_ferc1__yearly_plants_utilities, on=["utility_id_ferc1", "plant_name_ferc1"], how="left", @@ -286,8 +286,8 @@ def _out_ferc1__yearly_pumped_storage_plants( @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_fuel( - core_ferc1__yearly_fuel: pd.DataFrame, +def out_ferc1__yearly_steam_plants_fuel_sched402( + core_ferc1__yearly_steam_plants_fuel_sched402: pd.DataFrame, _out_ferc1__yearly_plants_utilities: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe related to FERC Form 1 fuel information. @@ -308,7 +308,7 @@ def out_ferc1__yearly_fuel( information. """ fuel_df = ( - core_ferc1__yearly_fuel.assign( + core_ferc1__yearly_steam_plants_fuel_sched402.assign( fuel_consumed_mmbtu=lambda x: x["fuel_consumed_units"] * x["fuel_mmbtu_per_unit"], fuel_consumed_total_cost=lambda x: x["fuel_consumed_units"] @@ -334,34 +334,36 @@ def out_ferc1__yearly_fuel( @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_purchased_power( - core_ferc1__yearly_purchased_power: pd.DataFrame, +def out_ferc1__yearly_purchased_power_and_exchanges_sched326( + core_ferc1__yearly_purchased_power_and_exchanges_sched326: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - purchased_power_df = core_ferc1__yearly_purchased_power.merge( - core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" - ).pipe( - pudl.helpers.organize_cols, - [ - "report_year", - "utility_id_ferc1", - "utility_id_pudl", - "utility_name_ferc1", - "seller_name", - "record_id", - ], + purchased_power_df = ( + core_ferc1__yearly_purchased_power_and_exchanges_sched326.merge( + core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" + ).pipe( + pudl.helpers.organize_cols, + [ + "report_year", + "utility_id_ferc1", + "utility_id_pudl", + "utility_name_ferc1", + "seller_name", + "record_id", + ], + ) ) return purchased_power_df @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_plant_in_service( - core_ferc1__yearly_plant_in_service: pd.DataFrame, +def out_ferc1__yearly_plant_in_service_sched204( + core_ferc1__yearly_plant_in_service_sched204: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a dataframe of FERC Form 1 Electric Plant in Service data.""" - pis_df = core_ferc1__yearly_plant_in_service.merge( + pis_df = core_ferc1__yearly_plant_in_service_sched204.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -377,13 +379,13 @@ def out_ferc1__yearly_plant_in_service( @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_balance_sheet_assets( - core_ferc1__yearly_balance_sheet_assets: pd.DataFrame, +def out_ferc1__yearly_balance_sheet_assets_sched110( + core_ferc1__yearly_balance_sheet_assets_sched110: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 balance sheet assets data.""" - out_ferc1__yearly_balance_sheet_assets = ( - core_ferc1__yearly_balance_sheet_assets.merge( + out_ferc1__yearly_balance_sheet_assets_sched110 = ( + core_ferc1__yearly_balance_sheet_assets_sched110.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -397,17 +399,17 @@ def out_ferc1__yearly_balance_sheet_assets( ], ) ) - return out_ferc1__yearly_balance_sheet_assets + return out_ferc1__yearly_balance_sheet_assets_sched110 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_balance_sheet_liabilities( - core_ferc1__yearly_balance_sheet_liabilities: pd.DataFrame, +def out_ferc1__yearly_balance_sheet_liabilities_sched110( + core_ferc1__yearly_balance_sheet_liabilities_sched110: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 balance_sheet liabilities data.""" - out_ferc1__yearly_balance_sheet_liabilities = ( - core_ferc1__yearly_balance_sheet_liabilities.merge( + out_ferc1__yearly_balance_sheet_liabilities_sched110 = ( + core_ferc1__yearly_balance_sheet_liabilities_sched110.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -421,39 +423,41 @@ def out_ferc1__yearly_balance_sheet_liabilities( ], ) ) - return out_ferc1__yearly_balance_sheet_liabilities + return out_ferc1__yearly_balance_sheet_liabilities_sched110 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_cash_flow( - core_ferc1__yearly_cash_flow: pd.DataFrame, +def out_ferc1__yearly_cash_flows_sched120( + core_ferc1__yearly_cash_flows_sched120: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 cash flow data.""" - out_ferc1__yearly_cash_flow = core_ferc1__yearly_cash_flow.merge( - core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" - ).pipe( - pudl.helpers.organize_cols, - [ - "report_year", - "utility_id_ferc1", - "utility_id_pudl", - "utility_name_ferc1", - "record_id", - "amount_type", - ], + out_ferc1__yearly_cash_flows_sched120 = ( + core_ferc1__yearly_cash_flows_sched120.merge( + core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" + ).pipe( + pudl.helpers.organize_cols, + [ + "report_year", + "utility_id_ferc1", + "utility_id_pudl", + "utility_name_ferc1", + "record_id", + "amount_type", + ], + ) ) - return out_ferc1__yearly_cash_flow + return out_ferc1__yearly_cash_flows_sched120 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_depreciation_amortization_summary( - core_ferc1__yearly_depreciation_amortization_summary: pd.DataFrame, +def out_ferc1__yearly_depreciation_summary_sched336( + core_ferc1__yearly_depreciation_summary_sched336: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 depreciation amortization data.""" - out_ferc1__yearly_depreciation_amortization_summary = ( - core_ferc1__yearly_depreciation_amortization_summary.merge( + out_ferc1__yearly_depreciation_summary_sched336 = ( + core_ferc1__yearly_depreciation_summary_sched336.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -468,17 +472,17 @@ def out_ferc1__yearly_depreciation_amortization_summary( ], ) ) - return out_ferc1__yearly_depreciation_amortization_summary + return out_ferc1__yearly_depreciation_summary_sched336 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_electric_energy_dispositions( - core_ferc1__yearly_electric_energy_dispositions: pd.DataFrame, +def out_ferc1__yearly_energy_dispositions_sched401( + core_ferc1__yearly_energy_dispositions_sched401: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 energy dispositions data.""" - out_ferc1__yearly_electric_energy_dispositions = ( - core_ferc1__yearly_electric_energy_dispositions.merge( + out_ferc1__yearly_energy_dispositions_sched401 = ( + core_ferc1__yearly_energy_dispositions_sched401.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -492,17 +496,17 @@ def out_ferc1__yearly_electric_energy_dispositions( ], ) ) - return out_ferc1__yearly_electric_energy_dispositions + return out_ferc1__yearly_energy_dispositions_sched401 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_electric_energy_sources( - core_ferc1__yearly_electric_energy_sources: pd.DataFrame, +def out_ferc1__yearly_energy_sources_sched401( + core_ferc1__yearly_energy_sources_sched401: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_electric_energy_sources = ( - core_ferc1__yearly_electric_energy_sources.merge( + out_ferc1__yearly_energy_sources_sched401 = ( + core_ferc1__yearly_energy_sources_sched401.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -516,17 +520,17 @@ def out_ferc1__yearly_electric_energy_sources( ], ) ) - return out_ferc1__yearly_electric_energy_sources + return out_ferc1__yearly_energy_sources_sched401 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_electric_operating_expenses( - core_ferc1__yearly_electric_operating_expenses: pd.DataFrame, +def out_ferc1__yearly_operating_expenses_sched320( + core_ferc1__yearly_operating_expenses_sched320: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_electric_operating_expenses = ( - core_ferc1__yearly_electric_operating_expenses.merge( + out_ferc1__yearly_operating_expenses_sched320 = ( + core_ferc1__yearly_operating_expenses_sched320.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -540,17 +544,17 @@ def out_ferc1__yearly_electric_operating_expenses( ], ) ) - return out_ferc1__yearly_electric_operating_expenses + return out_ferc1__yearly_operating_expenses_sched320 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_electric_operating_revenues( - core_ferc1__yearly_electric_operating_revenues: pd.DataFrame, +def out_ferc1__yearly_operating_revenues_sched300( + core_ferc1__yearly_operating_revenues_sched300: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_electric_operating_revenues = ( - core_ferc1__yearly_electric_operating_revenues.merge( + out_ferc1__yearly_operating_revenues_sched300 = ( + core_ferc1__yearly_operating_revenues_sched300.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -564,17 +568,17 @@ def out_ferc1__yearly_electric_operating_revenues( ], ) ) - return out_ferc1__yearly_electric_operating_revenues + return out_ferc1__yearly_operating_revenues_sched300 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_electric_plant_depreciation_changes( - core_ferc1__yearly_electric_plant_depreciation_changes: pd.DataFrame, +def out_ferc1__yearly_depreciation_changes_sched219( + core_ferc1__yearly_depreciation_changes_sched219: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_electric_plant_depreciation_changes = ( - core_ferc1__yearly_electric_plant_depreciation_changes.merge( + out_ferc1__yearly_depreciation_changes_sched219 = ( + core_ferc1__yearly_depreciation_changes_sched219.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -590,17 +594,17 @@ def out_ferc1__yearly_electric_plant_depreciation_changes( ], ) ) - return out_ferc1__yearly_electric_plant_depreciation_changes + return out_ferc1__yearly_depreciation_changes_sched219 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_electric_plant_depreciation_functional( - core_ferc1__yearly_electric_plant_depreciation_functional: pd.DataFrame, +def out_ferc1__yearly_depreciation_by_function_sched219( + core_ferc1__yearly_depreciation_by_function_sched219: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_electric_plant_depreciation_functional = ( - core_ferc1__yearly_electric_plant_depreciation_functional.merge( + out_ferc1__yearly_depreciation_by_function_sched219 = ( + core_ferc1__yearly_depreciation_by_function_sched219.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -616,17 +620,17 @@ def out_ferc1__yearly_electric_plant_depreciation_functional( ], ) ) - return out_ferc1__yearly_electric_plant_depreciation_functional + return out_ferc1__yearly_depreciation_by_function_sched219 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_electricity_sales_by_rate_schedule( - core_ferc1__yearly_electricity_sales_by_rate_schedule: pd.DataFrame, +def out_ferc1__yearly_sales_by_rate_schedules_sched304( + core_ferc1__yearly_sales_by_rate_schedules_sched304: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_electricity_sales_by_rate_schedule = ( - core_ferc1__yearly_electricity_sales_by_rate_schedule.merge( + out_ferc1__yearly_sales_by_rate_schedules_sched304 = ( + core_ferc1__yearly_sales_by_rate_schedules_sched304.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -639,40 +643,42 @@ def out_ferc1__yearly_electricity_sales_by_rate_schedule( ], ) ) - return out_ferc1__yearly_electricity_sales_by_rate_schedule + return out_ferc1__yearly_sales_by_rate_schedules_sched304 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_income_statement( - core_ferc1__yearly_income_statement: pd.DataFrame, +def out_ferc1__yearly_income_statements_sched114( + core_ferc1__yearly_income_statements_sched114: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_income_statement = core_ferc1__yearly_income_statement.merge( - core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" - ).pipe( - pudl.helpers.organize_cols, - [ - "report_year", - "utility_id_ferc1", - "utility_id_pudl", - "utility_name_ferc1", - "record_id", - "utility_type", - "income_type", - ], + out_ferc1__yearly_income_statements_sched114 = ( + core_ferc1__yearly_income_statements_sched114.merge( + core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" + ).pipe( + pudl.helpers.organize_cols, + [ + "report_year", + "utility_id_ferc1", + "utility_id_pudl", + "utility_name_ferc1", + "record_id", + "utility_type", + "income_type", + ], + ) ) - return out_ferc1__yearly_income_statement + return out_ferc1__yearly_income_statements_sched114 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_other_regulatory_liabilities( - core_ferc1__yearly_other_regulatory_liabilities: pd.DataFrame, +def out_ferc1__yearly_other_regulatory_liabilities_sched278( + core_ferc1__yearly_other_regulatory_liabilities_sched278: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_other_regulatory_liabilities = ( - core_ferc1__yearly_other_regulatory_liabilities.merge( + out_ferc1__yearly_other_regulatory_liabilities_sched278 = ( + core_ferc1__yearly_other_regulatory_liabilities_sched278.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -684,39 +690,41 @@ def out_ferc1__yearly_other_regulatory_liabilities( ], ) ) - return out_ferc1__yearly_other_regulatory_liabilities + return out_ferc1__yearly_other_regulatory_liabilities_sched278 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_retained_earnings( - core_ferc1__yearly_retained_earnings: pd.DataFrame, +def out_ferc1__yearly_retained_earnings_sched118( + core_ferc1__yearly_retained_earnings_sched118: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_retained_earnings = core_ferc1__yearly_retained_earnings.merge( - core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" - ).pipe( - pudl.helpers.organize_cols, - [ - "report_year", - "utility_id_ferc1", - "utility_id_pudl", - "utility_name_ferc1", - "record_id", - "earnings_type", - ], + out_ferc1__yearly_retained_earnings_sched118 = ( + core_ferc1__yearly_retained_earnings_sched118.merge( + core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" + ).pipe( + pudl.helpers.organize_cols, + [ + "report_year", + "utility_id_ferc1", + "utility_id_pudl", + "utility_name_ferc1", + "record_id", + "earnings_type", + ], + ) ) - return out_ferc1__yearly_retained_earnings + return out_ferc1__yearly_retained_earnings_sched118 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_transmission_statistics( - core_ferc1__yearly_transmission_statistics: pd.DataFrame, +def out_ferc1__yearly_transmission_lines_sched422( + core_ferc1__yearly_transmission_lines_sched422: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_transmission_statistics = ( - core_ferc1__yearly_transmission_statistics.merge( + out_ferc1__yearly_transmission_lines_sched422 = ( + core_ferc1__yearly_transmission_lines_sched422.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -728,17 +736,17 @@ def out_ferc1__yearly_transmission_statistics( ], ) ) - return out_ferc1__yearly_transmission_statistics + return out_ferc1__yearly_transmission_lines_sched422 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") -def out_ferc1__yearly_utility_plant_summary( - core_ferc1__yearly_utility_plant_summary: pd.DataFrame, +def out_ferc1__yearly_utility_plant_summary_sched200( + core_ferc1__yearly_utility_plant_summary_sched200: pd.DataFrame, core_pudl__assn_utilities_ferc1: pd.DataFrame, ) -> pd.DataFrame: """Pull a useful dataframe of FERC Form 1 Purchased Power data.""" - out_ferc1__yearly_utility_plant_summary = ( - core_ferc1__yearly_utility_plant_summary.merge( + out_ferc1__yearly_utility_plant_summary_sched200 = ( + core_ferc1__yearly_utility_plant_summary_sched200.merge( core_pudl__assn_utilities_ferc1, on="utility_id_ferc1" ).pipe( pudl.helpers.organize_cols, @@ -753,15 +761,15 @@ def out_ferc1__yearly_utility_plant_summary( ], ) ) - return out_ferc1__yearly_utility_plant_summary + return out_ferc1__yearly_utility_plant_summary_sched200 @asset(io_manager_key="pudl_sqlite_io_manager", compute_kind="Python") def out_ferc1__yearly_all_plants( - _out_ferc1__yearly_steam_plants: pd.DataFrame, - _out_ferc1__yearly_small_plants: pd.DataFrame, - _out_ferc1__yearly_hydro_plants: pd.DataFrame, - _out_ferc1__yearly_pumped_storage_plants: pd.DataFrame, + _out_ferc1__yearly_steam_plants_sched402: pd.DataFrame, + core_ferc1__yearly_small_plants_sched410: pd.DataFrame, + _out_ferc1__yearly_hydroelectric_plants_sched406: pd.DataFrame, + _out_ferc1__yearly_pumped_storage_plants_sched408: pd.DataFrame, ) -> pd.DataFrame: """Combine the steam, small generators, hydro, and pumped storage tables. @@ -773,23 +781,25 @@ def out_ferc1__yearly_all_plants( """ # Prep steam table logger.debug("prepping steam table") - steam_df = _out_ferc1__yearly_steam_plants.rename( + steam_df = _out_ferc1__yearly_steam_plants_sched402.rename( columns={"opex_plants": "opex_plant"} ) # Prep hydro tables (Add this to the meta data later) logger.debug("prepping hydro tables") - hydro_df = _out_ferc1__yearly_hydro_plants.rename( + hydro_df = _out_ferc1__yearly_hydroelectric_plants_sched406.rename( columns={"project_num": "ferc_license_id"} ) - pump_df = _out_ferc1__yearly_pumped_storage_plants.rename( + pump_df = _out_ferc1__yearly_pumped_storage_plants_sched408.rename( columns={"project_num": "ferc_license_id"} ) # Combine all the tables together logger.debug("combining all tables") all_df = ( - pd.concat([steam_df, _out_ferc1__yearly_small_plants, hydro_df, pump_df]) + pd.concat( + [steam_df, core_ferc1__yearly_small_plants_sched410, hydro_df, pump_df] + ) .rename( columns={ "fuel_cost": "total_fuel_cost", @@ -819,9 +829,9 @@ def out_ferc1__yearly_all_plants( }, compute_kind="Python", ) -def out_ferc1__yearly_fuel_by_plant( +def out_ferc1__yearly_steam_plants_fuel_by_plant_sched402( context, - core_ferc1__yearly_fuel: pd.DataFrame, + core_ferc1__yearly_steam_plants_fuel_sched402: pd.DataFrame, _out_ferc1__yearly_plants_utilities: pd.DataFrame, ) -> pd.DataFrame: """Summarize FERC fuel data by plant for output. @@ -834,7 +844,7 @@ def out_ferc1__yearly_fuel_by_plant( Args: context: Dagster context object - core_ferc1__yearly_fuel: Normalized FERC fuel table. + core_ferc1__yearly_steam_plants_fuel_sched402: Normalized FERC fuel table. _out_ferc1__yearly_plants_utilities: Denormalized table of FERC1 plant & utility IDs. Returns: @@ -853,18 +863,18 @@ def drop_other_fuel_types(df): # The existing function expects `fuel_type_code_pudl` to be an object, rather than # a category. This is a legacy of pre-dagster code, and we convert here to prevent # further retooling in the code-base. - core_ferc1__yearly_fuel["fuel_type_code_pudl"] = core_ferc1__yearly_fuel[ + core_ferc1__yearly_steam_plants_fuel_sched402[ "fuel_type_code_pudl" - ].astype(str) + ] = core_ferc1__yearly_steam_plants_fuel_sched402["fuel_type_code_pudl"].astype(str) fuel_categories = list( - pudl.transform.ferc1.FuelFerc1TableTransformer() + pudl.transform.ferc1.SteamPlantsFuelTableTransformer() .params.categorize_strings["fuel_type_code_pudl"] .categories.keys() ) fbp_df = ( - core_ferc1__yearly_fuel.pipe(drop_other_fuel_types) + core_ferc1__yearly_steam_plants_fuel_sched402.pipe(drop_other_fuel_types) .pipe( pudl.analysis.classify_plants_ferc1.fuel_by_plant_ferc1, fuel_categories=fuel_categories, @@ -1055,7 +1065,7 @@ def _out_ferc1__explosion_tags(table_dimensions_ferc1) -> pd.DataFrame: """Grab the stored table of tags and add infered dimension.""" # NOTE: there are a bunch of duplicate records in xbrl_factoid_rate_base_tags.csv # Also, these tags are only applicable to the - # core_ferc1__yearly_balance_sheet_assets table, but we need to pass in + # core_ferc1__yearly_balance_sheet_assets_sched110 table, but we need to pass in # a dataframe with the right structure to all of the exploders, # so we're just re-using this one for the moment. tags_csv = ( @@ -1144,17 +1154,17 @@ def create_exploded_table_assets() -> list[AssetsDefinition]: { "root_table": "income_statement_ferc1", "table_names_to_explode": [ - "core_ferc1__yearly_income_statement", - "core_ferc1__yearly_depreciation_amortization_summary", - "core_ferc1__yearly_electric_operating_expenses", - "core_ferc1__yearly_electric_operating_revenues", + "core_ferc1__yearly_income_statements_sched114", + "core_ferc1__yearly_depreciation_summary_sched336", + "core_ferc1__yearly_operating_expenses_sched320", + "core_ferc1__yearly_operating_revenues_sched300", ], "group_metric_checks": EXPLOSION_CALCULATION_TOLERANCES[ - "core_ferc1__yearly_income_statement" + "core_ferc1__yearly_income_statements_sched114" ], "seed_nodes": [ NodeId( - table_name="core_ferc1__yearly_income_statement", + table_name="core_ferc1__yearly_income_statements_sched114", xbrl_factoid="net_income_loss", utility_type="total", plant_status=pd.NA, @@ -1165,18 +1175,17 @@ def create_exploded_table_assets() -> list[AssetsDefinition]: { "root_table": "balance_sheet_assets_ferc1", "table_names_to_explode": [ - "core_ferc1__yearly_balance_sheet_assets", - "core_ferc1__yearly_balance_sheet_assets", - "core_ferc1__yearly_utility_plant_summary", - "core_ferc1__yearly_plant_in_service", - "core_ferc1__yearly_electric_plant_depreciation_functional", + "core_ferc1__yearly_balance_sheet_assets_sched110", + "core_ferc1__yearly_utility_plant_summary_sched200", + "core_ferc1__yearly_plant_in_service_sched204", + "core_ferc1__yearly_depreciation_by_function_sched219", ], "group_metric_checks": EXPLOSION_CALCULATION_TOLERANCES[ - "core_ferc1__yearly_balance_sheet_assets" + "core_ferc1__yearly_balance_sheet_assets_sched110" ], "seed_nodes": [ NodeId( - table_name="core_ferc1__yearly_balance_sheet_assets", + table_name="core_ferc1__yearly_balance_sheet_assets_sched110", xbrl_factoid="assets_and_other_debits", utility_type=pd.NA, plant_status=pd.NA, @@ -1187,15 +1196,15 @@ def create_exploded_table_assets() -> list[AssetsDefinition]: { "root_table": "balance_sheet_liabilities_ferc1", "table_names_to_explode": [ - "core_ferc1__yearly_balance_sheet_liabilities", - "core_ferc1__yearly_retained_earnings", + "core_ferc1__yearly_balance_sheet_liabilities_sched110", + "core_ferc1__yearly_retained_earnings_sched118", ], "group_metric_checks": EXPLOSION_CALCULATION_TOLERANCES[ - "core_ferc1__yearly_balance_sheet_liabilities" + "core_ferc1__yearly_balance_sheet_liabilities_sched110" ], "seed_nodes": [ NodeId( - table_name="core_ferc1__yearly_balance_sheet_liabilities", + table_name="core_ferc1__yearly_balance_sheet_liabilities_sched110", xbrl_factoid="liabilities_and_other_credits", utility_type=pd.NA, plant_status=pd.NA, @@ -1631,8 +1640,8 @@ class XbrlCalculationForestFerc1(BaseModel): """A class for manipulating groups of hierarchically nested XBRL calculations. We expect that the facts reported in high-level FERC tables like - :ref:`core_ferc1__yearly_income_statement` and - :ref:`core_ferc1__yearly_balance_sheet_assets` should be + :ref:`core_ferc1__yearly_income_statements_sched114` and + :ref:`core_ferc1__yearly_balance_sheet_assets_sched110` should be calculable from many individually reported granular values, based on the calculations encoded in the XBRL Metadata, and that these relationships should have a hierarchical tree structure. Several individual values from the higher level @@ -2031,21 +2040,21 @@ def forest(self: Self) -> nx.DiGraph: # only stepchildren node removal from above. a generalization here would be good almost_pure_stepparents = [ NodeId( - "core_ferc1__yearly_utility_plant_summary", + "core_ferc1__yearly_utility_plant_summary_sched200", "depreciation_amortization_and_depletion_utility_plant_leased_to_others", "total", pd.NA, pd.NA, ), NodeId( - "core_ferc1__yearly_utility_plant_summary", + "core_ferc1__yearly_utility_plant_summary_sched200", "depreciation_and_amortization_utility_plant_held_for_future_use", "total", pd.NA, pd.NA, ), NodeId( - "core_ferc1__yearly_utility_plant_summary", + "core_ferc1__yearly_utility_plant_summary_sched200", "utility_plant_in_service_classified_and_unclassified", "total", pd.NA, diff --git a/src/pudl/output/pudltabl.py b/src/pudl/output/pudltabl.py index 08f03a9137..41f8dbd455 100644 --- a/src/pudl/output/pudltabl.py +++ b/src/pudl/output/pudltabl.py @@ -133,31 +133,31 @@ def _register_output_methods(self: Self): # PudlTabl will generate a method to read each table from the DB with the given method name table_method_map_any_freq = { # table_name: method_name # denorm_ferc1 - "out_ferc1__yearly_balance_sheet_assets": "denorm_balance_sheet_assets_ferc1", - "out_ferc1__yearly_balance_sheet_liabilities": "denorm_balance_sheet_liabilities_ferc1", - "out_ferc1__yearly_cash_flow": "denorm_cash_flow_ferc1", - "out_ferc1__yearly_depreciation_amortization_summary": "denorm_depreciation_amortization_summary_ferc1", - "out_ferc1__yearly_electric_energy_dispositions": "denorm_electric_energy_dispositions_ferc1", - "out_ferc1__yearly_electric_energy_sources": "denorm_electric_energy_sources_ferc1", - "out_ferc1__yearly_electric_operating_expenses": "denorm_electric_operating_expenses_ferc1", - "out_ferc1__yearly_electric_operating_revenues": "denorm_electric_operating_revenues_ferc1", - "out_ferc1__yearly_electric_plant_depreciation_changes": "denorm_electric_plant_depreciation_changes_ferc1", - "out_ferc1__yearly_electric_plant_depreciation_functional": "denorm_electric_plant_depreciation_functional_ferc1", - "out_ferc1__yearly_electricity_sales_by_rate_schedule": "denorm_electricity_sales_by_rate_schedule_ferc1", - "out_ferc1__yearly_income_statement": "denorm_income_statement_ferc1", - "out_ferc1__yearly_other_regulatory_liabilities": "denorm_other_regulatory_liabilities_ferc1", - "out_ferc1__yearly_retained_earnings": "denorm_retained_earnings_ferc1", - "out_ferc1__yearly_transmission_statistics": "denorm_transmission_statistics_ferc1", - "out_ferc1__yearly_utility_plant_summary": "denorm_utility_plant_summary_ferc1", + "out_ferc1__yearly_balance_sheet_assets_sched110": "denorm_balance_sheet_assets_ferc1", + "out_ferc1__yearly_balance_sheet_liabilities_sched110": "denorm_balance_sheet_liabilities_ferc1", + "out_ferc1__yearly_cash_flows_sched120": "denorm_cash_flow_ferc1", + "out_ferc1__yearly_depreciation_summary_sched336": "denorm_depreciation_amortization_summary_ferc1", + "out_ferc1__yearly_energy_dispositions_sched401": "denorm_electric_energy_dispositions_ferc1", + "out_ferc1__yearly_energy_sources_sched401": "denorm_electric_energy_sources_ferc1", + "out_ferc1__yearly_operating_expenses_sched320": "denorm_electric_operating_expenses_ferc1", + "out_ferc1__yearly_operating_revenues_sched300": "denorm_electric_operating_revenues_ferc1", + "out_ferc1__yearly_depreciation_changes_sched219": "denorm_electric_plant_depreciation_changes_ferc1", + "out_ferc1__yearly_depreciation_by_function_sched219": "denorm_electric_plant_depreciation_functional_ferc1", + "out_ferc1__yearly_sales_by_rate_schedules_sched304": "denorm_electricity_sales_by_rate_schedule_ferc1", + "out_ferc1__yearly_income_statements_sched114": "denorm_income_statement_ferc1", + "out_ferc1__yearly_other_regulatory_liabilities_sched278": "denorm_other_regulatory_liabilities_ferc1", + "out_ferc1__yearly_retained_earnings_sched118": "denorm_retained_earnings_ferc1", + "out_ferc1__yearly_transmission_lines_sched422": "denorm_transmission_statistics_ferc1", + "out_ferc1__yearly_utility_plant_summary_sched200": "denorm_utility_plant_summary_ferc1", "_out_ferc1__yearly_plants_utilities": "pu_ferc1", - "_out_ferc1__yearly_steam_plants": "plants_steam_ferc1", - "out_ferc1__yearly_fuel": "fuel_ferc1", - "out_ferc1__yearly_fuel_by_plant": "fbp_ferc1", - "_out_ferc1__yearly_small_plants": "plants_small_ferc1", - "_out_ferc1__yearly_hydro_plants": "plants_hydro_ferc1", - "_out_ferc1__yearly_pumped_storage_plants": "plants_pumped_storage_ferc1", - "out_ferc1__yearly_purchased_power": "purchased_power_ferc1", - "out_ferc1__yearly_plant_in_service": "plant_in_service_ferc1", + "_out_ferc1__yearly_steam_plants_sched402": "plants_steam_ferc1", + "out_ferc1__yearly_steam_plants_fuel_sched402": "fuel_ferc1", + "out_ferc1__yearly_steam_plants_fuel_by_plant_sched402": "fbp_ferc1", + "_out_ferc1__yearly_small_plants_sched410": "plants_small_ferc1", + "_out_ferc1__yearly_hydroelectric_plants_sched406": "plants_hydro_ferc1", + "_out_ferc1__yearly_pumped_storage_plants_sched408": "plants_pumped_storage_ferc1", + "out_ferc1__yearly_purchased_power_and_exchanges_sched326": "purchased_power_ferc1", + "out_ferc1__yearly_plant_in_service_sched204": "plant_in_service_ferc1", "out_ferc1__yearly_all_plants": "plants_all_ferc1", # denorm_eia (data comes from multiple EIA forms) "out_eia__yearly_plants": "plants_eia860", @@ -221,7 +221,7 @@ def _register_output_methods(self: Self): # plant parts "out_eia__yearly_generators_by_ownership": "gens_mega_eia", "out_eia__yearly_plant_parts": "plant_parts_eia", - "out__yearly_plants_all_ferc1_plant_parts_eia": "ferc1_eia", + "out_pudl__yearly_assn_eia_ferc1_plant_parts": "ferc1_eia", } table_method_map_any_agg = { diff --git a/src/pudl/package_data/ferc1/xbrl_calculation_component_fixes.csv b/src/pudl/package_data/ferc1/xbrl_calculation_component_fixes.csv index 3c95b6f6d8..e8074480d9 100644 --- a/src/pudl/package_data/ferc1/xbrl_calculation_component_fixes.csv +++ b/src/pudl/package_data/ferc1/xbrl_calculation_component_fixes.csv @@ -1,148 +1,148 @@ table_name_parent,xbrl_factoid_parent,table_name,xbrl_factoid,weight,utility_type,plant_function,plant_status -core_ferc1__yearly_balance_sheet_assets,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary,abandonment_of_leases,,,, -core_ferc1__yearly_balance_sheet_assets,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,1.0,total,, -core_ferc1__yearly_balance_sheet_assets,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary,amortization_of_other_utility_plant_utility_plant_in_service,,,, -core_ferc1__yearly_balance_sheet_assets,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary,amortization_of_plant_acquisition_adjustment,,,, -core_ferc1__yearly_balance_sheet_assets,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary,depreciation_amortization_and_depletion_utility_plant_in_service,,,, -core_ferc1__yearly_balance_sheet_assets,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary,depreciation_amortization_and_depletion_utility_plant_leased_to_others,,,, -core_ferc1__yearly_balance_sheet_assets,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary,depreciation_and_amortization_utility_plant_held_for_future_use,,,, -core_ferc1__yearly_balance_sheet_assets,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary,depreciation_utility_plant_in_service,,,, -core_ferc1__yearly_balance_sheet_assets,construction_work_in_progress,core_ferc1__yearly_utility_plant_summary,construction_work_in_progress,1.0,total,, -core_ferc1__yearly_balance_sheet_assets,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets,derivative_instrument_assets_hedges_long_term,,,, -core_ferc1__yearly_balance_sheet_assets,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets,derivative_instrument_assets_long_term,,,, -core_ferc1__yearly_balance_sheet_assets,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets,less_derivative_instrument_assets_hedges_long_term,-1.0,,, -core_ferc1__yearly_balance_sheet_assets,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets,less_derivative_instrument_assets_long_term,-1.0,,, -core_ferc1__yearly_balance_sheet_assets,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets,less_noncurrent_portion_of_allowances,-1.0,,, -core_ferc1__yearly_balance_sheet_assets,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets,noncurrent_portion_of_allowances,,,, -core_ferc1__yearly_balance_sheet_assets,deferred_debits,core_ferc1__yearly_balance_sheet_assets,preliminary_natural_gas_survey_and_investigation_charges,1.0,,, -core_ferc1__yearly_balance_sheet_assets,deferred_debits,core_ferc1__yearly_balance_sheet_assets,preliminary_natural_gas_and_other_survey_and_investigation_charges,1.0,,, -core_ferc1__yearly_balance_sheet_assets,nuclear_fuel_net,core_ferc1__yearly_balance_sheet_assets,nuclear_fuel,1.0,,, -core_ferc1__yearly_balance_sheet_assets,nuclear_fuel_net,nuclear_fuel_materials_ferc1,nuclear_fuel_materials_and_assemblies,,,, -core_ferc1__yearly_balance_sheet_assets,nuclear_fuel_net,nuclear_fuel_materials_ferc1,spent_nuclear_fuel,,,, -core_ferc1__yearly_balance_sheet_assets,other_property_and_investments,core_ferc1__yearly_balance_sheet_assets,special_funds_all,1.0,,, -core_ferc1__yearly_balance_sheet_assets,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_balance_sheet_assets,construction_work_in_progress,,,, -core_ferc1__yearly_balance_sheet_assets,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_balance_sheet_assets,utility_plant,,,, -core_ferc1__yearly_balance_sheet_assets,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_utility_plant_summary,utility_plant_acquisition_adjustment,,,, -core_ferc1__yearly_balance_sheet_assets,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_utility_plant_summary,utility_plant_and_construction_work_in_progress,1.0,total,, -core_ferc1__yearly_balance_sheet_assets,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_utility_plant_summary,utility_plant_held_for_future_use,,,, -core_ferc1__yearly_balance_sheet_assets,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_utility_plant_summary,utility_plant_in_service_classified_and_unclassified,,,, -core_ferc1__yearly_balance_sheet_assets,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_utility_plant_summary,utility_plant_leased_to_others,,,, -core_ferc1__yearly_balance_sheet_assets,utility_plant_net,core_ferc1__yearly_balance_sheet_assets,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,,,, -core_ferc1__yearly_balance_sheet_assets,utility_plant_net,core_ferc1__yearly_balance_sheet_assets,utility_plant_and_construction_work_in_progress,,,, -core_ferc1__yearly_balance_sheet_assets,utility_plant_net,core_ferc1__yearly_utility_plant_summary,utility_plant_net,1.0,total,, -core_ferc1__yearly_balance_sheet_liabilities,deferred_credits,core_ferc1__yearly_balance_sheet_liabilities,accumulated_deferred_income_taxes,1.0,,, -core_ferc1__yearly_balance_sheet_liabilities,retained_earnings,core_ferc1__yearly_retained_earnings,retained_earnings,1.0,,, -core_ferc1__yearly_balance_sheet_liabilities,current_and_accrued_liabilities,core_ferc1__yearly_balance_sheet_liabilities,long_term_portion_of_derivative_instrument_liabilities,,,, -core_ferc1__yearly_balance_sheet_liabilities,current_and_accrued_liabilities,core_ferc1__yearly_balance_sheet_liabilities,less_long_term_portion_of_derivative_instrument_liabilities,-1.0,,, -core_ferc1__yearly_balance_sheet_liabilities,current_and_accrued_liabilities,core_ferc1__yearly_balance_sheet_liabilities,long_term_portion_of_derivative_instrument_liabilities_hedges,,,, -core_ferc1__yearly_balance_sheet_liabilities,current_and_accrued_liabilities,core_ferc1__yearly_balance_sheet_liabilities,less_long_term_portion_of_derivative_instrument_liabilities_hedges,-1.0,,, -core_ferc1__yearly_electric_energy_sources,sources_of_energy,core_ferc1__yearly_electric_energy_sources,megawatt_hours_purchased,1.0,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_electric_operating_expenses,electric_expenses_hydraulic_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_electric_operating_expenses,hydraulic_expenses,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_electric_operating_expenses,maintenance_of_electric_plant_hydraulic_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_electric_operating_expenses,maintenance_of_miscellaneous_hydraulic_plant,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_electric_operating_expenses,maintenance_of_reservoirs_dams_and_waterways,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_electric_operating_expenses,maintenance_of_structures_hydraulic_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_electric_operating_expenses,maintenance_supervision_and_engineering_hydraulic_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_electric_operating_expenses,miscellaneous_hydraulic_power_generation_expenses,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_electric_operating_expenses,rents_hydraulic_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_electric_operating_expenses,water_for_power,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_plants_hydro,opex_operations,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_plants_pumped_storage,opex_operations,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_hydraulic_power,core_ferc1__yearly_plants_steam,opex_operations,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,allowances,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,coolants_and_water,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,electric_expenses_steam_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,fuel_steam_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,maintenance_of_boiler_plant_steam_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,maintenance_of_electric_plant_steam_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,maintenance_of_miscellaneous_steam_plant,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,maintenance_of_structures_steam_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,maintenance_supervision_and_engineering_steam_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,miscellaneous_steam_power_expenses,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,rents_steam_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,steam_expenses_steam_power_generation,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,steam_from_other_sources,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_electric_operating_expenses,steam_transferred_credit,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_plants_hydro,opex_operations,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_plants_pumped_storage,opex_operations,,,, -core_ferc1__yearly_electric_operating_expenses,power_production_expenses_steam_power,core_ferc1__yearly_plants_steam,opex_operations,,,, -core_ferc1__yearly_electric_operating_expenses,transmission_operation_expense,core_ferc1__yearly_electric_operating_expenses,load_dispatching_transmission_expense,1.0,,, -core_ferc1__yearly_electric_operating_revenues,other_operating_revenues,core_ferc1__yearly_electric_operating_revenues,forfeited_discounts,1.0,,, -core_ferc1__yearly_electric_operating_revenues,other_operating_revenues,core_ferc1__yearly_electric_operating_revenues,interdepartmental_rents,1.0,,, -core_ferc1__yearly_electric_operating_revenues,other_operating_revenues,core_ferc1__yearly_electric_operating_revenues,miscellaneous_revenue,1.0,,, -core_ferc1__yearly_electric_operating_revenues,other_operating_revenues,core_ferc1__yearly_electric_operating_revenues,miscellaneous_service_revenues,1.0,,, -core_ferc1__yearly_electric_operating_revenues,other_operating_revenues,core_ferc1__yearly_electric_operating_revenues,other_electric_revenue,1.0,,, -core_ferc1__yearly_electric_operating_revenues,other_operating_revenues,core_ferc1__yearly_electric_operating_revenues,other_miscellaneous_operating_revenues,1.0,,, -core_ferc1__yearly_electric_operating_revenues,other_operating_revenues,core_ferc1__yearly_electric_operating_revenues,regional_transmission_service_revenues,1.0,,, -core_ferc1__yearly_electric_operating_revenues,other_operating_revenues,core_ferc1__yearly_electric_operating_revenues,rent_from_electric_property,1.0,,, -core_ferc1__yearly_electric_operating_revenues,other_operating_revenues,core_ferc1__yearly_electric_operating_revenues,revenues_from_transmission_of_electricity_of_others,1.0,,, -core_ferc1__yearly_electric_operating_revenues,other_operating_revenues,core_ferc1__yearly_electric_operating_revenues,sales_of_water_and_water_power,1.0,,, -core_ferc1__yearly_electric_operating_revenues,sales_to_ultimate_consumers,core_ferc1__yearly_electric_operating_revenues,large_or_industrial,1.0,,, -core_ferc1__yearly_electric_operating_revenues,sales_to_ultimate_consumers,core_ferc1__yearly_electric_operating_revenues,small_or_commercial,1.0,,, -core_ferc1__yearly_electric_operating_revenues,sales_to_ultimate_consumers,core_ferc1__yearly_electricity_sales_by_rate_schedule,commercial_and_industrial,,,, -core_ferc1__yearly_electric_plant_depreciation_changes,ending_balance,core_ferc1__yearly_electric_plant_depreciation_changes,book_cost_of_asset_retirement_costs,1.0,,, -core_ferc1__yearly_electric_plant_depreciation_changes,ending_balance,core_ferc1__yearly_electric_plant_depreciation_changes,depreciation_provision,1.0,,, -core_ferc1__yearly_electric_plant_depreciation_changes,ending_balance,core_ferc1__yearly_electric_plant_depreciation_changes,net_charges_for_retired_plant,1.0,,, -core_ferc1__yearly_electric_plant_depreciation_changes,ending_balance,core_ferc1__yearly_electric_plant_depreciation_changes,other_adjustments_to_accumulated_depreciation,1.0,,, -core_ferc1__yearly_electric_plant_depreciation_changes,ending_balance,core_ferc1__yearly_electric_plant_depreciation_changes,starting_balance,1.0,,, -core_ferc1__yearly_income_statement,amortization_and_depletion_of_utility_plant,core_ferc1__yearly_depreciation_amortization_summary,amortization_limited_term_electric_plant,1.0,electric,total, -core_ferc1__yearly_income_statement,amortization_and_depletion_of_utility_plant,core_ferc1__yearly_depreciation_amortization_summary,amortization_other_electric_plant,1.0,electric,total, -core_ferc1__yearly_income_statement,depreciation_expense,core_ferc1__yearly_depreciation_amortization_summary,depreciation_expense,1.0,electric,total, -core_ferc1__yearly_income_statement,depreciation_expense_for_asset_retirement_costs,core_ferc1__yearly_depreciation_amortization_summary,depreciation_expense_asset_retirement,1.0,electric,total, -core_ferc1__yearly_income_statement,income_before_extraordinary_items,core_ferc1__yearly_income_statement,net_utility_operating_income,1.0,,, -core_ferc1__yearly_income_statement,maintenance_expense,core_ferc1__yearly_electric_operating_expenses,distribution_maintenance_expense_electric,1.0,electric,, -core_ferc1__yearly_income_statement,maintenance_expense,core_ferc1__yearly_electric_operating_expenses,hydraulic_power_generation_maintenance_expense,1.0,electric,, -core_ferc1__yearly_income_statement,maintenance_expense,core_ferc1__yearly_electric_operating_expenses,maintenance_of_general_plant,1.0,electric,, -core_ferc1__yearly_income_statement,maintenance_expense,core_ferc1__yearly_electric_operating_expenses,nuclear_power_generation_maintenance_expense,1.0,electric,, -core_ferc1__yearly_income_statement,maintenance_expense,core_ferc1__yearly_electric_operating_expenses,other_power_generation_maintenance_expense,1.0,electric,, -core_ferc1__yearly_income_statement,maintenance_expense,core_ferc1__yearly_electric_operating_expenses,regional_market_maintenance_expense,1.0,electric,, -core_ferc1__yearly_income_statement,maintenance_expense,core_ferc1__yearly_electric_operating_expenses,steam_power_generation_maintenance_expense,1.0,electric,, -core_ferc1__yearly_income_statement,maintenance_expense,core_ferc1__yearly_electric_operating_expenses,transmission_maintenance_expense_electric,1.0,electric,, -core_ferc1__yearly_income_statement,operating_revenues,core_ferc1__yearly_electric_operating_revenues,electric_operating_revenues,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,administrative_and_general_operation_expense,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,customer_account_expenses,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,customer_service_and_information_expenses,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,distribution_operation_expenses_electric,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,hydraulic_power_generation_operations_expense,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,nuclear_power_generation_operations_expense,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,other_power_generation_operations_expense,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,regional_market_operation_expense,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,sales_expenses,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,steam_power_generation_operations_expense,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,transmission_operation_expense,1.0,electric,, -core_ferc1__yearly_income_statement,operation_expense,core_ferc1__yearly_electric_operating_expenses,power_production_expenses,1.0,electric,, -core_ferc1__yearly_income_statement,other_income_deductions,core_ferc1__yearly_income_statement,miscellaneous_deductions,1.0,,, -core_ferc1__yearly_income_statement,taxes_on_other_income_and_deductions,core_ferc1__yearly_income_statement,investment_tax_credits,-1.0,,, -core_ferc1__yearly_plant_in_service,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service,distribution_plant,1.0,,, -core_ferc1__yearly_plant_in_service,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service,general_plant,1.0,,, -core_ferc1__yearly_plant_in_service,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service,intangible_plant,1.0,,, -core_ferc1__yearly_plant_in_service,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service,production_plant,1.0,,, -core_ferc1__yearly_plant_in_service,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service,transmission_and_market_operation_plant_regional_transmission_and_market_operation_plant,1.0,,, -core_ferc1__yearly_plant_in_service,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service,transmission_plant,1.0,,, -core_ferc1__yearly_retained_earnings,appropriated_retained_earnings_including_reserve_amortization,core_ferc1__yearly_retained_earnings,appropriated_retained_earnings,1.0,,, -core_ferc1__yearly_retained_earnings,appropriated_retained_earnings_including_reserve_amortization,core_ferc1__yearly_retained_earnings,appropriated_retained_earnings_amortization_reserve_federal,1.0,,, -core_ferc1__yearly_retained_earnings,retained_earnings,core_ferc1__yearly_retained_earnings,appropriated_retained_earnings_including_reserve_amortization,1.0,,, -core_ferc1__yearly_retained_earnings,retained_earnings,core_ferc1__yearly_retained_earnings,unappropriated_retained_earnings,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings,adjustments_to_retained_earnings_credit,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings,adjustments_to_retained_earnings_debit,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings,appropriations_of_retained_earnings,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings,balance_transferred_from_income,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings,dividends_declared_common_stock,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings,dividends_declared_preferred_stock,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings,transfers_from_unappropriated_undistributed_subsidiary_earnings,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings,unappropriated_retained_earnings_previous_year,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_undistributed_subsidiary_earnings,core_ferc1__yearly_retained_earnings,changes_unappropriated_undistributed_subsidiary_earnings_credits,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_undistributed_subsidiary_earnings,core_ferc1__yearly_retained_earnings,dividends_received,-1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_undistributed_subsidiary_earnings,core_ferc1__yearly_retained_earnings,equity_in_earnings_of_subsidiary_companies,1.0,,, -core_ferc1__yearly_retained_earnings,unappropriated_undistributed_subsidiary_earnings,core_ferc1__yearly_retained_earnings,unappropriated_undistributed_subsidiary_earnings_previous_year,1.0,,, -core_ferc1__yearly_balance_sheet_liabilities,unappropriated_undistributed_subsidiary_earnings,core_ferc1__yearly_retained_earnings,unappropriated_undistributed_subsidiary_earnings,1.0,,, -core_ferc1__yearly_utility_plant_summary,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary,depreciation_amortization_and_depletion_utility_plant_in_service,,,, -core_ferc1__yearly_utility_plant_summary,depreciation_utility_plant_in_service,core_ferc1__yearly_electric_plant_depreciation_functional,accumulated_depreciation,1.0,electric,total,in_service -core_ferc1__yearly_utility_plant_summary,utility_plant_in_service_classified_and_unclassified,core_ferc1__yearly_utility_plant_summary,utility_plant_in_service_classified,,,, -core_ferc1__yearly_utility_plant_summary,utility_plant_in_service_classified_and_unclassified,core_ferc1__yearly_utility_plant_summary,utility_plant_in_service_classified_and_property_under_capital_leases,1.0,,, -core_ferc1__yearly_utility_plant_summary,utility_plant_in_service_classified_and_unclassified,core_ferc1__yearly_utility_plant_summary,utility_plant_in_service_property_under_capital_leases,,,, -core_ferc1__yearly_utility_plant_summary,utility_plant_in_service_experimental_plant_unclassified,core_ferc1__yearly_plant_in_service,experimental_electric_plant_unclassified,1.0,electric,, -core_ferc1__yearly_utility_plant_summary,utility_plant_in_service_plant_purchased_or_sold,core_ferc1__yearly_plant_in_service,electric_plant_purchased,1.0,electric,, -core_ferc1__yearly_utility_plant_summary,utility_plant_in_service_plant_purchased_or_sold,core_ferc1__yearly_plant_in_service,electric_plant_sold,-1.0,electric,, -core_ferc1__yearly_utility_plant_summary,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_balance_sheet_assets,utility_plant,,,, \ No newline at end of file +core_ferc1__yearly_balance_sheet_assets_sched110,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary_sched200,abandonment_of_leases,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary_sched200,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,1.0,total,, +core_ferc1__yearly_balance_sheet_assets_sched110,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary_sched200,amortization_of_other_utility_plant_utility_plant_in_service,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary_sched200,amortization_of_plant_acquisition_adjustment,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary_sched200,depreciation_amortization_and_depletion_utility_plant_in_service,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary_sched200,depreciation_amortization_and_depletion_utility_plant_leased_to_others,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary_sched200,depreciation_and_amortization_utility_plant_held_for_future_use,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary_sched200,depreciation_utility_plant_in_service,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,construction_work_in_progress,core_ferc1__yearly_utility_plant_summary_sched200,construction_work_in_progress,1.0,total,, +core_ferc1__yearly_balance_sheet_assets_sched110,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets_sched110,derivative_instrument_assets_hedges_long_term,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets_sched110,derivative_instrument_assets_long_term,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets_sched110,less_derivative_instrument_assets_hedges_long_term,-1.0,,, +core_ferc1__yearly_balance_sheet_assets_sched110,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets_sched110,less_derivative_instrument_assets_long_term,-1.0,,, +core_ferc1__yearly_balance_sheet_assets_sched110,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets_sched110,less_noncurrent_portion_of_allowances,-1.0,,, +core_ferc1__yearly_balance_sheet_assets_sched110,current_and_accrued_assets,core_ferc1__yearly_balance_sheet_assets_sched110,noncurrent_portion_of_allowances,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,deferred_debits,core_ferc1__yearly_balance_sheet_assets_sched110,preliminary_natural_gas_survey_and_investigation_charges,1.0,,, +core_ferc1__yearly_balance_sheet_assets_sched110,deferred_debits,core_ferc1__yearly_balance_sheet_assets_sched110,preliminary_natural_gas_and_other_survey_and_investigation_charges,1.0,,, +core_ferc1__yearly_balance_sheet_assets_sched110,nuclear_fuel_net,core_ferc1__yearly_balance_sheet_assets_sched110,nuclear_fuel,1.0,,, +core_ferc1__yearly_balance_sheet_assets_sched110,nuclear_fuel_net,nuclear_fuel_materials_ferc1,nuclear_fuel_materials_and_assemblies,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,nuclear_fuel_net,nuclear_fuel_materials_ferc1,spent_nuclear_fuel,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,other_property_and_investments,core_ferc1__yearly_balance_sheet_assets_sched110,special_funds_all,1.0,,, +core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_balance_sheet_assets_sched110,construction_work_in_progress,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_acquisition_adjustment,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_and_construction_work_in_progress,1.0,total,, +core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_held_for_future_use,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_in_service_classified_and_unclassified,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_leased_to_others,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_net,core_ferc1__yearly_balance_sheet_assets_sched110,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_net,core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_and_construction_work_in_progress,,,, +core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant_net,core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_net,1.0,total,, +core_ferc1__yearly_balance_sheet_liabilities_sched110,deferred_credits,core_ferc1__yearly_balance_sheet_liabilities_sched110,accumulated_deferred_income_taxes,1.0,,, +core_ferc1__yearly_balance_sheet_liabilities_sched110,retained_earnings,core_ferc1__yearly_retained_earnings_sched118,retained_earnings,1.0,,, +core_ferc1__yearly_balance_sheet_liabilities_sched110,current_and_accrued_liabilities,core_ferc1__yearly_balance_sheet_liabilities_sched110,long_term_portion_of_derivative_instrument_liabilities,,,, +core_ferc1__yearly_balance_sheet_liabilities_sched110,current_and_accrued_liabilities,core_ferc1__yearly_balance_sheet_liabilities_sched110,less_long_term_portion_of_derivative_instrument_liabilities,-1.0,,, +core_ferc1__yearly_balance_sheet_liabilities_sched110,current_and_accrued_liabilities,core_ferc1__yearly_balance_sheet_liabilities_sched110,long_term_portion_of_derivative_instrument_liabilities_hedges,,,, +core_ferc1__yearly_balance_sheet_liabilities_sched110,current_and_accrued_liabilities,core_ferc1__yearly_balance_sheet_liabilities_sched110,less_long_term_portion_of_derivative_instrument_liabilities_hedges,-1.0,,, +core_ferc1__yearly_energy_sources_sched401,sources_of_energy,core_ferc1__yearly_energy_sources_sched401,megawatt_hours_purchased,1.0,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_operating_expenses_sched320,electric_expenses_hydraulic_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_operating_expenses_sched320,hydraulic_expenses,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_operating_expenses_sched320,maintenance_of_electric_plant_hydraulic_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_operating_expenses_sched320,maintenance_of_miscellaneous_hydraulic_plant,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_operating_expenses_sched320,maintenance_of_reservoirs_dams_and_waterways,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_operating_expenses_sched320,maintenance_of_structures_hydraulic_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_operating_expenses_sched320,maintenance_supervision_and_engineering_hydraulic_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_operating_expenses_sched320,miscellaneous_hydraulic_power_generation_expenses,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_operating_expenses_sched320,rents_hydraulic_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_operating_expenses_sched320,water_for_power,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_hydroelectric_plants_sched406,opex_operations,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_pumped_storage_plants_sched408,opex_operations,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_hydraulic_power,core_ferc1__yearly_steam_plants_sched402,opex_operations,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,allowances,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,coolants_and_water,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,electric_expenses_steam_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,fuel_steam_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,maintenance_of_boiler_plant_steam_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,maintenance_of_electric_plant_steam_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,maintenance_of_miscellaneous_steam_plant,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,maintenance_of_structures_steam_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,maintenance_supervision_and_engineering_steam_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,miscellaneous_steam_power_expenses,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,rents_steam_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,steam_expenses_steam_power_generation,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,steam_from_other_sources,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_operating_expenses_sched320,steam_transferred_credit,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_hydroelectric_plants_sched406,opex_operations,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_pumped_storage_plants_sched408,opex_operations,,,, +core_ferc1__yearly_operating_expenses_sched320,power_production_expenses_steam_power,core_ferc1__yearly_steam_plants_sched402,opex_operations,,,, +core_ferc1__yearly_operating_expenses_sched320,transmission_operation_expense,core_ferc1__yearly_operating_expenses_sched320,load_dispatching_transmission_expense,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,other_operating_revenues,core_ferc1__yearly_operating_revenues_sched300,forfeited_discounts,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,other_operating_revenues,core_ferc1__yearly_operating_revenues_sched300,interdepartmental_rents,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,other_operating_revenues,core_ferc1__yearly_operating_revenues_sched300,miscellaneous_revenue,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,other_operating_revenues,core_ferc1__yearly_operating_revenues_sched300,miscellaneous_service_revenues,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,other_operating_revenues,core_ferc1__yearly_operating_revenues_sched300,other_electric_revenue,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,other_operating_revenues,core_ferc1__yearly_operating_revenues_sched300,other_miscellaneous_operating_revenues,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,other_operating_revenues,core_ferc1__yearly_operating_revenues_sched300,regional_transmission_service_revenues,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,other_operating_revenues,core_ferc1__yearly_operating_revenues_sched300,rent_from_electric_property,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,other_operating_revenues,core_ferc1__yearly_operating_revenues_sched300,revenues_from_transmission_of_electricity_of_others,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,other_operating_revenues,core_ferc1__yearly_operating_revenues_sched300,sales_of_water_and_water_power,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,sales_to_ultimate_consumers,core_ferc1__yearly_operating_revenues_sched300,large_or_industrial,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,sales_to_ultimate_consumers,core_ferc1__yearly_operating_revenues_sched300,small_or_commercial,1.0,,, +core_ferc1__yearly_operating_revenues_sched300,sales_to_ultimate_consumers,core_ferc1__yearly_sales_by_rate_schedules_sched304,commercial_and_industrial,,,, +core_ferc1__yearly_depreciation_changes_sched219,ending_balance,core_ferc1__yearly_depreciation_changes_sched219,book_cost_of_asset_retirement_costs,1.0,,, +core_ferc1__yearly_depreciation_changes_sched219,ending_balance,core_ferc1__yearly_depreciation_changes_sched219,depreciation_provision,1.0,,, +core_ferc1__yearly_depreciation_changes_sched219,ending_balance,core_ferc1__yearly_depreciation_changes_sched219,net_charges_for_retired_plant,1.0,,, +core_ferc1__yearly_depreciation_changes_sched219,ending_balance,core_ferc1__yearly_depreciation_changes_sched219,other_adjustments_to_accumulated_depreciation,1.0,,, +core_ferc1__yearly_depreciation_changes_sched219,ending_balance,core_ferc1__yearly_depreciation_changes_sched219,starting_balance,1.0,,, +core_ferc1__yearly_income_statements_sched114,amortization_and_depletion_of_utility_plant,core_ferc1__yearly_depreciation_summary_sched336,amortization_limited_term_electric_plant,1.0,electric,total, +core_ferc1__yearly_income_statements_sched114,amortization_and_depletion_of_utility_plant,core_ferc1__yearly_depreciation_summary_sched336,amortization_other_electric_plant,1.0,electric,total, +core_ferc1__yearly_income_statements_sched114,depreciation_expense,core_ferc1__yearly_depreciation_summary_sched336,depreciation_expense,1.0,electric,total, +core_ferc1__yearly_income_statements_sched114,depreciation_expense_for_asset_retirement_costs,core_ferc1__yearly_depreciation_summary_sched336,depreciation_expense_asset_retirement,1.0,electric,total, +core_ferc1__yearly_income_statements_sched114,income_before_extraordinary_items,core_ferc1__yearly_income_statements_sched114,net_utility_operating_income,1.0,,, +core_ferc1__yearly_income_statements_sched114,maintenance_expense,core_ferc1__yearly_operating_expenses_sched320,distribution_maintenance_expense_electric,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,maintenance_expense,core_ferc1__yearly_operating_expenses_sched320,hydraulic_power_generation_maintenance_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,maintenance_expense,core_ferc1__yearly_operating_expenses_sched320,maintenance_of_general_plant,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,maintenance_expense,core_ferc1__yearly_operating_expenses_sched320,nuclear_power_generation_maintenance_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,maintenance_expense,core_ferc1__yearly_operating_expenses_sched320,other_power_generation_maintenance_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,maintenance_expense,core_ferc1__yearly_operating_expenses_sched320,regional_market_maintenance_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,maintenance_expense,core_ferc1__yearly_operating_expenses_sched320,steam_power_generation_maintenance_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,maintenance_expense,core_ferc1__yearly_operating_expenses_sched320,transmission_maintenance_expense_electric,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operating_revenues,core_ferc1__yearly_operating_revenues_sched300,electric_operating_revenues,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,administrative_and_general_operation_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,customer_account_expenses,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,customer_service_and_information_expenses,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,distribution_operation_expenses_electric,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,hydraulic_power_generation_operations_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,nuclear_power_generation_operations_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,other_power_generation_operations_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,regional_market_operation_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,sales_expenses,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,steam_power_generation_operations_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,transmission_operation_expense,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,operation_expense,core_ferc1__yearly_operating_expenses_sched320,power_production_expenses,1.0,electric,, +core_ferc1__yearly_income_statements_sched114,other_income_deductions,core_ferc1__yearly_income_statements_sched114,miscellaneous_deductions,1.0,,, +core_ferc1__yearly_income_statements_sched114,taxes_on_other_income_and_deductions,core_ferc1__yearly_income_statements_sched114,investment_tax_credits,-1.0,,, +core_ferc1__yearly_plant_in_service_sched204,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service_sched204,distribution_plant,1.0,,, +core_ferc1__yearly_plant_in_service_sched204,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service_sched204,general_plant,1.0,,, +core_ferc1__yearly_plant_in_service_sched204,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service_sched204,intangible_plant,1.0,,, +core_ferc1__yearly_plant_in_service_sched204,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service_sched204,production_plant,1.0,,, +core_ferc1__yearly_plant_in_service_sched204,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service_sched204,transmission_and_market_operation_plant_regional_transmission_and_market_operation_plant,1.0,,, +core_ferc1__yearly_plant_in_service_sched204,electric_plant_in_service_and_completed_construction_not_classified_electric,core_ferc1__yearly_plant_in_service_sched204,transmission_plant,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,appropriated_retained_earnings_including_reserve_amortization,core_ferc1__yearly_retained_earnings_sched118,appropriated_retained_earnings,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,appropriated_retained_earnings_including_reserve_amortization,core_ferc1__yearly_retained_earnings_sched118,appropriated_retained_earnings_amortization_reserve_federal,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,retained_earnings,core_ferc1__yearly_retained_earnings_sched118,appropriated_retained_earnings_including_reserve_amortization,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,retained_earnings,core_ferc1__yearly_retained_earnings_sched118,unappropriated_retained_earnings,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings_sched118,adjustments_to_retained_earnings_credit,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings_sched118,adjustments_to_retained_earnings_debit,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings_sched118,appropriations_of_retained_earnings,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings_sched118,balance_transferred_from_income,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings_sched118,dividends_declared_common_stock,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings_sched118,dividends_declared_preferred_stock,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings_sched118,transfers_from_unappropriated_undistributed_subsidiary_earnings,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_retained_earnings,core_ferc1__yearly_retained_earnings_sched118,unappropriated_retained_earnings_previous_year,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_undistributed_subsidiary_earnings,core_ferc1__yearly_retained_earnings_sched118,changes_unappropriated_undistributed_subsidiary_earnings_credits,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_undistributed_subsidiary_earnings,core_ferc1__yearly_retained_earnings_sched118,dividends_received,-1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_undistributed_subsidiary_earnings,core_ferc1__yearly_retained_earnings_sched118,equity_in_earnings_of_subsidiary_companies,1.0,,, +core_ferc1__yearly_retained_earnings_sched118,unappropriated_undistributed_subsidiary_earnings,core_ferc1__yearly_retained_earnings_sched118,unappropriated_undistributed_subsidiary_earnings_previous_year,1.0,,, +core_ferc1__yearly_balance_sheet_liabilities_sched110,unappropriated_undistributed_subsidiary_earnings,core_ferc1__yearly_retained_earnings_sched118,unappropriated_undistributed_subsidiary_earnings,1.0,,, +core_ferc1__yearly_utility_plant_summary_sched200,accumulated_provision_for_depreciation_amortization_and_depletion_of_plant_utility,core_ferc1__yearly_utility_plant_summary_sched200,depreciation_amortization_and_depletion_utility_plant_in_service,,,, +core_ferc1__yearly_utility_plant_summary_sched200,depreciation_utility_plant_in_service,core_ferc1__yearly_depreciation_by_function_sched219,accumulated_depreciation,1.0,electric,total,in_service +core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_in_service_classified_and_unclassified,core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_in_service_classified,,,, +core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_in_service_classified_and_unclassified,core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_in_service_classified_and_property_under_capital_leases,1.0,,, +core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_in_service_classified_and_unclassified,core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_in_service_property_under_capital_leases,,,, +core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_in_service_experimental_plant_unclassified,core_ferc1__yearly_plant_in_service_sched204,experimental_electric_plant_unclassified,1.0,electric,, +core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_in_service_plant_purchased_or_sold,core_ferc1__yearly_plant_in_service_sched204,electric_plant_purchased,1.0,electric,, +core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_in_service_plant_purchased_or_sold,core_ferc1__yearly_plant_in_service_sched204,electric_plant_sold,-1.0,electric,, +core_ferc1__yearly_utility_plant_summary_sched200,utility_plant_and_construction_work_in_progress,core_ferc1__yearly_balance_sheet_assets_sched110,utility_plant,,,, \ No newline at end of file diff --git a/src/pudl/package_data/glue/ferc1_eia_null.csv b/src/pudl/package_data/glue/eia_ferc1_null.csv similarity index 100% rename from src/pudl/package_data/glue/ferc1_eia_null.csv rename to src/pudl/package_data/glue/eia_ferc1_null.csv diff --git a/src/pudl/package_data/glue/ferc1_eia_one_to_many.csv b/src/pudl/package_data/glue/eia_ferc1_one_to_many.csv similarity index 100% rename from src/pudl/package_data/glue/ferc1_eia_one_to_many.csv rename to src/pudl/package_data/glue/eia_ferc1_one_to_many.csv diff --git a/src/pudl/package_data/glue/ferc1_eia_one_to_many_orig.csv b/src/pudl/package_data/glue/eia_ferc1_one_to_many_orig.csv similarity index 100% rename from src/pudl/package_data/glue/ferc1_eia_one_to_many_orig.csv rename to src/pudl/package_data/glue/eia_ferc1_one_to_many_orig.csv diff --git a/src/pudl/package_data/glue/ferc1_eia_train.csv b/src/pudl/package_data/glue/eia_ferc1_train.csv similarity index 100% rename from src/pudl/package_data/glue/ferc1_eia_train.csv rename to src/pudl/package_data/glue/eia_ferc1_train.csv diff --git a/src/pudl/transform/classes.py b/src/pudl/transform/classes.py index fd5911d66d..148a7d55ea 100644 --- a/src/pudl/transform/classes.py +++ b/src/pudl/transform/classes.py @@ -1082,7 +1082,7 @@ class AbstractTableTransformer(ABC): single dataframe. Since Python is lazy about enforcing types and interfaces you can get away with other kinds of arguments when they're sometimes necessary, but this isn't a good arrangement and we should figure out how to do it right. See the - :class:`pudl.transform.ferc1.PlantsSteamFerc1TableTransformer` class for an example. + :class:`pudl.transform.ferc1.SteamPlantsTableTransformer` class for an example. """ table_id: enum.Enum @@ -1171,7 +1171,7 @@ def transform_main(self, df: pd.DataFrame, **kwargs) -> pd.DataFrame: return a single dataframe, and that pattern is implemented in the :meth:`AbstractTableTransformer.transform` method. In cases where transforms take or return more than one dataframe, you will need to define a new transform - method within the child class. See :class:`PlantsSteamFerc1TableTransformer` + method within the child class. See :class:`SteamPlantsTableTransformer` as an example. """ ... diff --git a/src/pudl/transform/ferc1.py b/src/pudl/transform/ferc1.py index 4c15679c62..ea73a590db 100644 --- a/src/pudl/transform/ferc1.py +++ b/src/pudl/transform/ferc1.py @@ -132,40 +132,32 @@ class TableIdFerc1(enum.Enum): Package. But this works for now. """ - FUEL_FERC1 = "core_ferc1__yearly_fuel" - PLANTS_STEAM_FERC1 = "core_ferc1__yearly_plants_steam" - PLANTS_HYDRO_FERC1 = "core_ferc1__yearly_plants_hydro" - PLANTS_SMALL_FERC1 = "core_ferc1__yearly_plants_small" - PLANTS_PUMPED_STORAGE_FERC1 = "core_ferc1__yearly_plants_pumped_storage" - PLANT_IN_SERVICE_FERC1 = "core_ferc1__yearly_plant_in_service" - PURCHASED_POWER_FERC1 = "core_ferc1__yearly_purchased_power" - TRANSMISSION_STATISTICS_FERC1 = "core_ferc1__yearly_transmission_statistics" - ELECTRIC_ENERGY_SOURCES_FERC1 = "core_ferc1__yearly_electric_energy_sources" - ELECTRIC_ENERGY_DISPOSITIONS_FERC1 = ( - "core_ferc1__yearly_electric_energy_dispositions" + STEAM_PLANTS_FUEL = "core_ferc1__yearly_steam_plants_fuel_sched402" + STEAM_PLANTS = "core_ferc1__yearly_steam_plants_sched402" + HYDROELECTRIC_PLANTS = "core_ferc1__yearly_hydroelectric_plants_sched406" + SMALL_PLANTS = "core_ferc1__yearly_small_plants_sched410" + PUMPED_STORAGE_PLANTS = "core_ferc1__yearly_pumped_storage_plants_sched408" + PLANT_IN_SERVICE = "core_ferc1__yearly_plant_in_service_sched204" + PURCHASED_POWER_AND_EXCHANGES = ( + "core_ferc1__yearly_purchased_power_and_exchanges_sched326" ) - UTILITY_PLANT_SUMMARY_FERC1 = "core_ferc1__yearly_utility_plant_summary" - ELECTRIC_OPERATING_EXPENSES_FERC1 = "core_ferc1__yearly_electric_operating_expenses" - BALANCE_SHEET_LIABILITIES = "core_ferc1__yearly_balance_sheet_liabilities" - DEPRECIATION_AMORTIZATION_SUMMARY_FERC1 = ( - "core_ferc1__yearly_depreciation_amortization_summary" - ) - BALANCE_SHEET_ASSETS_FERC1 = "core_ferc1__yearly_balance_sheet_assets" - RETAINED_EARNINGS_FERC1 = "core_ferc1__yearly_retained_earnings" - INCOME_STATEMENT_FERC1 = "core_ferc1__yearly_income_statement" - ELECTRIC_PLANT_DEPRECIATION_CHANGES_FERC1 = ( - "core_ferc1__yearly_electric_plant_depreciation_changes" - ) - ELECTRIC_OPERATING_REVENUES_FERC1 = "core_ferc1__yearly_electric_operating_revenues" - ELECTRIC_PLANT_DEPRECIATION_FUNCTIONAL_FERC1 = ( - "core_ferc1__yearly_electric_plant_depreciation_functional" - ) - CASH_FLOW_FERC1 = "core_ferc1__yearly_cash_flow" - ELECTRICITY_SALES_BY_RATE_SCHEDULE_FERC1 = ( - "core_ferc1__yearly_electricity_sales_by_rate_schedule" - ) - OTHER_REGULATORY_LIABILITIES_FERC1 = ( - "core_ferc1__yearly_other_regulatory_liabilities" + TRANSMISSION_LINES = "core_ferc1__yearly_transmission_lines_sched422" + ENERGY_SOURCES = "core_ferc1__yearly_energy_sources_sched401" + ENERGY_DISPOSITIONS = "core_ferc1__yearly_energy_dispositions_sched401" + UTILITY_PLANT_SUMMARY = "core_ferc1__yearly_utility_plant_summary_sched200" + OPERATING_EXPENSES = "core_ferc1__yearly_operating_expenses_sched320" + BALANCE_SHEET_LIABILITIES = "core_ferc1__yearly_balance_sheet_liabilities_sched110" + DEPRECIATION_SUMMARY = "core_ferc1__yearly_depreciation_summary_sched336" + BALANCE_SHEET_ASSETS = "core_ferc1__yearly_balance_sheet_assets_sched110" + RETAINED_EARNINGS = "core_ferc1__yearly_retained_earnings_sched118" + INCOME_STATEMENTS = "core_ferc1__yearly_income_statements_sched114" + DEPRECIATION_CHANGES = "core_ferc1__yearly_depreciation_changes_sched219" + OPERATING_REVENUES = "core_ferc1__yearly_operating_revenues_sched300" + DEPRECIATION_BY_FUNCTION = "core_ferc1__yearly_depreciation_by_function_sched219" + CASH_FLOWS = "core_ferc1__yearly_cash_flows_sched120" + SALES_BY_RATE_SCHEDULES = "core_ferc1__yearly_sales_by_rate_schedules_sched304" + OTHER_REGULATORY_LIABILITIES = ( + "core_ferc1__yearly_other_regulatory_liabilities_sched278" ) @@ -292,7 +284,7 @@ def wide_to_tidy(df: pd.DataFrame, params: WideToTidy) -> pd.DataFrame: required for that aggregation are added later. For table that have a internal relationship between the values in the - ``params.value_types``, such as the :ref:`core_ferc1__yearly_plant_in_service` table, this also + ``params.value_types``, such as the :ref:`core_ferc1__yearly_plant_in_service_sched204` table, this also enables aggregation across columns to calculate the ending balance based on the starting balance and all of the reported changes. """ @@ -2857,11 +2849,11 @@ def reconcile_table_calculations( return df -class FuelFerc1TableTransformer(Ferc1AbstractTableTransformer): - """A table transformer specific to the :ref:`core_ferc1__yearly_fuel` table. +class SteamPlantsFuelTableTransformer(Ferc1AbstractTableTransformer): + """A table transformer specific to the :ref:`core_ferc1__yearly_steam_plants_fuel_sched402` table. - The :ref:`core_ferc1__yearly_fuel` table reports data about fuel consumed by large thermal power - plants in the :ref:`core_ferc1__yearly_plants_steam` table. Each record in the steam table is + The :ref:`core_ferc1__yearly_steam_plants_fuel_sched402` table reports data about fuel consumed by large thermal power + plants in the :ref:`core_ferc1__yearly_steam_plants_sched402` table. Each record in the steam table is typically associated with several records in the fuel table, with each fuel record reporting data for a particular type of fuel consumed by that plant over the course of a year. The fuel table presents several challenges. @@ -2913,11 +2905,11 @@ class FuelFerc1TableTransformer(Ferc1AbstractTableTransformer): * gas: reported in a mix of MMBTU/cubic foot, and MMBTU/thousand cubic feet. """ - table_id: TableIdFerc1 = TableIdFerc1.FUEL_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.STEAM_PLANTS_FUEL @cache_df(key="main") def transform_main(self, df: pd.DataFrame) -> pd.DataFrame: - """Table specific transforms for core_ferc1__yearly_fuel. + """Table specific transforms for core_ferc1__yearly_steam_plants_fuel_sched402. Args: df: Pre-processed, concatenated XBRL and DBF data. @@ -2955,7 +2947,7 @@ def process_dbf(self, raw_dbf: pd.DataFrame) -> pd.DataFrame: def process_xbrl( self, raw_xbrl_instant: pd.DataFrame, raw_xbrl_duration: pd.DataFrame ) -> pd.DataFrame: - """Special pre-concat treatment of the :ref:`core_ferc1__yearly_fuel` table. + """Special pre-concat treatment of the :ref:`core_ferc1__yearly_steam_plants_fuel_sched402` table. We have to do most of the transformation before the DBF and XBRL data have been concatenated because the fuel type column is part of the primary key and it is @@ -3165,7 +3157,7 @@ def drop_total_rows(self, df: pd.DataFrame) -> pd.DataFrame: * have no identifiable fuel units * DO report a value for MMBTU / MWh (heat rate) - In the case of the core_ferc1__yearly_fuel table, we drop any row where all the data columns + In the case of the core_ferc1__yearly_steam_plants_fuel_sched402 table, we drop any row where all the data columns are null AND there's a non-null value in the ``fuel_mmbtu_per_mwh`` column, as it typically indicates a "total" row for a plant. We also require a null value for the fuel_units and an "other" value for the fuel type. @@ -3198,34 +3190,34 @@ def drop_invalid_rows( This method both drops rows in which all required data columns are null (using the inherited parameterized method) and then also drops those rows we believe - represent plant totals. See :meth:`FuelFerc1TableTransformer.drop_total_rows`. + represent plant totals. See :meth:`SteamPlantsFuelTableTransformer.drop_total_rows`. """ return super().drop_invalid_rows(df, params).pipe(self.drop_total_rows) -class PlantsSteamFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for the :ref:`core_ferc1__yearly_plants_steam` table.""" +class SteamPlantsTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for the :ref:`core_ferc1__yearly_steam_plants_sched402` table.""" - table_id: TableIdFerc1 = TableIdFerc1.PLANTS_STEAM_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.STEAM_PLANTS @cache_df(key="main") def transform_main( self, df: pd.DataFrame, transformed_fuel: pd.DataFrame ) -> pd.DataFrame: - """Perform table transformations for the :ref:`core_ferc1__yearly_plants_steam` table. + """Perform table transformations for the :ref:`core_ferc1__yearly_steam_plants_sched402` table. Note that this method has a non-standard call signature, since the - :ref:`core_ferc1__yearly_plants_steam` table depends on the :ref:`core_ferc1__yearly_fuel` table. + :ref:`core_ferc1__yearly_steam_plants_sched402` table depends on the :ref:`core_ferc1__yearly_steam_plants_fuel_sched402` table. Args: df: The pre-processed steam plants table. - transformed_fuel: The fully transformed :ref:`core_ferc1__yearly_fuel` table. This is + transformed_fuel: The fully transformed :ref:`core_ferc1__yearly_steam_plants_fuel_sched402` table. This is required because fuel consumption information is used to help link steam plant records together across years using :func:`plants_steam_assign_plant_ids` """ fuel_categories = list( - FuelFerc1TableTransformer() + SteamPlantsFuelTableTransformer() .params.categorize_strings["fuel_type_code_pudl"] .categories.keys() ) @@ -3273,10 +3265,10 @@ def transform( return df -class PlantsHydroFerc1TableTransformer(Ferc1AbstractTableTransformer): - """A table transformer specific to the :ref:`core_ferc1__yearly_plants_hydro` table.""" +class HydroelectricPlantsTableTransformer(Ferc1AbstractTableTransformer): + """A table transformer specific to the :ref:`core_ferc1__yearly_hydroelectric_plants_sched406` table.""" - table_id: TableIdFerc1 = TableIdFerc1.PLANTS_HYDRO_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.HYDROELECTRIC_PLANTS def transform_main(self, df): """Add bespoke removal of duplicate record after standard transform_main.""" @@ -3320,14 +3312,14 @@ def targeted_drop_duplicates(self, df): return df -class PlantsPumpedStorageFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_plants_pumped_storage` table.""" +class PumpedStoragePlantsTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_pumped_storage_plants_sched408` table.""" - table_id: TableIdFerc1 = TableIdFerc1.PLANTS_PUMPED_STORAGE_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.PUMPED_STORAGE_PLANTS -class PurchasedPowerFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_purchased_power` table. +class PurchasedPowerAndExchangesTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_purchased_power_and_exchanges_sched326`. This table has data about inter-utility power purchases into the PUDL DB. This includes how much electricty was purchased, how much it cost, and who it was @@ -3337,13 +3329,13 @@ class PurchasedPowerFerc1TableTransformer(Ferc1AbstractTableTransformer): eventually. """ - table_id: TableIdFerc1 = TableIdFerc1.PURCHASED_POWER_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.PURCHASED_POWER_AND_EXCHANGES -class PlantInServiceFerc1TableTransformer(Ferc1AbstractTableTransformer): - """A transformer for the :ref:`core_ferc1__yearly_plant_in_service` table.""" +class PlantInServiceTableTransformer(Ferc1AbstractTableTransformer): + """A transformer for the :ref:`core_ferc1__yearly_plant_in_service_sched204` table.""" - table_id: TableIdFerc1 = TableIdFerc1.PLANT_IN_SERVICE_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.PLANT_IN_SERVICE has_unique_record_ids: bool = False @cache_df("process_xbrl_metadata") @@ -3519,14 +3511,14 @@ def transform_main(self, df: pd.DataFrame) -> pd.DataFrame: return df.assign(utility_type="electric") -class PlantsSmallFerc1TableTransformer(Ferc1AbstractTableTransformer): - """A table transformer specific to the :ref:`core_ferc1__yearly_plants_small` table.""" +class SmallPlantsTableTransformer(Ferc1AbstractTableTransformer): + """A table transformer specific to the :ref:`core_ferc1__yearly_small_plants_sched410` table.""" - table_id: TableIdFerc1 = TableIdFerc1.PLANTS_SMALL_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.SMALL_PLANTS @cache_df(key="main") def transform_main(self, df: pd.DataFrame) -> pd.DataFrame: - """Table specific transforms for core_ferc1__yearly_plants_small. + """Table specific transforms for core_ferc1__yearly_small_plants_sched410. Params: df: Pre-processed, concatenated XBRL and DBF data. @@ -4438,10 +4430,10 @@ def spot_fix_rows(self, df: pd.DataFrame) -> pd.DataFrame: return df -class TransmissionStatisticsFerc1TableTransformer(Ferc1AbstractTableTransformer): - """A table transformer for the :ref:`core_ferc1__yearly_transmission_statistics` table.""" +class TransmissionLinesTableTransformer(Ferc1AbstractTableTransformer): + """A table transformer for the :ref:`core_ferc1__yearly_transmission_lines_sched422` table.""" - table_id: TableIdFerc1 = TableIdFerc1.TRANSMISSION_STATISTICS_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.TRANSMISSION_LINES has_unique_record_ids: bool = False def transform_main(self: Self, df: pd.DataFrame) -> pd.DataFrame: @@ -4450,8 +4442,8 @@ def transform_main(self: Self, df: pd.DataFrame) -> pd.DataFrame: return super().transform_main(df) -class ElectricEnergySourcesFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_electric_energy_sources` table. +class EnergySourcesTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_energy_sources_sched401` table. The raw DBF and XBRL table will be split up into two tables. This transformer generates the sources of electricity for utilities, dropping the information about @@ -4460,7 +4452,7 @@ class ElectricEnergySourcesFerc1TableTransformer(Ferc1AbstractTableTransformer): anything with the sign. """ - table_id: TableIdFerc1 = TableIdFerc1.ELECTRIC_ENERGY_SOURCES_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.ENERGY_SOURCES has_unique_record_ids: bool = False def convert_xbrl_metadata_json_to_df( @@ -4489,17 +4481,17 @@ def convert_xbrl_metadata_json_to_df( return pd.concat([tbl_meta, new_facts]) -class ElectricEnergyDispositionsFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_electric_energy_dispositions` table.""" +class EnergyDispositionsTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_energy_dispositions_sched401` table.""" - table_id: TableIdFerc1 = TableIdFerc1.ELECTRIC_ENERGY_DISPOSITIONS_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.ENERGY_DISPOSITIONS has_unique_record_ids: bool = False -class UtilityPlantSummaryFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_utility_plant_summary` table.""" +class UtilityPlantSummaryTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_utility_plant_summary_sched200` table.""" - table_id: TableIdFerc1 = TableIdFerc1.UTILITY_PLANT_SUMMARY_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.UTILITY_PLANT_SUMMARY has_unique_record_ids: bool = False def process_xbrl( @@ -4563,15 +4555,15 @@ def transform_main(self: Self, df: pd.DataFrame) -> pd.DataFrame: return df def aggregated_xbrl_factoids(self: Self, df: pd.DataFrame) -> pd.DataFrame: - """Aggregate xbrl_factoids records for linking to :ref:`core_ferc1__yearly_plant_in_service`. + """Aggregate xbrl_factoids records for linking to :ref:`core_ferc1__yearly_plant_in_service_sched204`. This table has two ``xbrl_factoid`` which can be linked via calcuations to one - ``xbrl_factoid`` in the :ref:`core_ferc1__yearly_plant_in_service`. + ``xbrl_factoid`` in the :ref:`core_ferc1__yearly_plant_in_service_sched204`. Doing this 2:1 linkage would be fine in theory. But the - :ref:`core_ferc1__yearly_plant_in_service` is in most senses + :ref:`core_ferc1__yearly_plant_in_service_sched204` is in most senses the table with the more details and of our desire to build tree-link relationships between factoids, we need to build a new factoid to link in a 1:1 - manner between this table and the :ref:`core_ferc1__yearly_plant_in_service`. + manner between this table and the :ref:`core_ferc1__yearly_plant_in_service_sched204`. We'll also add this factoid into the metadata via :meth:`process_xbrl_metadata` and add the linking calculation via :meth:`apply_xbrl_calculation_fixes`. @@ -4751,8 +4743,8 @@ def spot_fix_bad_signs(self: Self, df: pd.DataFrame) -> pd.DataFrame: return apply_pudl_dtypes(df, group="ferc1") -class BalanceSheetLiabilitiesFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_balance_sheet_liabilities` table.""" +class BalanceSheetLiabilitiesTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_balance_sheet_liabilities_sched110` table.""" table_id: TableIdFerc1 = TableIdFerc1.BALANCE_SHEET_LIABILITIES has_unique_record_ids: bool = False @@ -4828,10 +4820,10 @@ def convert_xbrl_metadata_json_to_df( return pd.concat([tbl_meta, new_facts, duplicated_facts]).reset_index(drop=True) -class BalanceSheetAssetsFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_balance_sheet_assets` table.""" +class BalanceSheetAssetsTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_balance_sheet_assets_sched110` table.""" - table_id: TableIdFerc1 = TableIdFerc1.BALANCE_SHEET_ASSETS_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.BALANCE_SHEET_ASSETS has_unique_record_ids: bool = False @cache_df(key="main") @@ -4909,10 +4901,10 @@ def convert_xbrl_metadata_json_to_df( return pd.concat([tbl_meta, new_facts, duplicated_facts]) -class IncomeStatementFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for the :ref:`core_ferc1__yearly_income_statement` table.""" +class IncomeStatementsTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for the :ref:`core_ferc1__yearly_income_statements_sched114` table.""" - table_id: TableIdFerc1 = TableIdFerc1.INCOME_STATEMENT_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.INCOME_STATEMENTS has_unique_record_ids: bool = False def convert_xbrl_metadata_json_to_df( @@ -4989,10 +4981,10 @@ def transform_main(self: Self, df: pd.DataFrame) -> pd.DataFrame: return apply_pudl_dtypes(df, group="ferc1") -class RetainedEarningsFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_retained_earnings` table.""" +class RetainedEarningsTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_retained_earnings_sched118` table.""" - table_id: TableIdFerc1 = TableIdFerc1.RETAINED_EARNINGS_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.RETAINED_EARNINGS has_unique_record_ids: bool = False current_year_types: set[str] = { @@ -5341,7 +5333,7 @@ def deduplicate_xbrl_factoid_xbrl_metadata(self, tbl_meta) -> pd.DataFrame: column. Note: This is **almost** the same as the method for - :ref:`core_ferc1__yearly_electric_operating_revenues`. If we wanted to lean into this + :ref:`core_ferc1__yearly_operating_revenues_sched300`. If we wanted to lean into this version of deduplication more generally this might be a fine way start to an abstraction, but ideally we wouldn't need to dedupe this at all and instead enable metadata for every value column from :meth:`wide_to_tidy`. @@ -5367,12 +5359,10 @@ def deduplicate_xbrl_factoid_xbrl_metadata(self, tbl_meta) -> pd.DataFrame: return tbl_meta_cleaned -class DepreciationAmortizationSummaryFerc1TableTransformer( - Ferc1AbstractTableTransformer -): - """Transformer class for :ref:`core_ferc1__yearly_depreciation_amortization_summary` table.""" +class DepreciationSummaryTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_depreciation_summary_sched336` table.""" - table_id: TableIdFerc1 = TableIdFerc1.DEPRECIATION_AMORTIZATION_SUMMARY_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.DEPRECIATION_SUMMARY has_unique_record_ids: bool = False @cache_df("process_xbrl_metadata") @@ -5414,12 +5404,10 @@ def transform_main(self, df): return df -class ElectricPlantDepreciationChangesFerc1TableTransformer( - Ferc1AbstractTableTransformer -): - """Transformer class for :ref:`core_ferc1__yearly_electric_plant_depreciation_changes` table.""" +class DepreciationChangesTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_depreciation_changes_sched219` table.""" - table_id: TableIdFerc1 = TableIdFerc1.ELECTRIC_PLANT_DEPRECIATION_CHANGES_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.DEPRECIATION_CHANGES has_unique_record_ids: bool = False def convert_xbrl_metadata_json_to_df( @@ -5483,12 +5471,10 @@ def process_instant_xbrl(self, df: pd.DataFrame) -> pd.DataFrame: return df -class ElectricPlantDepreciationFunctionalFerc1TableTransformer( - Ferc1AbstractTableTransformer -): - """Transformer for :ref:`core_ferc1__yearly_electric_plant_depreciation_functional` table.""" +class DepreciationByFunctionTableTransformer(Ferc1AbstractTableTransformer): + """Transformer for :ref:`core_ferc1__yearly_depreciation_by_function_sched219` table.""" - table_id: TableIdFerc1 = TableIdFerc1.ELECTRIC_PLANT_DEPRECIATION_FUNCTIONAL_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.DEPRECIATION_BY_FUNCTION has_unique_record_ids: bool = False def convert_xbrl_metadata_json_to_df( @@ -5574,10 +5560,10 @@ def transform_main(self, df: pd.DataFrame) -> pd.DataFrame: return df -class ElectricOperatingExpensesFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_electric_operating_expenses` table.""" +class OperatingExpensesTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_operating_expenses_sched320` table.""" - table_id: TableIdFerc1 = TableIdFerc1.ELECTRIC_OPERATING_EXPENSES_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.OPERATING_EXPENSES has_unique_record_ids: bool = False def targeted_drop_duplicates_dbf(self, raw_df: pd.DataFrame) -> pd.DataFrame: @@ -5632,10 +5618,10 @@ def transform_main(self, df): return super().transform_main(df).assign(utility_type="electric") -class ElectricOperatingRevenuesFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_electric_operating_revenues` table.""" +class OperatingRevenuesTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_operating_revenues_sched300` table.""" - table_id: TableIdFerc1 = TableIdFerc1.ELECTRIC_OPERATING_REVENUES_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.OPERATING_REVENUES has_unique_record_ids: bool = False def deduplicate_xbrl_factoid_xbrl_metadata( @@ -5708,10 +5694,10 @@ def targeted_drop_duplicates(self, df): return df[~dupe_mask].copy() -class CashFlowFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transform class for :ref:`core_ferc1__yearly_cash_flow` table.""" +class CashFlowsTableTransformer(Ferc1AbstractTableTransformer): + """Transform class for :ref:`core_ferc1__yearly_cash_flows_sched120` table.""" - table_id: TableIdFerc1 = TableIdFerc1.CASH_FLOW_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.CASH_FLOWS has_unique_record_ids: bool = False @cache_df("process_instant_xbrl") @@ -5814,12 +5800,10 @@ def convert_xbrl_metadata_json_to_df( return pd.concat([meta, ending_balance]) -class ElectricitySalesByRateScheduleFerc1TableTransformer( - Ferc1AbstractTableTransformer -): - """Transform class for :ref:`core_ferc1__yearly_electricity_sales_by_rate_schedule` table.""" +class SalesByRateSchedulesTableTransformer(Ferc1AbstractTableTransformer): + """Transform class for :ref:`core_ferc1__yearly_sales_by_rate_schedules_sched304` table.""" - table_id: TableIdFerc1 = TableIdFerc1.ELECTRICITY_SALES_BY_RATE_SCHEDULE_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.SALES_BY_RATE_SCHEDULES has_unique_record_ids: bool = False def add_axis_to_total_table_rows(self, df: pd.DataFrame): @@ -5872,37 +5856,37 @@ def process_xbrl( ) -class OtherRegulatoryLiabilitiesFerc1TableTransformer(Ferc1AbstractTableTransformer): - """Transformer class for :ref:`core_ferc1__yearly_other_regulatory_liabilities` table.""" +class OtherRegulatoryLiabilitiesTableTransformer(Ferc1AbstractTableTransformer): + """Transformer class for :ref:`core_ferc1__yearly_other_regulatory_liabilities_sched278` table.""" - table_id: TableIdFerc1 = TableIdFerc1.OTHER_REGULATORY_LIABILITIES_FERC1 + table_id: TableIdFerc1 = TableIdFerc1.OTHER_REGULATORY_LIABILITIES has_unique_record_ids = False FERC1_TFR_CLASSES: Mapping[str, type[Ferc1AbstractTableTransformer]] = { - "core_ferc1__yearly_fuel": FuelFerc1TableTransformer, - "core_ferc1__yearly_plants_steam": PlantsSteamFerc1TableTransformer, - "core_ferc1__yearly_plants_small": PlantsSmallFerc1TableTransformer, - "core_ferc1__yearly_plants_hydro": PlantsHydroFerc1TableTransformer, - "core_ferc1__yearly_plant_in_service": PlantInServiceFerc1TableTransformer, - "core_ferc1__yearly_plants_pumped_storage": PlantsPumpedStorageFerc1TableTransformer, - "core_ferc1__yearly_transmission_statistics": TransmissionStatisticsFerc1TableTransformer, - "core_ferc1__yearly_purchased_power": PurchasedPowerFerc1TableTransformer, - "core_ferc1__yearly_electric_energy_sources": ElectricEnergySourcesFerc1TableTransformer, - "core_ferc1__yearly_electric_energy_dispositions": ElectricEnergyDispositionsFerc1TableTransformer, - "core_ferc1__yearly_utility_plant_summary": UtilityPlantSummaryFerc1TableTransformer, - "core_ferc1__yearly_electric_operating_expenses": ElectricOperatingExpensesFerc1TableTransformer, - "core_ferc1__yearly_balance_sheet_liabilities": BalanceSheetLiabilitiesFerc1TableTransformer, - "core_ferc1__yearly_depreciation_amortization_summary": DepreciationAmortizationSummaryFerc1TableTransformer, - "core_ferc1__yearly_balance_sheet_assets": BalanceSheetAssetsFerc1TableTransformer, - "core_ferc1__yearly_income_statement": IncomeStatementFerc1TableTransformer, - "core_ferc1__yearly_electric_plant_depreciation_changes": ElectricPlantDepreciationChangesFerc1TableTransformer, - "core_ferc1__yearly_electric_plant_depreciation_functional": ElectricPlantDepreciationFunctionalFerc1TableTransformer, - "core_ferc1__yearly_retained_earnings": RetainedEarningsFerc1TableTransformer, - "core_ferc1__yearly_electric_operating_revenues": ElectricOperatingRevenuesFerc1TableTransformer, - "core_ferc1__yearly_cash_flow": CashFlowFerc1TableTransformer, - "core_ferc1__yearly_electricity_sales_by_rate_schedule": ElectricitySalesByRateScheduleFerc1TableTransformer, - "core_ferc1__yearly_other_regulatory_liabilities": OtherRegulatoryLiabilitiesFerc1TableTransformer, + "core_ferc1__yearly_steam_plants_fuel_sched402": SteamPlantsFuelTableTransformer, + "core_ferc1__yearly_steam_plants_sched402": SteamPlantsTableTransformer, + "core_ferc1__yearly_small_plants_sched410": SmallPlantsTableTransformer, + "core_ferc1__yearly_hydroelectric_plants_sched406": HydroelectricPlantsTableTransformer, + "core_ferc1__yearly_plant_in_service_sched204": PlantInServiceTableTransformer, + "core_ferc1__yearly_pumped_storage_plants_sched408": PumpedStoragePlantsTableTransformer, + "core_ferc1__yearly_transmission_lines_sched422": TransmissionLinesTableTransformer, + "core_ferc1__yearly_purchased_power_and_exchanges_sched326": PurchasedPowerAndExchangesTableTransformer, + "core_ferc1__yearly_energy_sources_sched401": EnergySourcesTableTransformer, + "core_ferc1__yearly_energy_dispositions_sched401": EnergyDispositionsTableTransformer, + "core_ferc1__yearly_utility_plant_summary_sched200": UtilityPlantSummaryTableTransformer, + "core_ferc1__yearly_operating_expenses_sched320": OperatingExpensesTableTransformer, + "core_ferc1__yearly_balance_sheet_liabilities_sched110": BalanceSheetLiabilitiesTableTransformer, + "core_ferc1__yearly_depreciation_summary_sched336": DepreciationSummaryTableTransformer, + "core_ferc1__yearly_balance_sheet_assets_sched110": BalanceSheetAssetsTableTransformer, + "core_ferc1__yearly_income_statements_sched114": IncomeStatementsTableTransformer, + "core_ferc1__yearly_depreciation_changes_sched219": DepreciationChangesTableTransformer, + "core_ferc1__yearly_depreciation_by_function_sched219": DepreciationByFunctionTableTransformer, + "core_ferc1__yearly_retained_earnings_sched118": RetainedEarningsTableTransformer, + "core_ferc1__yearly_operating_revenues_sched300": OperatingRevenuesTableTransformer, + "core_ferc1__yearly_cash_flows_sched120": CashFlowsTableTransformer, + "core_ferc1__yearly_sales_by_rate_schedules_sched304": SalesByRateSchedulesTableTransformer, + "core_ferc1__yearly_other_regulatory_liabilities_sched278": OtherRegulatoryLiabilitiesTableTransformer, } @@ -5918,7 +5902,7 @@ def ferc1_transform_asset_factory( This is a convenient way to create assets for tables that only depend on raw dbf, raw xbrl instant and duration tables and xbrl metadata. For tables with additional upstream dependencies, create a stand alone asset using an asset decorator. See - the core_ferc1__yearly_plants_steam asset. + the core_ferc1__yearly_steam_plants_sched402 asset. Args: table_name: The name of the table to create an asset for. @@ -6006,7 +5990,7 @@ def create_ferc1_transform_assets() -> list[AssetsDefinition]: for table_name, tfr_class in FERC1_TFR_CLASSES.items(): # Bespoke exception. fuel must come before steam b/c fuel proportions are used to # aid in FERC plant ID assignment. - if table_name != "core_ferc1__yearly_plants_steam": + if table_name != "core_ferc1__yearly_steam_plants_sched402": assets.append(ferc1_transform_asset_factory(table_name, tfr_class)) return assets @@ -6015,32 +5999,34 @@ def create_ferc1_transform_assets() -> list[AssetsDefinition]: @asset(io_manager_key="pudl_sqlite_io_manager") -def core_ferc1__yearly_plants_steam( +def core_ferc1__yearly_steam_plants_sched402( clean_xbrl_metadata_json: dict[str, dict[str, list[dict[str, Any]]]], raw_ferc1_dbf__f1_steam: pd.DataFrame, raw_ferc1_xbrl__steam_electric_generating_plant_statistics_large_plants_402_duration: pd.DataFrame, raw_ferc1_xbrl__steam_electric_generating_plant_statistics_large_plants_402_instant: pd.DataFrame, - core_ferc1__yearly_fuel: pd.DataFrame, + core_ferc1__yearly_steam_plants_fuel_sched402: pd.DataFrame, ) -> pd.DataFrame: - """Create the clean core_ferc1__yearly_plants_steam table. + """Create the clean core_ferc1__yearly_steam_plants_sched402 table. Args: clean_xbrl_metadata_json: XBRL metadata json for all tables. raw_ferc1_dbf__f1_steam: Raw f1_steam table. raw_ferc1_xbrl__steam_electric_generating_plant_statistics_large_plants_402_duration: raw XBRL duration table. raw_ferc1_xbrl__steam_electric_generating_plant_statistics_large_plants_402_instant: raw XBRL instant table. - core_ferc1__yearly_fuel: Transformed core_ferc1__yearly_fuel table. + core_ferc1__yearly_steam_plants_fuel_sched402: Transformed core_ferc1__yearly_steam_plants_fuel_sched402 table. Returns: - Clean core_ferc1__yearly_plants_steam table. + Clean core_ferc1__yearly_steam_plants_sched402 table. """ - df = PlantsSteamFerc1TableTransformer( - xbrl_metadata_json=clean_xbrl_metadata_json["core_ferc1__yearly_plants_steam"] + df = SteamPlantsTableTransformer( + xbrl_metadata_json=clean_xbrl_metadata_json[ + "core_ferc1__yearly_steam_plants_sched402" + ] ).transform( raw_dbf=raw_ferc1_dbf__f1_steam, raw_xbrl_instant=raw_ferc1_xbrl__steam_electric_generating_plant_statistics_large_plants_402_instant, raw_xbrl_duration=raw_ferc1_xbrl__steam_electric_generating_plant_statistics_large_plants_402_duration, - transformed_fuel=core_ferc1__yearly_fuel, + transformed_fuel=core_ferc1__yearly_steam_plants_fuel_sched402, ) return convert_cols_dtypes(df, data_source="ferc1") @@ -6091,7 +6077,7 @@ def table_dimensions_ferc1(**kwargs) -> pd.DataFrame: Compile a dataframe indicating what distinct values are observed in the data for each dimension column in association with each unique combination of ``table_name`` and ``xbrl_factoid``. E.g. for all factoids found in the - :ref:`core_ferc1__yearly_electric_plant_depreciation_functional` table, + :ref:`core_ferc1__yearly_depreciation_by_function_sched219` table, the only value observed for ``utility_type`` is ``electric`` and the values observed for ``plant_status`` include: ``future``, ``in_service``, ``leased`` and ``total``. @@ -6224,20 +6210,18 @@ def calculation_components_xbrl_ferc1(**kwargs) -> pd.DataFrame: ) check_for_calc_components_duplicates( calc_components, - table_names_known_dupes=[ - "core_ferc1__yearly_electricity_sales_by_rate_schedule" - ], + table_names_known_dupes=["core_ferc1__yearly_sales_by_rate_schedules_sched304"], idx=calc_and_parent_cols, ) # check for parent/child duplicates. again need to remove the - # core_ferc1__yearly_electricity_sales_by_rate_schedule table. Null hack bc comparing pandas + # core_ferc1__yearly_sales_by_rate_schedules_sched304 table. Null hack bc comparing pandas # nulls self_refs_mask = calc_components[calc_and_parent_cols].fillna("NULL HACK").apply( lambda x: all(x[col] == x[f"{col}_parent"] for col in calc_cols), axis=1 ) & ( calc_components.table_name - != "core_ferc1__yearly_electricity_sales_by_rate_schedule" + != "core_ferc1__yearly_sales_by_rate_schedules_sched304" ) if not (parent_child_dupes := calc_components.loc[self_refs_mask]).empty: raise AssertionError( @@ -6308,7 +6292,7 @@ def check_for_calc_components_duplicates( ) -> None: """Check for duplicates calculation records. - We need to remove the core_ferc1__yearly_electricity_sales_by_rate_schedule bc there are + We need to remove the core_ferc1__yearly_sales_by_rate_schedules_sched304 bc there are duplicate renamed factoids in that table (originally billed/unbilled). """ calc_components_test = ( @@ -6341,11 +6325,11 @@ def make_calculation_dimensions_explicit( We have extended this calculation system to allow independent calculations to be specified for different values within a given dimension. For example, the - :ref:`core_ferc1__yearly_utility_plant_summary` table contains records with a variety of + :ref:`core_ferc1__yearly_utility_plant_summary_sched200` table contains records with a variety of different ``utility_type`` values (gas, electric, etc.). For many combinations of fact and ``utility_type``, no more detailed information about the soruce of the data is available, but for some, and only in the case of electric utilities, much more - detail can be found in the :ref:`core_ferc1__yearly_plant_in_service` table. + detail can be found in the :ref:`core_ferc1__yearly_plant_in_service_sched204` table. In order to use this additional information when it is available, we sometimes explicitly specify different calculations for different values of additional dimension columns. @@ -6589,7 +6573,7 @@ def infer_intra_factoid_totals( check_for_calc_components_duplicates( calcs_with_totals, table_names_known_dupes=[ - "core_ferc1__yearly_electricity_sales_by_rate_schedule", + "core_ferc1__yearly_sales_by_rate_schedules_sched304", ], idx=parent_node_pk + child_node_pk, ) @@ -6609,16 +6593,16 @@ def infer_intra_factoid_totals( # minus electric_plant_depreciation_changes_ferc1 bc that table is messy and # not actually in the explosion work for table_name in [ - "core_ferc1__yearly_plant_in_service", - "core_ferc1__yearly_utility_plant_summary", - "core_ferc1__yearly_electric_operating_expenses", - "core_ferc1__yearly_balance_sheet_liabilities", - "core_ferc1__yearly_depreciation_amortization_summary", - "core_ferc1__yearly_balance_sheet_assets", - "core_ferc1__yearly_income_statement", - "core_ferc1__yearly_electric_plant_depreciation_functional", - "core_ferc1__yearly_retained_earnings", - "core_ferc1__yearly_electric_operating_revenues", + "core_ferc1__yearly_plant_in_service_sched204", + "core_ferc1__yearly_utility_plant_summary_sched200", + "core_ferc1__yearly_operating_expenses_sched320", + "core_ferc1__yearly_balance_sheet_liabilities_sched110", + "core_ferc1__yearly_depreciation_summary_sched336", + "core_ferc1__yearly_balance_sheet_assets_sched110", + "core_ferc1__yearly_income_statements_sched114", + "core_ferc1__yearly_depreciation_by_function_sched219", + "core_ferc1__yearly_retained_earnings_sched118", + "core_ferc1__yearly_operating_revenues_sched300", ] } | { diff --git a/src/pudl/transform/params/__init__.py b/src/pudl/transform/params/__init__.py index faa48f8218..3c44632dce 100644 --- a/src/pudl/transform/params/__init__.py +++ b/src/pudl/transform/params/__init__.py @@ -4,7 +4,7 @@ ``ferc1`` or ``eia923``) and must define a dictionary named ``TRANSFORM_PARAMS``. This dictionary is a nested data structure with 2 or 3 levels of keys: -* The first level has keys that table names (e.g. ``core_ferc1__yearly_plants_steam``). +* The first level has keys that table names (e.g. ``core_ferc1__yearly_steam_plants_sched402``). * The second level has keys that are the names of transform functions (e.g. ``convert_units``). * In the case of transform functions that operate on a single column and implement the diff --git a/src/pudl/transform/params/ferc1.py b/src/pudl/transform/params/ferc1.py index 309152ab34..2d7b651385 100644 --- a/src/pudl/transform/params/ferc1.py +++ b/src/pudl/transform/params/ferc1.py @@ -2159,7 +2159,7 @@ # Fully assembled set of FERC 1 transformation parameters ############################################################################## TRANSFORM_PARAMS = { - "core_ferc1__yearly_fuel": { + "core_ferc1__yearly_steam_plants_fuel_sched402": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -2245,7 +2245,7 @@ }, ], }, - "core_ferc1__yearly_plants_steam": { + "core_ferc1__yearly_steam_plants_sched402": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -2403,7 +2403,7 @@ }, ], }, - "core_ferc1__yearly_plants_hydro": { + "core_ferc1__yearly_hydroelectric_plants_sched406": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -2541,7 +2541,7 @@ }, ], }, - "core_ferc1__yearly_plants_small": { + "core_ferc1__yearly_small_plants_sched410": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -2639,7 +2639,7 @@ }, ], }, - "core_ferc1__yearly_plant_in_service": { + "core_ferc1__yearly_plant_in_service_sched204": { "rename_columns_ferc1": { "xbrl": { "columns": { @@ -2741,7 +2741,7 @@ }, }, }, - "core_ferc1__yearly_plants_pumped_storage": { + "core_ferc1__yearly_pumped_storage_plants_sched408": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -2886,7 +2886,7 @@ }, ], }, - "core_ferc1__yearly_purchased_power": { + "core_ferc1__yearly_purchased_power_and_exchanges_sched326": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -2965,7 +2965,7 @@ } ], }, - "core_ferc1__yearly_transmission_statistics": { + "core_ferc1__yearly_transmission_lines_sched422": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -3047,7 +3047,7 @@ } ], }, - "core_ferc1__yearly_electric_energy_sources": { + "core_ferc1__yearly_energy_sources_sched401": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -3124,7 +3124,7 @@ }, "align_row_numbers_dbf": {"dbf_table_names": ["f1_elctrc_erg_acct"]}, }, - "core_ferc1__yearly_electric_energy_dispositions": { + "core_ferc1__yearly_energy_dispositions_sched401": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -3189,7 +3189,7 @@ }, "align_row_numbers_dbf": {"dbf_table_names": ["f1_elctrc_erg_acct"]}, }, - "core_ferc1__yearly_utility_plant_summary": { + "core_ferc1__yearly_utility_plant_summary_sched200": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -3363,7 +3363,7 @@ }, }, }, - "core_ferc1__yearly_balance_sheet_assets": { + "core_ferc1__yearly_balance_sheet_assets_sched110": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -3405,7 +3405,7 @@ }, "drop_duplicate_rows_dbf": { "data_columns": ["ending_balance", "starting_balance"], - "table_name": "core_ferc1__yearly_balance_sheet_assets", + "table_name": "core_ferc1__yearly_balance_sheet_assets_sched110", }, "align_row_numbers_dbf": {"dbf_table_names": ["f1_comp_balance_db"]}, "merge_xbrl_metadata": { @@ -3421,7 +3421,7 @@ }, }, }, - "core_ferc1__yearly_balance_sheet_liabilities": { + "core_ferc1__yearly_balance_sheet_liabilities_sched110": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -3464,7 +3464,7 @@ }, "drop_duplicate_rows_dbf": { "data_columns": ["ending_balance", "starting_balance"], - "table_name": "core_ferc1__yearly_balance_sheet_liabilities", + "table_name": "core_ferc1__yearly_balance_sheet_liabilities_sched110", }, "align_row_numbers_dbf": {"dbf_table_names": ["f1_bal_sheet_cr"]}, "merge_xbrl_metadata": { @@ -3473,7 +3473,7 @@ }, "reconcile_table_calculations": {"column_to_check": "ending_balance"}, }, - "core_ferc1__yearly_depreciation_amortization_summary": { + "core_ferc1__yearly_depreciation_summary_sched336": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -3553,7 +3553,7 @@ }, }, }, - "core_ferc1__yearly_electric_operating_revenues": { + "core_ferc1__yearly_operating_revenues_sched300": { "rename_columns_ferc1": { "duration_xbrl": { "columns": { @@ -3700,7 +3700,7 @@ }, }, }, - "core_ferc1__yearly_retained_earnings": { + "core_ferc1__yearly_retained_earnings_sched118": { "rename_columns_ferc1": { "duration_xbrl": { "columns": { @@ -3781,7 +3781,7 @@ }, }, }, - "core_ferc1__yearly_income_statement": { + "core_ferc1__yearly_income_statements_sched114": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -3913,7 +3913,7 @@ }, "drop_duplicate_rows_dbf": { "data_columns": ["dollar_value"], - "table_name": "core_ferc1__yearly_income_statement", + "table_name": "core_ferc1__yearly_income_statements_sched114", }, "align_row_numbers_dbf": { "dbf_table_names": ["f1_income_stmnt", "f1_incm_stmnt_2"] @@ -3957,7 +3957,7 @@ }, }, }, - "core_ferc1__yearly_electric_plant_depreciation_changes": { + "core_ferc1__yearly_depreciation_changes_sched219": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -4078,7 +4078,7 @@ }, }, }, - "core_ferc1__yearly_electric_plant_depreciation_functional": { + "core_ferc1__yearly_depreciation_by_function_sched219": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -4179,7 +4179,7 @@ "subtotal_column": "plant_status", }, }, - "core_ferc1__yearly_cash_flow": { + "core_ferc1__yearly_cash_flows_sched120": { "rename_columns_ferc1": { "instant_xbrl": { "columns": { @@ -4300,7 +4300,7 @@ "on": "amount_type", }, }, - "core_ferc1__yearly_electric_operating_expenses": { + "core_ferc1__yearly_operating_expenses_sched320": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -4517,7 +4517,7 @@ }, "drop_duplicate_rows_dbf": { "data_columns": ["dollar_value"], - "table_name": "core_ferc1__yearly_electric_operating_expenses", + "table_name": "core_ferc1__yearly_operating_expenses_sched320", }, "merge_xbrl_metadata": { "rename_columns": {"xbrl_factoid": "expense_type"}, @@ -4541,7 +4541,7 @@ }, }, }, - "core_ferc1__yearly_other_regulatory_liabilities": { + "core_ferc1__yearly_other_regulatory_liabilities_sched278": { "rename_columns_ferc1": { "dbf": { "columns": { @@ -4589,7 +4589,7 @@ }, ], }, - "core_ferc1__yearly_electricity_sales_by_rate_schedule": { + "core_ferc1__yearly_sales_by_rate_schedules_sched304": { "rename_columns_ferc1": { "dbf": { "columns": { diff --git a/src/pudl/validate.py b/src/pudl/validate.py index 65ac22c9b3..a246aff4e4 100644 --- a/src/pudl/validate.py +++ b/src/pudl/validate.py @@ -655,7 +655,7 @@ def plot_vs_agg(orig_df, agg_df, validation_cases): ############################################################################### -core_ferc1__yearly_plants_steam_capacity = [ +core_ferc1__yearly_steam_plants_sched402_capacity = [ { "title": "All Plant Capacity", "query": "", @@ -678,7 +678,7 @@ def plot_vs_agg(orig_df, agg_df, validation_cases): }, ] -core_ferc1__yearly_plants_steam_expenses = [ +core_ferc1__yearly_steam_plants_sched402_expenses = [ { "title": "Capital Expenses (median)", "query": "", @@ -741,7 +741,7 @@ def plot_vs_agg(orig_df, agg_df, validation_cases): }, ] -core_ferc1__yearly_plants_steam_capacity_ratios = [ +core_ferc1__yearly_steam_plants_sched402_capacity_ratios = [ { "title": "Capacity Factor (Tails)", "query": "capacity_factor>0.05", @@ -844,7 +844,7 @@ def plot_vs_agg(orig_df, agg_df, validation_cases): }, ] -core_ferc1__yearly_plants_steam_connected_hours = [ +core_ferc1__yearly_steam_plants_sched402_connected_hours = [ { # Currently failing b/c ~10% of plants have way more than 8760 hours... "title": "Plant Hours Connected (min/max)", "query": "", @@ -857,7 +857,7 @@ def plot_vs_agg(orig_df, agg_df, validation_cases): }, ] -core_ferc1__yearly_plants_steam_self = [ +core_ferc1__yearly_steam_plants_sched402_self = [ { "title": "All Plant Capacity", "query": "", diff --git a/test/integration/etl_test.py b/test/integration/etl_test.py index 43e98a429b..8b75abcda6 100644 --- a/test/integration/etl_test.py +++ b/test/integration/etl_test.py @@ -46,14 +46,16 @@ def test_ferc1_xbrl2sqlite(ferc1_engine_xbrl, ferc1_xbrl_taxonomy_metadata): # Has the metadata we've read in from JSON contain a long list of entities? assert isinstance(ferc1_xbrl_taxonomy_metadata, dict) # nosec: B101 assert ( - "core_ferc1__yearly_plants_steam" in ferc1_xbrl_taxonomy_metadata + "core_ferc1__yearly_steam_plants_sched402" in ferc1_xbrl_taxonomy_metadata ) # nosec: B101 assert len(ferc1_xbrl_taxonomy_metadata) > 10 # nosec: B101 assert len(ferc1_xbrl_taxonomy_metadata) < 100 # nosec: B101 # Can we normalize that list of entities and find data in it that we expect? df = pd.json_normalize( - ferc1_xbrl_taxonomy_metadata["core_ferc1__yearly_plant_in_service"]["instant"] + ferc1_xbrl_taxonomy_metadata["core_ferc1__yearly_plant_in_service_sched204"][ + "instant" + ] ) assert ( df.loc[ diff --git a/test/integration/ferc1_eia_train_test.py b/test/integration/ferc1_eia_train_test.py index ddde78d521..54f0ecf238 100644 --- a/test/integration/ferc1_eia_train_test.py +++ b/test/integration/ferc1_eia_train_test.py @@ -1,4 +1,4 @@ -"""Tests for the validation functions in the ferc1_eia_train module. +"""Tests for the validation functions in the eia_ferc1_train module. The functions that this module is testing were not designed with tests in mind. Ideally we would refactor the functions to be more testable, but for now we are just focusing on @@ -19,10 +19,10 @@ import pandas as pd import pytest -from pudl.analysis.ferc1_eia_record_linkage import ( +from pudl.analysis.eia_ferc1_record_linkage import ( restrict_train_connections_on_date_range, ) -from pudl.analysis.ferc1_eia_train import ( +from pudl.analysis.eia_ferc1_train import ( generate_all_override_spreadsheets, validate_override_fixes, ) @@ -43,16 +43,17 @@ def plant_parts_eia(fast_out_annual): @pytest.fixture(scope="module") -def ferc1_eia(fast_out_annual): - """The ferc1_eia output table.""" +def eia_ferc1(fast_out_annual): + """The eia_ferc1 output table.""" + # the pudl_out name here is the old, non-alphabetized ordering. return fast_out_annual.ferc1_eia() @pytest.fixture(scope="module") -def ferc1_eia_training_data(): - """The training data for the ferc1_eia matching.""" +def eia_ferc1_training_data(): + """The training data for the eia_ferc1 matching.""" return pd.read_csv( - importlib.resources.files("pudl.package_data.glue") / "ferc1_eia_train.csv" + importlib.resources.files("pudl.package_data.glue") / "eia_ferc1_train.csv" ) @@ -129,8 +130,8 @@ def ferc1_eia_training_data(): ) def test_validate_override_fixes( plant_parts_eia, - ferc1_eia, - ferc1_eia_training_data, + eia_ferc1, + eia_ferc1_training_data, verified, report_year, record_id_eia_override_1, @@ -147,27 +148,27 @@ def test_validate_override_fixes( "utility_id_pudl_ferc1": utility_id_pudl_ferc1, } ).assign(verified=lambda x: x.verified.astype("bool")) - ferc1_eia_training_data_restricted = restrict_train_connections_on_date_range( - train_df=ferc1_eia_training_data, + eia_ferc1_training_data_restricted = restrict_train_connections_on_date_range( + train_df=eia_ferc1_training_data, id_col="record_id_ferc1", - start_date=min(ferc1_eia.report_date), - end_date=max(ferc1_eia.report_date), + start_date=min(eia_ferc1.report_date), + end_date=max(eia_ferc1.report_date), ) validate_override_fixes( validated_connections=test_df, ppe=plant_parts_eia, - ferc1_eia=ferc1_eia, - training_data=ferc1_eia_training_data_restricted, + eia_ferc1=eia_ferc1, + training_data=eia_ferc1_training_data_restricted, expect_override_overrides=True, allow_mismatched_utilities=True, ) -def test_generate_all_override_spreadsheets(plant_parts_eia, ferc1_eia, utils_eia860): +def test_generate_all_override_spreadsheets(plant_parts_eia, eia_ferc1, utils_eia860): """Test the genation of the override spreadsheet for mapping FERC-EIA records.""" # Create the test spreadsheet generate_all_override_spreadsheets( - ferc1_eia, + eia_ferc1, plant_parts_eia, utils_eia860, util_dict={"NextEra": [6452, 7801]}, diff --git a/test/unit/transform/ferc1_test.py b/test/unit/transform/ferc1_test.py index b4487bed3b..4bc1935278 100644 --- a/test/unit/transform/ferc1_test.py +++ b/test/unit/transform/ferc1_test.py @@ -265,7 +265,7 @@ def test_select_current_year_annual_records_duration_xbrl(): class FakeTransformer(Ferc1AbstractTableTransformer): # just need any table name here so that one method is callable - table_id = TableIdFerc1.FUEL_FERC1 + table_id = TableIdFerc1.STEAM_PLANTS_FUEL fake_transformer = FakeTransformer() df_out = fake_transformer.select_current_year_annual_records_duration_xbrl(df=df) @@ -296,7 +296,7 @@ def test_drop_duplicate_rows_dbf(): ) ) params = DropDuplicateRowsDbf( - table_name="core_ferc1__yearly_balance_sheet_assets", + table_name="core_ferc1__yearly_balance_sheet_assets_sched110", data_columns=["data_col1", "data_col2"], ) df_out = drop_duplicate_rows_dbf(df, params=params).reset_index(drop=True) @@ -505,7 +505,7 @@ def test_apply_xbrl_calculation_fixes(): class FakeTransformer(Ferc1AbstractTableTransformer): # just need any table name here so that one method is callable - table_id = TableIdFerc1.FUEL_FERC1 + table_id = TableIdFerc1.STEAM_PLANTS_FUEL calc_comps_fixed_out = FakeTransformer().apply_xbrl_calculation_fixes( calc_components=calc_comps_fix_test, calc_fixes=calc_fixes_test diff --git a/test/validate/ferc1_test.py b/test/validate/ferc1_test.py index fe36fe24b4..434090e4e9 100644 --- a/test/validate/ferc1_test.py +++ b/test/validate/ferc1_test.py @@ -18,24 +18,24 @@ # unique record ID. But we should parameterize the has_unique_record_ids class # attributes in the FERC classes. non_unique_record_id_tables = [ - "core_ferc1__yearly_plant_in_service", - "core_ferc1__yearly_purchased_power", - "core_ferc1__yearly_electric_energy_sources", - "core_ferc1__yearly_electric_energy_dispositions", - "core_ferc1__yearly_utility_plant_summary", - "core_ferc1__yearly_transmission_statistics", - "core_ferc1__yearly_balance_sheet_liabilities", - "core_ferc1__yearly_balance_sheet_assets", - "core_ferc1__yearly_income_statement", - "core_ferc1__yearly_depreciation_amortization_summary", - "core_ferc1__yearly_electric_plant_depreciation_changes", - "core_ferc1__yearly_electric_plant_depreciation_functional", - "core_ferc1__yearly_electric_operating_expenses", - "core_ferc1__yearly_cash_flow", - "core_ferc1__yearly_retained_earnings", - "core_ferc1__yearly_electric_operating_revenues", - "core_ferc1__yearly_other_regulatory_liabilities", - "core_ferc1__yearly_electricity_sales_by_rate_schedule", + "core_ferc1__yearly_plant_in_service_sched204", + "core_ferc1__yearly_purchased_power_and_exchanges_sched326", + "core_ferc1__yearly_energy_sources_sched401", + "core_ferc1__yearly_energy_dispositions_sched401", + "core_ferc1__yearly_utility_plant_summary_sched200", + "core_ferc1__yearly_transmission_lines_sched422", + "core_ferc1__yearly_balance_sheet_liabilities_sched110", + "core_ferc1__yearly_balance_sheet_assets_sched110", + "core_ferc1__yearly_income_statements_sched114", + "core_ferc1__yearly_depreciation_summary_sched336", + "core_ferc1__yearly_depreciation_changes_sched219", + "core_ferc1__yearly_depreciation_by_function_sched219", + "core_ferc1__yearly_operating_expenses_sched320", + "core_ferc1__yearly_cash_flows_sched120", + "core_ferc1__yearly_retained_earnings_sched118", + "core_ferc1__yearly_operating_revenues_sched300", + "core_ferc1__yearly_other_regulatory_liabilities_sched278", + "core_ferc1__yearly_sales_by_rate_schedules_sched304", ] unique_record_tables = [ t diff --git a/test/validate/fuel_ferc1_test.py b/test/validate/fuel_ferc1_test.py index 4135eff948..6739acf0f3 100644 --- a/test/validate/fuel_ferc1_test.py +++ b/test/validate/fuel_ferc1_test.py @@ -16,7 +16,9 @@ def test_fuel_ferc1_trivial(pudl_out_ferc1): """Test output routines for tables from FERC Form 1.""" logger.info("Compiling FERC Form 1 fuel table...") - fuel_tab = pd.read_sql("out_ferc1__yearly_fuel", pudl_out_ferc1.pudl_engine) + fuel_tab = pd.read_sql( + "out_ferc1__yearly_steam_plants_fuel_sched402", pudl_out_ferc1.pudl_engine + ) assert len(fuel_tab) > 0, "FERC Form 1 fuel table is empty." logger.info(f"{len(fuel_tab)} fuel records found") @@ -50,12 +52,16 @@ def test_fuel_ferc1_trivial(pudl_out_ferc1): ], ) def test_vs_bounds(pudl_out_ferc1, live_dbs, cases): - """Test distributions of reported core_ferc1__yearly_plants_steam columns.""" + """Test distributions of reported core_ferc1__yearly_steam_plants_sched402 columns.""" if not live_dbs: pytest.skip("Data validation only works with a live PUDL DB.") for case in cases: pv.vs_bounds( - pd.read_sql("out_ferc1__yearly_fuel", pudl_out_ferc1.pudl_engine), **case + pd.read_sql( + "out_ferc1__yearly_steam_plants_fuel_sched402", + pudl_out_ferc1.pudl_engine, + ), + **case, ) @@ -65,5 +71,9 @@ def test_self_vs_historical(pudl_out_ferc1, live_dbs): pytest.skip("Data validation only works with a live PUDL DB.") for args in pv.fuel_ferc1_self: pv.vs_self( - pd.read_sql("out_ferc1__yearly_fuel", pudl_out_ferc1.pudl_engine), **args + pd.read_sql( + "out_ferc1__yearly_steam_plants_fuel_sched402", + pudl_out_ferc1.pudl_engine, + ), + **args, ) diff --git a/test/validate/plants_steam_ferc1_test.py b/test/validate/plants_steam_ferc1_test.py index f10ec65429..a95f6be0d1 100644 --- a/test/validate/plants_steam_ferc1_test.py +++ b/test/validate/plants_steam_ferc1_test.py @@ -17,24 +17,29 @@ @pytest.mark.parametrize( "cases", [ - pytest.param(pv.core_ferc1__yearly_plants_steam_capacity, id="capacity"), - pytest.param(pv.core_ferc1__yearly_plants_steam_expenses, id="expenses"), pytest.param( - pv.core_ferc1__yearly_plants_steam_capacity_ratios, id="capacity_ratios" + pv.core_ferc1__yearly_steam_plants_sched402_capacity, id="capacity" ), pytest.param( - pv.core_ferc1__yearly_plants_steam_connected_hours, + pv.core_ferc1__yearly_steam_plants_sched402_expenses, id="expenses" + ), + pytest.param( + pv.core_ferc1__yearly_steam_plants_sched402_capacity_ratios, + id="capacity_ratios", + ), + pytest.param( + pv.core_ferc1__yearly_steam_plants_sched402_connected_hours, id="connected_hours", marks=pytest.mark.xfail(reason="FERC 1 data reporting errors."), ), ], ) def test_vs_bounds(pudl_out_ferc1, live_dbs, cases): - """Test distributions of reported core_ferc1__yearly_plants_steam columns.""" + """Test distributions of reported core_ferc1__yearly_steam_plants_sched402 columns.""" if not live_dbs: pytest.skip("Data validation only works with a live PUDL DB.") validate_df = pd.read_sql( - "_out_ferc1__yearly_steam_plants", pudl_out_ferc1.pudl_engine + "_out_ferc1__yearly_steam_plants_sched402", pudl_out_ferc1.pudl_engine ).assign( water_limited_ratio=lambda x: x.water_limited_capacity_mw / x.capacity_mw, not_water_limited_ratio=lambda x: x.not_water_limited_capacity_mw @@ -51,7 +56,7 @@ def test_self_vs_historical(pudl_out_ferc1, live_dbs): if not live_dbs: pytest.skip("Data validation only works with a live PUDL DB.") validate_df = pd.read_sql( - "_out_ferc1__yearly_steam_plants", pudl_out_ferc1.pudl_engine + "_out_ferc1__yearly_steam_plants_sched402", pudl_out_ferc1.pudl_engine ).assign( water_limited_ratio=lambda x: x.water_limited_capacity_mw / x.capacity_mw, not_water_limited_ratio=lambda x: x.not_water_limited_capacity_mw @@ -59,7 +64,7 @@ def test_self_vs_historical(pudl_out_ferc1, live_dbs): peak_demand_ratio=lambda x: x.peak_demand_mw / x.capacity_mw, capability_ratio=lambda x: x.plant_capability_mw / x.capacity_mw, ) - for args in pv.core_ferc1__yearly_plants_steam_self: + for args in pv.core_ferc1__yearly_steam_plants_sched402_self: pudl.validate.vs_self(validate_df, **args) @@ -72,7 +77,7 @@ def test_dupe_years_in_plant_id_ferc1(pudl_out_ferc1): (which... we do, as of writing). """ steam_df = pd.read_sql( - "_out_ferc1__yearly_steam_plants", pudl_out_ferc1.pudl_engine + "_out_ferc1__yearly_steam_plants_sched402", pudl_out_ferc1.pudl_engine ) year_dupes = ( steam_df.groupby(["plant_id_ferc1", "report_year"])["utility_id_ferc1"] @@ -102,7 +107,7 @@ def test_plant_id_clash(pudl_out_ferc1): is untrue (as... we know it is right now). """ steam_df = pd.read_sql( - "_out_ferc1__yearly_steam_plants", pudl_out_ferc1.pudl_engine + "_out_ferc1__yearly_steam_plants_sched402", pudl_out_ferc1.pudl_engine ) bad_plant_ids_ferc1 = ( steam_df[["plant_id_pudl", "plant_id_ferc1"]]