diff --git a/src/cimsparql/adaptions.py b/src/cimsparql/adaptions.py index 297cc4f2..8538c1c9 100644 --- a/src/cimsparql/adaptions.py +++ b/src/cimsparql/adaptions.py @@ -71,10 +71,15 @@ def set_generation_type(self) -> None: """ ) + def add_market_code_to_non_conform_load(self) -> None: + self.update_graph("add_non_conform_load_group.sparql") + self.update_graph("add_market_code_for_load_groups.sparql") + def adapt(self, eq_uri: str) -> None: self.add_zero_sv_power_flow() self.add_zero_sv_injection() self.add_generating_unit() + self.add_market_code_to_non_conform_load() self.add_mrid() self.add_dtypes() self.set_generation_type() diff --git a/src/cimsparql/data_models.py b/src/cimsparql/data_models.py index f4a1112a..ddf10df9 100644 --- a/src/cimsparql/data_models.py +++ b/src/cimsparql/data_models.py @@ -427,7 +427,7 @@ class GenUnitAndSyncMachineMridSchema(CoercingSchema): class StationGroupForPowerUnitSchema(CoercingSchema): power_system_model_mrid: str = pa.Field(unique=True) - market_unit_mrid: str = pa.Field(unique=True) + market_unit_mrid: str = pa.Field() resource_name: str market_code: str diff --git a/src/cimsparql/sparql/test_configuration_modifications/add_market_code_for_load_groups.sparql b/src/cimsparql/sparql/test_configuration_modifications/add_market_code_for_load_groups.sparql new file mode 100644 index 00000000..d27a6060 --- /dev/null +++ b/src/cimsparql/sparql/test_configuration_modifications/add_market_code_for_load_groups.sparql @@ -0,0 +1,14 @@ +prefix cim:<${cim}> +prefix SN:<${SN}> + +# Assign all loads that does not have a load group to the newly created load group +insert { + graph { + ?load cim:NonConformLoad.LoadGroup ?created_group + } +} +where { + ?load a cim:EnergyConsumer . + ?created_group cim:IdentifiedObject.name "created-group" . + filter not exists{?load cim:NonConformLoad.LoadGroup ?group} +} diff --git a/src/cimsparql/sparql/test_configuration_modifications/add_non_conform_load_group.sparql b/src/cimsparql/sparql/test_configuration_modifications/add_non_conform_load_group.sparql new file mode 100644 index 00000000..1de7b83d --- /dev/null +++ b/src/cimsparql/sparql/test_configuration_modifications/add_non_conform_load_group.sparql @@ -0,0 +1,12 @@ +prefix cim:<${cim}> +prefix SN:<${SN}> + +# Create a load group +insert data { + graph { + _:b0 a cim:NonConformLoadGroup; + cim:IdentifiedObject.name "created-group"; + SN:NonConformLoadGroup.ScheduleResource _:b1 . + _:b1 SN:ScheduleResource.marketCode "created-load-resource-mcode" + } +} diff --git a/tests/test_micro_t1_nl.py b/tests/test_micro_t1_nl.py index ed91aa7c..e9ee0d2d 100644 --- a/tests/test_micro_t1_nl.py +++ b/tests/test_micro_t1_nl.py @@ -369,4 +369,4 @@ def test_station_group_for_power_unit(test_model: t_common.ModelTest) -> None: assert test_model.model group_for_units = test_model.model.station_group_for_power_unit() - assert len(group_for_units) == 4 + assert len(group_for_units) == 10 diff --git a/tests/test_xml_adaptor.py b/tests/test_xml_adaptor.py index baac22fe..1c515894 100644 --- a/tests/test_xml_adaptor.py +++ b/tests/test_xml_adaptor.py @@ -70,3 +70,11 @@ def test_add_generating_unit(xml_adaptor: XmlModelAdaptor) -> None: xml_adaptor.add_generating_unit() query = "select * {?machine cim:SynchronousMachine.GeneratingUnit ?unit}" assert len(xml_adaptor.graph.query(query, initNs=xml_adaptor.namespaces())) > 0 + + +def test_add_market_code_to_non_conform_load(xml_adaptor: XmlModelAdaptor) -> None: + query = "select * {?group SN:NonConformLoadGroup.ScheduleResource/SN:ScheduleResource.marketCode ?code}" + assert len(xml_adaptor.graph.query(query, initNs=xml_adaptor.namespaces())) == 0 + + xml_adaptor.add_market_code_to_non_conform_load() + assert len(xml_adaptor.graph.query(query, initNs=xml_adaptor.namespaces())) == 1