diff --git a/src/fmu/dataio/_products/inplace_volumes.py b/src/fmu/dataio/_products/inplace_volumes.py index f3acf4350..f7b5c4828 100644 --- a/src/fmu/dataio/_products/inplace_volumes.py +++ b/src/fmu/dataio/_products/inplace_volumes.py @@ -34,7 +34,7 @@ class InplaceVolumesResultRow(BaseModel): BULK: float = Field(ge=0.0) NET: Optional[float] = Field(default=None, ge=0.0) PORV: float = Field(ge=0.0) - HCPV: Optional[float] = Field(default=None, ge=0.0) + HCPV: float = Field(ge=0.0) STOIIP: Optional[float] = Field(default=None, ge=0.0) GIIP: Optional[float] = Field(default=None, ge=0.0) ASSOCIATEDGAS: Optional[float] = Field(default=None, ge=0.0) 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..b8dc49ccb 100644 --- a/tests/test_export_rms/test_export_rms_volumetrics.py +++ b/tests/test_export_rms/test_export_rms_volumetrics.py @@ -549,3 +549,11 @@ 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: + schema_required_fields = [] + for field_name, field_info in InplaceVolumesResultRow.model_fields.items(): + if field_info.is_required(): + schema_required_fields.append(field_name) + assert _enums.InplaceVolumes.required_columns() == schema_required_fields