Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
a44ad2b
Add core_eia176__yearly_company_characteristics table
irubey Apr 21, 2026
5462f77
Fix nullability, boolean semantics, and schema alignment in core_eia1…
irubey Apr 21, 2026
128d098
Fix ruff line-length formatting in fields.py FIELD_METADATA_BY_RESOURCE
irubey Apr 21, 2026
255a29c
Add release notes entries for core_eia176__yearly_company_characteris…
irubey Apr 21, 2026
d0a9586
Fix release notes placement and brevity for core_eia176__yearly_compa…
irubey Apr 21, 2026
4d12d57
Restore Performance Improvements section in v2026.5.0, remove empty o…
irubey Apr 21, 2026
9848e1f
Fix alembic migration chain: rebase company_characteristics migration…
irubey Apr 21, 2026
227f828
Fix page key for operation_types_and_sector_items at source
irubey Apr 27, 2026
d851af1
Address reviewer feedback on core_eia176__yearly_company_characteristics
irubey Apr 27, 2026
4dbd63e
Fix migration for core_eia176__yearly_company_characteristics
irubey Apr 27, 2026
35e85d9
Note is_other_ownership_2 merge in release notes
irubey Apr 27, 2026
476b44b
Assert 0 null operating_state rows dropped in company_characteristics
irubey May 1, 2026
5582fd6
Extend company_characteristics with Parts B-F fields and fix unit typo
irubey May 6, 2026
a3b91bc
Merge upstream/main to sync with forensics migration f98868d3f5cb
irubey May 6, 2026
d1ae91f
Fix alembic multiple heads by updating down_revision
irubey May 6, 2026
6a2ecff
Merge branch 'main' into 4697-eia176-company-characteristics
e-belfer May 28, 2026
42b6b3f
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] May 28, 2026
ffd34f4
Merge branch 'main' into 4697-eia176-company-characteristics
aesharpe Jun 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 29 additions & 1 deletion dbt/seeds/etl_full_row_counts.csv
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,34 @@ _core_phmsagas__yearly_distribution_misc,2021,1444
_core_phmsagas__yearly_distribution_misc,2022,1449
_core_phmsagas__yearly_distribution_misc,2023,1440
_core_phmsagas__yearly_distribution_misc,2024,1428
core_eia176__yearly_company_characteristics,1997,1855
core_eia176__yearly_company_characteristics,1998,1815
core_eia176__yearly_company_characteristics,1999,1807
core_eia176__yearly_company_characteristics,2000,1885
core_eia176__yearly_company_characteristics,2001,1963
core_eia176__yearly_company_characteristics,2002,1948
core_eia176__yearly_company_characteristics,2003,1962
core_eia176__yearly_company_characteristics,2004,1930
core_eia176__yearly_company_characteristics,2005,1944
core_eia176__yearly_company_characteristics,2006,1940
core_eia176__yearly_company_characteristics,2007,1933
core_eia176__yearly_company_characteristics,2008,1938
core_eia176__yearly_company_characteristics,2009,1997
core_eia176__yearly_company_characteristics,2010,1983
core_eia176__yearly_company_characteristics,2011,2008
core_eia176__yearly_company_characteristics,2012,2015
core_eia176__yearly_company_characteristics,2013,2021
core_eia176__yearly_company_characteristics,2014,2035
core_eia176__yearly_company_characteristics,2015,2042
core_eia176__yearly_company_characteristics,2016,2036
core_eia176__yearly_company_characteristics,2017,2060
core_eia176__yearly_company_characteristics,2018,2065
core_eia176__yearly_company_characteristics,2019,2056
core_eia176__yearly_company_characteristics,2020,2067
core_eia176__yearly_company_characteristics,2021,2031
core_eia176__yearly_company_characteristics,2022,2042
core_eia176__yearly_company_characteristics,2023,2093
core_eia176__yearly_company_characteristics,2024,2090
core_eia176__yearly_gas_disposition,1997,1854
core_eia176__yearly_gas_disposition,1998,1814
core_eia176__yearly_gas_disposition,1999,1807
Expand Down Expand Up @@ -450,7 +478,7 @@ core_eia176__yearly_gas_disposition,2020,2058
core_eia176__yearly_gas_disposition,2021,2016
core_eia176__yearly_gas_disposition,2022,2029
core_eia176__yearly_gas_disposition,2023,2077
core_eia176__yearly_gas_disposition,2024,2074
core_eia176__yearly_gas_disposition,2024,2075
core_eia176__yearly_gas_disposition_by_consumer,1997,4338
core_eia176__yearly_gas_disposition_by_consumer,1998,4280
core_eia176__yearly_gas_disposition_by_consumer,1999,4410
Expand Down
16 changes: 16 additions & 0 deletions docs/release_notes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,20 @@ Enhancements
New Data
^^^^^^^^

EIA-176
~~~~~~~

* Added :ref:`core_eia176__yearly_company_characteristics` with company operation
type, ownership type, and company characteristic fields from EIA Form 176 Part 3
(Lines A-F). Includes ``alternative_fleet_size``,
``customer_choice_residential_eligible``,
``customer_choice_residential_participating``, ``has_sales_or_acquisitions``, and
``natural_gas_pump_price`` (2014-2016 only). National-level adjustment records
(operating_state FX, MX, BL, OO) are excluded. The raw ``is_other_ownership`` and
``is_other_ownership_2`` fields (which never co-occur) are merged into a single
``is_other_ownership`` boolean.
See :issue:`4697` and :pr:`5197`.

Expanded Data Coverage
^^^^^^^^^^^^^^^^^^^^^^

Expand Down Expand Up @@ -69,6 +83,8 @@ New Data Tests & Validations
Bug Fixes & Data Cleaning
^^^^^^^^^^^^^^^^^^^^^^^^^

