Skip to content

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 = true heeft
  • Of een MEP FamilyInstance facingFlipped = true heeft
  • 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": []
}