diff --git a/src/fmu/dataio/export/_enums.py b/src/fmu/dataio/export/_enums.py index 8fdfd4bc5..0007ba357 100644 --- a/src/fmu/dataio/export/_enums.py +++ b/src/fmu/dataio/export/_enums.py @@ -43,11 +43,35 @@ def index_columns() -> list[str]: """Returns a list of the index columns.""" return [k.value for k in InplaceVolumes.TableIndexColumns] + @staticmethod + def required_index_columns() -> list[str]: + return [ + InplaceVolumes.TableIndexColumns.FLUID.value, + InplaceVolumes.TableIndexColumns.ZONE.value, + ] + @staticmethod def value_columns() -> list[str]: """Returns a list of the value columns.""" return [k.value for k in InplaceVolumes.VolumetricColumns] + @staticmethod + def required_value_columns() -> list[str]: + """Returns a list of the value columns.""" + return [ + InplaceVolumes.VolumetricColumns.BULK.value, + InplaceVolumes.VolumetricColumns.PORV.value, + InplaceVolumes.VolumetricColumns.HCPV.value, + ] + + @staticmethod + def required_columns() -> list[str]: + """Returns a list of the columns required at export.""" + return ( + InplaceVolumes.required_index_columns() + + InplaceVolumes.required_value_columns() + ) + @staticmethod def table_columns() -> list[str]: """Returns a list of all table columns.""" diff --git a/src/fmu/dataio/export/rms/inplace_volumes.py b/src/fmu/dataio/export/rms/inplace_volumes.py index 6ec6ed18d..32d32b563 100644 --- a/src/fmu/dataio/export/rms/inplace_volumes.py +++ b/src/fmu/dataio/export/rms/inplace_volumes.py @@ -261,11 +261,7 @@ def _validate_table(self) -> None: # create list of missing or non-defined required columns missing_calculations = [] - for col in [ - _VolumetricColumns.BULK.value, - _VolumetricColumns.PORV.value, - _VolumetricColumns.HCPV.value, - ]: + for col in _enums.InplaceVolumes.required_value_columns(): if self._is_column_missing_in_table(col): missing_calculations.append(col) diff --git a/tests/test_export_rms/test_export_rms_volumetrics.py b/tests/test_export_rms/test_export_rms_volumetrics.py index 018b02b98..0e26a9dd6 100644 --- a/tests/test_export_rms/test_export_rms_volumetrics.py +++ b/tests/test_export_rms/test_export_rms_volumetrics.py @@ -549,3 +549,14 @@ def test_inplace_volumes_export_and_result_columns_are_the_same( assert _enums.InplaceVolumes.table_columns() == list( InplaceVolumesResultRow.model_fields.keys() ) + + +def test_that_required_columns_one_to_one_in_enums_and_schema() -> None: + # It's valid for HCPV to be None for water, but nobody should be exporting only + # water, therefore despite it being optional in the schema it will always be a + # column. + schema_required_fields = ["HCPV"] + for field_name, field_info in InplaceVolumesResultRow.model_fields.items(): + if field_info.is_required(): + schema_required_fields.append(field_name) + assert set(_enums.InplaceVolumes.required_columns()) == set(schema_required_fields)