#![allow(clippy::all, dead_code, unused)]
use cimdecoder::CimDataset;
use crate::Violation;
use crate::helpers::*;
pub fn validate_p61970_600_1_equipment_ap_con_complex_shacl(dataset: &CimDataset) -> Vec<Violation> {
let mut v = Vec::new();
v.extend(check_p61970_600_1_equipment_ap_con_complex_shacl_terminal_terminal_connectivity_node_required(dataset));
v
}
pub fn check_p61970_600_1_equipment_ap_con_complex_shacl_terminal_terminal_connectivity_node_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Terminal").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::Terminal>() {
Some(o) => o, None => continue,
};
if obj.connectivity_node.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "eq6001:Terminal-EXCH8ConnectivityNode".to_string(),
class: "Terminal".to_string(),
property: "Terminal.ConnectivityNode".to_string(),
message: "The Terminal is not associated with a ConnectivityNode.".to_string(),
severity: "sh:Violation".to_string(),
name: "C:600:EQ:Terminal:EXCH8ConnectivityNode".to_string(),
description: "ConnectivityNode object instances shall be included in Core Equipment profile instance. The association end Terminal.ConnectivityNode is optional in the Core Equipment profile instance. However, a model including topology requires Terminals to have an association to either ConnectivityNode, TopologyNode or both. The association end Terminal.TopologicalNode is required in cases where a RegulatingControl is associated with a Terminal.".to_string(),
});
}
}
violations
}