4.2 Installatietechnische systemen — Gespiegelde MEP elementen
Wat doet deze regel?
Deze regel controleert of MEP-elementen onbedoeld zijn gespiegeld.
Concreet controleert de regel
- Of een MEP FamilyInstance
handFlipped = trueheeft - Of een MEP FamilyInstance
facingFlipped = trueheeft - Systeemcategorieën waarvoor spiegelen logisch of irrelevant is, zijn uitgesloten
Waarom deze regel bestaat
Gespiegelde MEP-elementen kunnen leiden tot:
- foutieve aansluitingen
- incorrecte maatvoering
- onverwacht gedrag in systeemlogica en exports (IFC / berekeningen)
Daarom wordt spiegelen alleen toegestaan wanneer dit bewust en functioneel is toegepast.
{
"Id": "b829f497-7eec-402c-8bb2-d73f028d8199",
"Filter": {
"Type": "queryFilter",
"Properties": [
{
"Name": "Query",
"Value": "(\n /* All relevant GUIDs in one place */\n $paramGuids := {\n \"NLRS_C_SfB_tabel_1_code\": \"7b4acbe7-dcd9-4e30-85a5-98bc8a746427\"\n };\n\n /* Build one lookup table with metadata per GUID */\n $paramMetaByGuid := $merge(\n $$[type = \"Parameter\" and values.guid in $paramGuids.*].{\n $string(values.guid): {\n \"paramExist\": true,\n \"guid\": values.guid,\n \"name\": values.name\n }\n }\n );\n\n /* Shared parameter helper */\n $getSharedParam := function($object, $logicalName){\n (\n $guid := $lookup($paramGuids, $logicalName);\n $meta := $guid ? $lookup($paramMetaByGuid, $string($guid)) : undefined;\n $sp := $guid and $exists($object.values)\n ? $lookup($object.values, \"p_\" & $guid)\n : undefined;\n\n {\n \"exists\": $exists($sp),\n \"value\": $exists($sp) ? $sp.value : null,\n \"valueAsString\": $exists($sp) ? $sp.valueAsString : null,\n \"guid\": $meta ? $meta.guid : $guid,\n \"name\": $meta ? $meta.name : $logicalName\n }\n )\n };\n\n /* AssemblyCode inclusion regex */\n $assemblyCodeIncluded := /^5/i;\n\n /* Excluded MEP system categories */\n $excludedCategories := [\n \"OST_DuctTerminal\",\n \"OST_CableTray\",\n \"OST_CableTrayFitting\",\n \"OST_Conduit\",\n \"OST_DuctCurves\",\n \"OST_DuctFitting\",\n \"OST_FlexDuctCurves\",\n \"OST_PipingSystem\",\n \"OST_PipeFitting\",\n \"OST_Wire\"\n ];\n \n /* Filter FamilySymbols */\n $symbols :=\n $[\n type = \"FamilySymbol\"\n and values.category.type = \"Model\"\n and $not(values.category.label in $excludedCategories)\n and $string(values.assemblyCode) ~> $assemblyCodeIncluded\n ];\n\n /* Index symbols by id */\n $symIndex := $merge($symbols.{$string(id): $});\n \n /* Main query over FamilyInstances */\n $[type = \"FamilyInstance\" and $exists(parent)].(\n $sym := $lookup($symIndex, $string(parent.id));\n $sym ?\n {\n \"id\": id,\n \"type\": type,\n \"name\": name,\n \"Category\": $sym.values.category.label,\n \"assemblyCode\": $sym.values.assemblyCode,\n \"handFlipped\": values.handFlipped,\n \"facingFlipped\": values.facingFlipped,\n \"NLRS_C_SfB_tabel_1_code\": $getSharedParam($, \"NLRS_C_SfB_tabel_1_code\")\n }\n : ()\n )\n)\n",
"Type": null
}
],
"SubFilters": []
},
"Validation": {
"Type": "validationCollection",
"Name": "MEP mirror elements",
"ErrorMessage": "",
"Properties": [
{
"Name": "Operator",
"Value": {
"Type": "value",
"Properties": [
{
"Name": "value",
"Value": "and",
"Type": ""
}
]
}
}
],
"SubValidations": [
{
"Type": "validationCollection",
"Name": "Mirrored Elements",
"ErrorMessage": "#### Issue\nHet element is gespiegeld.\n\n#### Oplossing\nControleer of de oriëntatie van dit MEP-element bewust en functioneel correct is toegepast.\n\n#### Uitleg\nGespiegelde MEP-elementen kunnen leiden tot foutieve aansluitingen, incorrecte maatvoering en onvoorspelbaar gedrag in systeemlogica en exports.\n",
"Properties": [
{
"Name": "Operator",
"Value": {
"Type": "value",
"Properties": [
{
"Name": "value",
"Value": "and",
"Type": ""
}
]
}
}
],
"SubValidations": [
{
"Type": "validation",
"Name": "handFlipped",
"ErrorMessage": "#### Issue\n\nDit MEP-element is handmatig gespiegeld (handFlipped = true).\n\n#### Oplossing\n\nHerstel de oriëntatie van het element of plaats het opnieuw zodat de aansluitpunten correct zijn.\n\n#### Uitleg\n\nHandmatig gespiegeld geplaatste MEP-elementen kunnen leiden tot verkeerd aangesloten connectors en fouten in systeemgedrag.\n",
"Properties": [
{
"Name": "valueToValidate",
"Value": {
"Type": "querySelector",
"Properties": [
{
"Name": "query",
"Value": "handFlipped",
"Type": "bool"
}
]
}
},
{
"Name": "Validator",
"Value": {
"Type": "value",
"Properties": [
{
"Name": "value",
"Value": "bool:Is",
"Type": "bool"
}
]
}
},
{
"Name": "expectedValue",
"Value": {
"Type": "staticValueSelector",
"Properties": [
{
"Name": "value",
"Value": "false",
"Type": "bool"
}
]
}
}
],
"SubValidations": []
},
{
"Type": "validation",
"Name": "facingFlipped",
"ErrorMessage": "#### Issue\nDit MEP-element is gespiegeld in kijkrichting (facingFlipped = true).\n\n#### Oplossing\nControleer en corrigeer de oriëntatie zodat de aansluitingen logisch en technisch correct zijn.\n\n#### Uitleg\nFacing-flipped MEP-elementen kunnen onverwachte problemen veroorzaken bij aansluitingen en bij verdere verwerking van het model.\n",
"Properties": [
{
"Name": "valueToValidate",
"Value": {
"Type": "querySelector",
"Properties": [
{
"Name": "query",
"Value": "facingFlipped",
"Type": "bool"
}
]
}
},
{
"Name": "Validator",
"Value": {
"Type": "value",
"Properties": [
{
"Name": "value",
"Value": "bool:Is",
"Type": "bool"
}
]
}
},
{
"Name": "expectedValue",
"Value": {
"Type": "staticValueSelector",
"Properties": [
{
"Name": "value",
"Value": "false",
"Type": "bool"
}
]
}
}
],
"SubValidations": []
}
]
},
{
"Type": "validationCollection",
"Name": " NLRS_C_SfB tabel 1_code of Assembly Code komt uit lijst",
"ErrorMessage": "",
"Properties": [
{
"Name": "Operator",
"Value": {
"Type": "value",
"Properties": [
{
"Name": "value",
"Value": "or",
"Type": ""
}
]
}
}
],
"SubValidations": [
{
"Type": "validation",
"Name": "NLRS_C_SfB tabel 1_code uit lijst",
"ErrorMessage": "#### Issue\nVoor dit element is de waarde van de parameter **NLRS_C_SfB tabel 1_code** ongeldig.\n\n#### Oplossing\nPas de waarde van **NLRS_C_SfB tabel 1_code** aan zodat deze voorkomt in de toegestane lijst **NL:SfB_Tabel_1**.\n\n#### Uitleg\nVoor elementen waarvan de Assembly Code start met **5*.*** is het verplicht dat de parameter **NLRS_C_SfB tabel 1_code** een geldige waarde bevat volgens de NL:SfB_Tabel_1-classificatie. \nDe huidige waarde **{ActualValue}** komt niet voor in deze lijst.\n",
"Properties": [
{
"Name": "valueToValidate",
"Value": {
"Type": "querySelector",
"Properties": [
{
"Name": "query",
"Value": "NL_SfB_tabel_1_code.value",
"Type": "list"
}
]
}
},
{
"Name": "Validator",
"Value": {
"Type": "value",
"Properties": [
{
"Name": "value",
"Value": "list:IsIn",
"Type": "list"
}
]
}
},
{
"Name": "expectedValue",
"Value": {
"Type": "lookupDataSelector",
"Properties": [
{
"Name": "distinct",
"Value": "",
"Type": "list"
},
{
"Name": "query",
"Value": "code",
"Type": "list"
},
{
"Name": "lookupTable",
"Value": "NL:SfB_Tabel_1",
"Type": "list"
}
]
}
}
],
"SubValidations": []
},
{
"Type": "validation",
"Name": "Assembly Code komt uit lijst",
"ErrorMessage": "#### Issue\nVoor dit element is de waarde van de parameter **Assembly Code** ongeldig.\n\n#### Oplossing\nPas de waarde van **Assembly Code** aan zodat deze voorkomt in de toegestane lijst **NL:SfB_Tabel_1**.\n",
"Properties": [
{
"Name": "valueToValidate",
"Value": {
"Type": "querySelector",
"Properties": [
{
"Name": "query",
"Value": "assemblyCode",
"Type": "list"
}
]
}
},
{
"Name": "Validator",
"Value": {
"Type": "value",
"Properties": [
{
"Name": "value",
"Value": "list:IsIn",
"Type": "list"
}
]
}
},
{
"Name": "expectedValue",
"Value": {
"Type": "lookupDataSelector",
"Properties": [
{
"Name": "distinct",
"Value": "",
"Type": "list"
},
{
"Name": "query",
"Value": "code",
"Type": "list"
},
{
"Name": "lookupTable",
"Value": "NL:SfB_Tabel_1",
"Type": "list"
}
]
}
}
],
"SubValidations": []
}
]
}
]
},
"Details": {
"Name": "Gespiegelde MEP elementen",
"Impact": 2,
"Priority": 1,
"Tags": [
"4.2 Installatietechnische systemen"
],
"Description": "#### Wat doet deze regel?\n\nDeze regel controleert of MEP-elementen onbedoeld zijn gespiegeld.\n\n#### Concreet controleert de regel\n\n- Of een MEP FamilyInstance `handFlipped = true` heeft\n- Of een MEP FamilyInstance `facingFlipped = true` heeft\n- Systeemcategorieën waarvoor spiegelen logisch of irrelevant is, zijn uitgesloten\n\n#### Waarom deze regel bestaat\n\nGespiegelde MEP-elementen kunnen leiden tot:\n- foutieve aansluitingen\n- incorrecte maatvoering\n- onverwacht gedrag in systeemlogica en exports (IFC / berekeningen)\n\nDaarom wordt spiegelen alleen toegestaan wanneer dit bewust en functioneel is toegepast.\n",
"HelpUrl": "https://help.daqs.io/DAQS/Elements/mirroredMEP/",
"TimeToSolve": 10,
"AllDisciplines": false,
"Disciplines": [
"0B97F964-EDD8-4563-9EED-FBEC183CFFFC",
"044C0A71-0B60-4966-AC75-373092B8AF54",
"B42B2EFC-FDBC-4D29-9624-1D7431AFEC43",
"991A466B-4418-41A0-B308-BFBF69B4666F",
"7FF10A60-0A35-482B-92E9-2FC9C928F8D2",
"FE736341-457A-4953-854B-EE5944823CA8"
]
},
"Metadata": []
}