* Fixed EIA-176 extraction bug where ``raw_eia176__operation_types_and_sector_items``
was always empty due to a mismatched page key. See :issue:`4697` and :pr:`5197`.
* Fix a bug in the Zenodo Data Release script which was not actually skipping top-level
directories when deciding what to upload to Zenodo, which caused release failures
once we started leaving the ``ferc*_xbrl`` directories laying around. See PR
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
"""add_core_eia176__yearly_company_characteristics

Revision ID: 48fade8aeee8
Revises: f98868d3f5cb
Create Date: 2026-04-21 08:27:53.098357

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = '48fade8aeee8'
down_revision = 'f98868d3f5cb'
branch_labels = None
depends_on = None


def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('core_eia176__yearly_company_characteristics',
sa.Column('report_year', sa.Integer(), nullable=False, comment='Four-digit year in which the data was reported.'),
sa.Column('operator_id_eia', sa.Text(), nullable=False, comment='The unique EIA identifier for an operator in a given state. The last two letters of the ID indicate the state.'),
sa.Column('operating_state', sa.Enum('AB', 'AK', 'AL', 'AR', 'AS', 'AZ', 'BC', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'GA', 'GU', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MB', 'MD', 'ME', 'MI', 'MN', 'MO', 'MP', 'MS', 'MT', 'NB', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NL', 'NM', 'NS', 'NT', 'NU', 'NV', 'NY', 'OH', 'OK', 'ON', 'OR', 'PA', 'PE', 'PR', 'QC', 'RI', 'SC', 'SD', 'SK', 'TN', 'TX', 'UT', 'VA', 'VI', 'VT', 'WA', 'WI', 'WV', 'WY', 'YT'), nullable=True, comment='State that the operator is reporting for.'),
sa.Column('is_distribution_company_cooperative', sa.Boolean(), nullable=True, comment='Whether the company is a cooperative distribution company.'),
sa.Column('is_distribution_company_investor_owned', sa.Boolean(), nullable=True, comment='Whether the company is an investor-owned distribution company.'),
sa.Column('is_distribution_company_municipally_owned', sa.Boolean(), nullable=True, comment='Whether the company is a municipally-owned distribution company.'),
sa.Column('is_distribution_company_privately_owned', sa.Boolean(), nullable=True, comment='Whether the company is a privately-owned distribution company.'),
sa.Column('is_gatherer', sa.Boolean(), nullable=True, comment='Whether the company operates as a natural gas gatherer.'),
sa.Column('is_interstate_pipeline', sa.Boolean(), nullable=True, comment='Whether the company operates an interstate natural gas pipeline.'),
sa.Column('is_intrastate_pipeline', sa.Boolean(), nullable=True, comment='Whether the company operates an intrastate natural gas pipeline.'),
sa.Column('is_liquid_natural_gas_marine_terminal', sa.Boolean(), nullable=True, comment='Whether the company operates a liquefied natural gas marine terminal.'),
sa.Column('is_liquid_natural_gas_peak_facility_operator', sa.Boolean(), nullable=True, comment='Whether the company operates a liquefied natural gas peak-shaving facility.'),
sa.Column('is_producer', sa.Boolean(), nullable=True, comment='Whether the company operates as a natural gas producer.'),
sa.Column('is_storage_operator', sa.Boolean(), nullable=True, comment='Whether the company operates natural gas storage facilities.'),
sa.Column('is_synthetic_natural_gas_plant_operator', sa.Boolean(), nullable=True, comment='Whether the company operates a synthetic natural gas production plant.'),
sa.Column('is_other_ownership', sa.Boolean(), nullable=True, comment='Whether the company reported an ownership type other than investor-owned, cooperative, municipal, or private.'),
sa.Column('other_ownership_description', sa.Text(), nullable=True, comment="Free-text description of ownership type when 'other' ownership is indicated."),
sa.Column('has_alternative_fuel_fleet', sa.Boolean(), nullable=True, comment='Whether the company operated a fleet of alternative-fuel vehicles during the report year.'),
sa.Column('alternative_fleet_size', sa.Integer(), nullable=True, comment='Number of alternative-fuel vehicles in the company\'s fleet (EIA Form 176 Part 3, Line B).'),
sa.Column('customer_choice_residential_eligible', sa.Integer(), nullable=True, comment='Number of residential customers eligible for customer choice programs (EIA Form 176 Part 3, Line C).'),
sa.Column('customer_choice_residential_participating', sa.Integer(), nullable=True, comment='Number of residential customers participating in customer choice programs (EIA Form 176 Part 3, Line C).'),
sa.Column('has_sales_or_acquisitions', sa.Boolean(), nullable=True, comment='Whether the company completed sales or acquisitions of natural gas distribution assets during the report year (EIA Form 176 Part 3, Line D).'),
sa.Column('natural_gas_pump_price', sa.Float(), nullable=True, comment='Price of natural gas at public fueling stations operated by the company (EIA Form 176 Part 3, Line E). Reported 2014-2016 only.'),
sa.Column('is_public_compressed_natural_gas_fueling_station', sa.Boolean(), nullable=True, comment='Whether the company operates a public compressed natural gas (CNG) fueling station.'),
sa.Column('is_public_lng_fueling_station', sa.Boolean(), nullable=True, comment='Whether the company operates a public liquefied natural gas (LNG) fueling station.'),
sa.PrimaryKeyConstraint('report_year', 'operator_id_eia', name=op.f('pk_core_eia176__yearly_company_characteristics'))
)
# ### end Alembic commands ###


def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_table('core_eia176__yearly_company_characteristics')
# ### end Alembic commands ###
Loading