Skip to content

Commit fec6208

Browse files
committed
Expand schema_PoC_optimizer with new rules to check CostInformation
1 parent b5c079e commit fec6208

File tree

1 file changed

+239
-2
lines changed

1 file changed

+239
-2
lines changed

testdata/schemas/schema_PoC_optimizer.json

Lines changed: 239 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,15 @@
7373
},
7474
{
7575
"name": "producers_required_attributes_are_set",
76-
"description": "Report errors if the required attributes of producer assets are not set.",
76+
"description": "Report errors if the required attributes of heat producer assets are not set. HeatProducer also includes GeothermalSource and ResidualHeatSource",
7777
"type": "error",
7878
"message": "Required Attribute Not Set",
7979
"selects": [{
8080
"function": "get",
8181
"alias": "producers",
8282
"args": {
83-
"type": ["GeothermalSource", "ResidualHeatSource"]
83+
"type": ["HeatProducer"],
84+
"exclude_type": ["SolarCollector"]
8485
}
8586
}
8687
],
@@ -301,6 +302,242 @@
301302
"resultMsgJSON": true
302303
}
303304
}
305+
},
306+
{
307+
"name": "investmentCosts_EUR_MW_or_kW_are_set",
308+
"description": "Report errors if costInformation.investmentCosts [EUR/MW] or [EUR/kW] are not set or incorrectly set for the defined assets.",
309+
"type": "error",
310+
"message": "Investment Costs [EUR/MW] or [EUR/kW] is incomplete or incorrect",
311+
"selects": [{
312+
"function": "get",
313+
"alias": "assets",
314+
"args": {
315+
"type": ["HeatPump", "HeatProducer", "ATES", "HeatExchange"]
316+
}
317+
}
318+
],
319+
"check": {
320+
"function": "attributes_not_null",
321+
"dataset": "assets",
322+
"args": {
323+
"checks": [
324+
{ "attribute": "costInformation.investmentCosts.value", "count_as_null": [0.0] }
325+
],
326+
"resultMsgJSON": true
327+
},
328+
"and": [
329+
{
330+
"function": "attributes_are_valid",
331+
"args": {
332+
"reference_path": "costInformation.investmentCosts.profileQuantityAndUnit",
333+
"checks": [
334+
{ "attribute": "unit", "count_as_valid": "EURO" },
335+
{ "attribute": "perUnit", "count_as_valid": "WATT" },
336+
{ "attribute": "perMultiplier", "count_as_valid": ["MEGA", "KILO"] },
337+
{ "attribute": "perTimeUnit", "count_as_valid": "Unset" }
338+
],
339+
"resultMsgJSON": true
340+
}
341+
}
342+
]
343+
}
344+
},
345+
{
346+
"name": "investmentCosts_EUR_m3_are_set",
347+
"description": "Report errors if costInformation.investmentCosts [EUR/m3] are not set or incorrectly set for the defined assets.",
348+
"type": "error",
349+
"message": "Investment Costs [EUR/m3] is incomplete or incorrect",
350+
"selects": [{
351+
"function": "get",
352+
"alias": "assets",
353+
"args": {
354+
"type": ["HeatStorage"],
355+
"exclude_type": ["ATES"]
356+
}
357+
}
358+
],
359+
"check": {
360+
"function": "attributes_not_null",
361+
"dataset": "assets",
362+
"args": {
363+
"checks": [
364+
{ "attribute": "costInformation.investmentCosts.value", "count_as_null": [0.0] }
365+
],
366+
"resultMsgJSON": true
367+
},
368+
"and": [
369+
{
370+
"function": "attributes_are_valid",
371+
"args": {
372+
"reference_path": "costInformation.investmentCosts.profileQuantityAndUnit",
373+
"checks": [
374+
{ "attribute": "unit", "count_as_valid": "EURO" },
375+
{ "attribute": "perUnit", "count_as_valid": "CUBIC_METRE" },
376+
{ "attribute": "perMultiplier", "count_as_valid": "Unset" },
377+
{ "attribute": "perTimeUnit", "count_as_valid": "Unset" }
378+
],
379+
"resultMsgJSON": true
380+
}
381+
}
382+
]
383+
}
384+
},
385+
{
386+
"name": "variableOperationalCosts_EUR_MWh_are_set",
387+
"description": "Report errors if costInformation.variableOperationalCosts [EUR/MWh] are not set or incorrectly set for the defined assets.",
388+
"type": "error",
389+
"message": "Variable Operational Costs [EUR/MWh] is incomplete or incorrect",
390+
"selects": [{
391+
"function": "get",
392+
"alias": "assets",
393+
"args": {
394+
"type": ["HeatPump", "HeatProducer"]
395+
}
396+
}
397+
],
398+
"check": {
399+
"function": "attributes_not_null",
400+
"dataset": "assets",
401+
"args": {
402+
"checks": [
403+
{ "attribute": "costInformation.variableOperationalCosts.value", "count_as_null": [0.0] }
404+
],
405+
"resultMsgJSON": true
406+
},
407+
"and": [
408+
{
409+
"function": "attributes_are_valid",
410+
"args": {
411+
"reference_path": "costInformation.variableOperationalCosts.profileQuantityAndUnit",
412+
"checks": [
413+
{ "attribute": "unit", "count_as_valid": "EURO" },
414+
{ "attribute": "perUnit", "count_as_valid": "WATTHOUR" },
415+
{ "attribute": "perMultiplier", "count_as_valid": "MEGA" },
416+
{ "attribute": "perTimeUnit", "count_as_valid": "Unset" }
417+
],
418+
"resultMsgJSON": true
419+
}
420+
}
421+
]
422+
}
423+
},
424+
{
425+
"name": "fixedOperationalCosts_are_set",
426+
"description": "Report errors if costInformation.fixedOperationalCosts [EUR/MW] or [EUR/kW] are not set or incorrectly set for the defined assets.",
427+
"type": "error",
428+
"message": "Fixed Operational Costs [EUR/MW] or [EUR/kW] is incomplete or incorrect",
429+
"selects": [{
430+
"function": "get",
431+
"alias": "assets",
432+
"args": {
433+
"type": ["HeatExchange", "ATES"]
434+
}
435+
}
436+
],
437+
"check": {
438+
"function": "attributes_not_null",
439+
"dataset": "assets",
440+
"args": {
441+
"checks": [
442+
{ "attribute": "costInformation.fixedOperationalCosts.value", "count_as_null": [0.0] }
443+
],
444+
"resultMsgJSON": true
445+
},
446+
"and": [
447+
{
448+
"function": "attributes_are_valid",
449+
"args": {
450+
"reference_path": "costInformation.fixedOperationalCosts.profileQuantityAndUnit",
451+
"checks": [
452+
{ "attribute": "unit", "count_as_valid": "EURO" },
453+
{ "attribute": "perUnit", "count_as_valid": "WATT" },
454+
{ "attribute": "perMultiplier", "count_as_valid": ["MEGA", "KILO"] },
455+
{ "attribute": "perTimeUnit", "count_as_valid": "Unset" }
456+
],
457+
"resultMsgJSON": true
458+
}
459+
}
460+
]
461+
}
462+
},
463+
{
464+
"name": "marginalCosts_are_set",
465+
"description": "Report errors if costInformation.marginalCosts [unitless] are not set or incorrectly set for the defined assets.",
466+
"type": "warning",
467+
"message": "Marginal Costs [unitless] used for priority assigment is incomplete or incorrect",
468+
"selects": [{
469+
"function": "get",
470+
"alias": "assets",
471+
"args": {
472+
"type": ["HeatProducer"],
473+
"exclude_type": ["SolarCollector"]
474+
}
475+
}
476+
],
477+
"check": {
478+
"function": "attributes_not_null",
479+
"dataset": "assets",
480+
"args": {
481+
"checks": [
482+
{ "attribute": "costInformation.marginalCosts.value", "count_as_null": [0.0] }
483+
],
484+
"resultMsgJSON": true
485+
},
486+
"and": [
487+
{
488+
"function": "attributes_are_valid",
489+
"args": {
490+
"reference_path": "costInformation.marginalCosts.profileQuantityAndUnit",
491+
"checks": [
492+
{ "attribute": "unit", "count_as_valid": "Unset" },
493+
{ "attribute": "perUnit", "count_as_valid": "Unset" },
494+
{ "attribute": "perMultiplier", "count_as_valid": "Unset" },
495+
{ "attribute": "perTimeUnit", "count_as_valid": "Unset" }
496+
],
497+
"resultMsgJSON": true
498+
}
499+
}
500+
]
501+
}
502+
},
503+
{
504+
"name": "installationCosts_are_set",
505+
"description": "Report warnings if costInformation.installationCosts [EUR] are not set or incorrectly set for the defined assets. TODO: this will be replaced with Fixed Installation Costs and Variable Installation Costs.",
506+
"type": "warning",
507+
"message": "Installation Costs [EUR] is incomplete or incorrect",
508+
"selects": [{
509+
"function": "get",
510+
"alias": "assets",
511+
"args": {
512+
"type": ["HeatPump", "HeatProducer", "HeatStorage", "HeatExchange"]
513+
}
514+
}
515+
],
516+
"check": {
517+
"function": "attributes_not_null",
518+
"dataset": "assets",
519+
"args": {
520+
"checks": [
521+
{ "attribute": "costInformation.installationCosts.value", "count_as_null": [0.0] }
522+
],
523+
"resultMsgJSON": true
524+
},
525+
"and": [
526+
{
527+
"function": "attributes_are_valid",
528+
"args": {
529+
"reference_path": "costInformation.installationCosts.profileQuantityAndUnit",
530+
"checks": [
531+
{ "attribute": "unit", "count_as_valid": "EURO" },
532+
{ "attribute": "perUnit", "count_as_valid": "Unset" },
533+
{ "attribute": "perMultiplier", "count_as_valid": "Unset" },
534+
{ "attribute": "perTimeUnit", "count_as_valid": "Unset" }
535+
],
536+
"resultMsgJSON": true
537+
}
538+
}
539+
]
540+
}
304541
}
305542
]
306543
}

0 commit comments

Comments
 (0)