From 20ec6780897440a3916512d8d33647337ca086ac Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Mon, 14 Sep 2020 14:33:54 -0600 Subject: [PATCH 01/76] feat(L200): add envelope roof tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 19 +++++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 7 +++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 23 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index b2a17319..69594c5b 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -145,6 +145,18 @@ + + + Whole building + + + + 123 + Excellent + + + + @@ -184,6 +196,13 @@ + + + Wood frame + 1 + + + diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 5dcabc27..4ecde19c 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -56,4 +56,9 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:OnsiteStorageTransmissionGenerationSystems/auc:OnsiteStorageTransmissionGenerationSystem/auc:EnergyConversionType/auc:Generation/auc:OnsiteGenerationType/auc:Other","false","","","auc:OtherEnergyGenerationTechnology","","","" "","","","","","","","","","auc:OutputResourceType","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:OnsiteStorageTransmissionGenerationSystems/auc:OnsiteStorageTransmissionGenerationSystem[auc:EnergyConversionType/auc:Storage/auc:EnergyStorageTechnology]","false","","","auc:Capacity","","","" -"","","","","","","","","","auc:CapacityUnits","","","" \ No newline at end of file +"","","","","","","","","","auc:CapacityUnits","","","" +"Building Envelope","ASHRAE 211 6.2.1.2","Roof","ASHRAE 211 6.2.1.2 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:RoofSystems/auc:RoofSystem","true","","","auc:RoofConstruction","","","" +"","","","","","","","","","auc:RoofRValue or auc:RoofUFactor","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = ""Whole building""]/auc:Roofs/auc:Roof","true","","","//auc:RoofSystem[@ID = current()/auc:RoofID/@IDref]","Every auc:RoofID within auc:SectionType of ""Whole building"" must link to a valid auc:RoofSystem's ID","","" +"","","","","","","","","","auc:RoofID/auc:RoofArea","","","" +"","","","","","","","","","auc:RoofID/auc:RoofCondition","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index bcc6899e..b7a23322 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -18,6 +18,10 @@ + + + + Document Structure Prerequisites Misc Building Info @@ -150,4 +154,23 @@ auc:CapacityUnits + + Document Structure Prerequisites Roof + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:RoofSystems/auc:RoofSystem + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]/auc:Roofs/auc:Roof + + + + Roof + + auc:RoofConstruction + auc:RoofRValue or auc:RoofUFactor + + + Every auc:RoofID within auc:SectionType of "Whole building" must link to a valid auc:RoofSystem's ID + auc:RoofID/auc:RoofArea + auc:RoofID/auc:RoofCondition + + From c2cfa4ec574b4d2f3f39503ae3fd0b8e797b9628 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Mon, 14 Sep 2020 17:04:00 -0600 Subject: [PATCH 02/76] feat(L200): add envelope wall tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 46 ++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 84 ++++++++++++++++++- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 19 ++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 66 +++++++++++++++ 4 files changed, 212 insertions(+), 3 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 69594c5b..00ee6f5d 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -93,6 +93,10 @@ + 123 + 123 + 0.2 + 1993 @@ -148,6 +152,41 @@ Whole building + Rectangular + + + A1 + + + 123 + + + + + B1 + + + 123 + + + + + C1 + + + 123 + + + + + D1 + + + 123 + + + + @@ -196,6 +235,13 @@ + + + Concrete poured + 1 + + + Wood frame diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index c7dd01d3..1d561403 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -1,10 +1,51 @@ import os +from lxml import etree +import pytest -from tools.constants import BSYNC_NSMAP +from tools.constants import BSYNC_NSMAP, BSYNC_NS from tools.validate_sch import validate_schematron -from schematron.conftest import AssertFailureRolesMixin, v2_2_0_SCH_DIR, exemplary_tree +from schematron.conftest import AssertFailureRolesMixin, v2_2_0_SCH_DIR, exemplary_tree, replace_element, remove_element + + +def qname(tag): + return etree.QName(BSYNC_NS, tag) + + +sides_by_footprint = { + 'Rectangular': ['A1', 'B1', 'C1', 'D1'], + 'L-Shape': ['A1', 'B1', 'A2', 'B2', 'C1', 'D1'], + 'U-Shape': ['A1', 'B1', 'A2', 'D1', 'A3', 'B2', 'C1', 'D2'], + 'T-Shape': ['A1', 'B1', 'C1', 'B2', 'C2', 'D1', 'C3', 'D2'], + 'H-Shape': ['A1', 'B1', 'A2', 'D1', 'A3', 'B2', 'C1', 'D2', 'C2', 'B3', 'C3', 'D3'], + 'O-Shape': ['A1', 'B1', 'C1', 'D1', 'A2', 'B2', 'C2', 'D2'], +} + + +def _sides_factory(footprint_shape, wall_id='Wall-A'): + """ + Returns an auc:Sides element containing valid auc:Sides all pointing to the same auc:WallSystem ID + """ + + side_names = sides_by_footprint.get(footprint_shape) + if side_names is None: + raise Exception(f'Invalid footprint shape: "{footprint_shape}"') + + sides_elem = etree.Element(qname('Sides'), nsmap=BSYNC_NSMAP) + for side_name in side_names: + side_elem = etree.SubElement(sides_elem, qname('Side'), nsmap=BSYNC_NSMAP) + + side_num_elem = etree.SubElement(side_elem, qname('SideNumber'), nsmap=BSYNC_NSMAP) + side_num_elem.text = side_name + + wall_ids_elem = etree.SubElement(side_elem, qname('WallIDs'), nsmap=BSYNC_NSMAP) + wall_id_elem = etree.SubElement(wall_ids_elem, qname('WallID'), nsmap=BSYNC_NSMAP, IDref=wall_id) + + wall_area_elem = etree.SubElement(wall_id_elem, qname('WallArea'), nsmap=BSYNC_NSMAP) + wall_area_elem.text = '123' + + return sides_elem class TestL200Audit(AssertFailureRolesMixin): @@ -55,3 +96,42 @@ def test_runs_generation_storage_systems_tests_when_they_exist(self): # -- Assert self.assert_failure_messages(failures, {}) + + @pytest.mark.parametrize("footprint_shape", [ + ("Rectangular"), + ("L-Shape"), + ("U-Shape"), + ("T-Shape"), + ("H-Shape"), + ("O-Shape")]) + def test_footprint_shape_and_number_of_sides_tests_work_as_expected(self, footprint_shape): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + # replace auc:FootprintShape and auc:Sides + section_elem = tree.xpath('//auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]', namespaces=BSYNC_NSMAP) + assert len(section_elem) == 1 + section_elem = section_elem[0] + + footprint_elem = section_elem.xpath('auc:FootprintShape', namespaces=BSYNC_NSMAP) + assert len(footprint_elem) == 1 + footprint_elem = footprint_elem[0] + footprint_elem.text = footprint_shape + + replace_element(section_elem, 'auc:Sides', _sides_factory(footprint_shape)) + + # make sure it's valid with substituted elements + failures = validate_schematron(self.schematron, tree) + self.assert_failure_messages(failures, {}) + + # remove an auc:Side to make it invalid + remove_element(section_elem, 'auc:Sides/auc:Side[1]') + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + expected_sides = len(sides_by_footprint[footprint_shape]) + self.assert_failure_messages(failures, { + 'ERROR': [f'Incorrect number of auc:Side elements for footprint shape "{footprint_shape}" (found {expected_sides - 1})'] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 4ecde19c..d49fbd7f 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -61,4 +61,21 @@ "","","","","","","","","","auc:RoofRValue or auc:RoofUFactor","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = ""Whole building""]/auc:Roofs/auc:Roof","true","","","//auc:RoofSystem[@ID = current()/auc:RoofID/@IDref]","Every auc:RoofID within auc:SectionType of ""Whole building"" must link to a valid auc:RoofSystem's ID","","" "","","","","","","","","","auc:RoofID/auc:RoofArea","","","" -"","","","","","","","","","auc:RoofID/auc:RoofCondition","","","" \ No newline at end of file +"","","","","","","","","","auc:RoofID/auc:RoofCondition","","","" +"","","Walls - General Requirements","ASHRAE 211 6.2.1.2 (b)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building","true","","","auc:TotalExteriorAboveGradeWallArea","","","" +"","","","","","","","","","auc:TotalExteriorBelowGradeWallArea","","","" +"","","","","","","","","","auc:OverallWindowToWallRatio","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:WallSystems/auc:WallSystem","true","","","auc:ExteriorWallConstruction","","","" +"","","","","","","","","","auc:WallRValue or auc:WallUFactor","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]","true","","","auc:FootprintShape","","","" +"","","Walls - Building Sides","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'Other']","false","","","auc:NumberOfSides","Must provide auc:NumberOfSides if auc:FootprintShape is Other","","" +"","","","","","","","","","auc:NumberOfSides = count(auc:Sides/auc:Side)","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'Rectangular']","false","","","count(auc:Sides/auc:Side) = 4","Incorrect number of auc:Side elements for footprint shape ""Rectangular"" (found )","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'L-Shape']","false","","","count(auc:Sides/auc:Side) = 6","Incorrect number of auc:Side elements for footprint shape ""L-Shape"" (found )","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'U-Shape']","false","","","count(auc:Sides/auc:Side) = 8","Incorrect number of auc:Side elements for footprint shape ""U-Shape"" (found )","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'T-Shape']","false","","","count(auc:Sides/auc:Side) = 8","Incorrect number of auc:Side elements for footprint shape ""T-Shape"" (found )","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'H-Shape']","false","","","count(auc:Sides/auc:Side) = 12","Incorrect number of auc:Side elements for footprint shape ""H-Shape"" (found )","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'O-Shape']","false","","","count(auc:Sides/auc:Side) = 8","Incorrect number of auc:Side elements for footprint shape ""O-Shape"" (found )","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side","true","","","auc:WallIDs","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WallIDs/auc:WallID","true","","","//auc:WallSystem[@ID = current()/@IDref]","auc:WallID in auc:Side should link to an auc:WallSystem's ID","","" +"","","","","","","","","","auc:WallArea","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index b7a23322..e23c72d3 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -21,6 +21,10 @@ + + + + Document Structure Prerequisites Misc Building Info @@ -173,4 +177,66 @@ auc:RoofID/auc:RoofCondition + + Document Structure Prerequisites Walls - General Requirements + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:WallSystems/auc:WallSystem + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"] + + + + Walls - General Requirements + + auc:TotalExteriorAboveGradeWallArea + auc:TotalExteriorBelowGradeWallArea + auc:OverallWindowToWallRatio + + + auc:ExteriorWallConstruction + auc:WallRValue or auc:WallUFactor + + + auc:FootprintShape + + + + Document Structure Prerequisites Walls - Building Sides + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side/auc:WallIDs/auc:WallID + + + + Walls - Building Sides + + Must provide auc:NumberOfSides if auc:FootprintShape is Other + auc:NumberOfSides = count(auc:Sides/auc:Side) + + + Incorrect number of auc:Side elements for footprint shape "Rectangular" (found ) + + + Incorrect number of auc:Side elements for footprint shape "L-Shape" (found ) + + + Incorrect number of auc:Side elements for footprint shape "U-Shape" (found ) + + + Incorrect number of auc:Side elements for footprint shape "T-Shape" (found ) + + + Incorrect number of auc:Side elements for footprint shape "H-Shape" (found ) + + + Incorrect number of auc:Side elements for footprint shape "O-Shape" (found ) + + + auc:WallIDs + + + auc:WallID in auc:Side should link to an auc:WallSystem's ID + auc:WallArea + + From b98ee18a3b913e5d64d2da6346051d4a1f5ad61c Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Tue, 15 Sep 2020 10:44:54 -0600 Subject: [PATCH 03/76] feat(L200): add envelope fenestration tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 70 ++++++++++++++++- .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 30 +++++++- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 23 +++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 77 ++++++++++++++++++- 4 files changed, 191 insertions(+), 9 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 00ee6f5d..fc651efe 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -5,7 +5,7 @@ for a Level 2 audit. --> + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://buildingsync.net/schemas/bedes-auc/2019 https://raw.githubusercontent.com/BuildingSync/schema/develop/BuildingSync.xsd" version="2.2.0-pr1"> @@ -150,7 +150,7 @@ - + Whole building Rectangular @@ -161,6 +161,16 @@ 123 + + + 123 + + + + + 123 + + B1 @@ -169,6 +179,16 @@ 123 + + + 123 + + + + + 123 + + C1 @@ -177,6 +197,16 @@ 123 + + + 123 + + + + + 123 + + D1 @@ -185,6 +215,16 @@ 123 + + + 123 + + + + + 123 + + @@ -249,6 +289,30 @@ + + + + + + Steel + Low e + Single pane + 0.5 + 0.5 + 0.5 + + + + + Insulated metal + 0.5 + + + Steel + 0.5 + + + @@ -517,7 +581,7 @@ -------------- Notes on any irregularities in meter readings - MMbtu + MMBtu All end uses 0.22 0.22 diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 1d561403..b111cf4e 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -23,9 +23,9 @@ def qname(tag): } -def _sides_factory(footprint_shape, wall_id='Wall-A'): +def _sides_factory(footprint_shape, wall_id='Wall-A', window_id='Window-A', door_id='Door-A'): """ - Returns an auc:Sides element containing valid auc:Sides all pointing to the same auc:WallSystem ID + Returns an auc:Sides element containing valid auc:Sides all pointing to the same wall, windows, and doors ID """ side_names = sides_by_footprint.get(footprint_shape) @@ -41,10 +41,19 @@ def _sides_factory(footprint_shape, wall_id='Wall-A'): wall_ids_elem = etree.SubElement(side_elem, qname('WallIDs'), nsmap=BSYNC_NSMAP) wall_id_elem = etree.SubElement(wall_ids_elem, qname('WallID'), nsmap=BSYNC_NSMAP, IDref=wall_id) - wall_area_elem = etree.SubElement(wall_id_elem, qname('WallArea'), nsmap=BSYNC_NSMAP) wall_area_elem.text = '123' + window_ids_elem = etree.SubElement(side_elem, qname('WindowIDs'), nsmap=BSYNC_NSMAP) + window_id_elem = etree.SubElement(window_ids_elem, qname('WindowID'), nsmap=BSYNC_NSMAP, IDref=window_id) + window_area_elem = etree.SubElement(window_id_elem, qname('FenestrationArea'), nsmap=BSYNC_NSMAP) + window_area_elem.text = '123' + + door_ids_elem = etree.SubElement(side_elem, qname('DoorIDs'), nsmap=BSYNC_NSMAP) + door_id_elem = etree.SubElement(door_ids_elem, qname('DoorID'), nsmap=BSYNC_NSMAP, IDref=door_id) + door_area_elem = etree.SubElement(door_id_elem, qname('FenestrationArea'), nsmap=BSYNC_NSMAP) + door_area_elem.text = '123' + return sides_elem @@ -135,3 +144,18 @@ def test_footprint_shape_and_number_of_sides_tests_work_as_expected(self, footpr self.assert_failure_messages(failures, { 'ERROR': [f'Incorrect number of auc:Side elements for footprint shape "{footprint_shape}" (found {expected_sides - 1})'] }) + + def test_all_fenestration_tests_are_run(self): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + # -- Act + failures = validate_schematron( + self.schematron, + tree, + phase='building_envelope_-_fenestration', + # using strict here requires that all rule contexts are fired (ie none can be skipped) + strict_context=True) + + # -- Assert + self.assert_failure_messages(failures, {}) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index d49fbd7f..d9d07373 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -57,7 +57,7 @@ "","","","","","","","","","auc:OutputResourceType","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:OnsiteStorageTransmissionGenerationSystems/auc:OnsiteStorageTransmissionGenerationSystem[auc:EnergyConversionType/auc:Storage/auc:EnergyStorageTechnology]","false","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" -"Building Envelope","ASHRAE 211 6.2.1.2","Roof","ASHRAE 211 6.2.1.2 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:RoofSystems/auc:RoofSystem","true","","","auc:RoofConstruction","","","" +"Building Envelope - Roof and Walls","ASHRAE 211 6.2.1.2 (a) (b)","Roof","ASHRAE 211 6.2.1.2 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:RoofSystems/auc:RoofSystem","true","","","auc:RoofConstruction","","","" "","","","","","","","","","auc:RoofRValue or auc:RoofUFactor","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = ""Whole building""]/auc:Roofs/auc:Roof","true","","","//auc:RoofSystem[@ID = current()/auc:RoofID/@IDref]","Every auc:RoofID within auc:SectionType of ""Whole building"" must link to a valid auc:RoofSystem's ID","","" "","","","","","","","","","auc:RoofID/auc:RoofArea","","","" @@ -78,4 +78,23 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'O-Shape']","false","","","count(auc:Sides/auc:Side) = 8","Incorrect number of auc:Side elements for footprint shape ""O-Shape"" (found )","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side","true","","","auc:WallIDs","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WallIDs/auc:WallID","true","","","//auc:WallSystem[@ID = current()/@IDref]","auc:WallID in auc:Side should link to an auc:WallSystem's ID","","" -"","","","","","","","","","auc:WallArea","","","" \ No newline at end of file +"","","","","","","","","","auc:WallArea","","","" +"Building Envelope - Fenestration","ASHRAE 211 6.2.1.2 (c)","Fenestration General Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building","true","","","auc:OverallWindowToWallRatio","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window]","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WindowIDs/auc:WindowID[@IDref = current()/@ID]","Each auc:Window must be linked to an auc:Side","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door]","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:DoorIDs/auc:DoorID[@IDref = current()/@ID]","Each auc:Door must be linked to an auc:Side","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side","true","","","auc:WindowIDs/auc:WindowID","Found an auc:Side with no linked auc:Window","WARNING","" +"","","","","","","","","","auc:DoorIDs/auc:DoorID","Found an auc:Side with no linked auc:Door","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WindowIDs/auc:WindowID","true","","","//auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window and @ID = current()/@IDref]","An auc:Side element's auc:WindowIDs/auc:WindowID must point to a valid auc:FenestrationSystem","","" +"","","","","","","","","","auc:FenestrationArea or auc:WindowToWallRatio","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:DoorIDs/auc:DoorID","true","","","//auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door and @ID = current()/@IDref]","An auc:Side element's auc:DoorIDs/auc:DoorID must point to a valid auc:FenestrationSystem","","" +"","","","","","","","","","auc:FenestrationArea","","","" +"","","Fenestration Windows","ASHRAE 211 6.2.1.2 (c)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window]","true","","","auc:FenestrationFrameMaterial","","","" +"","","","","","","","","","auc:GlassType","","","" +"","","","","","","","","","auc:FenestrationGlassLayers","","","" +"","","","","","","","","","auc:FenestrationRValue or auc:FenestrationUFactor","","","" +"","","","","","","","","","auc:SolarHeatGainCoefficient","","WARNING","" +"","","","","","","","","","auc:VisibleTransmittance","","WARNING","" +"","","Fenestration Doors","ASHRAE 211 6.2.1.2 (c)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door]","true","","","auc:FenestrationType/auc:Door/auc:ExteriorDoorType","","","" +"","","","","","","","","","auc:FenestrationFrameMaterial","","","" +"","","","","","","","","","auc:FenestrationRValue or auc:FenestrationUFactor","","","" +"","","","","","","","","","auc:FenestrationType/auc:Door/auc:DoorGlazedAreaFraction","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index e23c72d3..09368459 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -18,7 +18,7 @@ - + @@ -26,6 +26,14 @@ + + + + + + + + Document Structure Prerequisites Misc Building Info @@ -239,4 +247,71 @@ auc:WallArea + + Document Structure Prerequisites Fenestration General Requirements + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window] + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door] + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side/auc:WindowIDs/auc:WindowID + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side/auc:DoorIDs/auc:DoorID + + + + Fenestration General Requirements + + auc:OverallWindowToWallRatio + + + Each auc:Window must be linked to an auc:Side + + + Each auc:Door must be linked to an auc:Side + + + Found an auc:Side with no linked auc:Window + Found an auc:Side with no linked auc:Door + + + An auc:Side element's auc:WindowIDs/auc:WindowID must point to a valid auc:FenestrationSystem + auc:FenestrationArea or auc:WindowToWallRatio + + + An auc:Side element's auc:DoorIDs/auc:DoorID must point to a valid auc:FenestrationSystem + auc:FenestrationArea + + + + Document Structure Prerequisites Fenestration Windows + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window] + + + + Fenestration Windows + + auc:FenestrationFrameMaterial + auc:GlassType + auc:FenestrationGlassLayers + auc:FenestrationRValue or auc:FenestrationUFactor + auc:SolarHeatGainCoefficient + auc:VisibleTransmittance + + + + Document Structure Prerequisites Fenestration Doors + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door] + + + + Fenestration Doors + + auc:FenestrationType/auc:Door/auc:ExteriorDoorType + auc:FenestrationFrameMaterial + auc:FenestrationRValue or auc:FenestrationUFactor + auc:FenestrationType/auc:Door/auc:DoorGlazedAreaFraction + + From ec6509d6b2dc0661495400a0729e5b565efbaad1 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Tue, 15 Sep 2020 13:10:55 -0600 Subject: [PATCH 04/76] feat(L200): add foundation system tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 20 +++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 137 ++++++++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 12 +- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 39 +++++ 4 files changed, 207 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index fc651efe..227f8ab0 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -235,6 +235,13 @@ + + + + 123 + + + @@ -313,6 +320,19 @@ + + + + + + 0.5 + + + + Concrete poured + + + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index b111cf4e..914c70b6 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -159,3 +159,140 @@ def test_all_fenestration_tests_are_run(self): # -- Assert self.assert_failure_messages(failures, {}) + + def test_is_invalid_when_ground_coupling_is_slab_on_grade_and_invalid(self): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + # replace the ground coupling with another valid ground coupling + new_coupling_xml = f""" + + + 0.5 + + + """ + new_coupling_tree = etree.fromstring(new_coupling_xml) + ground_coupling_xpath = '/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem/auc:GroundCouplings/auc:GroundCoupling' + replace_element(tree, ground_coupling_xpath, new_coupling_tree) + + # verify it's valid + failures = validate_schematron(self.schematron, tree) + self.assert_failure_messages(failures, {}) + + # remove an element from the coupling + remove_xpath = ground_coupling_xpath + '/auc:SlabOnGrade/auc:SlabUFactor' + remove_element(tree, remove_xpath) + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + self.assert_failure_messages(failures, { + 'WARNING': ['auc:SlabRValue or auc:SlabUFactor'] + }) + + def test_is_invalid_when_ground_coupling_is_basement_and_invalid(self): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + # replace the ground coupling with another valid ground coupling + new_coupling_xml = f""" + + + Concrete poured + 0.5 + + + """ + new_coupling_tree = etree.fromstring(new_coupling_xml) + ground_coupling_xpath = '/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem/auc:GroundCouplings/auc:GroundCoupling' + replace_element(tree, ground_coupling_xpath, new_coupling_tree) + + # verify it's valid + failures = validate_schematron(self.schematron, tree) + self.assert_failure_messages(failures, {}) + + # remove an element from the coupling + remove_xpath = ground_coupling_xpath + '/auc:Basement/auc:FoundationWallUFactor' + remove_element(tree, remove_xpath) + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + self.assert_failure_messages(failures, { + 'WARNING': ['auc:FoundationWallRValue or auc:FoundationWallUFactor'] + }) + + def test_is_invalid_when_ground_coupling_is_crawlspace_ventilated_and_invalid(self): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + # replace the ground coupling with another valid ground coupling + new_coupling_xml = f""" + + + + + 0.5 + + + + + """ + new_coupling_tree = etree.fromstring(new_coupling_xml) + ground_coupling_xpath = '/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem/auc:GroundCouplings/auc:GroundCoupling' + replace_element(tree, ground_coupling_xpath, new_coupling_tree) + + # verify it's valid + failures = validate_schematron(self.schematron, tree) + self.assert_failure_messages(failures, {}) + + # remove an element from the coupling + remove_xpath = ground_coupling_xpath + '/auc:Crawlspace/auc:CrawlspaceVenting/auc:Ventilated/auc:FloorUFactor' + remove_element(tree, remove_xpath) + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + self.assert_failure_messages(failures, { + 'WARNING': ['auc:FloorRValue or auc:FloorUFactor'] + }) + + def test_is_invalid_when_ground_coupling_is_crawlspace_unventilated_and_invalid(self): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + # replace the ground coupling with another valid ground coupling + new_coupling_xml = f""" + + + + + 0.5 + + + + + """ + new_coupling_tree = etree.fromstring(new_coupling_xml) + ground_coupling_xpath = '/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem/auc:GroundCouplings/auc:GroundCoupling' + replace_element(tree, ground_coupling_xpath, new_coupling_tree) + + # verify it's valid + failures = validate_schematron(self.schematron, tree) + self.assert_failure_messages(failures, {}) + + # remove an element from the coupling + remove_xpath = ground_coupling_xpath + '/auc:Crawlspace/auc:CrawlspaceVenting/auc:Unventilated/auc:FoundationWallUFactor' + remove_element(tree, remove_xpath) + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + self.assert_failure_messages(failures, { + 'WARNING': ['auc:FoundationWallRValue or auc:FoundationWallUFactor'] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index d9d07373..0b624b03 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -97,4 +97,14 @@ "","","Fenestration Doors","ASHRAE 211 6.2.1.2 (c)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door]","true","","","auc:FenestrationType/auc:Door/auc:ExteriorDoorType","","","" "","","","","","","","","","auc:FenestrationFrameMaterial","","","" "","","","","","","","","","auc:FenestrationRValue or auc:FenestrationUFactor","","","" -"","","","","","","","","","auc:FenestrationType/auc:Door/auc:DoorGlazedAreaFraction","","","" \ No newline at end of file +"","","","","","","","","","auc:FenestrationType/auc:Door/auc:DoorGlazedAreaFraction","","","" +"Building Envelope - Floors and underground walls","ASHRAE 211 6.2.1.2 (c)","Foundation system","ASHRAE 211 6.2.1.2 (c)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem","true","","","auc:FloorConstructionType","","","" +"","","","","","","","","","auc:GroundCouplings/auc:GroundCoupling/*","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem/auc:GroundCouplings/auc:GroundCoupling/auc:SlabOnGrade","false","","","auc:SlabRValue or auc:SlabUFactor","","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem/auc:GroundCouplings/auc:GroundCoupling/auc:Basement","false","","","auc:FoundationWallConstruction","","","" +"","","","","","","","","","auc:FoundationWallRValue or auc:FoundationWallUFactor","","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem/auc:GroundCouplings/auc:GroundCoupling/auc:Crawlspace/auc:CrawlspaceVenting/auc:Ventilated","false","","","auc:FloorRValue or auc:FloorUFactor","","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem/auc:GroundCouplings/auc:GroundCoupling/auc:Crawlspace/auc:CrawlspaceVenting/auc:Unventilated","false","","","auc:FoundationWallRValue or auc:FoundationWallUFactor","","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = ""Whole building""]","true","","","count(auc:Foundations/auc:Foundation/auc:FoundationID) >= 1","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = ""Whole building""]/auc:Foundations/auc:Foundation/auc:FoundationID","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem[@ID = current()/@IDref]","auc:FoundationID must point to a valid auc:FoundationSystem","","" +"","","","","","","","","","auc:FoundationArea","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 09368459..4ed1b8a4 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -34,6 +34,10 @@ + + + + Document Structure Prerequisites Misc Building Info @@ -314,4 +318,39 @@ auc:FenestrationType/auc:Door/auc:DoorGlazedAreaFraction + + Document Structure Prerequisites Foundation system + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"] + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]/auc:Foundations/auc:Foundation/auc:FoundationID + + + + Foundation system + + auc:FloorConstructionType + auc:GroundCouplings/auc:GroundCoupling/* + + + auc:SlabRValue or auc:SlabUFactor + + + auc:FoundationWallConstruction + auc:FoundationWallRValue or auc:FoundationWallUFactor + + + auc:FloorRValue or auc:FloorUFactor + + + auc:FoundationWallRValue or auc:FoundationWallUFactor + + + count(auc:Foundations/auc:Foundation/auc:FoundationID) >= 1 + + + auc:FoundationID must point to a valid auc:FoundationSystem + auc:FoundationArea + + From 64210c49bce86a99c56ddee3630d804658bd8b20 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Tue, 15 Sep 2020 13:57:17 -0600 Subject: [PATCH 05/76] feat(L200): add tightness tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 26 ++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 10 ++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 42 +++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 227f8ab0..8a010b1c 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -383,6 +383,32 @@ kW + + + + Notes on the test conducted + Very Tight + 123 + CFM25 + Blower door + + + + + + + + + + + Notes on the test conducted + + + + + + + diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 0b624b03..3b5826c2 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -107,4 +107,12 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem/auc:GroundCouplings/auc:GroundCoupling/auc:Crawlspace/auc:CrawlspaceVenting/auc:Unventilated","false","","","auc:FoundationWallRValue or auc:FoundationWallUFactor","","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = ""Whole building""]","true","","","count(auc:Foundations/auc:Foundation/auc:FoundationID) >= 1","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = ""Whole building""]/auc:Foundations/auc:Foundation/auc:FoundationID","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FoundationSystems/auc:FoundationSystem[@ID = current()/@IDref]","auc:FoundationID must point to a valid auc:FoundationSystem","","" -"","","","","","","","","","auc:FoundationArea","","","" \ No newline at end of file +"","","","","","","","","","auc:FoundationArea","","","" +"Building Envelope - Enclosure Tightness","ASHRAE 211 6.2.1.2 (e)","Air Infiltration General Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:AirInfiltrationSystems/auc:AirInfiltrationSystem","true","","","auc:Tightness","","","" +"","","","","","","","","","auc:AirInfiltrationTest","","","" +"","","","","","","","","","auc:AirInfiltrationNotes","","","" +"","","","","","","","","","auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = //auc:Sections/auc:Section[auc:SectionType = 'Whole building']/@ID]","auc:AirInfiltrationSystem must be linked to auc:Section[auc:SectionType = 'Whole building']","","" +"","","Air Infiltration Blower or Tracer Test","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:AirInfiltrationSystems/auc:AirInfiltrationSystem[auc:AirInfiltrationTest/text() = 'Blower door' or auc:AirInfiltrationTest/text() = 'Tracer gas']","false","","","auc:AirInfiltrationValue","","","" +"","","","","","","","","","auc:AirInfiltrationValueUnits","","","" +"","","Water Infiltration","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:WaterInfiltrationSystems/auc:WaterInfiltrationSystem","true","","","auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = //auc:Sections/auc:Section[auc:SectionType = 'Whole building']/@ID]","auc:WaterInfiltrationSystem must be linked to auc:Section[auc:SectionType = 'Whole building']","","" +"","","","","","","","","","auc:WaterInfiltrationNotes","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 4ed1b8a4..4fd2ded9 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -38,6 +38,13 @@ + + + + + + + Document Structure Prerequisites Misc Building Info @@ -353,4 +360,39 @@ auc:FoundationArea + + Document Structure Prerequisites Air Infiltration General Requirements + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:AirInfiltrationSystems/auc:AirInfiltrationSystem + + + + Air Infiltration General Requirements + + auc:Tightness + auc:AirInfiltrationTest + auc:AirInfiltrationNotes + auc:AirInfiltrationSystem must be linked to auc:Section[auc:SectionType = 'Whole building'] + + + + Air Infiltration Blower or Tracer Test + + auc:AirInfiltrationValue + auc:AirInfiltrationValueUnits + + + + Document Structure Prerequisites Water Infiltration + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:WaterInfiltrationSystems/auc:WaterInfiltrationSystem + + + + Water Infiltration + + auc:WaterInfiltrationSystem must be linked to auc:Section[auc:SectionType = 'Whole building'] + auc:WaterInfiltrationNotes + + From 355272e86254986d12204fea42dbd2679f64e473 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 17 Sep 2020 11:51:38 -0600 Subject: [PATCH 06/76] fix(exemplary): fix MMBtu units for NG ResourceUse --- schematron/v2.2.0/exemplary_files/L100_Audit.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schematron/v2.2.0/exemplary_files/L100_Audit.xml b/schematron/v2.2.0/exemplary_files/L100_Audit.xml index 312aa364..8bc2217f 100644 --- a/schematron/v2.2.0/exemplary_files/L100_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L100_Audit.xml @@ -296,7 +296,7 @@ -------------- Notes on any irregularities in meter readings - MMbtu + MMBtu All end uses 0.22 0.22 From 583e82e4782ae21a81da5cd4b7b454a095f51b85 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 17 Sep 2020 15:42:28 -0600 Subject: [PATCH 07/76] feat(L200): test HVAC systems year installed --- .../v2.2.0/tests/data/HVAC_example1.xml | 47 +++++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 26 ++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 8 +++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 24 ++++++++++ 4 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 schematron/v2.2.0/tests/data/HVAC_example1.xml diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml new file mode 100644 index 00000000..a002b1e2 --- /dev/null +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + 2020 + + + + + 2020 + + + + + 2020 + + + + + + + 2020 + + + + + 2020 + + + + + 2020 + + + + + + + + + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 914c70b6..578bce8b 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -296,3 +296,29 @@ def test_is_invalid_when_ground_coupling_is_crawlspace_unventilated_and_invalid( self.assert_failure_messages(failures, { 'WARNING': ['auc:FoundationWallRValue or auc:FoundationWallUFactor'] }) + + +class TestL200AuditHvacSystems(AssertFailureRolesMixin): + schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') + example_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data', 'HVAC_example1.xml') + + @pytest.mark.parametrize("xpath_to_remove", [ + '//auc:CoolingPlant/auc:YearInstalled', + '//auc:HeatingPlant/auc:YearInstalled', + '//auc:CondenserPlant/auc:YearInstalled', + '//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:YearInstalled', + '//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:YearInstalled', + '//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:YearInstalled', + ]) + def test_is_invalid_when_missing_year_installed(self, xpath_to_remove): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_year_installed') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': ['auc:YearInstalled'] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 3b5826c2..41071394 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -115,4 +115,10 @@ "","","Air Infiltration Blower or Tracer Test","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:AirInfiltrationSystems/auc:AirInfiltrationSystem[auc:AirInfiltrationTest/text() = 'Blower door' or auc:AirInfiltrationTest/text() = 'Tracer gas']","false","","","auc:AirInfiltrationValue","","","" "","","","","","","","","","auc:AirInfiltrationValueUnits","","","" "","","Water Infiltration","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:WaterInfiltrationSystems/auc:WaterInfiltrationSystem","true","","","auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = //auc:Sections/auc:Section[auc:SectionType = 'Whole building']/@ID]","auc:WaterInfiltrationSystem must be linked to auc:Section[auc:SectionType = 'Whole building']","","" -"","","","","","","","","","auc:WaterInfiltrationNotes","","","" \ No newline at end of file +"","","","","","","","","","auc:WaterInfiltrationNotes","","","" +"HVAC Year Installed","ASHRAE 211 6.2.1.3","Year Installed","ASHRAE 211 6.2.1.3 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:YearInstalled","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","auc:YearInstalled","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","auc:YearInstalled","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","auc:YearInstalled","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]","false","","","auc:YearInstalled","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:YearInstalled","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 4fd2ded9..bfe0f102 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -45,6 +45,9 @@ + + + Document Structure Prerequisites Misc Building Info @@ -395,4 +398,25 @@ auc:WaterInfiltrationNotes + + Year Installed + + auc:YearInstalled + + + auc:YearInstalled + + + auc:YearInstalled + + + auc:YearInstalled + + + auc:YearInstalled + + + auc:YearInstalled + + From 0cb1a355baadc85665dbdb2f29d27ec49fe1e478 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 18 Sep 2020 09:31:21 -0600 Subject: [PATCH 08/76] feat(L200): add capacity and condition tests --- .../v2.2.0/tests/data/HVAC_example1.xml | 38 ++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 45 +++++++++++++- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 26 +++++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 62 ++++++++++++++++++- 4 files changed, 167 insertions(+), 4 deletions(-) diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index a002b1e2..54f35342 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -8,16 +8,44 @@ + + 123 + 123 + gpm + + Good + 2020 + + + + 123 + gpm + + Good + 2020 + + + + 123 + gpm + + Good 2020 + + 123 + gpm + + Good 2020 + Good 2020 @@ -25,17 +53,27 @@ + 123 + 123 + gpm + Good 2020 + 123 + gpm + Good 2020 + 123 + gpm 2020 + Good diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 578bce8b..4bb49398 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -304,7 +304,7 @@ class TestL200AuditHvacSystems(AssertFailureRolesMixin): @pytest.mark.parametrize("xpath_to_remove", [ '//auc:CoolingPlant/auc:YearInstalled', - '//auc:HeatingPlant/auc:YearInstalled', + '//auc:HeatingPlant[1]/auc:YearInstalled', '//auc:CondenserPlant/auc:YearInstalled', '//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:YearInstalled', '//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:YearInstalled', @@ -322,3 +322,46 @@ def test_is_invalid_when_missing_year_installed(self, xpath_to_remove): self.assert_failure_messages(failures, { 'ERROR': ['auc:YearInstalled'] }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:CoolingPlant/auc:DistrictChilledWater/auc:Capacity', 'auc:Capacity'), + ('//auc:HeatingPlant/auc:Boiler/auc:InputCapacity', 'auc:InputCapacity'), + ('//auc:HeatingPlant/auc:DistrictHeating/auc:OutputCapacity', 'auc:OutputCapacity'), + ('//auc:HeatingPlant/auc:SolarThermal/auc:OutputCapacity', 'auc:OutputCapacity'), + ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:Capacity', 'auc:Capacity'), + ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:Capacity', 'auc:Capacity'), + ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:OutputCapacity', 'auc:OutputCapacity'), + ]) + def test_is_invalid_when_missing_capacity(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_design_capacity') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:CoolingPlant/auc:CoolingPlantCondition', 'auc:CoolingPlantCondition'), + ('//auc:HeatingPlant[1]/auc:HeatingPlantCondition', 'auc:HeatingPlantCondition'), + ('//auc:CondenserPlants/auc:CondenserPlant/auc:CondenserPlantCondition', 'auc:CondenserPlantCondition'), + ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryCondition', 'auc:DeliveryCondition'), + ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:CoolingSourceCondition', 'auc:CoolingSourceCondition'), + ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:HeatingSourceCondition', 'auc:HeatingSourceCondition'), + ]) + def test_is_invalid_when_missing_condition(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_condition') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 41071394..bf0a5c44 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -116,9 +116,31 @@ "","","","","","","","","","auc:AirInfiltrationValueUnits","","","" "","","Water Infiltration","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:WaterInfiltrationSystems/auc:WaterInfiltrationSystem","true","","","auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = //auc:Sections/auc:Section[auc:SectionType = 'Whole building']/@ID]","auc:WaterInfiltrationSystem must be linked to auc:Section[auc:SectionType = 'Whole building']","","" "","","","","","","","","","auc:WaterInfiltrationNotes","","","" -"HVAC Year Installed","ASHRAE 211 6.2.1.3","Year Installed","ASHRAE 211 6.2.1.3 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:YearInstalled","","","" +"HVAC Year Installed","ASHRAE 211 6.2.1.3 (a)","Year Installed","ASHRAE 211 6.2.1.3 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:YearInstalled","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","auc:YearInstalled","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","auc:YearInstalled","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","auc:YearInstalled","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]","false","","","auc:YearInstalled","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:YearInstalled","","","" \ No newline at end of file +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:YearInstalled","","","" +"HVAC Design Capacity","ASHRAE 211 6.2.1.3 (b)","Design Capacity","ASHRAE 211 6.2.1.3 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant/auc:DistrictChilledWater","false","","","auc:Capacity","","","" +"","","","","","","","","","auc:CapacityUnits","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:Boiler","false","","","auc:InputCapacity","","","" +"","","","","","","","","","auc:OutputCapacity","","","" +"","","","","","","","","","auc:CapacityUnits","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:DistrictHeating","false","","","auc:OutputCapacity","","","" +"","","","","","","","","","auc:CapacityUnits","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:SolarThermal","false","","","auc:OutputCapacity","","","" +"","","","","","","","","","auc:CapacityUnits","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","auc:Capacity","","","" +"","","","","","","","","","auc:CapacityUnits","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]","false","","","auc:Capacity","","","" +"","","","","","","","","","auc:CapacityUnits","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:InputCapacity","","","" +"","","","","","","","","","auc:OutputCapacity","","","" +"","","","","","","","","","auc:CapacityUnits","","","" +"HVAC Condition","ASHRAE 211 6.2.1.3 (c)","Condition","ASHRAE 211 6.2.1.3 (c)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:HeatingPlantCondition","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","auc:CoolingPlantCondition","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","auc:CondenserPlantCondition","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","auc:DeliveryCondition","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]","false","","","auc:CoolingSourceCondition","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:HeatingSourceCondition","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index bfe0f102..21e4f3c1 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -45,9 +45,15 @@ - + + + + + + + Document Structure Prerequisites Misc Building Info @@ -419,4 +425,58 @@ auc:YearInstalled + + Design Capacity + + auc:Capacity + auc:CapacityUnits + + + auc:InputCapacity + auc:OutputCapacity + auc:CapacityUnits + + + auc:OutputCapacity + auc:CapacityUnits + + + auc:OutputCapacity + auc:CapacityUnits + + + auc:Capacity + auc:CapacityUnits + + + auc:Capacity + auc:CapacityUnits + + + auc:InputCapacity + auc:OutputCapacity + auc:CapacityUnits + + + + Condition + + auc:HeatingPlantCondition + + + auc:CoolingPlantCondition + + + auc:CondenserPlantCondition + + + auc:DeliveryCondition + + + auc:CoolingSourceCondition + + + auc:HeatingSourceCondition + + From 11b5f7456e65f7ef765d523e12b8b92472da7b66 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 18 Sep 2020 10:20:38 -0600 Subject: [PATCH 09/76] feat(L200): add central plant tests --- .../v2.2.0/tests/data/HVAC_example1.xml | 60 ++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 32 +++++++-- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 45 +++++++++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 69 ++++++++++++++++++- 4 files changed, 196 insertions(+), 10 deletions(-) diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 54f35342..dc2af948 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -9,25 +9,42 @@ + Steam + Condensing + Single stage 123 123 gpm + 123 + COP + 123 + 123 + 1 Good 2020 + Electricity + Hot water 123 gpm + 123 + COP + 1 Good 2020 + Electricity 123 gpm + 123 + COP + 1 Good 2020 @@ -36,17 +53,60 @@ + 123 + COP 123 gpm Good 2020 + Other + + + + Absorption + Reciprocating + Multiple discrete stages + 2 + 123 + Other + Single effect + 123 + COP + 123 + gpm + 1 + + Good + 2020 + Other + + Cooling tower + + Good + 2020 + Electricity + + + + Stepped Speed + + Good + 2020 + Electricity + + + + Open loop ground water + 1 + Good 2020 + Electricity diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 4bb49398..f1478424 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -303,9 +303,9 @@ class TestL200AuditHvacSystems(AssertFailureRolesMixin): example_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data', 'HVAC_example1.xml') @pytest.mark.parametrize("xpath_to_remove", [ - '//auc:CoolingPlant/auc:YearInstalled', + '//auc:CoolingPlant[1]/auc:YearInstalled', '//auc:HeatingPlant[1]/auc:YearInstalled', - '//auc:CondenserPlant/auc:YearInstalled', + '//auc:CondenserPlant[1]/auc:YearInstalled', '//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:YearInstalled', '//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:YearInstalled', '//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:YearInstalled', @@ -325,6 +325,7 @@ def test_is_invalid_when_missing_year_installed(self, xpath_to_remove): @pytest.mark.parametrize("xpath_to_remove, expected_message", [ ('//auc:CoolingPlant/auc:DistrictChilledWater/auc:Capacity', 'auc:Capacity'), + ('//auc:CoolingPlant/auc:Chiller/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingPlant/auc:Boiler/auc:InputCapacity', 'auc:InputCapacity'), ('//auc:HeatingPlant/auc:DistrictHeating/auc:OutputCapacity', 'auc:OutputCapacity'), ('//auc:HeatingPlant/auc:SolarThermal/auc:OutputCapacity', 'auc:OutputCapacity'), @@ -346,9 +347,9 @@ def test_is_invalid_when_missing_capacity(self, xpath_to_remove, expected_messag }) @pytest.mark.parametrize("xpath_to_remove, expected_message", [ - ('//auc:CoolingPlant/auc:CoolingPlantCondition', 'auc:CoolingPlantCondition'), + ('//auc:CoolingPlant[1]/auc:CoolingPlantCondition', 'auc:CoolingPlantCondition'), ('//auc:HeatingPlant[1]/auc:HeatingPlantCondition', 'auc:HeatingPlantCondition'), - ('//auc:CondenserPlants/auc:CondenserPlant/auc:CondenserPlantCondition', 'auc:CondenserPlantCondition'), + ('//auc:CondenserPlants/auc:CondenserPlant[1]/auc:CondenserPlantCondition', 'auc:CondenserPlantCondition'), ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryCondition', 'auc:DeliveryCondition'), ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:CoolingSourceCondition', 'auc:CoolingSourceCondition'), ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:HeatingSourceCondition', 'auc:HeatingSourceCondition'), @@ -365,3 +366,26 @@ def test_is_invalid_when_missing_condition(self, xpath_to_remove, expected_messa self.assert_failure_messages(failures, { 'ERROR': [expected_message] }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:HeatingPlant/auc:Boiler/auc:BoilerType', 'auc:BoilerType'), + ('//auc:HeatingPlant/auc:DistrictHeating/auc:DistrictHeatingType', 'auc:DistrictHeatingType'), + ('//auc:HeatingPlant/auc:SolarThermal/auc:AnnualHeatingEfficiencyValue', 'auc:AnnualHeatingEfficiencyValue'), + ('//auc:CoolingPlant/auc:DistrictChilledWater/auc:AnnualCoolingEfficiencyValue', 'auc:AnnualCoolingEfficiencyValue'), + ('//auc:CoolingPlant/auc:Chiller/auc:ChillerType', 'auc:ChillerType'), + ('//auc:CondenserPlant/auc:WaterCooled/auc:WaterCooledCondenserType', 'auc:WaterCooledCondenserType'), + ('//auc:CondenserPlant/auc:AirCooled/auc:CondenserFanSpeedOperation', 'auc:CondenserFanSpeedOperation'), + ('//auc:CondenserPlant/auc:GroundSource/auc:GroundSourceType', 'auc:GroundSourceType'), + ]) + def test_is_invalid_when_plant_is_missing_required_info(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_central_plant') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index bf0a5c44..87b6ddad 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -122,7 +122,9 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","auc:YearInstalled","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]","false","","","auc:YearInstalled","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:YearInstalled","","","" -"HVAC Design Capacity","ASHRAE 211 6.2.1.3 (b)","Design Capacity","ASHRAE 211 6.2.1.3 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant/auc:DistrictChilledWater","false","","","auc:Capacity","","","" +"HVAC Design Capacity","ASHRAE 211 6.2.1.3 (a)","Design Capacity","ASHRAE 211 6.2.1.3 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant/auc:DistrictChilledWater","false","","","auc:Capacity","","","" +"","","","","","","","","","auc:CapacityUnits","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant/auc:Chiller","false","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:Boiler","false","","","auc:InputCapacity","","","" "","","","","","","","","","auc:OutputCapacity","","","" @@ -138,9 +140,46 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:InputCapacity","","","" "","","","","","","","","","auc:OutputCapacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" -"HVAC Condition","ASHRAE 211 6.2.1.3 (c)","Condition","ASHRAE 211 6.2.1.3 (c)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:HeatingPlantCondition","","","" +"HVAC Condition","ASHRAE 211 6.2.1.3 (a)","Condition","ASHRAE 211 6.2.1.3 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:HeatingPlantCondition","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","auc:CoolingPlantCondition","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","auc:CondenserPlantCondition","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","auc:DeliveryCondition","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]","false","","","auc:CoolingSourceCondition","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:HeatingSourceCondition","","","" \ No newline at end of file +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:HeatingSourceCondition","","","" +"HVAC Central Plant","ASHRAE 211 6.2.1.3 (b)","Heating Plants","ASHRAE 211 6.2.1.3 (b)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:Boiler","false","","","auc:BoilerType","","","" +"","","","","","","","","","auc:CondensingOperation","","","" +"","","","","","","","","","auc:HeatingStaging","","","" +"","","","","","","","","","auc:AnnualHeatingEfficiencyValue","","","" +"","","","","","","","","","auc:AnnualHeatingEfficiencyUnits","","","" +"","","","","","","","","","auc:ThermalEfficiency","","","" +"","","","","","","","","","auc:CombustionEfficiency","","","" +"","","","","","","","","","auc:Quantity","","","" +"","","","","","","","","","../auc:PrimaryFuel","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:DistrictHeating","false","","","auc:DistrictHeatingType","","","" +"","","","","","","","","","auc:AnnualHeatingEfficiencyValue","","","" +"","","","","","","","","","auc:AnnualHeatingEfficiencyUnits","","","" +"","","","","","","","","","auc:Quantity","","","" +"","","","","","","","","","../auc:PrimaryFuel","","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:SolarThermal","false","","","auc:AnnualHeatingEfficiencyValue","","","" +"","","","","","","","","","auc:AnnualHeatingEfficiencyUnits","","","" +"","","","","","","","","","auc:Quantity","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant/auc:Chiller","false","","","auc:ChillerType","","","" +"","","","","","","","","","auc:ChillerCompressorType","","","" +"","","","","","","","","","auc:CompressorStaging","","","" +"","","","","","","","","","auc:CompressorStaging/text() != 'Multiple discrete stages' or auc:NumberOfDiscreteCoolingStages","","","" +"","","","","","","","","","auc:CoolingStageCapacity","","WARNING","" +"","","","","","","","","","auc:ChillerType/text() != 'Absorption' or auc:AbsorptionHeatSource","","","" +"","","","","","","","","","auc:ChillerType/text() != 'Absorption' or auc:AbsorptionStages","","","" +"","","","","","","","","","auc:AnnualCoolingEfficiencyValue","","","" +"","","","","","","","","","auc:AnnualCoolingEfficiencyUnits","","","" +"","","","","","","","","","auc:Quantity","","","" +"","","","","","","","","","../auc:PrimaryFuel","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant/auc:DistrictChilledWater","false","","","auc:AnnualCoolingEfficiencyValue","","","" +"","","","","","","","","","auc:AnnualCoolingEfficiencyUnits","","","" +"","","","","","","","","","../auc:PrimaryFuel","","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant/auc:WaterCooled","false","","","auc:WaterCooledCondenserType","","","" +"","","","","","","","","","../auc:PrimaryFuel","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant/auc:AirCooled","false","","","auc:CondenserFanSpeedOperation","","","" +"","","","","","","","","","../auc:PrimaryFuel","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant/auc:GroundSource","false","","","auc:GroundSourceType","","","" +"","","","","","","","","","auc:WellCount","","WARNING","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 21e4f3c1..b87b0672 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -48,12 +48,15 @@ - + - + + + + Document Structure Prerequisites Misc Building Info @@ -431,6 +434,10 @@ auc:Capacity auc:CapacityUnits + + auc:Capacity + auc:CapacityUnits + auc:InputCapacity auc:OutputCapacity @@ -458,7 +465,7 @@ auc:CapacityUnits - + Condition auc:HeatingPlantCondition @@ -479,4 +486,60 @@ auc:HeatingSourceCondition + + Heating Plants + + auc:BoilerType + auc:CondensingOperation + auc:HeatingStaging + auc:AnnualHeatingEfficiencyValue + auc:AnnualHeatingEfficiencyUnits + auc:ThermalEfficiency + auc:CombustionEfficiency + auc:Quantity + ../auc:PrimaryFuel + + + auc:DistrictHeatingType + auc:AnnualHeatingEfficiencyValue + auc:AnnualHeatingEfficiencyUnits + auc:Quantity + ../auc:PrimaryFuel + + + auc:AnnualHeatingEfficiencyValue + auc:AnnualHeatingEfficiencyUnits + auc:Quantity + + + auc:ChillerType + auc:ChillerCompressorType + auc:CompressorStaging + auc:CompressorStaging/text() != 'Multiple discrete stages' or auc:NumberOfDiscreteCoolingStages + auc:CoolingStageCapacity + auc:ChillerType/text() != 'Absorption' or auc:AbsorptionHeatSource + auc:ChillerType/text() != 'Absorption' or auc:AbsorptionStages + auc:AnnualCoolingEfficiencyValue + auc:AnnualCoolingEfficiencyUnits + auc:Quantity + ../auc:PrimaryFuel + + + auc:AnnualCoolingEfficiencyValue + auc:AnnualCoolingEfficiencyUnits + ../auc:PrimaryFuel + + + auc:WaterCooledCondenserType + ../auc:PrimaryFuel + + + auc:CondenserFanSpeedOperation + ../auc:PrimaryFuel + + + auc:GroundSourceType + auc:WellCount + + From 8a07c2e931e0de4bec2cb24d72a516e79828c6d5 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Tue, 22 Sep 2020 10:44:15 -0600 Subject: [PATCH 10/76] feat(L200): add air distribution tests --- .../v2.2.0/tests/data/HVAC_example1.xml | 80 ++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 92 ++++++++++++++++++- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 23 ++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 68 ++++++++++++++ 4 files changed, 259 insertions(+), 4 deletions(-) diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index dc2af948..167b91ef 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -111,6 +111,7 @@ + Single zone 123 @@ -130,15 +131,94 @@ + + + Central fan + CAV terminal box no reheat + Heating plant + Single Maximum + + + + + 123 gpm 2020 + 1 + Good + + + + + + + + Mini-split + 1 pipe + + + + + + + + 123 + gpm + 2020 + 1 + Good + + + + + + Chilled beam + + + + + + 123 + gpm + 2020 + 1 + Good + + + + + + Radiator + + + + + + 123 + gpm + 2020 + 1 Good + + + Single + + + + + + Stepped + + + + + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index f1478424..f596c450 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -306,7 +306,7 @@ class TestL200AuditHvacSystems(AssertFailureRolesMixin): '//auc:CoolingPlant[1]/auc:YearInstalled', '//auc:HeatingPlant[1]/auc:YearInstalled', '//auc:CondenserPlant[1]/auc:YearInstalled', - '//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:YearInstalled', + '//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:YearInstalled', '//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:YearInstalled', '//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:YearInstalled', ]) @@ -329,7 +329,7 @@ def test_is_invalid_when_missing_year_installed(self, xpath_to_remove): ('//auc:HeatingPlant/auc:Boiler/auc:InputCapacity', 'auc:InputCapacity'), ('//auc:HeatingPlant/auc:DistrictHeating/auc:OutputCapacity', 'auc:OutputCapacity'), ('//auc:HeatingPlant/auc:SolarThermal/auc:OutputCapacity', 'auc:OutputCapacity'), - ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:Capacity', 'auc:Capacity'), + ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:OutputCapacity', 'auc:OutputCapacity'), ]) @@ -350,7 +350,7 @@ def test_is_invalid_when_missing_capacity(self, xpath_to_remove, expected_messag ('//auc:CoolingPlant[1]/auc:CoolingPlantCondition', 'auc:CoolingPlantCondition'), ('//auc:HeatingPlant[1]/auc:HeatingPlantCondition', 'auc:HeatingPlantCondition'), ('//auc:CondenserPlants/auc:CondenserPlant[1]/auc:CondenserPlantCondition', 'auc:CondenserPlantCondition'), - ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryCondition', 'auc:DeliveryCondition'), + ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:DeliveryCondition', 'auc:DeliveryCondition'), ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:CoolingSourceCondition', 'auc:CoolingSourceCondition'), ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:HeatingSourceCondition', 'auc:HeatingSourceCondition'), ]) @@ -389,3 +389,89 @@ def test_is_invalid_when_plant_is_missing_required_info(self, xpath_to_remove, e self.assert_failure_messages(failures, { 'ERROR': [expected_message] }) + + def test_is_invalid_when_delivery_is_missing_heating_and_cooling_source(self): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, '//auc:Delivery[1]/auc:HeatingSourceID') + remove_element(tree, '//auc:Delivery[1]/auc:CoolingSourceID') + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_sources') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': ['auc:HeatingSourceID or auc:CoolingSourceID'] + }) + + @pytest.mark.parametrize("xpath_to_source_id, expected_message", [ + ('//auc:Delivery[1]/auc:HeatingSourceID', 'auc:HeatingSourceID must point to a valid auc:HeatingSource'), + ('//auc:Delivery[1]/auc:CoolingSourceID', 'auc:CoolingSourceID must point to a valid auc:CoolingSource'), + ]) + def test_is_invalid_when_delivery_heating_or_cooling_source_points_to_bad_source(self, xpath_to_source_id, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + + # switch the id to something invalid + source_id_elem = tree.xpath(xpath_to_source_id, namespaces=BSYNC_NSMAP) + assert len(source_id_elem) == 1 + source_id_elem = source_id_elem[0] + source_id_elem.set('IDref', 'bogus') + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_sources') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) + + def test_is_invalid_when_central_air_distribution_is_invalid(self): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, '//auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:AirDeliveryType') + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_type') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': ['auc:AirDeliveryType'] + }) + + def test_is_invalid_when_air_distribution_delivery_type_is_central_fan_and_not_linked_to_fan_system(self): + # -- Setup + tree = etree.parse(self.example_file) + + # remove the linked fan to make it invalid + delivery_elem = tree.xpath('//auc:Deliveries/auc:Delivery[auc:DeliveryType/auc:CentralAirDistribution/auc:AirDeliveryType]', namespaces=BSYNC_NSMAP) + assert len(delivery_elem) == 1 + delivery_elem = delivery_elem[0] + delivery_id = delivery_elem.attrib['ID'] + remove_element(tree, f'//auc:Systems/auc:FanSystems/auc:FanSystem[auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = "{delivery_id}"]') + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_type') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': ['auc:Delivery ID must be linked to a valid auc:FanSystem'] + }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:FanBased/auc:FanBasedDistributionType/auc:FanCoil/auc:FanCoilType', 'auc:FanCoilType'), + ('//auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:Convection/auc:ConvectionType', 'auc:ConvectionType'), + ('//auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:Radiant/auc:RadiantType', 'auc:RadiantType'), + ]) + def test_is_invalid_when_delivery_type_zone_equipment_and_missing_info(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_type') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 87b6ddad..6eb0184a 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -182,4 +182,25 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant/auc:AirCooled","false","","","auc:CondenserFanSpeedOperation","","","" "","","","","","","","","","../auc:PrimaryFuel","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant/auc:GroundSource","false","","","auc:GroundSourceType","","","" -"","","","","","","","","","auc:WellCount","","WARNING","" \ No newline at end of file +"","","","","","","","","","auc:WellCount","","WARNING","" +"HVAC Distribution System Sources","ASHRAE 211 6.2.1.3 (c)","Heating and Cooling Sources","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems","false","","","auc:ZoningSystemType","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","auc:DeliveryType","","","" +"","","","","","","","","","auc:HeatingSourceID or auc:CoolingSourceID","","","" +"","","","","","","","","","auc:Quantity","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:HeatingSourceID","false","","","//auc:HeatingSource[@ID = current()/@IDref]","auc:HeatingSourceID must point to a valid auc:HeatingSource","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:CoolingSourceID","false","","","//auc:CoolingSource[@ID = current()/@IDref]","auc:CoolingSourceID must point to a valid auc:CoolingSource","","" +"HVAC Distribution System Delivery Type","","Delivery Type","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","","","auc:AirDeliveryType","","","" +"","","","","","","","","","auc:TerminalUnit","","","" +"","","","","","","","","","auc:ReheatSource","","","" +"","","","","","","","","","auc:ReheatSource/text() = 'None' or auc:ReheatControlMethod","","","" +"","","","","","","","","","auc:ReheatSource/text() != 'Heating plant' or auc:ReheatPlantID","","","" +"","","Central Fan","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution[auc:AirDeliveryType/text() = 'Central fan']","false","deliveryID","current()/ancestor::auc:Delivery/@ID","//auc:Systems/auc:FanSystems/auc:FanSystem[auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = $deliveryID]","auc:Delivery ID must be linked to a valid auc:FanSystem","","" +"","","","","","","","","","current()/ancestor::auc:HVACSystem/auc:DuctSystems/auc:DuctSystem[auc:HeatingDeliveryID/@IDref = $deliveryID or auc:CoolingDeliveryID/@IDref = $deliveryID]","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FanSystems/auc:FanSystem","false","","","auc:FanControlType","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:DuctSystems/auc:DuctSystem","false","","","auc:DuctConfiguration","","","" +"","","Zone Equipment","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment","false","","","count(current()/*) >= 1","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:FanBased","false","","","auc:FanBasedDistributionType/auc:FanCoil","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:FanBased/auc:FanBasedDistributionType/auc:FanCoil","false","","","auc:FanCoilType","","","" +"","","","","","","","","","auc:HVACPipeConfiguration","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:Convection","false","","","auc:ConvectionType","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:Radiant","false","","","auc:RadiantType","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index b87b0672..47ec20df 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -57,6 +57,14 @@ + + + + + + + + Document Structure Prerequisites Misc Building Info @@ -542,4 +550,64 @@ auc:WellCount + + Heating and Cooling Sources + + auc:ZoningSystemType + + + auc:DeliveryType + auc:HeatingSourceID or auc:CoolingSourceID + auc:Quantity + + + auc:HeatingSourceID must point to a valid auc:HeatingSource + + + auc:CoolingSourceID must point to a valid auc:CoolingSource + + + + Delivery Type + + auc:AirDeliveryType + auc:TerminalUnit + auc:ReheatSource + auc:ReheatSource/text() = 'None' or auc:ReheatControlMethod + auc:ReheatSource/text() != 'Heating plant' or auc:ReheatPlantID + + + + Central Fan + + + auc:Delivery ID must be linked to a valid auc:FanSystem + current()/ancestor::auc:HVACSystem/auc:DuctSystems/auc:DuctSystem[auc:HeatingDeliveryID/@IDref = $deliveryID or auc:CoolingDeliveryID/@IDref = $deliveryID] + + + auc:FanControlType + + + auc:DuctConfiguration + + + + Zone Equipment + + count(current()/*) >= 1 + + + auc:FanBasedDistributionType/auc:FanCoil + + + auc:FanCoilType + auc:HVACPipeConfiguration + + + auc:ConvectionType + + + auc:RadiantType + + From fcb1d48d6c16ed72f8bb2fc89a912f9a31e38d50 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Tue, 22 Sep 2020 13:38:33 -0600 Subject: [PATCH 11/76] feat(L200): add outdoor air delivery tests --- .../v2.2.0/tests/data/HVAC_example1.xml | 14 +++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 23 ++++++++++++++--- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 11 ++++++-- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 25 ++++++++++++++++++- 4 files changed, 67 insertions(+), 6 deletions(-) diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 167b91ef..6774779c 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -138,6 +138,12 @@ Heating plant Single Maximum + + + None + Fixed + + @@ -219,6 +225,14 @@ + + + .5 + Heat pipe + + + + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index f596c450..9ea2d073 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -432,7 +432,7 @@ def test_is_invalid_when_central_air_distribution_is_invalid(self): remove_element(tree, '//auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:AirDeliveryType') # -- Act - failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_type') + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_type_air_delivery') # -- Assert self.assert_failure_messages(failures, { @@ -451,7 +451,7 @@ def test_is_invalid_when_air_distribution_delivery_type_is_central_fan_and_not_l remove_element(tree, f'//auc:Systems/auc:FanSystems/auc:FanSystem[auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = "{delivery_id}"]') # -- Act - failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_type') + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_type_air_delivery') # -- Assert self.assert_failure_messages(failures, { @@ -469,7 +469,24 @@ def test_is_invalid_when_delivery_type_zone_equipment_and_missing_info(self, xpa remove_element(tree, xpath_to_remove) # -- Act - failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_type') + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_type_air_delivery') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased/auc:AirSideEconomizer', 'auc:AirSideEconomizer'), + ('//auc:HeatRecoverySystems/auc:HeatRecoverySystem/auc:HeatRecoveryType', 'auc:HeatRecoveryType'), + ]) + def test_is_invalid_when_outdoor_air_control_is_missing_info(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_outdoor_air_control') # -- Assert self.assert_failure_messages(failures, { diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 6eb0184a..b7c39c89 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -189,7 +189,7 @@ "","","","","","","","","","auc:Quantity","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:HeatingSourceID","false","","","//auc:HeatingSource[@ID = current()/@IDref]","auc:HeatingSourceID must point to a valid auc:HeatingSource","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:CoolingSourceID","false","","","//auc:CoolingSource[@ID = current()/@IDref]","auc:CoolingSourceID must point to a valid auc:CoolingSource","","" -"HVAC Distribution System Delivery Type","","Delivery Type","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","","","auc:AirDeliveryType","","","" +"HVAC Distribution System Delivery Type Air Delivery","","Delivery Type","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","","","auc:AirDeliveryType","","","" "","","","","","","","","","auc:TerminalUnit","","","" "","","","","","","","","","auc:ReheatSource","","","" "","","","","","","","","","auc:ReheatSource/text() = 'None' or auc:ReheatControlMethod","","","" @@ -203,4 +203,11 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:FanBased/auc:FanBasedDistributionType/auc:FanCoil","false","","","auc:FanCoilType","","","" "","","","","","","","","","auc:HVACPipeConfiguration","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:Convection","false","","","auc:ConvectionType","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:Radiant","false","","","auc:RadiantType","","","" \ No newline at end of file +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:Radiant","false","","","auc:RadiantType","","","" +"HVAC Distribution System Delivery Outdoor Air Control","","Central Air Distribution","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased","false","","","auc:AirSideEconomizer","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased/auc:AirSideEconomizer","false","","","auc:AirSideEconomizerType","","","" +"","","","","","","","","","auc:AirSideEconomizerType != 'None' or auc:EconomizerControl","","","" +"","","Heat Recovery System","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HeatRecoverySystems/auc:HeatRecoverySystem","false","","","auc:HeatRecoveryEfficiency or auc:EnergyRecoveryEfficiency","","","" +"","","","","","","","","","auc:HeatRecoveryType","","","" +"","","","","","","","","","auc:SystemIDReceivingHeat","","","" +"","","","","","","","","","auc:SystemIDProvidingHeat","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 47ec20df..6765e745 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -60,11 +60,15 @@ - + + + + + Document Structure Prerequisites Misc Building Info @@ -610,4 +614,23 @@ auc:RadiantType + + Central Air Distribution + + auc:AirSideEconomizer + + + auc:AirSideEconomizerType + auc:AirSideEconomizerType != 'None' or auc:EconomizerControl + + + + Heat Recovery System + + auc:HeatRecoveryEfficiency or auc:EnergyRecoveryEfficiency + auc:HeatRecoveryType + auc:SystemIDReceivingHeat + auc:SystemIDProvidingHeat + + From 8bc4759a9ed00069fa6b6f8bcce7cf9044450b51 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Tue, 22 Sep 2020 13:48:12 -0600 Subject: [PATCH 12/76] feat(L200): add duct condition tests --- schematron/v2.2.0/tests/data/HVAC_example1.xml | 1 + schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.csv | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.sch | 3 +++ 4 files changed, 6 insertions(+) diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 6774779c..8af4ce12 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -212,6 +212,7 @@ Single + Excellent diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 9ea2d073..986b104f 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -353,6 +353,7 @@ def test_is_invalid_when_missing_capacity(self, xpath_to_remove, expected_messag ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:DeliveryCondition', 'auc:DeliveryCondition'), ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:CoolingSourceCondition', 'auc:CoolingSourceCondition'), ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:HeatingSourceCondition', 'auc:HeatingSourceCondition'), + ('//auc:DuctSystems/auc:DuctSystem/auc:DuctInsulationCondition', 'auc:DuctInsulationCondition'), ]) def test_is_invalid_when_missing_condition(self, xpath_to_remove, expected_message): # -- Setup diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index b7c39c89..242e32a8 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -146,6 +146,7 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","auc:DeliveryCondition","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]","false","","","auc:CoolingSourceCondition","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:HeatingSourceCondition","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:DuctSystems/auc:DuctSystem","false","","","auc:DuctInsulationCondition","","","" "HVAC Central Plant","ASHRAE 211 6.2.1.3 (b)","Heating Plants","ASHRAE 211 6.2.1.3 (b)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:Boiler","false","","","auc:BoilerType","","","" "","","","","","","","","","auc:CondensingOperation","","","" "","","","","","","","","","auc:HeatingStaging","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 6765e745..cc8c3065 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -497,6 +497,9 @@ auc:HeatingSourceCondition + + auc:DuctInsulationCondition + Heating Plants From 7f3f6e2568ffe6256f3650e7c8b79fb06a0f89bd Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 23 Sep 2020 09:42:13 -0600 Subject: [PATCH 13/76] feat(L200): add plant pump tests --- .../v2.2.0/tests/data/HVAC_example1.xml | 50 +++++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 18 +++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 8 ++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 22 +++++++- 4 files changed, 94 insertions(+), 4 deletions(-) diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 8af4ce12..2fbd1bf4 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -218,6 +218,56 @@ + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + Stepped diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 986b104f..a35ff567 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -493,3 +493,21 @@ def test_is_invalid_when_outdoor_air_control_is_missing_info(self, xpath_to_remo self.assert_failure_messages(failures, { 'ERROR': [expected_message] }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:Systems/auc:PumpSystems/auc:PumpSystem/auc:LinkedSystemIDs/auc:LinkedSystemID[@IDref = "HeatingPlant-A"]', 'auc:HeatingPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs'), + ('//auc:Systems/auc:PumpSystems/auc:PumpSystem/auc:LinkedSystemIDs/auc:LinkedSystemID[@IDref = "CoolingPlant-A"]', 'auc:CoolingPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs'), + ('//auc:Systems/auc:PumpSystems/auc:PumpSystem/auc:LinkedSystemIDs/auc:LinkedSystemID[@IDref = "CondenserPlant-A"]', 'auc:CondenserPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs'), + ]) + def test_is_invalid_when_plant_is_not_linked_to_pump(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_delivery_type_water_delivery') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 242e32a8..a08012f3 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -190,7 +190,7 @@ "","","","","","","","","","auc:Quantity","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:HeatingSourceID","false","","","//auc:HeatingSource[@ID = current()/@IDref]","auc:HeatingSourceID must point to a valid auc:HeatingSource","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:CoolingSourceID","false","","","//auc:CoolingSource[@ID = current()/@IDref]","auc:CoolingSourceID must point to a valid auc:CoolingSource","","" -"HVAC Distribution System Delivery Type Air Delivery","","Delivery Type","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","","","auc:AirDeliveryType","","","" +"HVAC Distribution System Delivery Type Air Delivery","ASHRAE 211 6.2.1.3 (c)","Delivery Type","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","","","auc:AirDeliveryType","","","" "","","","","","","","","","auc:TerminalUnit","","","" "","","","","","","","","","auc:ReheatSource","","","" "","","","","","","","","","auc:ReheatSource/text() = 'None' or auc:ReheatControlMethod","","","" @@ -205,7 +205,11 @@ "","","","","","","","","","auc:HVACPipeConfiguration","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:Convection","false","","","auc:ConvectionType","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:Radiant","false","","","auc:RadiantType","","","" -"HVAC Distribution System Delivery Outdoor Air Control","","Central Air Distribution","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased","false","","","auc:AirSideEconomizer","","","" +"HVAC Distribution System Delivery Type Water Delivery","ASHRAE 211 6.2.1.3 (c)","Plant Pumps","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","//auc:Systems/auc:PumpSystems/auc:PumpSystem/auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = current()/@ID","auc:HeatingPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","//auc:Systems/auc:PumpSystems/auc:PumpSystem/auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = current()/@ID","auc:CoolingPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","//auc:Systems/auc:PumpSystems/auc:PumpSystem/auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = current()/@ID","auc:CondenserPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:PumpSystems/auc:PumpSystem","false","","","auc:PumpControlType","","","" +"HVAC Distribution System Delivery Outdoor Air Control","ASHRAE 211 6.2.1.3 (c)","Central Air Distribution","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased","false","","","auc:AirSideEconomizer","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased/auc:AirSideEconomizer","false","","","auc:AirSideEconomizerType","","","" "","","","","","","","","","auc:AirSideEconomizerType != 'None' or auc:EconomizerControl","","","" "","","Heat Recovery System","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HeatRecoverySystems/auc:HeatRecoverySystem","false","","","auc:HeatRecoveryEfficiency or auc:EnergyRecoveryEfficiency","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index cc8c3065..9d71aa89 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -60,12 +60,15 @@ - + - + + + + @@ -617,6 +620,21 @@ auc:RadiantType + + Plant Pumps + + auc:HeatingPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs + + + auc:CoolingPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs + + + auc:CondenserPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs + + + auc:PumpControlType + + Central Air Distribution From 90456bc3eb716f8256d58c909f1803d164c9fa44 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 23 Sep 2020 10:35:10 -0600 Subject: [PATCH 14/76] feat(L200): add hvac controls tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 3 + .../v2.2.0/tests/data/HVAC_example1.xml | 97 +++++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 36 +++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 12 ++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 38 ++++++++ 5 files changed, 185 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 8a010b1c..c904216b 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -256,6 +256,9 @@ Packaged Terminal Air Conditioner + + Digital + diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 2fbd1bf4..9c16def0 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -24,6 +24,11 @@ Good 2020 Electricity + + + + + @@ -37,6 +42,11 @@ Good 2020 Electricity + + + + + @@ -48,6 +58,11 @@ Good 2020 + + + + + @@ -61,6 +76,11 @@ Good 2020 Other + + + + + @@ -80,6 +100,11 @@ Good 2020 Other + + + + + @@ -90,6 +115,11 @@ Good 2020 Electricity + + + + + @@ -98,6 +128,11 @@ Good 2020 Electricity + + + + + @@ -107,6 +142,11 @@ Good 2020 Electricity + + + + + @@ -118,6 +158,15 @@ 123 gpm Good + + + + + + + + + 2020 @@ -126,6 +175,15 @@ 123 gpm Good + + + + + + + + + 2020 @@ -150,6 +208,15 @@ 123 gpm + + + + + + + + + 2020 1 Good @@ -171,6 +238,15 @@ 123 gpm + + + + + + + + + 2020 1 Good @@ -187,6 +263,15 @@ 123 gpm + + + + + + + + + 2020 1 Good @@ -203,6 +288,15 @@ 123 gpm + + + + + + + + + 2020 1 Good @@ -216,6 +310,9 @@ + + Digital + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index a35ff567..7d3fd827 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -511,3 +511,39 @@ def test_is_invalid_when_plant_is_not_linked_to_pump(self, xpath_to_remove, expe self.assert_failure_messages(failures, { 'ERROR': [expected_message] }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:HeatingPlant[1]/auc:ControlSystemTypes/auc:ControlSystemType/*', 'auc:HeatingPlant must have at least one auc:ControlSystemType child'), + ('//auc:CoolingPlant[1]/auc:ControlSystemTypes/auc:ControlSystemType/*', 'auc:CoolingPlant must have at least one auc:ControlSystemType child'), + ('//auc:CondenserPlant[1]/auc:ControlSystemTypes/auc:ControlSystemType/*', 'auc:CondenserPlant must have at least one auc:ControlSystemType child'), + ]) + def test_is_invalid_when_plant_is_missing_controls(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_controls_type') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:Controls/auc:Control/*/auc:ControlSystemType/*', 'auc:CoolingSource must have at least one auc:ControlSystemType child'), + ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:Controls/auc:Control/*/auc:ControlSystemType/*', 'auc:HeatingSource must have at least one auc:ControlSystemType child'), + ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:Controls/auc:Control/*/auc:ControlSystemType/*', 'auc:Delivery must have at least one auc:ControlSystemType child'), + ]) + def test_is_invalid_when_source_or_delivery_is_missing_controls(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_controls_type') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index a08012f3..401d20d8 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -215,4 +215,14 @@ "","","Heat Recovery System","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HeatRecoverySystems/auc:HeatRecoverySystem","false","","","auc:HeatRecoveryEfficiency or auc:EnergyRecoveryEfficiency","","","" "","","","","","","","","","auc:HeatRecoveryType","","","" "","","","","","","","","","auc:SystemIDReceivingHeat","","","" -"","","","","","","","","","auc:SystemIDProvidingHeat","","","" \ No newline at end of file +"","","","","","","","","","auc:SystemIDProvidingHeat","","","" +"HVAC Controls Type","ASHRAE 211 6.2.1.3 (d)","Plant Controls","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","count(auc:ControlSystemTypes/auc:ControlSystemType/*) >= 1","auc:HeatingPlant must have at least one auc:ControlSystemType child","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","count(auc:ControlSystemTypes/auc:ControlSystemType/*) >= 1","auc:CoolingPlant must have at least one auc:ControlSystemType child","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","count(auc:ControlSystemTypes/auc:ControlSystemType/*) >= 1","auc:CondenserPlant must have at least one auc:ControlSystemType child","","" +"","","HVAC Controls","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem","false","","","count(auc:HVACControlSystemTypes/auc:HVACControlSystemType) >= 1","auc:HVACSystem must have at least one auc:ControlSystemType child","WARNING","" +"","","Source Controls","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]","false","","","count(auc:Controls/auc:Control/*) >= 1","auc:CoolingSource must have at least one auc:Control child","","" +"","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType/*","auc:CoolingSource must have at least one auc:ControlSystemType child","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","count(auc:Controls/auc:Control/*) >= 1","auc:HeatingSource must have at least one auc:Control child","","" +"","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType/*","auc:HeatingSource must have at least one auc:ControlSystemType child","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","count(auc:Controls/auc:Control/*) >= 1","auc:Delivery must have at least one auc:Control child","","" +"","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType/*","auc:Delivery must have at least one auc:ControlSystemType child","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 9d71aa89..87d5f15e 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -72,6 +72,11 @@ + + + + + Document Structure Prerequisites Misc Building Info @@ -654,4 +659,37 @@ auc:SystemIDProvidingHeat + + Plant Controls + + auc:HeatingPlant must have at least one auc:ControlSystemType child + + + auc:CoolingPlant must have at least one auc:ControlSystemType child + + + auc:CondenserPlant must have at least one auc:ControlSystemType child + + + + HVAC Controls + + auc:HVACSystem must have at least one auc:ControlSystemType child + + + + Source Controls + + auc:CoolingSource must have at least one auc:Control child + auc:CoolingSource must have at least one auc:ControlSystemType child + + + auc:HeatingSource must have at least one auc:Control child + auc:HeatingSource must have at least one auc:ControlSystemType child + + + auc:Delivery must have at least one auc:Control child + auc:Delivery must have at least one auc:ControlSystemType child + + From ae07352cc06ea43ca84445de5bffc890f06d398b Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 23 Sep 2020 10:44:46 -0600 Subject: [PATCH 15/76] feat(L200): add hvac zone controls test --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.csv | 3 ++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 16 ++++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index c904216b..ddd88949 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -148,6 +148,7 @@ + Single zone diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 401d20d8..ea9b9985 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -225,4 +225,5 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","count(auc:Controls/auc:Control/*) >= 1","auc:HeatingSource must have at least one auc:Control child","","" "","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType/*","auc:HeatingSource must have at least one auc:ControlSystemType child","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","count(auc:Controls/auc:Control/*) >= 1","auc:Delivery must have at least one auc:Control child","","" -"","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType/*","auc:Delivery must have at least one auc:ControlSystemType child","","" \ No newline at end of file +"","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType/*","auc:Delivery must have at least one auc:ControlSystemType child","","" +"HVAC Zone Controls","ASHRAE 211 6.2.1.3 (d)","Zone Controls","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType='Space function']","true","","","auc:ThermalZoneLayout","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 87d5f15e..80807da0 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -77,6 +77,10 @@ + + + + Document Structure Prerequisites Misc Building Info @@ -692,4 +696,16 @@ auc:Delivery must have at least one auc:ControlSystemType child + + Document Structure Prerequisites Zone Controls + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType='Space function'] + + + + Zone Controls + + auc:ThermalZoneLayout + + From 89821b308624892ed4d7bc221a2deccc1adecd44 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 23 Sep 2020 11:09:22 -0600 Subject: [PATCH 16/76] feat(L200): add BAS tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 2 ++ schematron/v2.2.0/tests/data/HVAC_example1.xml | 8 ++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 18 ++++++++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 6 +++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 18 ++++++++++++++++++ 5 files changed, 51 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index ddd88949..e5352e76 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -78,6 +78,8 @@ 1 1 + true + true diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 9c16def0..55b1f097 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -24,6 +24,7 @@ Good 2020 Electricity + true @@ -42,6 +43,7 @@ Good 2020 Electricity + true @@ -58,6 +60,7 @@ Good 2020 + true @@ -76,6 +79,7 @@ Good 2020 Other + true @@ -100,6 +104,7 @@ Good 2020 Other + true @@ -115,6 +120,7 @@ Good 2020 Electricity + true @@ -128,6 +134,7 @@ Good 2020 Electricity + true @@ -142,6 +149,7 @@ Good 2020 Electricity + true diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 7d3fd827..d3213a89 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -547,3 +547,21 @@ def test_is_invalid_when_source_or_delivery_is_missing_controls(self, xpath_to_r self.assert_failure_messages(failures, { 'ERROR': [expected_message] }) + + @pytest.mark.parametrize("xpath_to_remove", [ + ('//auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant[1]/auc:BuildingAutomationSystem'), + ('//auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant[1]/auc:BuildingAutomationSystem'), + ('//auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant[1]/auc:BuildingAutomationSystem'), + ]) + def test_is_invalid_when_missing_building_automation_system(self, xpath_to_remove): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_building_automation_system') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': ['auc:BuildingAutomationSystem'] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index ea9b9985..a2f68ecf 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -226,4 +226,8 @@ "","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType/*","auc:HeatingSource must have at least one auc:ControlSystemType child","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","count(auc:Controls/auc:Control/*) >= 1","auc:Delivery must have at least one auc:Control child","","" "","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType/*","auc:Delivery must have at least one auc:ControlSystemType child","","" -"HVAC Zone Controls","ASHRAE 211 6.2.1.3 (d)","Zone Controls","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType='Space function']","true","","","auc:ThermalZoneLayout","","","" \ No newline at end of file +"HVAC Zone Controls","ASHRAE 211 6.2.1.3 (d)","Zone Controls","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType='Space function']","true","","","auc:ThermalZoneLayout","","","" +"HVAC Building Automation System","ASHRAE 211 6.2.1.3 (d)","BAS","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building","false","","","auc:BuildingAutomationSystem","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:BuildingAutomationSystem","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","auc:BuildingAutomationSystem","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","auc:BuildingAutomationSystem","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 80807da0..4b427cb5 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -81,6 +81,9 @@ + + + Document Structure Prerequisites Misc Building Info @@ -708,4 +711,19 @@ auc:ThermalZoneLayout + + BAS + + auc:BuildingAutomationSystem + + + auc:BuildingAutomationSystem + + + auc:BuildingAutomationSystem + + + auc:BuildingAutomationSystem + + From dd42891f54625290fd448506f49cac0194fa24bf Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 23 Sep 2020 12:22:02 -0600 Subject: [PATCH 17/76] feat(L200): tie up remaining HVAC loose ends --- .../v2.2.0/exemplary_files/L200_Audit.xml | 115 +++++++++++++++++- .../v2.2.0/tests/data/HVAC_example1.xml | 17 +++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 2 +- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 7 +- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 27 +++- 5 files changed, 161 insertions(+), 7 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index e5352e76..56fd0f8e 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -258,7 +258,96 @@ - Packaged Terminal Air Conditioner + + + + + 123 + COP + 123 + gpm + + Good + 2020 + Other + true + + + + + + + + + + Single zone + + + 123 + 123 + gpm + Good + + + + + + + + + + 2020 + + + + + + + + + + + + + + Central fan + CAV terminal box no reheat + None + + + None + Fixed + + + + + + + 123 + gpm + + + + + + + + + + 2020 + 1 + Good + + + + + + Single + Excellent + + + + Packaged Rooftop VAV with Hot Water Reheat Digital @@ -288,6 +377,30 @@ + + + Constant Volume + + + + + + Constant Volume + + + + + + + + + Stepped + + + + + + Concrete poured diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 55b1f097..deb62367 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -2,6 +2,18 @@ + + + + + true + + + + + + + @@ -321,6 +333,11 @@ Digital + + + + + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index d3213a89..85f9de54 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -478,7 +478,7 @@ def test_is_invalid_when_delivery_type_zone_equipment_and_missing_info(self, xpa }) @pytest.mark.parametrize("xpath_to_remove, expected_message", [ - ('//auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased/auc:AirSideEconomizer', 'auc:AirSideEconomizer'), + ('//auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased/auc:AirSideEconomizer', 'auc:FanBased/auc:AirSideEconomizer'), ('//auc:HeatRecoverySystems/auc:HeatRecoverySystem/auc:HeatRecoveryType', 'auc:HeatRecoveryType'), ]) def test_is_invalid_when_outdoor_air_control_is_missing_info(self, xpath_to_remove, expected_message): diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index a2f68ecf..f004d672 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -38,7 +38,7 @@ "","","","","","","","","","auc:TypicalOccupantUsages/auc:TypicalOccupantUsage[auc:TypicalOccupantUsageUnits/text() = 'Weeks per year']","","","" "","","","","","","","","","auc:OccupancyLevels/auc:OccupancyLevel[auc:OccupantQuantityType/text() = 'Peak total occupants' or auc:OccupantQuantityType/text() = 'Normal occupancy']/auc:OccupantQuantity","","","" "","","","","","","","","","//auc:PlugLoad[auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref = current()/@ID]/auc:WeightedAverageLoad","auc:Section[auc:SectionType='Space function'] must have a linked auc:PlugLoad with auc:WeightedAverageLoad","","" -"","","","","","","","","","//auc:HVACSystem[auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref = current()/@ID]/auc:PrincipalHVACSystemType","auc:Section[auc:SectionType='Space function'] must have a linked auc:HVACSystem/auc:PrincipalHVACSystem","","" +"","","","","","","","","","//auc:HVACSystem[auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref = current()/@ID]","auc:Section[auc:SectionType='Space function'] must have a linked auc:HVACSystem","","" "","","","","","","","","","//auc:LightingSystem[auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref = current()/@ID]/auc:LampType","auc:Section[auc:SectionType='Space function'] must have a linked auc:LightingSystem with auc:LampType defined","","" "","","","","","","","","","//auc:LightingSystem[auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref = current()/@ID]/auc:LampType//auc:LampLabel","auc:Section[auc:SectionType='Space function'] must have a linked auc:LightingSystem with auc:LampLabel defined","WARNING","" "Schedules","ASHRAE 211 6.2.1.1 (e)","General Schedule Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Schedules/auc:Schedule/auc:ScheduleDetails","true","","","auc:ScheduleDetail","There shoudl be at least one auc:ScheduleDetail in every auc:ScheduleDetails","","" @@ -116,6 +116,9 @@ "","","","","","","","","","auc:AirInfiltrationValueUnits","","","" "","","Water Infiltration","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:WaterInfiltrationSystems/auc:WaterInfiltrationSystem","true","","","auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = //auc:Sections/auc:Section[auc:SectionType = 'Whole building']/@ID]","auc:WaterInfiltrationSystem must be linked to auc:Section[auc:SectionType = 'Whole building']","","" "","","","","","","","","","auc:WaterInfiltrationNotes","","","" +"HVAC General Requirements","","General HVAC Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems","true","","","auc:HVACSystem","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem","true","","","//auc:Buildings/auc:Building/auc:Sections/auc:Section[@ID = current()/auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref]","Every auc:HVACSystem should be linked to an auc:Section","","" +"","","","","","","","","","auc:HeatingAndCoolingSystems","","","" "HVAC Year Installed","ASHRAE 211 6.2.1.3 (a)","Year Installed","ASHRAE 211 6.2.1.3 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:YearInstalled","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","auc:YearInstalled","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","auc:YearInstalled","","","" @@ -209,7 +212,7 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","//auc:Systems/auc:PumpSystems/auc:PumpSystem/auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = current()/@ID","auc:CoolingPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","//auc:Systems/auc:PumpSystems/auc:PumpSystem/auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = current()/@ID","auc:CondenserPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:PumpSystems/auc:PumpSystem","false","","","auc:PumpControlType","","","" -"HVAC Distribution System Delivery Outdoor Air Control","ASHRAE 211 6.2.1.3 (c)","Central Air Distribution","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased","false","","","auc:AirSideEconomizer","","","" +"HVAC Distribution System Delivery Outdoor Air Control","ASHRAE 211 6.2.1.3 (c)","Central Air Distribution","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","","","auc:FanBased/auc:AirSideEconomizer","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased/auc:AirSideEconomizer","false","","","auc:AirSideEconomizerType","","","" "","","","","","","","","","auc:AirSideEconomizerType != 'None' or auc:EconomizerControl","","","" "","","Heat Recovery System","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HeatRecoverySystems/auc:HeatRecoverySystem","false","","","auc:HeatRecoveryEfficiency or auc:EnergyRecoveryEfficiency","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 4b427cb5..de7e28a8 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -45,6 +45,10 @@ + + + + @@ -161,7 +165,7 @@ auc:TypicalOccupantUsages/auc:TypicalOccupantUsage[auc:TypicalOccupantUsageUnits/text() = 'Weeks per year'] auc:OccupancyLevels/auc:OccupancyLevel[auc:OccupantQuantityType/text() = 'Peak total occupants' or auc:OccupantQuantityType/text() = 'Normal occupancy']/auc:OccupantQuantity auc:Section[auc:SectionType='Space function'] must have a linked auc:PlugLoad with auc:WeightedAverageLoad - auc:Section[auc:SectionType='Space function'] must have a linked auc:HVACSystem/auc:PrincipalHVACSystem + auc:Section[auc:SectionType='Space function'] must have a linked auc:HVACSystem auc:Section[auc:SectionType='Space function'] must have a linked auc:LightingSystem with auc:LampType defined auc:Section[auc:SectionType='Space function'] must have a linked auc:LightingSystem with auc:LampLabel defined @@ -434,6 +438,23 @@ auc:WaterInfiltrationNotes + + Document Structure Prerequisites General HVAC Requirements + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem + + + + General HVAC Requirements + + auc:HVACSystem + + + Every auc:HVACSystem should be linked to an auc:Section + auc:HeatingAndCoolingSystems + + Year Installed @@ -649,8 +670,8 @@ Central Air Distribution - - auc:AirSideEconomizer + + auc:FanBased/auc:AirSideEconomizer auc:AirSideEconomizerType From 705fe6ca981e40b8d16d795852ff94c9b7f8ca19 Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Thu, 24 Sep 2020 10:18:19 -0500 Subject: [PATCH 18/76] feat(L200): break out EnvelopeSystems test --- schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 85f9de54..3e492623 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -57,7 +57,7 @@ def _sides_factory(footprint_shape, wall_id='Wall-A', window_id='Window-A', door return sides_elem -class TestL200Audit(AssertFailureRolesMixin): +class TestL200AuditMiscellaneous(AssertFailureRolesMixin): schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') exemplary_file = os.path.join(v2_2_0_SCH_DIR, 'exemplary_files', 'L200_Audit.xml') @@ -106,6 +106,11 @@ def test_runs_generation_storage_systems_tests_when_they_exist(self): # -- Assert self.assert_failure_messages(failures, {}) + +class TestL200AuditEnvelopeSystems(AssertFailureRolesMixin): + schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') + exemplary_file = os.path.join(v2_2_0_SCH_DIR, 'exemplary_files', 'L200_Audit.xml') + @pytest.mark.parametrize("footprint_shape", [ ("Rectangular"), ("L-Shape"), From 2d791aee43a33b20db63315b1af9f376e34cc7ef Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Thu, 24 Sep 2020 11:07:22 -0500 Subject: [PATCH 19/76] feat(L200): EnvelopeSystems - add test to check Whole Building section exists --- .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 3e492623..37bf93a0 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -302,6 +302,27 @@ def test_is_invalid_when_ground_coupling_is_crawlspace_unventilated_and_invalid( 'WARNING': ['auc:FoundationWallRValue or auc:FoundationWallUFactor'] }) + def test_is_invalid_when_no_section_whole_building(self): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + building_elem = tree.xpath('//auc:Buildings/auc:Building', namespaces=BSYNC_NSMAP) + assert len(building_elem) == 1 + building_elem = building_elem[0] + + # remove auc:Section[auc:SectionType = "Whole building"] + remove_element(building_elem, 'auc:Sections/auc:Section[auc:SectionType = "Whole building"]') + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + # This breaks many things, but just want to make sure it breaks. Only checking first error. + failures = [failures[0]] + self.assert_failure_messages(failures, { + 'ERROR': ['/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]/auc:Roofs/auc:Roof'] + }) + class TestL200AuditHvacSystems(AssertFailureRolesMixin): schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') From ab7af1e9a8c72e80ddbb45795343a207acef3d2e Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Thu, 24 Sep 2020 11:09:51 -0500 Subject: [PATCH 20/76] feat(L200): EnvelopeSystems - add test to check a Roof exists as part of Whole Building Section --- .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 37bf93a0..078dcc7c 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -323,6 +323,31 @@ def test_is_invalid_when_no_section_whole_building(self): 'ERROR': ['/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]/auc:Roofs/auc:Roof'] }) + def test_is_invalid_when_no_roof_system_exists_under_section_whole_building(self): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + section_elem = tree.xpath('//auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]', namespaces=BSYNC_NSMAP) + assert len(section_elem) == 1 + section_elem = section_elem[0] + + roof_elem = section_elem.xpath('auc:Roofs/auc:Roof', namespaces=BSYNC_NSMAP) + assert len(roof_elem) == 1 + + # remove auc:Roof + remove_element(section_elem, 'auc:Roofs/auc:Roof[1]') + roof_elem = section_elem.xpath('auc:Roofs/auc:Roof', namespaces=BSYNC_NSMAP) + assert len(roof_elem) == 0 + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + # Same error as previous + self.assert_failure_messages(failures, { + 'ERROR': ['/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]/auc:Roofs/auc:Roof'] + }) + class TestL200AuditHvacSystems(AssertFailureRolesMixin): schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') From a3031f46d4380ef54544b70efc1d042c312ee22a Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Thu, 24 Sep 2020 12:55:46 -0500 Subject: [PATCH 21/76] feat(L200): EnvelopeSystem - ensure warning fired for each auc:Side not linked to an auc:Window --- .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 078dcc7c..d3677440 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -348,6 +348,42 @@ def test_is_invalid_when_no_roof_system_exists_under_section_whole_building(self 'ERROR': ['/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]/auc:Roofs/auc:Roof'] }) + def test_is_invalid_when_no_window_exists_under_a_side(self): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + section_elem = tree.xpath('//auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]', namespaces=BSYNC_NSMAP) + assert len(section_elem) == 1 + section_elem = section_elem[0] + + side_elem = section_elem.xpath('auc:Sides/auc:Side', namespaces=BSYNC_NSMAP) + assert len(side_elem) == 4 + + side_elem_0 = side_elem[0] + side_elem_1 = side_elem[1] + + # remove window from first side element + remove_element(side_elem_0, 'auc:WindowIDs/auc:WindowID[1]') + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + self.assert_failure_messages(failures, { + 'WARNING': ['Found an auc:Side with no linked auc:Window'] + }) + + # remove window from second side element + remove_element(side_elem_1, 'auc:WindowIDs/auc:WindowID[1]') + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + self.assert_failure_messages(failures, { + 'WARNING': ['Found an auc:Side with no linked auc:Window', 'Found an auc:Side with no linked auc:Window'] + }) + class TestL200AuditHvacSystems(AssertFailureRolesMixin): schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') From 144bafc220b0ec40c591fc48ef08aa33cd7fc5ad Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Thu, 24 Sep 2020 13:07:02 -0500 Subject: [PATCH 22/76] feat(L200): EnvelopeSystem - add assertion if auc:Side has no auc:Wall --- .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 22 +++++++++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 2 +- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index d3677440..51953310 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -348,6 +348,28 @@ def test_is_invalid_when_no_roof_system_exists_under_section_whole_building(self 'ERROR': ['/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]/auc:Roofs/auc:Roof'] }) + def test_is_invalid_when_no_wall_exists_under_a_side(self): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + section_elem = tree.xpath('//auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]', namespaces=BSYNC_NSMAP) + assert len(section_elem) == 1 + section_elem = section_elem[0] + + side_elem = section_elem.xpath('auc:Sides/auc:Side', namespaces=BSYNC_NSMAP) + assert len(side_elem) == 4 + + # remove wall from first side element + remove_element(side_elem[0], 'auc:WallIDs/auc:WallID[1]') + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': ['Found an auc:Side with no linked auc:Wall'] + }) + def test_is_invalid_when_no_window_exists_under_a_side(self): # -- Setup tree = exemplary_tree('L200_Audit', 'v2.2.0') diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index f004d672..6ada54e5 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -76,7 +76,7 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'T-Shape']","false","","","count(auc:Sides/auc:Side) = 8","Incorrect number of auc:Side elements for footprint shape ""T-Shape"" (found )","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'H-Shape']","false","","","count(auc:Sides/auc:Side) = 12","Incorrect number of auc:Side elements for footprint shape ""H-Shape"" (found )","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building"" and auc:FootprintShape/text() = 'O-Shape']","false","","","count(auc:Sides/auc:Side) = 8","Incorrect number of auc:Side elements for footprint shape ""O-Shape"" (found )","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side","true","","","auc:WallIDs","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side","true","","","auc:WallIDs/auc:WallID","Found an auc:Side with no linked auc:Wall","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WallIDs/auc:WallID","true","","","//auc:WallSystem[@ID = current()/@IDref]","auc:WallID in auc:Side should link to an auc:WallSystem's ID","","" "","","","","","","","","","auc:WallArea","","","" "Building Envelope - Fenestration","ASHRAE 211 6.2.1.2 (c)","Fenestration General Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building","true","","","auc:OverallWindowToWallRatio","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index de7e28a8..3e9fd885 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -294,7 +294,7 @@ Incorrect number of auc:Side elements for footprint shape "O-Shape" (found ) - auc:WallIDs + Found an auc:Side with no linked auc:Wall auc:WallID in auc:Side should link to an auc:WallSystem's ID From 9d181f2d2942fa99a3aae8c8cd1e4bdab491a729 Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Thu, 24 Sep 2020 14:57:15 -0500 Subject: [PATCH 23/76] feat(L200): EnvelopeSystem - ensure foundation exists under section whole building --- .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 51953310..04ebe3f0 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -406,6 +406,30 @@ def test_is_invalid_when_no_window_exists_under_a_side(self): 'WARNING': ['Found an auc:Side with no linked auc:Window', 'Found an auc:Side with no linked auc:Window'] }) + def test_is_invalid_when_no_foundation_exists_under_section_whole_building(self): + # -- Setup + tree = exemplary_tree('L200_Audit', 'v2.2.0') + + section_elem = tree.xpath('//auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]', namespaces=BSYNC_NSMAP) + assert len(section_elem) == 1 + section_elem = section_elem[0] + + foundation_elem = section_elem.xpath('auc:Foundations/auc:Foundation', namespaces=BSYNC_NSMAP) + assert len(foundation_elem) == 1 + foundation_elem = foundation_elem[0] + + # remove window from first side element + remove_element(foundation_elem, 'auc:FoundationID[1]') + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': ['/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType = "Whole building"]/auc:Foundations/auc:Foundation/auc:FoundationID', + 'count(auc:Foundations/auc:Foundation/auc:FoundationID) >= 1'] + }) + class TestL200AuditHvacSystems(AssertFailureRolesMixin): schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') From daeaf8f6678be1b5c371c9cd2f6473bb0e928f91 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 24 Sep 2020 15:17:07 -0600 Subject: [PATCH 24/76] refactor(L200): add predicate for selecting external doors --- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 2 +- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 6ada54e5..88fa13a1 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -81,7 +81,7 @@ "","","","","","","","","","auc:WallArea","","","" "Building Envelope - Fenestration","ASHRAE 211 6.2.1.2 (c)","Fenestration General Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building","true","","","auc:OverallWindowToWallRatio","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window]","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WindowIDs/auc:WindowID[@IDref = current()/@ID]","Each auc:Window must be linked to an auc:Side","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door]","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:DoorIDs/auc:DoorID[@IDref = current()/@ID]","Each auc:Door must be linked to an auc:Side","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door/auc:ExteriorDoorType]","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:DoorIDs/auc:DoorID[@IDref = current()/@ID]","Each auc:Door must be linked to an auc:Side","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side","true","","","auc:WindowIDs/auc:WindowID","Found an auc:Side with no linked auc:Window","WARNING","" "","","","","","","","","","auc:DoorIDs/auc:DoorID","Found an auc:Side with no linked auc:Door","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WindowIDs/auc:WindowID","true","","","//auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window and @ID = current()/@IDref]","An auc:Side element's auc:WindowIDs/auc:WindowID must point to a valid auc:FenestrationSystem","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 3e9fd885..25fbfe63 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -306,7 +306,7 @@ /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window] - /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door] + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door/auc:ExteriorDoorType] /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side/auc:WindowIDs/auc:WindowID /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side/auc:DoorIDs/auc:DoorID @@ -320,7 +320,7 @@ Each auc:Window must be linked to an auc:Side - + Each auc:Door must be linked to an auc:Side From 20423b935eb117b9103e9e2f1e7ff6403b391c8e Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 24 Sep 2020 15:40:26 -0600 Subject: [PATCH 25/76] feat(L200): add excluded section id tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 49 +++++++++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 3 ++ schematron/v2.2.0/v2-2-0_L200_Audit.sch | 11 +++++ 3 files changed, 63 insertions(+) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 56fd0f8e..558fc6b4 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -88,10 +88,16 @@ Gross 5502 + + + Conditioned 5502 + + + @@ -153,6 +159,49 @@ Single zone + + Component + Other + Other + + + + + + Peak total occupants + 123 + + + + + + + 40 + Hours per week + + + + + 30 + Weeks per year + + + + + + + Gross + 10 + + + Conditioned + 10 + + + + Single zone + + Whole building Rectangular diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 88fa13a1..80badde5 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -23,6 +23,9 @@ "","","","","","","","","","auc:HistoricalLandmark","","","" "","","","","","","","","","auc:PrimaryContactID[@IDref = //auc:Contacts/auc:Contact/@ID]","auc:PrimaryContactID should be linked to an auc:Contact's ID","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report","true","","","auc:AuditorContactID[@IDref = //auc:Contacts/auc:Contact/@ID]","auc:AuditorContactID should be linked to an auc:Contact's ID","","" +"","","","","Floor Areas","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType/text() = ""Gross""]/auc:ExcludedSectionIDs","true","","","count(auc:ExcludedSectionID) > 0","No floor areas have been excluded","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType/text() = ""Conditioned""]/auc:ExcludedSectionIDs","true","","","count(auc:ExcludedSectionID) > 0","No floor areas have been excluded","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType/text() = ""Gross"" or auc:FloorAreaType/text() = ""Conditioned""]/auc:ExcludedSectionIDs/auc:ExcludedSectionID","false","","","//auc:Sections/auc:Section[@ID = current()/@IDref]","ExcludedSectionID should point to a valid Section's ID","","" "","","Contact Information","ASHRAE 211 6.1.1.1.b and 6.1.1.1.c","Client Contact Information","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Contacts/auc:Contact[auc:ContactRoles/auc:ContactRole/text() = 'Owner']","true","","","auc:ContactName","","","" "","","","","","","","","","auc:ContactTelephoneNumbers/auc:ContactTelephoneNumber/auc:TelephoneNumber","","WARNING","" "","","","","","","","","","auc:ContactEmailAddresses/auc:ContactEmailAddress/auc:EmailAddress","","WARNING","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 25fbfe63..6336ff38 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -93,6 +93,8 @@ /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType/text() = "Gross"]/auc:ExcludedSectionIDs + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType/text() = "Conditioned"]/auc:ExcludedSectionIDs @@ -126,6 +128,15 @@ auc:AuditorContactID should be linked to an auc:Contact's ID + + No floor areas have been excluded + + + No floor areas have been excluded + + + ExcludedSectionID should point to a valid Section's ID + Document Structure Prerequisites Contact Information From 3ca7b50c9d510dc9fed1b572769e1334a236f5bc Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 24 Sep 2020 15:48:17 -0600 Subject: [PATCH 26/76] feat(L200): add utility billpayer test --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 6 ++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.sch | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 558fc6b4..92f2b89c 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -1649,6 +1649,8 @@ 12345 + + Building Owner @@ -1683,6 +1685,8 @@ 12345 + + Building Owner @@ -1719,6 +1723,8 @@ 12345 + + Building Owner diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 80badde5..d11309ff 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -32,6 +32,7 @@ "","","","","Auditor Contact Information","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Contacts/auc:Contact[auc:ContactRoles/auc:ContactRole/text() = 'Energy Auditor']","true","","","auc:ContactName","","","" "","","","","","","","","","auc:ContactTelephoneNumbers/auc:ContactTelephoneNumber/auc:TelephoneNumber","","WARNING","" "","","","","","","","","","auc:ContactEmailAddresses/auc:ContactEmailAddress/auc:EmailAddress","","WARNING","" +"","","","","Utility Billpayer","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility","true","","","auc:UtilityBillpayer","","","" "","","Space Functions","ASHRAE 211 6.1.1.1.g/5.3.4","Space Functions","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = 'Space function']","true","","","auc:OccupancyClassification","","","" "","","","","","","","","","auc:OriginalOccupancyClassification","","","" "","","","","","","","","","auc:FloorAreas/auc:FloorArea[auc:FloorAreaType/text() = 'Gross']/auc:FloorAreaValue","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 6336ff38..dd185421 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -143,6 +143,7 @@ /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Contacts/auc:Contact[auc:ContactRoles/auc:ContactRole/text() = 'Owner'] /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Contacts/auc:Contact[auc:ContactRoles/auc:ContactRole/text() = 'Energy Auditor'] + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility @@ -157,6 +158,9 @@ auc:ContactTelephoneNumbers/auc:ContactTelephoneNumber/auc:TelephoneNumber auc:ContactEmailAddresses/auc:ContactEmailAddress/auc:EmailAddress + + auc:UtilityBillpayer + Document Structure Prerequisites Space Functions From 2f3b06807ea3dab21d9f2d0233cd696fba3ed46f Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 24 Sep 2020 16:05:20 -0600 Subject: [PATCH 27/76] feat(L200): add occupancy schedule test --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 6 +++--- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.sch | 4 ++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 92f2b89c..04a5f54e 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -605,9 +605,9 @@ - - - + + + diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index d11309ff..233a4b6c 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -55,6 +55,7 @@ "","","","","","","","","","auc:DayEndTime","","","" "","","","","","","","","","","","","" "","","Occupancy Schedules","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Schedules/auc:Schedule/auc:ScheduleDetails/auc:ScheduleDetail[auc:ScheduleCategory/text() = 'Occupied']","true","","","auc:PartialOperationPercentage","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = 'Space function']","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Schedules/auc:Schedule[auc:ScheduleDetails/auc:ScheduleDetail/auc:ScheduleCategory/text() = 'Occupied']/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","auc:Section[auc:SectionType='Space function'] must have a linked auc:Schedule with Occupied Category","","" "Multigeneration and Onsite Renewable Energy Systems","ASHRAE 211 6.2.1.1 (f)","Generation Systems","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:OnsiteStorageTransmissionGenerationSystems/auc:OnsiteStorageTransmissionGenerationSystem/auc:EnergyConversionType/auc:Generation/auc:OnsiteGenerationType/auc:PV","false","","","auc:PhotovoltaicSystemMaximumPowerOutput","","","" "","","","","","","","","","auc:PhotovoltaicSystemInverterEfficiency","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:OnsiteStorageTransmissionGenerationSystems/auc:OnsiteStorageTransmissionGenerationSystem/auc:EnergyConversionType/auc:Generation/auc:OnsiteGenerationType/auc:Other","false","","","auc:OtherEnergyGenerationTechnology","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index dd185421..7ce9d0ba 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -212,6 +212,7 @@ Document Structure Prerequisites Occupancy Schedules /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Schedules/auc:Schedule/auc:ScheduleDetails/auc:ScheduleDetail[auc:ScheduleCategory/text() = 'Occupied'] + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = 'Space function'] @@ -219,6 +220,9 @@ auc:PartialOperationPercentage + + auc:Section[auc:SectionType='Space function'] must have a linked auc:Schedule with Occupied Category + Generation Systems From 63723adb94b9f02f5f4582ba7ab366a7a0d9c2df Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 24 Sep 2020 16:25:27 -0600 Subject: [PATCH 28/76] feat(L200): add HVAC schedule tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 23 +++++++++++++++---- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 4 +++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 6 +++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 04a5f54e..27675874 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -402,7 +402,11 @@ - + + + + + @@ -617,18 +621,21 @@ Lighting 09:00:00 17:00:00 + 80 Weekend Lighting 09:00:00 17:00:00 + 80 Holiday Lighting 09:00:00 17:00:00 + 80 @@ -637,25 +644,28 @@ - + Weekday - Miscellaneous equipment + HVAC equipment 09:00:00 17:00:00 + 80 Weekend - Miscellaneous equipment + HVAC equipment 09:00:00 17:00:00 + 80 Holiday - Miscellaneous equipment + HVAC equipment 09:00:00 17:00:00 + 80 @@ -671,18 +681,21 @@ Miscellaneous equipment 09:00:00 17:00:00 + 80 Weekend Miscellaneous equipment 09:00:00 17:00:00 + 80 Holiday Miscellaneous equipment 09:00:00 17:00:00 + 80 diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 233a4b6c..24f819cd 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -53,7 +53,7 @@ "","","","","","","","","","auc:ScheduleDetail/auc:DayType/text() = 'Holiday'","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Schedules/auc:Schedule/auc:ScheduleDetails/auc:ScheduleDetail","true","","","auc:DayStartTime","","","" "","","","","","","","","","auc:DayEndTime","","","" -"","","","","","","","","","","","","" +"","","","","","","","","","auc:PartialOperationPercentage","","","" "","","Occupancy Schedules","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Schedules/auc:Schedule/auc:ScheduleDetails/auc:ScheduleDetail[auc:ScheduleCategory/text() = 'Occupied']","true","","","auc:PartialOperationPercentage","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = 'Space function']","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Schedules/auc:Schedule[auc:ScheduleDetails/auc:ScheduleDetail/auc:ScheduleCategory/text() = 'Occupied']/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","auc:Section[auc:SectionType='Space function'] must have a linked auc:Schedule with Occupied Category","","" "Multigeneration and Onsite Renewable Energy Systems","ASHRAE 211 6.2.1.1 (f)","Generation Systems","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:OnsiteStorageTransmissionGenerationSystems/auc:OnsiteStorageTransmissionGenerationSystem/auc:EnergyConversionType/auc:Generation/auc:OnsiteGenerationType/auc:PV","false","","","auc:PhotovoltaicSystemMaximumPowerOutput","","","" @@ -124,6 +124,8 @@ "HVAC General Requirements","","General HVAC Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems","true","","","auc:HVACSystem","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem","true","","","//auc:Buildings/auc:Building/auc:Sections/auc:Section[@ID = current()/auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref]","Every auc:HVACSystem should be linked to an auc:Section","","" "","","","","","","","","","auc:HeatingAndCoolingSystems","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID","true","","","auc:LinkedScheduleIDs/auc:LinkedScheduleID","","","" +"","","","","","","","","","//auc:Schedules/auc:Schedule[@ID = current()/auc:LinkedScheduleIDs/auc:LinkedScheduleID/@IDref]/auc:ScheduleDetails/auc:ScheduleDetail[auc:ScheduleCategory/text() = ""HVAC equipment""]","","","" "HVAC Year Installed","ASHRAE 211 6.2.1.3 (a)","Year Installed","ASHRAE 211 6.2.1.3 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:YearInstalled","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","auc:YearInstalled","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","auc:YearInstalled","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 7ce9d0ba..1c7d3a52 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -206,6 +206,7 @@ auc:DayStartTime auc:DayEndTime + auc:PartialOperationPercentage @@ -462,6 +463,7 @@ /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID @@ -473,6 +475,10 @@ Every auc:HVACSystem should be linked to an auc:Section auc:HeatingAndCoolingSystems + + auc:LinkedScheduleIDs/auc:LinkedScheduleID + //auc:Schedules/auc:Schedule[@ID = current()/auc:LinkedScheduleIDs/auc:LinkedScheduleID/@IDref]/auc:ScheduleDetails/auc:ScheduleDetail[auc:ScheduleCategory/text() = "HVAC equipment"] + Year Installed From 5cdcd9bde4b57d1279700895c6b2fc01ebeb4d93 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 24 Sep 2020 16:41:53 -0600 Subject: [PATCH 29/76] feat(L200): test overall door to wall ratio --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.csv | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.sch | 1 + 3 files changed, 3 insertions(+) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 27675874..7c505ec1 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -104,6 +104,7 @@ 123 123 0.2 + 0.1 1993 diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 24f819cd..ea54b074 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -85,6 +85,7 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WallIDs/auc:WallID","true","","","//auc:WallSystem[@ID = current()/@IDref]","auc:WallID in auc:Side should link to an auc:WallSystem's ID","","" "","","","","","","","","","auc:WallArea","","","" "Building Envelope - Fenestration","ASHRAE 211 6.2.1.2 (c)","Fenestration General Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building","true","","","auc:OverallWindowToWallRatio","","","" +"","","","","","","","","","auc:OverallDoorToWallRatio","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window]","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WindowIDs/auc:WindowID[@IDref = current()/@ID]","Each auc:Window must be linked to an auc:Side","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door/auc:ExteriorDoorType]","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:DoorIDs/auc:DoorID[@IDref = current()/@ID]","Each auc:Door must be linked to an auc:Side","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side","true","","","auc:WindowIDs/auc:WindowID","Found an auc:Side with no linked auc:Window","WARNING","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 1c7d3a52..6a8bd4f8 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -336,6 +336,7 @@ Fenestration General Requirements auc:OverallWindowToWallRatio + auc:OverallDoorToWallRatio Each auc:Window must be linked to an auc:Side From 75f250bff1884be5deb927cce7573242597d00c1 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 24 Sep 2020 23:10:56 -0600 Subject: [PATCH 30/76] feat(L200): DHW system type --- schematron/v2.2.0/tests/data/DHW_example1.xml | 145 ++++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 24 +++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 24 ++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 54 +++++++ 4 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 schematron/v2.2.0/tests/data/DHW_example1.xml diff --git a/schematron/v2.2.0/tests/data/DHW_example1.xml b/schematron/v2.2.0/tests/data/DHW_example1.xml new file mode 100644 index 00000000..9e2ac130 --- /dev/null +++ b/schematron/v2.2.0/tests/data/DHW_example1.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + Condensing + + + + + 123 + .5 + 123 + + + + .5 + + Looped + Thermal Efficiency + .5 + 123 + gpm + Electricity + + + + + + 1 + + + + + + + + + .5 + + + + + 123 + .5 + 123 + + + + .5 + + Looped + Thermal Efficiency + .5 + 123 + gpm + Electricity + + + + + + 1 + + + + + + + + + Hot water + Single glazing black + + + + + 123 + .5 + 123 + + + + .5 + + Looped + Thermal Efficiency + .5 + 123 + gpm + Electricity + + + + + + 1 + + + + + + + Condensing + + + + + + .5 + + Looped + Thermal Efficiency + .5 + 123 + gpm + Electricity + + + + + + 1 + + + + + + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 04ebe3f0..1c82e551 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -698,3 +698,27 @@ def test_is_invalid_when_missing_building_automation_system(self, xpath_to_remov self.assert_failure_messages(failures, { 'ERROR': ['auc:BuildingAutomationSystem'] }) + + +class TestL200AuditDhwSystems(AssertFailureRolesMixin): + schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') + example_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data', 'DHW_example1.xml') + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank/auc:TankHeatingType/auc:Direct/auc:DirectTankHeatingSource/auc:Combustion/auc:CondensingOperation', 'auc:CondensingOperation'), + ('//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank/auc:TankHeatingType/auc:Indirect/auc:IndirectTankHeatingSource/auc:HeatPump/auc:RatedHeatPumpSensibleHeatRatio', 'auc:RatedHeatPumpSensibleHeatRatio'), + ('//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank/auc:TankHeatingType/auc:Indirect/auc:IndirectTankHeatingSource/auc:Solar/auc:SolarThermalSystemType', 'auc:SolarThermalSystemType'), + ('//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:Instantaneous/auc:InstantaneousWaterHeatingSource/auc:Combustion/auc:CondensingOperation', 'auc:CondensingOperation'), + ]) + def test_is_invalid_when_dhw_storage_tank_is_missing_info(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='domestic_hot_water_system') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index ea54b074..c3170ae5 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -241,4 +241,26 @@ "HVAC Building Automation System","ASHRAE 211 6.2.1.3 (d)","BAS","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building","false","","","auc:BuildingAutomationSystem","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:BuildingAutomationSystem","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","auc:BuildingAutomationSystem","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","auc:BuildingAutomationSystem","","","" \ No newline at end of file +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","auc:BuildingAutomationSystem","","","" +"Domestic Hot Water System","ASHRAE 211 6.2.1.4 (a)","Domestic Hot Water Systems","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem","false","","","count(auc:DomesticHotWaterType/*) >= 1","","","" +"","","","","","","","","","auc:Recirculation/auc:RecirculationEnergyLossRate","","","" +"","","","","","","","","","auc:HotWaterDistributionType","","","" +"","","","","","","","","","auc:WaterHeaterEfficiencyType","","","" +"","","","","","","","","","auc:WaterHeaterEfficiency","","","" +"","","","","","","","","","auc:Capacity","","","" +"","","","","","","","","","auc:CapacityUnits","","","" +"","","","","","","","","","auc:PrimaryFuel","","","" +"","","","","","","","","","//auc:Buildings/auc:Building[@ID = current()/auc:LinkedPremises/auc:Building/auc:LinkedBuildingID/@IDref]","auc:DomesticHotWaterSystem must be linked to a valid auc:Building","","" +"","","","","","","","","","auc:Quantity","","","" +"","","Storage Tank","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank","false","","","auc:TankHeatingType/*","","","" +"","","","","","","","","","auc:TankVolume","","","" +"","","","","","","","","","auc:RecoveryEfficiency","","WARNING","" +"","","","","","","","","","auc:OffCycleHeatLossCoefficient","","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank/auc:TankHeatingType/auc:Direct","false","","","auc:DirectTankHeatingSource/*","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank/auc:TankHeatingType/auc:Direct/auc:DirectTankHeatingSource/auc:Combustion","false","","","auc:CondensingOperation","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank/auc:TankHeatingType/auc:Indirect","false","","","auc:IndirectTankHeatingSource/*","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank/auc:TankHeatingType/auc:Indirect/auc:IndirectTankHeatingSource/auc:HeatPump","false","","","auc:RatedHeatPumpSensibleHeatRatio","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank/auc:TankHeatingType/auc:Indirect/auc:IndirectTankHeatingSource/auc:Solar","false","","","auc:SolarThermalSystemType","","","" +"","","","","","","","","","auc:SolarThermalSystemCollectorType","","","" +"","","Instantaneous","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:Instantaneous","false","","","auc:InstantaneousWaterHeatingSource/*","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:Instantaneous/auc:InstantaneousWaterHeatingSource/auc:Combustion","false","","","auc:CondensingOperation","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 6a8bd4f8..a8fe454b 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -88,6 +88,11 @@ + + + + + Document Structure Prerequisites Misc Building Info @@ -773,4 +778,53 @@ auc:BuildingAutomationSystem + + Domestic Hot Water Systems + + count(auc:DomesticHotWaterType/*) >= 1 + auc:Recirculation/auc:RecirculationEnergyLossRate + auc:HotWaterDistributionType + auc:WaterHeaterEfficiencyType + auc:WaterHeaterEfficiency + auc:Capacity + auc:CapacityUnits + auc:PrimaryFuel + auc:DomesticHotWaterSystem must be linked to a valid auc:Building + auc:Quantity + + + + Storage Tank + + auc:TankHeatingType/* + auc:TankVolume + auc:RecoveryEfficiency + auc:OffCycleHeatLossCoefficient + + + auc:DirectTankHeatingSource/* + + + auc:CondensingOperation + + + auc:IndirectTankHeatingSource/* + + + auc:RatedHeatPumpSensibleHeatRatio + + + auc:SolarThermalSystemType + auc:SolarThermalSystemCollectorType + + + + Instantaneous + + auc:InstantaneousWaterHeatingSource/* + + + auc:CondensingOperation + + From 84091dfded1e11d78c3703a36691614404c4e12e Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 24 Sep 2020 23:42:31 -0600 Subject: [PATCH 31/76] feat(L200): add operating conditions and general condition tests --- schematron/v2.2.0/tests/data/DHW_example1.xml | 78 +++++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 34 +++++++- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 16 +++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 34 ++++++++ 4 files changed, 160 insertions(+), 2 deletions(-) diff --git a/schematron/v2.2.0/tests/data/DHW_example1.xml b/schematron/v2.2.0/tests/data/DHW_example1.xml index 9e2ac130..9967eea3 100644 --- a/schematron/v2.2.0/tests/data/DHW_example1.xml +++ b/schematron/v2.2.0/tests/data/DHW_example1.xml @@ -26,18 +26,38 @@ 123 .5 + 123 + 123 123 + Notes + 1 + 123 + Continuous + 123 .5 Looped Thermal Efficiency .5 + 123 + 123 + 123 123 gpm + + + + + + + + + Electricity + Excellent @@ -59,18 +79,38 @@ 123 .5 + 123 + 123 123 + Notes + 1 + 123 + Continuous + 123 .5 Looped Thermal Efficiency .5 + 123 + 123 + 123 123 gpm + + + + + + + + + Electricity + Excellent @@ -93,18 +133,38 @@ 123 .5 + 123 + 123 123 + Notes + 1 + 123 + Continuous + 123 .5 Looped Thermal Efficiency .5 + 123 + 123 + 123 123 gpm + + + + + + + + + Electricity + Excellent @@ -122,15 +182,33 @@ + Notes + 1 + 123 + Continuous + 123 .5 Looped Thermal Efficiency .5 + 123 + 123 + 123 123 gpm + + + + + + + + + Electricity + Excellent diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 1c82e551..f1548c57 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -710,7 +710,7 @@ class TestL200AuditDhwSystems(AssertFailureRolesMixin): ('//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank/auc:TankHeatingType/auc:Indirect/auc:IndirectTankHeatingSource/auc:Solar/auc:SolarThermalSystemType', 'auc:SolarThermalSystemType'), ('//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:Instantaneous/auc:InstantaneousWaterHeatingSource/auc:Combustion/auc:CondensingOperation', 'auc:CondensingOperation'), ]) - def test_is_invalid_when_dhw_storage_tank_is_missing_info(self, xpath_to_remove, expected_message): + def test_is_invalid_when_dhw_system_is_missing_info(self, xpath_to_remove, expected_message): # -- Setup tree = etree.parse(self.example_file) remove_element(tree, xpath_to_remove) @@ -722,3 +722,35 @@ def test_is_invalid_when_dhw_storage_tank_is_missing_info(self, xpath_to_remove, self.assert_failure_messages(failures, { 'ERROR': [expected_message] }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem[1]/auc:DailyHotWaterDraw', 'auc:DailyHotWaterDraw'), + ('//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem[1]/auc:DomesticHotWaterType/auc:StorageTank/auc:StorageTankInsulationRValue', 'auc:StorageTankInsulationRValue'), + ('//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem[1]/auc:Recirculation/auc:RecirculationLoopCount', 'auc:RecirculationLoopCount'), + ]) + def test_is_invalid_when_dhw_operating_condition_is_missing_info(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='dhw_operating_condition') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) + + def test_is_invalid_when_dhw_general_condition_is_missing(self): + # -- Setup + tree = etree.parse(self.example_file) + condition_xpath = '//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem[1]/auc:DomesticHotWaterSystemCondition' + remove_element(tree, condition_xpath) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='dhw_general_condition') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': ['auc:DomesticHotWaterSystemCondition'] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index c3170ae5..db72742e 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -263,4 +263,18 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank/auc:TankHeatingType/auc:Indirect/auc:IndirectTankHeatingSource/auc:Solar","false","","","auc:SolarThermalSystemType","","","" "","","","","","","","","","auc:SolarThermalSystemCollectorType","","","" "","","Instantaneous","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:Instantaneous","false","","","auc:InstantaneousWaterHeatingSource/*","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:Instantaneous/auc:InstantaneousWaterHeatingSource/auc:Combustion","false","","","auc:CondensingOperation","","","" \ No newline at end of file +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:Instantaneous/auc:InstantaneousWaterHeatingSource/auc:Combustion","false","","","auc:CondensingOperation","","","" +"DHW Operating Condition","ASHRAE 211 6.2.1.4 (b)","DHW Operating Conditions","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem","false","","","count(auc:Controls/auc:Control/*) >= 1","","","" +"","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType/*","","","" +"","","","","","","","","","auc:DailyHotWaterDraw","","","" +"","","","","","","","","","auc:HotWaterSetpointTemperature","","","" +"","","","","","","","","","auc:ParasiticFuelConsumptionRate","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:DomesticHotWaterType/auc:StorageTank","false","","","auc:StorageTankInsulationRValue","","","" +"","","","","","","","","","auc:StorageTankInsulationThickness","","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:Recirculation","false","","","auc:RecirculationLoopCount","","","" +"","","","","","","","","","auc:RecirculationFlowRate","","","" +"","","","","","","","","","auc:RecirculationControlType","","","" +"","","","","","","","","","auc:PipeInsulationThickness","","","" +"","","","","","","","","","auc:RecirculationEnergyLossRate","","WARNING","" +"DHW General Condition","ASHRAE 211 6.2.1.4 (c)","DHW General Conditions","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem","false","","","auc:DomesticHotWaterSystemCondition","","","" +"","","","","","","","","","auc:DomesticHotWaterSystemNotes","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index a8fe454b..b27ad120 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -93,6 +93,12 @@ + + + + + + Document Structure Prerequisites Misc Building Info @@ -827,4 +833,32 @@ auc:CondensingOperation + + DHW Operating Conditions + + count(auc:Controls/auc:Control/*) >= 1 + auc:Controls/auc:Control/*/auc:ControlSystemType/* + auc:DailyHotWaterDraw + auc:HotWaterSetpointTemperature + auc:ParasiticFuelConsumptionRate + + + auc:StorageTankInsulationRValue + auc:StorageTankInsulationThickness + + + auc:RecirculationLoopCount + auc:RecirculationFlowRate + auc:RecirculationControlType + auc:PipeInsulationThickness + auc:RecirculationEnergyLossRate + + + + DHW General Conditions + + auc:DomesticHotWaterSystemCondition + auc:DomesticHotWaterSystemNotes + + From b4b09144cab9ffa4e2f4379a56089c64b97021ff Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 25 Sep 2020 00:41:28 -0600 Subject: [PATCH 32/76] feat(L200): add lighting tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 36 ++++++++---- .../v2.2.0/tests/data/Lighting_example1.xml | 58 +++++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 24 ++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 21 ++++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 50 ++++++++++++++++ 5 files changed, 177 insertions(+), 12 deletions(-) create mode 100644 schematron/v2.2.0/tests/data/Lighting_example1.xml diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 7c505ec1..dcbef5c6 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -414,15 +414,35 @@ - - - + - - 2D + Spiral + Standard Electronic + + .2 + + 100 + 123 + 123 + 1 + 1 + 1 + false + + + + + + + Photocell + Continuous + + + + false @@ -432,12 +452,6 @@ - - Constant Volume - - - - Constant Volume diff --git a/schematron/v2.2.0/tests/data/Lighting_example1.xml b/schematron/v2.2.0/tests/data/Lighting_example1.xml new file mode 100644 index 00000000..54b9d268 --- /dev/null +++ b/schematron/v2.2.0/tests/data/Lighting_example1.xml @@ -0,0 +1,58 @@ + + + + + + + + + true + + + + + + + + + + + + + Spiral + + + Standard Electronic + + .2 + + 100 + 123 + 123 + 1 + 1 + 1 + false + + + + + + + Photocell + Continuous + + + + false + + + + + + + + + + + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index f1548c57..28c3207f 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -754,3 +754,27 @@ def test_is_invalid_when_dhw_general_condition_is_missing(self): self.assert_failure_messages(failures, { 'ERROR': ['auc:DomesticHotWaterSystemCondition'] }) + + +class TestL200AuditLightingSystems(AssertFailureRolesMixin): + schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') + example_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data', 'Lighting_example1.xml') + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:LightingSystems/auc:LightingSystem/auc:OutsideLighting', 'auc:OutsideLighting'), + ('//auc:LightingSystems/auc:LightingSystem/auc:LampType/*/auc:LampLabel', 'auc:LampLabel'), + ('//auc:LightingSystems/auc:LightingSystem/auc:Controls/auc:Control/auc:Daylighting/auc:ControlSensor', 'auc:ControlSensor'), + ('//auc:LightingSystems/auc:LightingSystem/auc:NumberOfLampsPerBallast', 'auc:NumberOfLampsPerBallast'), + ]) + def test_is_invalid_when_lighting_is_missing_info(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='lighting') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index db72742e..65014816 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -277,4 +277,23 @@ "","","","","","","","","","auc:PipeInsulationThickness","","","" "","","","","","","","","","auc:RecirculationEnergyLossRate","","WARNING","" "DHW General Condition","ASHRAE 211 6.2.1.4 (c)","DHW General Conditions","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem","false","","","auc:DomesticHotWaterSystemCondition","","","" -"","","","","","","","","","auc:DomesticHotWaterSystemNotes","","","" \ No newline at end of file +"","","","","","","","","","auc:DomesticHotWaterSystemNotes","","","" +"Lighting","ASHRAE 211 6.2.1.5 (a) and (b)","General Lighting Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:LightingSystems/auc:LightingSystem","true","","","auc:OutsideLighting","","","" +"","","","","","","","","","auc:LampType/*","","","" +"","","","","","","","","","auc:BallastType","","","" +"","","","","","","","","","auc:LampPower","","","" +"","","","","","","","","","auc:InstalledPower","","","" +"","","","","","","","","","auc:DimmingCapability/auc:MinimumDimmingLightFraction or auc:DimmingCapability/auc:MinimumDimmingPowerFraction","","WARNING","" +"","","","","","","","","","auc:PercentPremisesServed","","","" +"","","","","","","","","","auc:LightingAutomationSystem","","","" +"","","","","","","","","","count(auc:Controls/auc:Control) >= 1","","","" +"","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType","","","" +"","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlStrategy","","","" +"","","","","","","","","","//auc:Sections/auc:Section[@ID = current()/auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref]","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:LightingSystems/auc:LightingSystem/auc:LampType[auc:Incandescent or auc:LinearFluorescent or auc:CompactFluorescent or auc:Halogen or auc:HighIntensityDischarge or auc:SolidStateLighting]/*","false","","","auc:LampLabel","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:LightingSystems/auc:LightingSystem/auc:Controls/auc:Control[auc:Daylighting or auc:Occupancy]/*","false","","","auc:ControlSensor","","","" +"","","Lighting with Ballast","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:LightingSystems/auc:LightingSystem[auc:BallastType != 'No ballast']","false","","","auc:NumberOfLampsPerBallast","","","" +"","","","","","","","","","auc:NumberOfBallastsPerLuminaire","","","" +"","","","","","","","","","auc:NumberOfLuminaires","","","" +"","","Lighting without Ballast","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:LightingSystems/auc:LightingSystem[auc:BallastType = 'No ballast']","false","","","auc:NumberOfLampsPerLuminaire","","","" +"","","","","","","","","","auc:NumberOfLuminaires","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index b27ad120..7848d122 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -99,6 +99,12 @@ + + + + + + Document Structure Prerequisites Misc Building Info @@ -861,4 +867,48 @@ auc:DomesticHotWaterSystemNotes + + Document Structure Prerequisites General Lighting Requirements + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:LightingSystems/auc:LightingSystem + + + + General Lighting Requirements + + auc:OutsideLighting + auc:LampType/* + auc:BallastType + auc:LampPower + auc:InstalledPower + auc:DimmingCapability/auc:MinimumDimmingLightFraction or auc:DimmingCapability/auc:MinimumDimmingPowerFraction + auc:PercentPremisesServed + auc:LightingAutomationSystem + count(auc:Controls/auc:Control) >= 1 + auc:Controls/auc:Control/*/auc:ControlSystemType + auc:Controls/auc:Control/*/auc:ControlStrategy + //auc:Sections/auc:Section[@ID = current()/auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref] + + + auc:LampLabel + + + auc:ControlSensor + + + + Lighting with Ballast + + auc:NumberOfLampsPerBallast + auc:NumberOfBallastsPerLuminaire + auc:NumberOfLuminaires + + + + Lighting without Ballast + + auc:NumberOfLampsPerLuminaire + auc:NumberOfLuminaires + + From c720a9d01ab52fea6084a552d17fe9f77584bfc2 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 25 Sep 2020 01:44:20 -0600 Subject: [PATCH 33/76] feat(L200): add load and conveyance tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 6 +- .../v2.2.0/tests/data/Loads_example1.xml | 97 +++++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 56 +++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 19 +++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 51 ++++++++++ 5 files changed, 227 insertions(+), 2 deletions(-) create mode 100644 schematron/v2.2.0/tests/data/Loads_example1.xml diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index dcbef5c6..de9d0608 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -526,7 +526,11 @@ 123 - + + + + + diff --git a/schematron/v2.2.0/tests/data/Loads_example1.xml b/schematron/v2.2.0/tests/data/Loads_example1.xml new file mode 100644 index 00000000..1d283935 --- /dev/null +++ b/schematron/v2.2.0/tests/data/Loads_example1.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + 123 + + + + + + + + + + + + + + Gaming/Hobby/Leisure + 123 + + + + + + + + + + 1 + + + + + Escalator + People + 123 + Excellent + 1 + + + + + + + + + + + + + Weekday + Miscellaneous equipment + 09:00:00 + 17:00:00 + 80 + + + Weekend + Miscellaneous equipment + 09:00:00 + 17:00:00 + 80 + + + Holiday + Miscellaneous equipment + 09:00:00 + 17:00:00 + 80 + + + + + + + + + + + + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 28c3207f..2a3bd84e 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -778,3 +778,59 @@ def test_is_invalid_when_lighting_is_missing_info(self, xpath_to_remove, expecte self.assert_failure_messages(failures, { 'ERROR': [expected_message] }) + + +class TestL200AuditLoads(AssertFailureRolesMixin): + schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') + example_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data', 'Loads_example1.xml') + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:ProcessLoads/auc:ProcessLoad/auc:ProcessLoadType', 'auc:ProcessLoadType'), + ('//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID/auc:LinkedScheduleIDs/auc:LinkedScheduleID', 'auc:ProcessLoad\'s link to an auc:Section must include link to an auc:Schedule'), + ]) + def test_is_invalid_when_process_load_is_missing_info(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='process_loads') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:PlugLoads/auc:PlugLoad/auc:WeightedAverageLoad', 'auc:WeightedAverageLoad or (auc:PlugLoadNominalPower and auc:Quantity)'), + ('//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID/auc:LinkedScheduleIDs/auc:LinkedScheduleID', 'auc:PlugLoad\'s link to an auc:Section must include link to an auc:Schedule'), + ]) + def test_is_invalid_when_plug_load_is_missing_info(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='plug_loads') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) + + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:ConveyanceSystems/auc:ConveyanceSystem/auc:ConveyanceSystemType', 'auc:ConveyanceSystemType'), + ('//auc:ConveyanceSystems/auc:ConveyanceSystem/auc:LinkedPremises/auc:Building/auc:LinkedBuildingID', 'auc:ConveyanceSystem must be linked to an auc:Building'), + ]) + def test_is_invalid_when_conveyance_system_is_missing_info(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='conveyance_equipment') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 65014816..799ef5af 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -296,4 +296,21 @@ "","","","","","","","","","auc:NumberOfBallastsPerLuminaire","","","" "","","","","","","","","","auc:NumberOfLuminaires","","","" "","","Lighting without Ballast","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:LightingSystems/auc:LightingSystem[auc:BallastType = 'No ballast']","false","","","auc:NumberOfLampsPerLuminaire","","","" -"","","","","","","","","","auc:NumberOfLuminaires","","","" \ No newline at end of file +"","","","","","","","","","auc:NumberOfLuminaires","","","" +"Process Loads","6.2.1.6 (a)","General Process Load Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:ProcessLoads/auc:ProcessLoad","false","","","auc:ProcessLoadType","","","" +"","","","","","","","","","auc:ProcessLoadPeakPower or auc:WeightedAverageLoad","","","" +"","","","","","","","","","auc:Quantity","","","" +"","","","","","","","","","auc:LinkedPremises","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises","false","","","//auc:Sections/auc:Section[@ID = current()/auc:Section/auc:LinkedSectionID/@IDref]","auc:ProcessLoad must be linked to an auc:Section","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID","false","","","//auc:Schedules/auc:Schedule[@ID = current()/auc:LinkedScheduleIDs/auc:LinkedScheduleID/@IDref]","auc:ProcessLoad's link to an auc:Section must include link to an auc:Schedule","","" +"Plug Loads","6.2.1.6 (b)","General Plug Load Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:PlugLoads/auc:PlugLoad","false","","","auc:WeightedAverageLoad or (auc:PlugLoadNominalPower and auc:Quantity)","","","" +"","","","","","","","","","auc:LinkedPremises","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises","false","","","//auc:Sections/auc:Section[@ID = current()/auc:Section/auc:LinkedSectionID/@IDref]","auc:PlugLoad must be linked to an auc:Section","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID","false","","","//auc:Schedules/auc:Schedule[@ID = current()/auc:LinkedScheduleIDs/auc:LinkedScheduleID/@IDref]","auc:PlugLoad's link to an auc:Section must include link to an auc:Schedule","","" +"Conveyance Equipment","6.2.1.6 (c)","General Conveyance Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:ConveyanceSystems/auc:ConveyanceSystem","false","","","auc:ConveyanceSystemType","","","" +"","","","","","","","","","auc:ConveyanceLoadType","","","" +"","","","","","","","","","auc:ConveyancePeakPower","","","" +"","","","","","","","","","auc:ConveyanceSystemCondition","","","" +"","","","","","","","","","auc:Quantity","","","" +"","","","","","","","","","auc:LinkedPremises","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:ConveyanceSystems/auc:ConveyanceSystem/auc:LinkedPremises","false","","","//auc:Buildings/auc:Building[@ID = current()/auc:Building/auc:LinkedBuildingID/@IDref]","auc:ConveyanceSystem must be linked to an auc:Building","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 7848d122..ca8b7f2b 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -105,6 +105,15 @@ + + + + + + + + + Document Structure Prerequisites Misc Building Info @@ -911,4 +920,46 @@ auc:NumberOfLuminaires + + General Process Load Requirements + + auc:ProcessLoadType + auc:ProcessLoadPeakPower or auc:WeightedAverageLoad + auc:Quantity + auc:LinkedPremises + + + auc:ProcessLoad must be linked to an auc:Section + + + auc:ProcessLoad's link to an auc:Section must include link to an auc:Schedule + + + + General Plug Load Requirements + + auc:WeightedAverageLoad or (auc:PlugLoadNominalPower and auc:Quantity) + auc:LinkedPremises + + + auc:PlugLoad must be linked to an auc:Section + + + auc:PlugLoad's link to an auc:Section must include link to an auc:Schedule + + + + General Conveyance Requirements + + auc:ConveyanceSystemType + auc:ConveyanceLoadType + auc:ConveyancePeakPower + auc:ConveyanceSystemCondition + auc:Quantity + auc:LinkedPremises + + + auc:ConveyanceSystem must be linked to an auc:Building + + From 6bfcc846173ffe7f6f8da16acf29572227b0d6dc Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 25 Sep 2020 10:24:38 -0600 Subject: [PATCH 34/76] feat(L200): copy L100 historical monthly energy use --- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 81 ++++++++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 170 ++++++++++++++++++++++++ 2 files changed, 250 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 799ef5af..64c7130b 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -313,4 +313,83 @@ "","","","","","","","","","auc:ConveyanceSystemCondition","","","" "","","","","","","","","","auc:Quantity","","","" "","","","","","","","","","auc:LinkedPremises","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:ConveyanceSystems/auc:ConveyanceSystem/auc:LinkedPremises","false","","","//auc:Buildings/auc:Building[@ID = current()/auc:Building/auc:LinkedBuildingID/@IDref]","auc:ConveyanceSystem must be linked to an auc:Building","","" \ No newline at end of file +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:ConveyanceSystems/auc:ConveyanceSystem/auc:LinkedPremises","false","","","//auc:Buildings/auc:Building[@ID = current()/auc:Building/auc:LinkedBuildingID/@IDref]","auc:ConveyanceSystem must be linked to an auc:Building","","" +"Historical Energy Use","ASHRAE 211 6.1.2","Monthly Utility Data","ASHRAE 211 6.1.2.1","Monthly Utility Data - Resource Uses","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses","true","","","auc:ResourceUse[auc:EnergyResource/text() = 'Electricity']","There must be at least one Electricity ResourceUse","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse","true","","","auc:EnergyResource","","","" +"","","","","","","","","","auc:ResourceUseNotes","Resource use must include ResourceUseNotes for documenting irregularities in monthy energy use patterns","","" +"","","","","","","","","","auc:EndUse/text() =""All end uses""","","","" +"","","","","","","","","","auc:ResourceUnits","","","" +"","","","","","","","","","//auc:Utilities/auc:Utility[@ID = current()/auc:UtilityIDs/auc:UtilityID/@IDref]","Resource use must be associated with a utility","","" +"","","","","","","","","","count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Total' and auc:IntervalFrequency/text() = 'Month']) >= 12","Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Total, (3) have auc:IntervalFrequency of Month","","" +"","","","","","","","","","count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Cost' and auc:IntervalFrequency/text() = 'Month']) >= 12","Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Cost, (3) have auc:IntervalFrequency of Month","","" +"","","","","","","","","","(auc:EnergyResource/text() != 'Electricity') or count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Peak' and auc:IntervalFrequency/text() = 'Month']) >= 12","Electricity Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Peak, (3) have auc:IntervalFrequency of Month","","" +"","","","","","","","","","auc:AnnualFuelUseNativeUnits","","","" +"","","","","","","","","","auc:AnnualFuelUseConsistentUnits","","","" +"","","","","","","","","","auc:AnnualFuelCost","","","" +"","","","","","","","","","count(auc:AnnualFuelUseLinkedTimeSeriesIDs/auc:LinkedTimeSeriesID) >= 12 ","","","" +"","","","","","","","","","(auc:EnergyResource/text() != 'Electricity') or auc:PeakResourceUnits","","","" +"","","","","","","","","","(auc:EnergyResource/text() != 'Electricity') or auc:AnnualPeakNativeUnits","","","" +"","","","","Monthly Utility Data - Time Series","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:TimeSeriesData/auc:TimeSeries","true","","","auc:IntervalFrequency/text() = 'Month'","TimeSeries data for ResourceUse must include a IntervalFrequency of Month","","" +"","","","","","","","","","auc:ReadingType","TimeSeries data for ResourceUse must include a ReadingType","","" +"","","","","","","","","","auc:StartTimestamp","TimeSeries data for ResourceUse must include a StartTimestamp","","" +"","","","","","","","","","auc:EndTimestamp","TimeSeries data for ResourceUse must include an EndTimestamp","","" +"","","","","","","","","","auc:IntervalReading","TimeSeries data for ResourceUse must include an IntervalReading","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse/auc:AnnualFuelUseLinkedTimeSeriesIDs/auc:LinkedTimeSeriesID","true","","","//auc:TimeSeriesData/auc:TimeSeries[@ID = current()/@IDref and auc:ResourceUseID/@IDref = current()/ancestor::auc:ResourceUse/@ID and auc:ReadingType/text() = 'Total']","Each auc:LinkedTimeSeriesID must point to an auc:TimeSeries that (1) points to the same auc:ResourceUse through auc:ResourceUseID and (2) has an auc:ReadingType of Total","","" +"","","Utility Info","ASHRAE 211 6.1.2.1","Utility Info - Basics","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility","true","","","auc:UtilityAccountNumber","","","" +"","","","","","","","","","auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/*","","","" +"","","","","","","","","","count(//auc:ResourceUses/auc:ResourceUse/auc:UtilityIDs/auc:UtilityID[@IDref = current()/@ID]) = 1","Each auc:Utility should have exactly 1 auc:ResourceUse linked to it (ie not 0, not 2+)","","" +"","","Utility Rate Schedule - All Resource Types","ASHRAE 211 6.1.2.1","Flat Rate","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure[auc:FlatRate]","false","","","auc:FlatRate/auc:RatePeriods/auc:RatePeriod","","","" +"","","","","Flat Rate - Rate Period","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:FlatRate/auc:RatePeriods/auc:RatePeriod","false","","","auc:ApplicableStartDateForEnergyRate","","","" +"","","","","","","","","","auc:ApplicableEndDateForEnergyRate","","","" +"","","","","","","","","","auc:EnergyCostRate","","","" +"","","","","Time Of Use Rate","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure[auc:TimeOfUseRate]","false","","","auc:TimeOfUseRate/auc:RatePeriods/auc:RatePeriod","","","" +"","","","","Time Of Use Rate - Rate Period","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:TimeOfUseRate/auc:RatePeriods/auc:RatePeriod","false","","","auc:ApplicableStartDateForEnergyRate","","","" +"","","","","","","","","","auc:ApplicableEndDateForEnergyRate","","","" +"","","","","","","","","","count(auc:TimeOfUsePeriods/auc:TimeOfUsePeriod) >= 2","","","" +"","","","","Time Of Use Rate - Time Of Use Period","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:TimeOfUseRate/auc:RatePeriods/auc:RatePeriod/auc:TimeOfUsePeriods/auc:TimeOfUsePeriod","false","","","auc:ApplicableStartTimeForEnergyRate","","","" +"","","","","","","","","","auc:ApplicableEndTimeForEnergyRate","","","" +"","","","","","","","","","auc:EnergyCostRate","","","" +"","","","","Tiered Rate","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure[auc:TieredRates]","false","","","auc:TieredRates/auc:TieredRate/auc:RatePeriods/auc:RatePeriod","","","" +"","","","","Tiered Rate - Rate Period","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:TieredRates/auc:TieredRate/auc:RatePeriods/auc:RatePeriod","false","","","auc:ApplicableStartDateForEnergyRate","","","" +"","","","","","","","","","auc:ApplicableEndDateForEnergyRate","","","" +"","","","","","","","","","count(auc:RateTiers/auc:RateTier) >= 2","","","" +"","","","","Tiered Rate - Rate Tier","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:TieredRates/auc:TieredRate/auc:RatePeriods/auc:RatePeriod/auc:RateTiers/auc:RateTier","false","","","auc:EnergyCostRate","","","" +"","","","","","","","","","auc:MaxkWhUsage","","","" +"","","Utility Rate Schedule - Electricity","ASHRAE 211 6.1.2.1","Flat Rate - Rate Period","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility[@ID = //auc:ResourceUse[auc:EnergyResource/text() = 'Electricity']/auc:UtilityIDs/auc:UtilityID/@IDref]/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:FlatRate/auc:RatePeriods/auc:RatePeriod","false","","","auc:ApplicableStartDateForDemandRate","auc:ApplicableStartDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","","","","","","auc:ApplicableEndDateForDemandRate","auc:ApplicableEndDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","","","","","","auc:ElectricDemandRate","auc:ElectricDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","Time Of Use - Rate Period","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility[@ID = //auc:ResourceUse[auc:EnergyResource/text() = 'Electricity']/auc:UtilityIDs/auc:UtilityID/@IDref]/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:TimeOfUseRate/auc:RatePeriods/auc:RatePeriod","false","","","auc:ApplicableStartDateForDemandRate","auc:ApplicableStartDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","","","","","","auc:ApplicableEndDateForDemandRate","auc:ApplicableEndDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","Time Of Use - Time Of Use Period","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility[@ID = //auc:ResourceUse[auc:EnergyResource/text() = 'Electricity']/auc:UtilityIDs/auc:UtilityID/@IDref]/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:TimeOfUseRate/auc:RatePeriods/auc:RatePeriod/auc:TimeOfUsePeriods/auc:TimeOfUsePeriod","false","","","auc:ApplicableStartTimeForDemandRate","auc:ApplicableStartTimeForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","","","","","","auc:ApplicableEndTimeForDemandRate","auc:ApplicableEndTimeForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","","","","","","auc:ElectricDemandRate","auc:ElectricDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","Tiered Rate - Rate Period","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility[@ID = //auc:ResourceUse[auc:EnergyResource/text() = 'Electricity']/auc:UtilityIDs/auc:UtilityID/@IDref]/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:TieredRates/auc:TieredRate/auc:RatePeriods/auc:RatePeriod","false","","","auc:ApplicableStartDateForDemandRate","auc:ApplicableStartDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","","","","","","auc:ApplicableEndDateForDemandRate","auc:ApplicableEndDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","Tiered Rate - Rate Tier","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility[@ID = //auc:ResourceUse[auc:EnergyResource/text() = 'Electricity']/auc:UtilityIDs/auc:UtilityID/@IDref]/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:TieredRates/auc:TieredRate/auc:RatePeriods/auc:RatePeriod/auc:RateTiers/auc:RateTier","false","","","auc:MaxkWUsage","auc:MaxkWUsage must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","","","","","","auc:ElectricDemandRate","auc:ElectricDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","","","","","","","","auc:DemandWindow","auc:DemandWindow must be defined if the parent auc:Utility's linked resource is of type Electricity","","" +"","","Annual Energy Use","ASHRAE 211 6.1.2.2","Annual Energy Use","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding]/auc:AllResourceTotals/auc:AllResourceTotal","true","epsilonPct","0.05","","","","note that the test here is finding all resource uses whose energy resource ends with generated, and summing their annual use" +"","","","","","","","calculatedOnsiteEnergyProductionConsistentUnits","sum(//auc:ResourceUse/auc:EnergyResource['generated' = substring(text(), string-length(text()) - string-length('generated') + 1 )]/../auc:AnnualFuelUseConsistentUnits/text())","","","","" +"","","","","","","","calculatedOnsiteEnergyProductionConsistentUnitsEpsilon","auc:OnsiteEnergyProductionConsistentUnits * $epsilonPct","","","","" +"","","","","","","","calculatedOnsiteEnergyProductionConsistentUnitsDelta","translate(auc:OnsiteEnergyProductionConsistentUnits - $calculatedOnsiteEnergyProductionConsistentUnits, '-', '')","count(auc:OnsiteEnergyProductionConsistentUnits) = 1 and $calculatedOnsiteEnergyProductionConsistentUnitsDelta <= $calculatedOnsiteEnergyProductionConsistentUnitsEpsilon","auc:OnsiteEnergyProductionConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are generated (which is )","","" +"","","","","","","","calculatedExportedEnergyConsistentUnits","sum(//auc:ResourceUse/auc:EnergyResource['exported' = substring(text(), string-length(text()) - string-length('exported') + 1 )]/../auc:AnnualFuelUseConsistentUnits/text())","","","","note that the test here is finding all resource uses whose energy resource ends with exported, and summing their annual use" +"","","","","","","","calculatedExportedEnergyConsistentUnitsEpsilon","auc:ExportedEnergyConsistentUnits * $epsilonPct","","","","" +"","","","","","","","calculatedExportedEnergyConsistentUnitsDelta","translate(auc:ExportedEnergyConsistentUnits - $calculatedExportedEnergyConsistentUnits, '-', '')","count(auc:ExportedEnergyConsistentUnits) = 1 and $calculatedExportedEnergyConsistentUnitsDelta <= $calculatedExportedEnergyConsistentUnitsEpsilon","auc:ExportedEnergyConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are exported (which is )","","" +"","","","","","","","calculatedImportedEnergyConsistentUnits","sum(//auc:ResourceUse/auc:AnnualFuelUseConsistentUnits/text()) - $calculatedOnsiteEnergyProductionConsistentUnits - $calculatedExportedEnergyConsistentUnits","","auc:ImportedEnergyConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are not generated or exported (which is )","","note that the test here is finding all resource uses, and summing their annual use and subtracting the generated and exported sums" +"","","","","","","","calculatedImportedEnergyConsistentUnitsEpsilon","auc:ImportedEnergyConsistentUnits * $epsilonPct","","","","" +"","","","","","","","calculatedImportedEnergyConsistentUnitsDelta","translate(auc:ImportedEnergyConsistentUnits - $calculatedImportedEnergyConsistentUnits, '-', '')","count(auc:ImportedEnergyConsistentUnits) = 1 and $calculatedImportedEnergyConsistentUnitsDelta <= $calculatedImportedEnergyConsistentUnitsEpsilon","auc:ImportedEnergyConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are not generated or exported (which is )","","" +"","","","","","","","","","auc:NetIncreaseInStoredEnergyConsistentUnits","","","" +"","","","","","","","calculatedSiteEnergyUse","1000 * (number(auc:ImportedEnergyConsistentUnits/text()) - number(auc:ExportedEnergyConsistentUnits/text()) - number(auc:NetIncreaseInStoredEnergyConsistentUnits))","","","","" +"","","","","","","","calculatedSiteEnergyUseEpsilon","auc:SiteEnergyUse * $epsilonPct","","","","" +"","","","","","","","calculatedSiteEnergyUseDelta","translate(auc:SiteEnergyUse - $calculatedSiteEnergyUse, '-', '')","count(auc:SiteEnergyUse) = 1 and $calculatedSiteEnergyUseDelta <= $calculatedSiteEnergyUseEpsilon","auc:SiteEnergyUse (which is ) should equal auc:ImportedEnergyConsistentUnits - auc:ExportedEnergyConsistentUnits - auc:NetIncreaseInStoredEnergyConsistentUnits (which is )","","" +"","","","","","","","calculatedSiteEnergyUseIntensity","auc:SiteEnergyUse div //auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType/text() = 'Gross']/auc:FloorAreaValue","","","","" +"","","","","","","","calculatedSiteEnergyUseIntensityEpsilon","auc:SiteEnergyUseIntensity * $epsilonPct","","","","" +"","","","","","","","calculatedSiteEnergyUseIntensityDelta","translate(auc:SiteEnergyUseIntensity - $calculatedSiteEnergyUseIntensity, '-', '')","count(auc:SiteEnergyUseIntensity) = 1 and $calculatedSiteEnergyUseIntensityDelta < $calculatedSiteEnergyUseIntensityEpsilon","auc:SiteEnergyUseIntensity (which is ) should approximately equal auc:SiteEnergyUse divided by the auc:Building's Gross floor area (which is ); the difference, is too large (should be less than )","","" +"","","","","","","","calculatedBuildingEnergyUse","1000 * (number(auc:ImportedEnergyConsistentUnits/text()) + number(auc:OnsiteEnergyProductionConsistentUnits/text()) - number(auc:ExportedEnergyConsistentUnits/text()) - number(auc:NetIncreaseInStoredEnergyConsistentUnits))","","","","" +"","","","","","","","calculatedBuildingEnergyUseEpsilon","auc:BuildingEnergyUse * $epsilonPct","","","","" +"","","","","","","","calculatedBuildingEnergyUseDelta","translate(auc:BuildingEnergyUse - $calculatedBuildingEnergyUse, '-', '')","count(auc:BuildingEnergyUse) = 1 and $calculatedBuildingEnergyUseDelta < $calculatedBuildingEnergyUseEpsilon","auc:BuildingEnergyUse (which is ) should equal auc:ImportedEnergyConsistentUnits + auc:OnsiteEnergyProductionConsistentUnits - auc:ExportedEnergyConsistentUnits - auc:NetIncreaseInStoredEnergyConsistentUnits (which is )","","" +"","","","","","","","calculatedBuildingEnergyUseIntensity","auc:BuildingEnergyUse div //auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType/text() = 'Gross']/auc:FloorAreaValue","","","","" +"","","","","","","","calculatedBuildingEnergyUseIntensityEpsilon","auc:SiteEnergyUseIntensity * $epsilonPct","","","","" +"","","","","","","","calculatedBuildingEnergyUseIntensityDelta","translate(auc:BuildingEnergyUseIntensity - $calculatedBuildingEnergyUseIntensity, '-', '')","count(auc:BuildingEnergyUseIntensity) = 1 and $calculatedBuildingEnergyUseIntensityDelta < $calculatedBuildingEnergyUseIntensityEpsilon","auc:BuildingEnergyUseIntensity (which is ) should approximately equal auc:BuildingEnergyUse divided by the auc:Building's Gross floor area (which is ); the difference, is too large (should be less than )","","" +"","","","","","","","","","auc:EnergyCost","","","" +"","","","","","","","","","auc:EnergyCostIndex","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index ca8b7f2b..60bd6881 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -114,6 +114,16 @@ + + + + + + + + + + Document Structure Prerequisites Misc Building Info @@ -962,4 +972,164 @@ auc:ConveyanceSystem must be linked to an auc:Building + + Document Structure Prerequisites Monthly Utility Data + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:TimeSeriesData/auc:TimeSeries + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse/auc:AnnualFuelUseLinkedTimeSeriesIDs/auc:LinkedTimeSeriesID + + + + Monthly Utility Data + + There must be at least one Electricity ResourceUse + + + auc:EnergyResource + Resource use must include ResourceUseNotes for documenting irregularities in monthy energy use patterns + auc:EndUse/text() ="All end uses" + auc:ResourceUnits + Resource use must be associated with a utility + Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Total, (3) have auc:IntervalFrequency of Month + Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Cost, (3) have auc:IntervalFrequency of Month + Electricity Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Peak, (3) have auc:IntervalFrequency of Month + auc:AnnualFuelUseNativeUnits + auc:AnnualFuelUseConsistentUnits + auc:AnnualFuelCost + count(auc:AnnualFuelUseLinkedTimeSeriesIDs/auc:LinkedTimeSeriesID) >= 12 + (auc:EnergyResource/text() != 'Electricity') or auc:PeakResourceUnits + (auc:EnergyResource/text() != 'Electricity') or auc:AnnualPeakNativeUnits + + + TimeSeries data for ResourceUse must include a IntervalFrequency of Month + TimeSeries data for ResourceUse must include a ReadingType + TimeSeries data for ResourceUse must include a StartTimestamp + TimeSeries data for ResourceUse must include an EndTimestamp + TimeSeries data for ResourceUse must include an IntervalReading + + + Each auc:LinkedTimeSeriesID must point to an auc:TimeSeries that (1) points to the same auc:ResourceUse through auc:ResourceUseID and (2) has an auc:ReadingType of Total + + + + Document Structure Prerequisites Utility Info + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility + + + + Utility Info + + auc:UtilityAccountNumber + auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/* + Each auc:Utility should have exactly 1 auc:ResourceUse linked to it (ie not 0, not 2+) + + + + Utility Rate Schedule - All Resource Types + + auc:FlatRate/auc:RatePeriods/auc:RatePeriod + + + auc:ApplicableStartDateForEnergyRate + auc:ApplicableEndDateForEnergyRate + auc:EnergyCostRate + + + auc:TimeOfUseRate/auc:RatePeriods/auc:RatePeriod + + + auc:ApplicableStartDateForEnergyRate + auc:ApplicableEndDateForEnergyRate + count(auc:TimeOfUsePeriods/auc:TimeOfUsePeriod) >= 2 + + + auc:ApplicableStartTimeForEnergyRate + auc:ApplicableEndTimeForEnergyRate + auc:EnergyCostRate + + + auc:TieredRates/auc:TieredRate/auc:RatePeriods/auc:RatePeriod + + + auc:ApplicableStartDateForEnergyRate + auc:ApplicableEndDateForEnergyRate + count(auc:RateTiers/auc:RateTier) >= 2 + + + auc:EnergyCostRate + auc:MaxkWhUsage + + + + Utility Rate Schedule - Electricity + + auc:ApplicableStartDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + auc:ApplicableEndDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + auc:ElectricDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + + + auc:ApplicableStartDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + auc:ApplicableEndDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + + + auc:ApplicableStartTimeForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + auc:ApplicableEndTimeForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + auc:ElectricDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + + + auc:ApplicableStartDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + auc:ApplicableEndDateForDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + + + auc:MaxkWUsage must be defined if the parent auc:Utility's linked resource is of type Electricity + auc:ElectricDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity + auc:DemandWindow must be defined if the parent auc:Utility's linked resource is of type Electricity + + + + Document Structure Prerequisites Annual Energy Use + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding]/auc:AllResourceTotals/auc:AllResourceTotal + + + + Annual Energy Use + + + + + + + + + + + + + + + + + + + + + + + + auc:OnsiteEnergyProductionConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are generated (which is ) + auc:ExportedEnergyConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are exported (which is ) + auc:ImportedEnergyConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are not generated or exported (which is ) + auc:NetIncreaseInStoredEnergyConsistentUnits + auc:SiteEnergyUse (which is ) should equal auc:ImportedEnergyConsistentUnits - auc:ExportedEnergyConsistentUnits - auc:NetIncreaseInStoredEnergyConsistentUnits (which is ) + auc:SiteEnergyUseIntensity (which is ) should approximately equal auc:SiteEnergyUse divided by the auc:Building's Gross floor area (which is ); the difference, is too large (should be less than ) + auc:BuildingEnergyUse (which is ) should equal auc:ImportedEnergyConsistentUnits + auc:OnsiteEnergyProductionConsistentUnits - auc:ExportedEnergyConsistentUnits - auc:NetIncreaseInStoredEnergyConsistentUnits (which is ) + auc:BuildingEnergyUseIntensity (which is ) should approximately equal auc:BuildingEnergyUse divided by the auc:Building's Gross floor area (which is ); the difference, is too large (should be less than ) + auc:EnergyCost + auc:EnergyCostIndex + + From 4861065fe77bdb4da0063e7fe044a4a255f0d3c7 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 25 Sep 2020 12:12:17 -0600 Subject: [PATCH 35/76] feat(L200): add peak type test --- .../v2.2.0/exemplary_files/L200_Audit.xml | 192 ++++++++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 5 +- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 5 +- 3 files changed, 200 insertions(+), 2 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index de9d0608..a44adc9b 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -895,6 +895,8 @@ Total 2019-01-01T00:00:00 2019-02-01T00:00:00 + 30 + Day Month 4102.51 @@ -903,6 +905,8 @@ Total 2019-02-01T00:00:00 2019-03-01T00:00:00 + 30 + Day Month 3737.04 @@ -911,6 +915,8 @@ Total 2019-03-01T00:00:00 2019-04-01T00:00:00 + 30 + Day Month 4167.07 @@ -919,6 +925,8 @@ Total 2019-04-01T00:00:00 2019-05-01T00:00:00 + 30 + Day Month 3897.44 @@ -927,6 +935,8 @@ Total 2019-05-01T00:00:00 2019-06-01T00:00:00 + 30 + Day Month 4565.50 @@ -935,6 +945,8 @@ Total 2019-06-01T00:00:00 2019-07-01T00:00:00 + 30 + Day Month 4870.87 @@ -943,6 +955,8 @@ Total 2019-07-01T00:00:00 2019-08-01T00:00:00 + 30 + Day Month 4977.64 @@ -951,6 +965,8 @@ Total 2019-08-01T00:00:00 2019-09-01T00:00:00 + 30 + Day Month 5275.05 @@ -959,6 +975,8 @@ Total 2019-09-01T00:00:00 2019-10-01T00:00:00 + 30 + Day Month 4788.79 @@ -967,6 +985,8 @@ Total 2019-10-01T00:00:00 2019-11-01T00:00:00 + 30 + Day Month 4353.99 @@ -975,6 +995,8 @@ Total 2019-11-01T00:00:00 2019-12-01T00:00:00 + 30 + Day Month 4154.67 @@ -983,6 +1005,8 @@ Total 2019-12-01T00:00:00 2020-01-01T00:00:00 + 30 + Day Month 4052.43 @@ -990,96 +1014,132 @@ Peak + On-peak 2019-01-01T00:00:00 2019-02-01T00:00:00 + 30 + Day Month 14.78 Peak + On-peak 2019-02-01T00:00:00 2019-03-01T00:00:00 + 30 + Day Month 14.12 Peak + On-peak 2019-03-01T00:00:00 2019-04-01T00:00:00 + 30 + Day Month 14.36 Peak + On-peak 2019-04-01T00:00:00 2019-05-01T00:00:00 + 30 + Day Month 15.14 Peak + On-peak 2019-05-01T00:00:00 2019-06-01T00:00:00 + 30 + Day Month 16.41 Peak + On-peak 2019-06-01T00:00:00 2019-07-01T00:00:00 + 30 + Day Month 17.51 Peak + On-peak 2019-07-01T00:00:00 2019-08-01T00:00:00 + 30 + Day Month 18.14 Peak + On-peak 2019-08-01T00:00:00 2019-09-01T00:00:00 + 30 + Day Month 19.07 Peak + On-peak 2019-09-01T00:00:00 2019-10-01T00:00:00 + 30 + Day Month 17.85 Peak + On-peak 2019-10-01T00:00:00 2019-11-01T00:00:00 + 30 + Day Month 16.54 Peak + On-peak 2019-11-01T00:00:00 2019-12-01T00:00:00 + 30 + Day Month 15.19 Peak + On-peak 2019-12-01T00:00:00 2020-01-01T00:00:00 + 30 + Day Month 15.05 @@ -1089,6 +1149,8 @@ Cost 2019-01-01T00:00:00 2019-02-01T00:00:00 + 30 + Day Month 389.74 @@ -1097,6 +1159,8 @@ Cost 2019-02-01T00:00:00 2019-03-01T00:00:00 + 30 + Day Month 355.02 @@ -1105,6 +1169,8 @@ Cost 2019-03-01T00:00:00 2019-04-01T00:00:00 + 30 + Day Month 395.87 @@ -1113,6 +1179,8 @@ Cost 2019-04-01T00:00:00 2019-05-01T00:00:00 + 30 + Day Month 370.26 @@ -1121,6 +1189,8 @@ Cost 2019-05-01T00:00:00 2019-06-01T00:00:00 + 30 + Day Month 433.72 @@ -1129,6 +1199,8 @@ Cost 2019-06-01T00:00:00 2019-07-01T00:00:00 + 30 + Day Month 462.73 @@ -1137,6 +1209,8 @@ Cost 2019-07-01T00:00:00 2019-08-01T00:00:00 + 30 + Day Month 472.88 @@ -1145,6 +1219,8 @@ Cost 2019-08-01T00:00:00 2019-09-01T00:00:00 + 30 + Day Month 501.13 @@ -1153,6 +1229,8 @@ Cost 2019-09-01T00:00:00 2019-10-01T00:00:00 + 30 + Day Month 454.94 @@ -1161,6 +1239,8 @@ Cost 2019-10-01T00:00:00 2019-11-01T00:00:00 + 30 + Day Month 413.63 @@ -1169,6 +1249,8 @@ Cost 2019-11-01T00:00:00 2019-12-01T00:00:00 + 30 + Day Month 394.69 @@ -1177,6 +1259,8 @@ Cost 2019-12-01T00:00:00 2020-01-01T00:00:00 + 30 + Day Month 384.98 @@ -1187,6 +1271,8 @@ Total 2019-01-01T00:00:00 2019-02-01T00:00:00 + 30 + Day Month 0.1 @@ -1195,6 +1281,8 @@ Total 2019-02-01T00:00:00 2019-03-01T00:00:00 + 30 + Day Month 0.05 @@ -1203,6 +1291,8 @@ Total 2019-03-01T00:00:00 2019-04-01T00:00:00 + 30 + Day Month 0.01 @@ -1211,6 +1301,8 @@ Total 2019-04-01T00:00:00 2019-05-01T00:00:00 + 30 + Day Month 0 @@ -1219,6 +1311,8 @@ Total 2019-05-01T00:00:00 2019-06-01T00:00:00 + 30 + Day Month 0 @@ -1227,6 +1321,8 @@ Total 2019-06-01T00:00:00 2019-07-01T00:00:00 + 30 + Day Month 0 @@ -1235,6 +1331,8 @@ Total 2019-07-01T00:00:00 2019-08-01T00:00:00 + 30 + Day Month 0 @@ -1243,6 +1341,8 @@ Total 2019-08-01T00:00:00 2019-09-01T00:00:00 + 30 + Day Month 0 @@ -1251,6 +1351,8 @@ Total 2019-09-01T00:00:00 2019-10-01T00:00:00 + 30 + Day Month 0 @@ -1259,6 +1361,8 @@ Total 2019-10-01T00:00:00 2019-11-01T00:00:00 + 30 + Day Month 0 @@ -1267,6 +1371,8 @@ Total 2019-11-01T00:00:00 2019-12-01T00:00:00 + 30 + Day Month 0 @@ -1275,6 +1381,8 @@ Total 2019-12-01T00:00:00 2020-01-01T00:00:00 + 30 + Day Month 0.06 @@ -1284,6 +1392,8 @@ Cost 2019-01-01T00:00:00 2019-02-01T00:00:00 + 30 + Day Month 27 @@ -1292,6 +1402,8 @@ Cost 2019-02-01T00:00:00 2019-03-01T00:00:00 + 30 + Day Month 27 @@ -1300,6 +1412,8 @@ Cost 2019-03-01T00:00:00 2019-04-01T00:00:00 + 30 + Day Month 27 @@ -1308,6 +1422,8 @@ Cost 2019-04-01T00:00:00 2019-05-01T00:00:00 + 30 + Day Month 27 @@ -1316,6 +1432,8 @@ Cost 2019-05-01T00:00:00 2019-06-01T00:00:00 + 30 + Day Month 27 @@ -1324,6 +1442,8 @@ Cost 2019-06-01T00:00:00 2019-07-01T00:00:00 + 30 + Day Month 27 @@ -1332,6 +1452,8 @@ Cost 2019-07-01T00:00:00 2019-08-01T00:00:00 + 30 + Day Month 27 @@ -1340,6 +1462,8 @@ Cost 2019-08-01T00:00:00 2019-09-01T00:00:00 + 30 + Day Month 27 @@ -1348,6 +1472,8 @@ Cost 2019-09-01T00:00:00 2019-10-01T00:00:00 + 30 + Day Month 27 @@ -1356,6 +1482,8 @@ Cost 2019-10-01T00:00:00 2019-11-01T00:00:00 + 30 + Day Month 27 @@ -1364,6 +1492,8 @@ Cost 2019-11-01T00:00:00 2019-12-01T00:00:00 + 30 + Day Month 27 @@ -1372,6 +1502,8 @@ Cost 2019-12-01T00:00:00 2020-01-01T00:00:00 + 30 + Day Month 27 @@ -1383,6 +1515,8 @@ Total 2019-01-01T00:00:00 2019-02-01T00:00:00 + 30 + Day Month 385 @@ -1391,6 +1525,8 @@ Total 2019-02-01T00:00:00 2019-03-01T00:00:00 + 30 + Day Month 436 @@ -1399,6 +1535,8 @@ Total 2019-03-01T00:00:00 2019-04-01T00:00:00 + 30 + Day Month 560 @@ -1407,6 +1545,8 @@ Total 2019-04-01T00:00:00 2019-05-01T00:00:00 + 30 + Day Month 532 @@ -1415,6 +1555,8 @@ Total 2019-05-01T00:00:00 2019-06-01T00:00:00 + 30 + Day Month 568 @@ -1423,6 +1565,8 @@ Total 2019-06-01T00:00:00 2019-07-01T00:00:00 + 30 + Day Month 590 @@ -1431,6 +1575,8 @@ Total 2019-07-01T00:00:00 2019-08-01T00:00:00 + 30 + Day Month 573 @@ -1439,6 +1585,8 @@ Total 2019-08-01T00:00:00 2019-09-01T00:00:00 + 30 + Day Month 543 @@ -1447,6 +1595,8 @@ Total 2019-09-01T00:00:00 2019-10-01T00:00:00 + 30 + Day Month 514 @@ -1455,6 +1605,8 @@ Total 2019-10-01T00:00:00 2019-11-01T00:00:00 + 30 + Day Month 461 @@ -1463,6 +1615,8 @@ Total 2019-11-01T00:00:00 2019-12-01T00:00:00 + 30 + Day Month 408 @@ -1471,6 +1625,8 @@ Total 2019-12-01T00:00:00 2020-01-01T00:00:00 + 30 + Day Month 359 @@ -1481,6 +1637,8 @@ Cost 2019-01-01T00:00:00 2019-02-01T00:00:00 + 30 + Day Month 35 @@ -1489,6 +1647,8 @@ Cost 2019-02-01T00:00:00 2019-03-01T00:00:00 + 30 + Day Month 40 @@ -1497,6 +1657,8 @@ Cost 2019-03-01T00:00:00 2019-04-01T00:00:00 + 30 + Day Month 51 @@ -1505,6 +1667,8 @@ Cost 2019-04-01T00:00:00 2019-05-01T00:00:00 + 30 + Day Month 49 @@ -1513,6 +1677,8 @@ Cost 2019-05-01T00:00:00 2019-06-01T00:00:00 + 30 + Day Month 52 @@ -1521,6 +1687,8 @@ Cost 2019-06-01T00:00:00 2019-07-01T00:00:00 + 30 + Day Month 54 @@ -1529,6 +1697,8 @@ Cost 2019-07-01T00:00:00 2019-08-01T00:00:00 + 30 + Day Month 53 @@ -1537,6 +1707,8 @@ Cost 2019-08-01T00:00:00 2019-09-01T00:00:00 + 30 + Day Month 50 @@ -1545,6 +1717,8 @@ Cost 2019-09-01T00:00:00 2019-10-01T00:00:00 + 30 + Day Month 47 @@ -1553,6 +1727,8 @@ Cost 2019-10-01T00:00:00 2019-11-01T00:00:00 + 30 + Day Month 42 @@ -1561,6 +1737,8 @@ Cost 2019-11-01T00:00:00 2019-12-01T00:00:00 + 30 + Day Month 37 @@ -1569,6 +1747,8 @@ Cost 2019-12-01T00:00:00 2020-01-01T00:00:00 + 30 + Day Month 33 @@ -1679,6 +1859,10 @@ + + 12345 + + 12345 @@ -1715,6 +1899,10 @@ + + 12345 + + 12345 @@ -1753,6 +1941,10 @@ + + 12345 + + 12345 diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 64c7130b..6cfbe8ff 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -322,7 +322,7 @@ "","","","","","","","","","//auc:Utilities/auc:Utility[@ID = current()/auc:UtilityIDs/auc:UtilityID/@IDref]","Resource use must be associated with a utility","","" "","","","","","","","","","count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Total' and auc:IntervalFrequency/text() = 'Month']) >= 12","Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Total, (3) have auc:IntervalFrequency of Month","","" "","","","","","","","","","count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Cost' and auc:IntervalFrequency/text() = 'Month']) >= 12","Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Cost, (3) have auc:IntervalFrequency of Month","","" -"","","","","","","","","","(auc:EnergyResource/text() != 'Electricity') or count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Peak' and auc:IntervalFrequency/text() = 'Month']) >= 12","Electricity Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Peak, (3) have auc:IntervalFrequency of Month","","" +"","","","","","","","","","(auc:EnergyResource/text() != 'Electricity') or count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Peak' and auc:PeakType and auc:IntervalFrequency/text() = 'Month']) >= 12","Electricity Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Peak, (3) have auc:PeakType, and (4) have auc:IntervalFrequency of Month","","" "","","","","","","","","","auc:AnnualFuelUseNativeUnits","","","" "","","","","","","","","","auc:AnnualFuelUseConsistentUnits","","","" "","","","","","","","","","auc:AnnualFuelCost","","","" @@ -334,10 +334,13 @@ "","","","","","","","","","auc:StartTimestamp","TimeSeries data for ResourceUse must include a StartTimestamp","","" "","","","","","","","","","auc:EndTimestamp","TimeSeries data for ResourceUse must include an EndTimestamp","","" "","","","","","","","","","auc:IntervalReading","TimeSeries data for ResourceUse must include an IntervalReading","","" +"","","","","","","","","","auc:IntervalDuration","TimeSeries data for ResourceUse must include an IntervalDuration","","" +"","","","","","","","","","auc:IntervalDurationUnits","TimeSeries data for ResourceUse must include an IntervalDurationUnits","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse/auc:AnnualFuelUseLinkedTimeSeriesIDs/auc:LinkedTimeSeriesID","true","","","//auc:TimeSeriesData/auc:TimeSeries[@ID = current()/@IDref and auc:ResourceUseID/@IDref = current()/ancestor::auc:ResourceUse/@ID and auc:ReadingType/text() = 'Total']","Each auc:LinkedTimeSeriesID must point to an auc:TimeSeries that (1) points to the same auc:ResourceUse through auc:ResourceUseID and (2) has an auc:ReadingType of Total","","" "","","Utility Info","ASHRAE 211 6.1.2.1","Utility Info - Basics","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility","true","","","auc:UtilityAccountNumber","","","" "","","","","","","","","","auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/*","","","" "","","","","","","","","","count(//auc:ResourceUses/auc:ResourceUse/auc:UtilityIDs/auc:UtilityID[@IDref = current()/@ID]) = 1","Each auc:Utility should have exactly 1 auc:ResourceUse linked to it (ie not 0, not 2+)","","" +"","","","","","","","","","count(auc:UtilityMeterNumbers/auc:UtilityMeterNumber) >= 1","","","" "","","Utility Rate Schedule - All Resource Types","ASHRAE 211 6.1.2.1","Flat Rate","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure[auc:FlatRate]","false","","","auc:FlatRate/auc:RatePeriods/auc:RatePeriod","","","" "","","","","Flat Rate - Rate Period","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility/auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/auc:FlatRate/auc:RatePeriods/auc:RatePeriod","false","","","auc:ApplicableStartDateForEnergyRate","","","" "","","","","","","","","","auc:ApplicableEndDateForEnergyRate","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 60bd6881..8ad29445 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -994,7 +994,7 @@ Resource use must be associated with a utility Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Total, (3) have auc:IntervalFrequency of Month Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Cost, (3) have auc:IntervalFrequency of Month - Electricity Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Peak, (3) have auc:IntervalFrequency of Month + Electricity Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Peak, (3) have auc:PeakType, and (4) have auc:IntervalFrequency of Month auc:AnnualFuelUseNativeUnits auc:AnnualFuelUseConsistentUnits auc:AnnualFuelCost @@ -1008,6 +1008,8 @@ TimeSeries data for ResourceUse must include a StartTimestamp TimeSeries data for ResourceUse must include an EndTimestamp TimeSeries data for ResourceUse must include an IntervalReading + TimeSeries data for ResourceUse must include an IntervalDuration + TimeSeries data for ResourceUse must include an IntervalDurationUnits Each auc:LinkedTimeSeriesID must point to an auc:TimeSeries that (1) points to the same auc:ResourceUse through auc:ResourceUseID and (2) has an auc:ReadingType of Total @@ -1025,6 +1027,7 @@ auc:UtilityAccountNumber auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/* Each auc:Utility should have exactly 1 auc:ResourceUse linked to it (ie not 0, not 2+) + count(auc:UtilityMeterNumbers/auc:UtilityMeterNumber) >= 1 From bb18b4d56f222ca554b211fbe08b02c763f20aac Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 25 Sep 2020 12:17:15 -0600 Subject: [PATCH 36/76] feat(L200): add elec load factor test --- .../v2.2.0/exemplary_files/L200_Audit.xml | 121 ++++++++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.sch | 1 + 3 files changed, 123 insertions(+) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index a44adc9b..e0a3c55b 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -1265,6 +1265,127 @@ 384.98 + + + Load factor + 2019-01-01T00:00:00 + 2019-02-01T00:00:00 + 30 + Day + Month + 4102.51 + + + + Load factor + 2019-02-01T00:00:00 + 2019-03-01T00:00:00 + 30 + Day + Month + 3737.04 + + + + Load factor + 2019-03-01T00:00:00 + 2019-04-01T00:00:00 + 30 + Day + Month + 4167.07 + + + + Load factor + 2019-04-01T00:00:00 + 2019-05-01T00:00:00 + 30 + Day + Month + 3897.44 + + + + Load factor + 2019-05-01T00:00:00 + 2019-06-01T00:00:00 + 30 + Day + Month + 4565.50 + + + + Load factor + 2019-06-01T00:00:00 + 2019-07-01T00:00:00 + 30 + Day + Month + 4870.87 + + + + Load factor + 2019-07-01T00:00:00 + 2019-08-01T00:00:00 + 30 + Day + Month + 4977.64 + + + + Load factor + 2019-08-01T00:00:00 + 2019-09-01T00:00:00 + 30 + Day + Month + 5275.05 + + + + Load factor + 2019-09-01T00:00:00 + 2019-10-01T00:00:00 + 30 + Day + Month + 4788.79 + + + + Load factor + 2019-10-01T00:00:00 + 2019-11-01T00:00:00 + 30 + Day + Month + 4353.99 + + + + Load factor + 2019-11-01T00:00:00 + 2019-12-01T00:00:00 + 30 + Day + Month + 4154.67 + + + + Load factor + 2019-12-01T00:00:00 + 2020-01-01T00:00:00 + 30 + Day + Month + 4052.43 + + diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 6cfbe8ff..5d0407cd 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -323,6 +323,7 @@ "","","","","","","","","","count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Total' and auc:IntervalFrequency/text() = 'Month']) >= 12","Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Total, (3) have auc:IntervalFrequency of Month","","" "","","","","","","","","","count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Cost' and auc:IntervalFrequency/text() = 'Month']) >= 12","Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Cost, (3) have auc:IntervalFrequency of Month","","" "","","","","","","","","","(auc:EnergyResource/text() != 'Electricity') or count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Peak' and auc:PeakType and auc:IntervalFrequency/text() = 'Month']) >= 12","Electricity Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Peak, (3) have auc:PeakType, and (4) have auc:IntervalFrequency of Month","","" +"","","","","","","","","","(auc:EnergyResource/text() != 'Electricity') or count(//auc:TimeSeriesData/auc:TimeSeries[auc:ResourceUseID/@IDref = current()/@ID and auc:ReadingType/text() = 'Load factor' and auc:IntervalFrequency/text() = 'Month']) >= 12","Electricity Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Load factor, and (3) have auc:IntervalFrequency of Month","","" "","","","","","","","","","auc:AnnualFuelUseNativeUnits","","","" "","","","","","","","","","auc:AnnualFuelUseConsistentUnits","","","" "","","","","","","","","","auc:AnnualFuelCost","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 8ad29445..73d32812 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -995,6 +995,7 @@ Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Total, (3) have auc:IntervalFrequency of Month Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Cost, (3) have auc:IntervalFrequency of Month Electricity Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Peak, (3) have auc:PeakType, and (4) have auc:IntervalFrequency of Month + Electricity Resource use must have at least 12 consecutive auc:TimeSeries that: (1) are linked to an auc:ResourceUse, (2) have auc:ReadingType of Load factor, and (3) have auc:IntervalFrequency of Month auc:AnnualFuelUseNativeUnits auc:AnnualFuelUseConsistentUnits auc:AnnualFuelCost From fda4b78622f7494e649e9bcd62fc649cdfc6a813 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 25 Sep 2020 13:26:21 -0600 Subject: [PATCH 37/76] feat(L200): add submetering test --- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 2 ++ schematron/v2.2.0/v2-2-0_L200_Audit.sch | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 5d0407cd..33d0a008 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -338,6 +338,8 @@ "","","","","","","","","","auc:IntervalDuration","TimeSeries data for ResourceUse must include an IntervalDuration","","" "","","","","","","","","","auc:IntervalDurationUnits","TimeSeries data for ResourceUse must include an IntervalDurationUnits","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse/auc:AnnualFuelUseLinkedTimeSeriesIDs/auc:LinkedTimeSeriesID","true","","","//auc:TimeSeriesData/auc:TimeSeries[@ID = current()/@IDref and auc:ResourceUseID/@IDref = current()/ancestor::auc:ResourceUse/@ID and auc:ReadingType/text() = 'Total']","Each auc:LinkedTimeSeriesID must point to an auc:TimeSeries that (1) points to the same auc:ResourceUse through auc:ResourceUseID and (2) has an auc:ReadingType of Total","","" +"","","Submetering","6.2.2.1 (d)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses[auc:MeterID]","false","","","auc:ParentResourceUse","","","" +"","","","","","","","","","//auc:ResourceUse[@ID = current()/auc:ParentResourceUse/@IDref]","auc:ParentResourceUse must link to another valid auc:ResourceUse","","" "","","Utility Info","ASHRAE 211 6.1.2.1","Utility Info - Basics","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Utilities/auc:Utility","true","","","auc:UtilityAccountNumber","","","" "","","","","","","","","","auc:RateSchedules/auc:RateSchedule/auc:TypeOfRateStructure/*","","","" "","","","","","","","","","count(//auc:ResourceUses/auc:ResourceUse/auc:UtilityIDs/auc:UtilityID[@IDref = current()/@ID]) = 1","Each auc:Utility should have exactly 1 auc:ResourceUse linked to it (ie not 0, not 2+)","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 73d32812..76cd6d66 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -117,6 +117,7 @@ + @@ -1016,6 +1017,13 @@ Each auc:LinkedTimeSeriesID must point to an auc:TimeSeries that (1) points to the same auc:ResourceUse through auc:ResourceUseID and (2) has an auc:ReadingType of Total + + Submetering + + auc:ParentResourceUse + auc:ParentResourceUse must link to another valid auc:ResourceUse + + Document Structure Prerequisites Utility Info From 5460a9e2e855f5c4bc9b47822b03dd690f070a3d Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 25 Sep 2020 14:43:08 -0600 Subject: [PATCH 38/76] feat(L200): add initial EEM tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 23 +++++++++++++- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 10 +++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 31 +++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index e0a3c55b..5151e90c 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -728,7 +728,14 @@ - + + + + + + + + Air Distribution @@ -744,10 +751,21 @@ Low Cost Measure Name This measure does something cheap + true + 2020-01-01 + 2020-12-01 + + + + + + + + Air Distribution @@ -762,6 +780,9 @@ Capital Measure This measure does something expensive + true + 2020-01-01 + 2020-12-01 diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 33d0a008..3a33dda0 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -398,4 +398,12 @@ "","","","","","","","calculatedBuildingEnergyUseIntensityEpsilon","auc:SiteEnergyUseIntensity * $epsilonPct","","","","" "","","","","","","","calculatedBuildingEnergyUseIntensityDelta","translate(auc:BuildingEnergyUseIntensity - $calculatedBuildingEnergyUseIntensity, '-', '')","count(auc:BuildingEnergyUseIntensity) = 1 and $calculatedBuildingEnergyUseIntensityDelta < $calculatedBuildingEnergyUseIntensityEpsilon","auc:BuildingEnergyUseIntensity (which is ) should approximately equal auc:BuildingEnergyUse divided by the auc:Building's Gross floor area (which is ); the difference, is too large (should be less than )","","" "","","","","","","","","","auc:EnergyCost","","","" -"","","","","","","","","","auc:EnergyCostIndex","","","" \ No newline at end of file +"","","","","","","","","","auc:EnergyCostIndex","","","" +"EEM Summary","ASHRAE 211 6.2.4.1","EEM Measures","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure","true","","","auc:TypeOfMeasure/*/*","","","" +"","","","","","","","","","auc:StartDate","","","" +"","","","","","","","","","auc:EndDate","","","" +"","","","","","","","","","auc:Recommended","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:Replacements/auc:Replacement","false","","","(auc:ExistingSystemReplaced/@IDref and auc:AlternativeSystemReplacement/@IDref) or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:ModificationRetrocommissions/auc:ModificationRetrocommissioning","false","","","(auc:ExistingSystemAffected/@IDref and auc:ModifiedSystem/@IDref) or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:Additions/auc:Addition","false","","","auc:AlternativeSystemAdded/@IDref or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:Removals/auc:Removal","false","","","auc:ExistingSystemRemoved/@IDref or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 76cd6d66..85423408 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -125,6 +125,10 @@ + + + + Document Structure Prerequisites Misc Building Info @@ -1144,4 +1148,31 @@ auc:EnergyCostIndex + + Document Structure Prerequisites EEM Measures + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure + + + + EEM Measures + + auc:TypeOfMeasure/*/* + auc:StartDate + auc:EndDate + auc:Recommended + + + (auc:ExistingSystemReplaced/@IDref and auc:AlternativeSystemReplacement/@IDref) or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref) + + + (auc:ExistingSystemAffected/@IDref and auc:ModifiedSystem/@IDref) or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref) + + + auc:AlternativeSystemAdded/@IDref or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref) + + + auc:ExistingSystemRemoved/@IDref or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref) + + From fe8eecbd740b1cac1a8d50648dae7cd37f0428fa Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Mon, 28 Sep 2020 15:27:17 -0400 Subject: [PATCH 39/76] feat(L200): Update IntervalDuration to match dates; Update LoadFactor values --- .../v2.2.0/exemplary_files/L200_Audit.xml | 150 +++++++++--------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 5151e90c..8c49be2f 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -916,7 +916,7 @@ Total 2019-01-01T00:00:00 2019-02-01T00:00:00 - 30 + 31 Day Month 4102.51 @@ -936,7 +936,7 @@ Total 2019-03-01T00:00:00 2019-04-01T00:00:00 - 30 + 31 Day Month 4167.07 @@ -956,7 +956,7 @@ Total 2019-05-01T00:00:00 2019-06-01T00:00:00 - 30 + 31 Day Month 4565.50 @@ -976,7 +976,7 @@ Total 2019-07-01T00:00:00 2019-08-01T00:00:00 - 30 + 31 Day Month 4977.64 @@ -986,7 +986,7 @@ Total 2019-08-01T00:00:00 2019-09-01T00:00:00 - 30 + 31 Day Month 5275.05 @@ -1006,7 +1006,7 @@ Total 2019-10-01T00:00:00 2019-11-01T00:00:00 - 30 + 31 Day Month 4353.99 @@ -1026,7 +1026,7 @@ Total 2019-12-01T00:00:00 2020-01-01T00:00:00 - 30 + 31 Day Month 4052.43 @@ -1038,7 +1038,7 @@ On-peak 2019-01-01T00:00:00 2019-02-01T00:00:00 - 30 + 31 Day Month 14.78 @@ -1049,7 +1049,7 @@ On-peak 2019-02-01T00:00:00 2019-03-01T00:00:00 - 30 + 28 Day Month 14.12 @@ -1060,7 +1060,7 @@ On-peak 2019-03-01T00:00:00 2019-04-01T00:00:00 - 30 + 31 Day Month 14.36 @@ -1082,7 +1082,7 @@ On-peak 2019-05-01T00:00:00 2019-06-01T00:00:00 - 30 + 31 Day Month 16.41 @@ -1104,7 +1104,7 @@ On-peak 2019-07-01T00:00:00 2019-08-01T00:00:00 - 30 + 31 Day Month 18.14 @@ -1115,7 +1115,7 @@ On-peak 2019-08-01T00:00:00 2019-09-01T00:00:00 - 30 + 31 Day Month 19.07 @@ -1137,7 +1137,7 @@ On-peak 2019-10-01T00:00:00 2019-11-01T00:00:00 - 30 + 31 Day Month 16.54 @@ -1159,7 +1159,7 @@ On-peak 2019-12-01T00:00:00 2020-01-01T00:00:00 - 30 + 31 Day Month 15.05 @@ -1170,7 +1170,7 @@ Cost 2019-01-01T00:00:00 2019-02-01T00:00:00 - 30 + 31 Day Month 389.74 @@ -1180,7 +1180,7 @@ Cost 2019-02-01T00:00:00 2019-03-01T00:00:00 - 30 + 28 Day Month 355.02 @@ -1190,7 +1190,7 @@ Cost 2019-03-01T00:00:00 2019-04-01T00:00:00 - 30 + 31 Day Month 395.87 @@ -1210,7 +1210,7 @@ Cost 2019-05-01T00:00:00 2019-06-01T00:00:00 - 30 + 31 Day Month 433.72 @@ -1230,7 +1230,7 @@ Cost 2019-07-01T00:00:00 2019-08-01T00:00:00 - 30 + 31 Day Month 472.88 @@ -1240,7 +1240,7 @@ Cost 2019-08-01T00:00:00 2019-09-01T00:00:00 - 30 + 31 Day Month 501.13 @@ -1260,7 +1260,7 @@ Cost 2019-10-01T00:00:00 2019-11-01T00:00:00 - 30 + 31 Day Month 413.63 @@ -1280,7 +1280,7 @@ Cost 2019-12-01T00:00:00 2020-01-01T00:00:00 - 30 + 31 Day Month 384.98 @@ -1291,30 +1291,30 @@ Load factor 2019-01-01T00:00:00 2019-02-01T00:00:00 - 30 + 31 Day Month - 4102.51 + 0.373 Load factor 2019-02-01T00:00:00 2019-03-01T00:00:00 - 30 + 28 Day Month - 3737.04 + 0.394 Load factor 2019-03-01T00:00:00 2019-04-01T00:00:00 - 30 + 31 Day Month - 4167.07 + 0.390 @@ -1324,17 +1324,17 @@ 30 Day Month - 3897.44 + 0.358 Load factor 2019-05-01T00:00:00 2019-06-01T00:00:00 - 30 + 31 Day Month - 4565.50 + 0.374 @@ -1344,27 +1344,27 @@ 30 Day Month - 4870.87 + 0.386 Load factor 2019-07-01T00:00:00 2019-08-01T00:00:00 - 30 + 31 Day Month - 4977.64 + 0.369 Load factor 2019-08-01T00:00:00 2019-09-01T00:00:00 - 30 + 31 Day Month - 5275.05 + 0.372 @@ -1374,17 +1374,17 @@ 30 Day Month - 4788.79 + 0.373 Load factor 2019-10-01T00:00:00 2019-11-01T00:00:00 - 30 + 31 Day Month - 4353.99 + 0.354 @@ -1394,17 +1394,17 @@ 30 Day Month - 4154.67 + 0.380 Load factor 2019-12-01T00:00:00 2020-01-01T00:00:00 - 30 + 31 Day Month - 4052.43 + 0.362 @@ -1413,7 +1413,7 @@ Total 2019-01-01T00:00:00 2019-02-01T00:00:00 - 30 + 31 Day Month 0.1 @@ -1423,7 +1423,7 @@ Total 2019-02-01T00:00:00 2019-03-01T00:00:00 - 30 + 28 Day Month 0.05 @@ -1433,7 +1433,7 @@ Total 2019-03-01T00:00:00 2019-04-01T00:00:00 - 30 + 31 Day Month 0.01 @@ -1453,7 +1453,7 @@ Total 2019-05-01T00:00:00 2019-06-01T00:00:00 - 30 + 31 Day Month 0 @@ -1473,7 +1473,7 @@ Total 2019-07-01T00:00:00 2019-08-01T00:00:00 - 30 + 31 Day Month 0 @@ -1483,7 +1483,7 @@ Total 2019-08-01T00:00:00 2019-09-01T00:00:00 - 30 + 31 Day Month 0 @@ -1503,7 +1503,7 @@ Total 2019-10-01T00:00:00 2019-11-01T00:00:00 - 30 + 31 Day Month 0 @@ -1523,7 +1523,7 @@ Total 2019-12-01T00:00:00 2020-01-01T00:00:00 - 30 + 31 Day Month 0.06 @@ -1534,7 +1534,7 @@ Cost 2019-01-01T00:00:00 2019-02-01T00:00:00 - 30 + 31 Day Month 27 @@ -1544,7 +1544,7 @@ Cost 2019-02-01T00:00:00 2019-03-01T00:00:00 - 30 + 28 Day Month 27 @@ -1554,7 +1554,7 @@ Cost 2019-03-01T00:00:00 2019-04-01T00:00:00 - 30 + 31 Day Month 27 @@ -1574,7 +1574,7 @@ Cost 2019-05-01T00:00:00 2019-06-01T00:00:00 - 30 + 31 Day Month 27 @@ -1594,7 +1594,7 @@ Cost 2019-07-01T00:00:00 2019-08-01T00:00:00 - 30 + 31 Day Month 27 @@ -1604,7 +1604,7 @@ Cost 2019-08-01T00:00:00 2019-09-01T00:00:00 - 30 + 31 Day Month 27 @@ -1624,7 +1624,7 @@ Cost 2019-10-01T00:00:00 2019-11-01T00:00:00 - 30 + 31 Day Month 27 @@ -1644,7 +1644,7 @@ Cost 2019-12-01T00:00:00 2020-01-01T00:00:00 - 30 + 31 Day Month 27 @@ -1657,7 +1657,7 @@ Total 2019-01-01T00:00:00 2019-02-01T00:00:00 - 30 + 31 Day Month 385 @@ -1667,7 +1667,7 @@ Total 2019-02-01T00:00:00 2019-03-01T00:00:00 - 30 + 28 Day Month 436 @@ -1677,7 +1677,7 @@ Total 2019-03-01T00:00:00 2019-04-01T00:00:00 - 30 + 31 Day Month 560 @@ -1697,7 +1697,7 @@ Total 2019-05-01T00:00:00 2019-06-01T00:00:00 - 30 + 31 Day Month 568 @@ -1717,7 +1717,7 @@ Total 2019-07-01T00:00:00 2019-08-01T00:00:00 - 30 + 31 Day Month 573 @@ -1727,7 +1727,7 @@ Total 2019-08-01T00:00:00 2019-09-01T00:00:00 - 30 + 31 Day Month 543 @@ -1747,7 +1747,7 @@ Total 2019-10-01T00:00:00 2019-11-01T00:00:00 - 30 + 31 Day Month 461 @@ -1767,7 +1767,7 @@ Total 2019-12-01T00:00:00 2020-01-01T00:00:00 - 30 + 31 Day Month 359 @@ -1779,7 +1779,7 @@ Cost 2019-01-01T00:00:00 2019-02-01T00:00:00 - 30 + 31 Day Month 35 @@ -1789,7 +1789,7 @@ Cost 2019-02-01T00:00:00 2019-03-01T00:00:00 - 30 + 28 Day Month 40 @@ -1799,7 +1799,7 @@ Cost 2019-03-01T00:00:00 2019-04-01T00:00:00 - 30 + 31 Day Month 51 @@ -1819,7 +1819,7 @@ Cost 2019-05-01T00:00:00 2019-06-01T00:00:00 - 30 + 31 Day Month 52 @@ -1839,7 +1839,7 @@ Cost 2019-07-01T00:00:00 2019-08-01T00:00:00 - 30 + 31 Day Month 53 @@ -1849,7 +1849,7 @@ Cost 2019-08-01T00:00:00 2019-09-01T00:00:00 - 30 + 31 Day Month 50 @@ -1869,7 +1869,7 @@ Cost 2019-10-01T00:00:00 2019-11-01T00:00:00 - 30 + 31 Day Month 42 @@ -1889,7 +1889,7 @@ Cost 2019-12-01T00:00:00 2020-01-01T00:00:00 - 30 + 31 Day Month 33 From f3f4b965c9cd75f0fdefd23c7285a58a3e9b54ab Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 30 Sep 2020 13:59:52 -0600 Subject: [PATCH 40/76] chore: address pr comments on example bsync files --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 1 - schematron/v2.2.0/tests/data/HVAC_example1.xml | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 8c49be2f..8b6ec0a2 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -397,7 +397,6 @@ - Packaged Rooftop VAV with Hot Water Reheat Digital diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index deb62367..16e03fa2 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -35,7 +35,7 @@ Good 2020 - Electricity + Natural gas true @@ -328,6 +328,7 @@ Single Excellent + From 7b064b51c765b5f3ce9fb01ffd38b6b1e26c92d5 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 30 Sep 2020 14:15:53 -0600 Subject: [PATCH 41/76] refactor(L200): don't require Central fan to be linked to duct system --- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 1 - schematron/v2.2.0/v2-2-0_L200_Audit.sch | 1 - 2 files changed, 2 deletions(-) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 3a33dda0..8d9fbeb9 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -207,7 +207,6 @@ "","","","","","","","","","auc:ReheatSource/text() = 'None' or auc:ReheatControlMethod","","","" "","","","","","","","","","auc:ReheatSource/text() != 'Heating plant' or auc:ReheatPlantID","","","" "","","Central Fan","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution[auc:AirDeliveryType/text() = 'Central fan']","false","deliveryID","current()/ancestor::auc:Delivery/@ID","//auc:Systems/auc:FanSystems/auc:FanSystem[auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = $deliveryID]","auc:Delivery ID must be linked to a valid auc:FanSystem","","" -"","","","","","","","","","current()/ancestor::auc:HVACSystem/auc:DuctSystems/auc:DuctSystem[auc:HeatingDeliveryID/@IDref = $deliveryID or auc:CoolingDeliveryID/@IDref = $deliveryID]","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FanSystems/auc:FanSystem","false","","","auc:FanControlType","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:DuctSystems/auc:DuctSystem","false","","","auc:DuctConfiguration","","","" "","","Zone Equipment","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment","false","","","count(current()/*) >= 1","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 85423408..e13e19b2 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -692,7 +692,6 @@ auc:Delivery ID must be linked to a valid auc:FanSystem - current()/ancestor::auc:HVACSystem/auc:DuctSystems/auc:DuctSystem[auc:HeatingDeliveryID/@IDref = $deliveryID or auc:CoolingDeliveryID/@IDref = $deliveryID] auc:FanControlType From ba273fc9819b094fef296e2534a53255973e4a0d Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 30 Sep 2020 14:46:58 -0600 Subject: [PATCH 42/76] feat(L200): finish Measure requirements --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 4 ++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 4 ++++ schematron/v2.2.0/v2-2-0_L200_Audit.sch | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 8b6ec0a2..ca3d7ec2 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -746,10 +746,12 @@ + Individual system Low Cost Measure Name This measure does something cheap + 1 true 2020-01-01 2020-12-01 @@ -775,10 +777,12 @@ + Individual system Capital Measure This measure does something expensive + 1 true 2020-01-01 2020-12-01 diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 8d9fbeb9..985df555 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -402,6 +402,10 @@ "","","","","","","","","","auc:StartDate","","","" "","","","","","","","","","auc:EndDate","","","" "","","","","","","","","","auc:Recommended","","","" +"","","","","","","","","","auc:UsefulLife","","","" +"","","","","","","","","","auc:TechnologyCategories/auc:TechnologyCategory/*/auc:MeasureName","","","" +"","","","","","","","","","(auc:TechnologyCategories/auc:TechnologyCategory/*/auc:MeasureName/text() != 'Other') or auc:CustomMeasureName","If auc:TechnologyCategories/auc:TechnologyCategory/*/auc:MeasureName is 'Other' you must specify auc:CustomMeasureName","","" +"","","","","","","","","","auc:MeasureScaleOfApplication","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:Replacements/auc:Replacement","false","","","(auc:ExistingSystemReplaced/@IDref and auc:AlternativeSystemReplacement/@IDref) or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:ModificationRetrocommissions/auc:ModificationRetrocommissioning","false","","","(auc:ExistingSystemAffected/@IDref and auc:ModifiedSystem/@IDref) or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:Additions/auc:Addition","false","","","auc:AlternativeSystemAdded/@IDref or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index e13e19b2..8f8c1491 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -1160,6 +1160,10 @@ auc:StartDate auc:EndDate auc:Recommended + auc:UsefulLife + auc:TechnologyCategories/auc:TechnologyCategory/*/auc:MeasureName + If auc:TechnologyCategories/auc:TechnologyCategory/*/auc:MeasureName is 'Other' you must specify auc:CustomMeasureName + auc:MeasureScaleOfApplication (auc:ExistingSystemReplaced/@IDref and auc:AlternativeSystemReplacement/@IDref) or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref) From 20f3e2f68daa7521bec2d23947351d3a494d305a Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 30 Sep 2020 16:17:16 -0600 Subject: [PATCH 43/76] feat(L200): finish EEM tests --- .../v2.2.0/exemplary_files/L200_Audit.xml | 42 ++++++++++++++--- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 33 ++++++++++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 47 ++++++++++++++++++- 3 files changed, 112 insertions(+), 10 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index ca3d7ec2..5a3fb729 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -752,6 +752,8 @@ This measure does something cheap 1 + 123 + 123 true 2020-01-01 2020-12-01 @@ -783,6 +785,8 @@ This measure does something expensive 1 + 123 + 123 true 2020-01-01 2020-12-01 @@ -1968,13 +1972,37 @@ Low-Cost or No-Cost - - Notes on impact on occupant comfort go here - Low - Medium - High - Low - + 123 + 123 + + + Electricity + kWh + 123 + + + Natural gas + MMBtu + 0 + + + 123 + 123 + 123 + 123 + 1 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 + 123 diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 985df555..a3e56165 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -398,15 +398,44 @@ "","","","","","","","calculatedBuildingEnergyUseIntensityDelta","translate(auc:BuildingEnergyUseIntensity - $calculatedBuildingEnergyUseIntensity, '-', '')","count(auc:BuildingEnergyUseIntensity) = 1 and $calculatedBuildingEnergyUseIntensityDelta < $calculatedBuildingEnergyUseIntensityEpsilon","auc:BuildingEnergyUseIntensity (which is ) should approximately equal auc:BuildingEnergyUse divided by the auc:Building's Gross floor area (which is ); the difference, is too large (should be less than )","","" "","","","","","","","","","auc:EnergyCost","","","" "","","","","","","","","","auc:EnergyCostIndex","","","" -"EEM Summary","ASHRAE 211 6.2.4.1","EEM Measures","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure","true","","","auc:TypeOfMeasure/*/*","","","" +"EEM Summary","ASHRAE 211 6.2.4.1 and 6.2.5.1","EEM Measures","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure","true","","","auc:TypeOfMeasure/*/*","","","" "","","","","","","","","","auc:StartDate","","","" "","","","","","","","","","auc:EndDate","","","" "","","","","","","","","","auc:Recommended","","","" +"","","","","","","","","","(auc:Recommended/text() = 'true') or auc:DiscardReason","auc:DiscardReason must be provided if auc:Recommended is false","","" "","","","","","","","","","auc:UsefulLife","","","" "","","","","","","","","","auc:TechnologyCategories/auc:TechnologyCategory/*/auc:MeasureName","","","" "","","","","","","","","","(auc:TechnologyCategories/auc:TechnologyCategory/*/auc:MeasureName/text() != 'Other') or auc:CustomMeasureName","If auc:TechnologyCategories/auc:TechnologyCategory/*/auc:MeasureName is 'Other' you must specify auc:CustomMeasureName","","" "","","","","","","","","","auc:MeasureScaleOfApplication","","","" +"","","","","","","","","","auc:MeasureMaterialCost","","","" +"","","","","","","","","","auc:MeasureInstallationCost","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:Replacements/auc:Replacement","false","","","(auc:ExistingSystemReplaced/@IDref and auc:AlternativeSystemReplacement/@IDref) or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:ModificationRetrocommissions/auc:ModificationRetrocommissioning","false","","","(auc:ExistingSystemAffected/@IDref and auc:ModifiedSystem/@IDref) or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:Additions/auc:Addition","false","","","auc:AlternativeSystemAdded/@IDref or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:Removals/auc:Removal","false","","","auc:ExistingSystemRemoved/@IDref or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" \ No newline at end of file +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TypeOfMeasure/auc:Removals/auc:Removal","false","","","auc:ExistingSystemRemoved/@IDref or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref)","","","" +"","","EEM Packages","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures","true","","","auc:CostCategory","","","" +"","","","","","","","","","//auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured and @ID = current()/auc:ReferenceCase/@IDref]","Package of Measures must be linked to the Measured Scenario (ie auc:PackageOfMeasures/auc:ReferenceCase/@IDref must contain the ID of the Scenario of type auc:CurrentBuilding/auc:CalculationMethod/auc:Measured)","","" +"","","","","","","","","","auc:ImplementationPeriod","","","" +"","","","","","","","","","auc:AnnualSavingsSiteEnergy","","","" +"","","","","","","","","","auc:AnnualSavingsCost","","","" +"","","","","","","","","","auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel[auc:EnergyResource/text() = 'Electricity']","You must include annual savings for electricity (auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel[auc:EnergyResource/text() = 'Electricity'])","","" +"","","","","","","","","","auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel[auc:EnergyResource/text() = 'Natural gas']","You must include annual savings for natural gas (auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel[auc:EnergyResource/text() = 'Natural gas'])","","" +"","","","","","","","","","auc:AnnualPeakElectricityReduction","","","" +"","","","","","","","","","auc:AnnualDemandSavingsCost","","","" +"","","","","","","","","","auc:PackageFirstCost","","","" +"","","","","","","","","","auc:MVCost","","","" +"","","","","","","","","","auc:OMCostAnnualSavings","","","" +"","","","","","","","","","auc:AnnualWaterSavings","","","" +"","","","","","","","","","auc:AnnualWaterCostSavings","","","" +"","","","","","","","","","auc:EquipmentDisposalAndSalvageCosts","","","" +"","","","","","","","","","auc:SimplePayback","","","" +"","","","","","","","","","auc:InternalRateOfReturn","","","" +"","","","","","","","","","auc:ImplementationPeriodCostSavings","","","" +"","","","","","","","","","auc:ProjectMarkup","","","" +"","","","","","","","","","auc:FundingFromIncentives","","","" +"","","","","","","","","","auc:FundingFromTaxCredits","","","" +"","","","","","","","","","auc:OtherFinancialIncentives","","","" +"","","","","","","","","","auc:RecurringIncentives","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel","true","","","auc:EnergyResource","","","" +"","","","","","","","","","auc:AnnualSavingsNativeUnits","","","" +"","","","","","","","","","auc:ResourceUnits","","","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 8f8c1491..f2e2eb40 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -125,9 +125,11 @@ - + + + Document Structure Prerequisites Misc Building Info @@ -1160,10 +1162,13 @@ auc:StartDate auc:EndDate auc:Recommended + auc:DiscardReason must be provided if auc:Recommended is false auc:UsefulLife auc:TechnologyCategories/auc:TechnologyCategory/*/auc:MeasureName If auc:TechnologyCategories/auc:TechnologyCategory/*/auc:MeasureName is 'Other' you must specify auc:CustomMeasureName auc:MeasureScaleOfApplication + auc:MeasureMaterialCost + auc:MeasureInstallationCost (auc:ExistingSystemReplaced/@IDref and auc:AlternativeSystemReplacement/@IDref) or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref) @@ -1178,4 +1183,44 @@ auc:ExistingSystemRemoved/@IDref or (auc:ExistingScheduleAffected/@IDref and auc:ModifiedSchedule/@IDref) + + Document Structure Prerequisites EEM Packages + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel + + + + EEM Packages + + auc:CostCategory + Package of Measures must be linked to the Measured Scenario (ie auc:PackageOfMeasures/auc:ReferenceCase/@IDref must contain the ID of the Scenario of type auc:CurrentBuilding/auc:CalculationMethod/auc:Measured) + auc:ImplementationPeriod + auc:AnnualSavingsSiteEnergy + auc:AnnualSavingsCost + You must include annual savings for electricity (auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel[auc:EnergyResource/text() = 'Electricity']) + You must include annual savings for natural gas (auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel[auc:EnergyResource/text() = 'Natural gas']) + auc:AnnualPeakElectricityReduction + auc:AnnualDemandSavingsCost + auc:PackageFirstCost + auc:MVCost + auc:OMCostAnnualSavings + auc:AnnualWaterSavings + auc:AnnualWaterCostSavings + auc:EquipmentDisposalAndSalvageCosts + auc:SimplePayback + auc:InternalRateOfReturn + auc:ImplementationPeriodCostSavings + auc:ProjectMarkup + auc:FundingFromIncentives + auc:FundingFromTaxCredits + auc:OtherFinancialIncentives + auc:RecurringIncentives + + + auc:EnergyResource + auc:AnnualSavingsNativeUnits + auc:ResourceUnits + + From 94e2a784fa2b7f89192e884ff0b33e8cac39b6e5 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 30 Sep 2020 17:50:41 -0600 Subject: [PATCH 44/76] feat(L200): test heating and cooling sources --- .../v2.2.0/exemplary_files/L200_Audit.xml | 5 +++++ .../v2.2.0/tests/data/HVAC_example1.xml | 12 +++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 9 ++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.sch | 21 +++++++++++++++++++ 4 files changed, 47 insertions(+) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 5a3fb729..6ad7e427 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -333,6 +333,11 @@ Single zone + + + Warm air + + 123 123 gpm diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 16e03fa2..1841b1f8 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -174,6 +174,11 @@ Single zone + + + Warm air + + 123 123 gpm @@ -192,6 +197,13 @@ + + + Packaged terminal air conditioner (PTAC) + Screw + Modulating + + 123 gpm Good diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index a3e56165..346e2701 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -201,6 +201,15 @@ "","","","","","","","","","auc:Quantity","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:HeatingSourceID","false","","","//auc:HeatingSource[@ID = current()/@IDref]","auc:HeatingSourceID must point to a valid auc:HeatingSource","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:CoolingSourceID","false","","","//auc:CoolingSource[@ID = current()/@IDref]","auc:CoolingSourceID must point to a valid auc:CoolingSource","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource","false","","","auc:HeatingSourceType/*","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource/auc:HeatingSourceType/auc:Furnace","false","","","auc:FurnaceType","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource/auc:HeatingSourceType/auc:HeatPump","false","","","auc:HeatPumpType","","","" +"","","","","","","","","","auc:HeatPumpBackupSystemFuel","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource","false","","","auc:CoolingSourceType/*","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource/auc:CoolingSourceType/auc:DX","false","","","auc:DXSystemType","","","" +"","","","","","","","","","auc:CompressorType","","","" +"","","","","","","","","","auc:CompressorStaging","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource/auc:CoolingSourceType/auc:EvaporativeCooler","false","","","auc:EvaporativeCoolingType","","","" "HVAC Distribution System Delivery Type Air Delivery","ASHRAE 211 6.2.1.3 (c)","Delivery Type","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","","","auc:AirDeliveryType","","","" "","","","","","","","","","auc:TerminalUnit","","","" "","","","","","","","","","auc:ReheatSource","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index f2e2eb40..108be345 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -678,6 +678,27 @@ auc:CoolingSourceID must point to a valid auc:CoolingSource + + auc:HeatingSourceType/* + + + auc:FurnaceType + + + auc:HeatPumpType + auc:HeatPumpBackupSystemFuel + + + auc:CoolingSourceType/* + + + auc:DXSystemType + auc:CompressorType + auc:CompressorStaging + + + auc:EvaporativeCoolingType + Delivery Type From 484ea72824a7e9723688a3ee2603aeee0e79a634 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 1 Oct 2020 13:16:39 -0600 Subject: [PATCH 45/76] feat(L200): add checks for heating and cooling source tests --- .../v2.2.0/tests/data/HVAC_example1.xml | 42 +++++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 35 ++++++++++++---- 2 files changed, 69 insertions(+), 8 deletions(-) diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 1841b1f8..e5351a10 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -194,6 +194,28 @@ 2020 + + + + Packaged Terminal + Unknown + + + 123 + 123 + gpm + Good + + + + + + + + + + 2020 + @@ -218,6 +240,26 @@ 2020 + + + + Direct + + + 123 + gpm + Good + + + + + + + + + + 2020 + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 2a3bd84e..494a9192 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -440,8 +440,8 @@ class TestL200AuditHvacSystems(AssertFailureRolesMixin): '//auc:HeatingPlant[1]/auc:YearInstalled', '//auc:CondenserPlant[1]/auc:YearInstalled', '//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:YearInstalled', - '//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:YearInstalled', - '//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:YearInstalled', + '//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)][1]/auc:YearInstalled', + '//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)][1]/auc:YearInstalled', ]) def test_is_invalid_when_missing_year_installed(self, xpath_to_remove): # -- Setup @@ -463,8 +463,8 @@ def test_is_invalid_when_missing_year_installed(self, xpath_to_remove): ('//auc:HeatingPlant/auc:DistrictHeating/auc:OutputCapacity', 'auc:OutputCapacity'), ('//auc:HeatingPlant/auc:SolarThermal/auc:OutputCapacity', 'auc:OutputCapacity'), ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:Capacity', 'auc:Capacity'), - ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:Capacity', 'auc:Capacity'), - ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:OutputCapacity', 'auc:OutputCapacity'), + ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)][1]/auc:Capacity', 'auc:Capacity'), + ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)][1]/auc:OutputCapacity', 'auc:OutputCapacity'), ]) def test_is_invalid_when_missing_capacity(self, xpath_to_remove, expected_message): # -- Setup @@ -484,8 +484,8 @@ def test_is_invalid_when_missing_capacity(self, xpath_to_remove, expected_messag ('//auc:HeatingPlant[1]/auc:HeatingPlantCondition', 'auc:HeatingPlantCondition'), ('//auc:CondenserPlants/auc:CondenserPlant[1]/auc:CondenserPlantCondition', 'auc:CondenserPlantCondition'), ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:DeliveryCondition', 'auc:DeliveryCondition'), - ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:CoolingSourceCondition', 'auc:CoolingSourceCondition'), - ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:HeatingSourceCondition', 'auc:HeatingSourceCondition'), + ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)][1]/auc:CoolingSourceCondition', 'auc:CoolingSourceCondition'), + ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)][1]/auc:HeatingSourceCondition', 'auc:HeatingSourceCondition'), ('//auc:DuctSystems/auc:DuctSystem/auc:DuctInsulationCondition', 'auc:DuctInsulationCondition'), ]) def test_is_invalid_when_missing_condition(self, xpath_to_remove, expected_message): @@ -501,6 +501,25 @@ def test_is_invalid_when_missing_condition(self, xpath_to_remove, expected_messa 'ERROR': [expected_message] }) + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ + ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource/auc:CoolingSourceType/auc:DX/auc:DXSystemType', 'auc:DXSystemType'), + ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource/auc:CoolingSourceType/auc:EvaporativeCooler/auc:EvaporativeCoolingType', 'auc:EvaporativeCoolingType'), + ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource/auc:HeatingSourceType/auc:Furnace/auc:FurnaceType', 'auc:FurnaceType'), + ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource/auc:HeatingSourceType/auc:HeatPump/auc:HeatPumpType', 'auc:HeatPumpType'), + ]) + def test_is_invalid_when_source_is_missing_info(self, xpath_to_remove, expected_message): + # -- Setup + tree = etree.parse(self.example_file) + remove_element(tree, xpath_to_remove) + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='hvac_distribution_system_sources') + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': [expected_message] + }) + @pytest.mark.parametrize("xpath_to_remove, expected_message", [ ('//auc:HeatingPlant/auc:Boiler/auc:BoilerType', 'auc:BoilerType'), ('//auc:HeatingPlant/auc:DistrictHeating/auc:DistrictHeatingType', 'auc:DistrictHeatingType'), @@ -664,8 +683,8 @@ def test_is_invalid_when_plant_is_missing_controls(self, xpath_to_remove, expect }) @pytest.mark.parametrize("xpath_to_remove, expected_message", [ - ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]/auc:Controls/auc:Control/*/auc:ControlSystemType/*', 'auc:CoolingSource must have at least one auc:ControlSystemType child'), - ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]/auc:Controls/auc:Control/*/auc:ControlSystemType/*', 'auc:HeatingSource must have at least one auc:ControlSystemType child'), + ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)][1]/auc:Controls/auc:Control/*/auc:ControlSystemType/*', 'auc:CoolingSource must have at least one auc:ControlSystemType child'), + ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)][1]/auc:Controls/auc:Control/*/auc:ControlSystemType/*', 'auc:HeatingSource must have at least one auc:ControlSystemType child'), ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:Controls/auc:Control/*/auc:ControlSystemType/*', 'auc:Delivery must have at least one auc:ControlSystemType child'), ]) def test_is_invalid_when_source_or_delivery_is_missing_controls(self, xpath_to_remove, expected_message): From d5c3ec7b37a929e21204f48c3c6d30c72ae4d96c Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 2 Oct 2020 08:57:08 -0600 Subject: [PATCH 46/76] fix(L200): if AirSideEconomizer=None must include EconomizerControl --- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 2 +- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 346e2701..3fd4b19e 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -230,7 +230,7 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:PumpSystems/auc:PumpSystem","false","","","auc:PumpControlType","","","" "HVAC Distribution System Delivery Outdoor Air Control","ASHRAE 211 6.2.1.3 (c)","Central Air Distribution","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","","","auc:FanBased/auc:AirSideEconomizer","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased/auc:AirSideEconomizer","false","","","auc:AirSideEconomizerType","","","" -"","","","","","","","","","auc:AirSideEconomizerType != 'None' or auc:EconomizerControl","","","" +"","","","","","","","","","auc:AirSideEconomizerType = 'None' or auc:EconomizerControl","","","" "","","Heat Recovery System","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HeatRecoverySystems/auc:HeatRecoverySystem","false","","","auc:HeatRecoveryEfficiency or auc:EnergyRecoveryEfficiency","","","" "","","","","","","","","","auc:HeatRecoveryType","","","" "","","","","","","","","","auc:SystemIDReceivingHeat","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 108be345..df4be68b 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -764,7 +764,7 @@ auc:AirSideEconomizerType - auc:AirSideEconomizerType != 'None' or auc:EconomizerControl + auc:AirSideEconomizerType = 'None' or auc:EconomizerControl From a5279afb14b9adb3b7b3c7e2b55a312730ed0745 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 8 Oct 2020 11:24:03 -0600 Subject: [PATCH 47/76] fix(L200): require Central fan to be linked to Duct --- schematron/v2.2.0/tests/data/HVAC_example1.xml | 2 +- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.sch | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index e5351a10..078ed2b9 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -381,7 +381,7 @@ Single Excellent - + diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 3fd4b19e..82c0e7ce 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -216,6 +216,7 @@ "","","","","","","","","","auc:ReheatSource/text() = 'None' or auc:ReheatControlMethod","","","" "","","","","","","","","","auc:ReheatSource/text() != 'Heating plant' or auc:ReheatPlantID","","","" "","","Central Fan","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution[auc:AirDeliveryType/text() = 'Central fan']","false","deliveryID","current()/ancestor::auc:Delivery/@ID","//auc:Systems/auc:FanSystems/auc:FanSystem[auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = $deliveryID]","auc:Delivery ID must be linked to a valid auc:FanSystem","","" +"","","","","","","","","","ancestor::auc:HVACSystem/auc:DuctSystems/auc:DuctSystem[auc:HeatingDeliveryID/@IDref = $deliveryID or auc:CoolingDeliveryID/@IDref = $deliveryID]","auc:Delivery ID must be linked to an auc:DuctSystem through auc:HeatingDeliveryID or auc:CoolingDeliveryID","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FanSystems/auc:FanSystem","false","","","auc:FanControlType","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:DuctSystems/auc:DuctSystem","false","","","auc:DuctConfiguration","","","" "","","Zone Equipment","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment","false","","","count(current()/*) >= 1","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index df4be68b..96ac87fe 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -715,6 +715,7 @@ auc:Delivery ID must be linked to a valid auc:FanSystem + auc:Delivery ID must be linked to an auc:DuctSystem through auc:HeatingDeliveryID or auc:CoolingDeliveryID auc:FanControlType From 95ae9626697dc50108e5a7880668f904e89fe2c2 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 8 Oct 2020 13:12:11 -0600 Subject: [PATCH 48/76] feat(L200): add Section linked System requirements --- .../v2.2.0/exemplary_files/L200_Audit.xml | 13 +- .../tests/data/Section_System_Links.xml | 104 +++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 179 ++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 525 ++++++++++- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 829 ++++++++++++++++++ 5 files changed, 1648 insertions(+), 2 deletions(-) create mode 100644 schematron/v2.2.0/tests/data/Section_System_Links.xml diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 6ad7e427..269664f8 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -162,7 +162,7 @@ Component - Other + Multifamily with commercial Other @@ -412,6 +412,11 @@ + + + + + @@ -450,6 +455,7 @@ + @@ -535,6 +541,11 @@ + + + + + diff --git a/schematron/v2.2.0/tests/data/Section_System_Links.xml b/schematron/v2.2.0/tests/data/Section_System_Links.xml new file mode 100644 index 00000000..bd3e761c --- /dev/null +++ b/schematron/v2.2.0/tests/data/Section_System_Links.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + Space function + Manufactured home + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 494a9192..f112ee75 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -853,3 +853,182 @@ def test_is_invalid_when_conveyance_system_is_missing_info(self, xpath_to_remove self.assert_failure_messages(failures, { 'ERROR': [expected_message] }) + + +class TestL200AuditSectionSystems(AssertFailureRolesMixin): + schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') + example_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data', 'Section_System_Links.xml') + + @pytest.mark.parametrize("section_occupancy_classification,expected_errors", [ + ('Manufactured home', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Single family', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Multifamily', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Multifamily with commercial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Multifamily individual unit', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Public housing', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Residential', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Health care-Pharmacy', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Skilled nursing facility', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Residential treatment center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Inpatient hospital', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Outpatient rehabilitation', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Diagnostic center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Outpatient facility', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Outpatient non-diagnostic', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Outpatient surgical', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Veterinary', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Morgue or mortuary', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Gas station', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended']}), + ('Convenience store', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended']}), + ('Food sales-Grocery store', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended']}), + ('Food sales', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended']}), + ('Laboratory-Testing', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Laboratory-Medical', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Laboratory', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Vivarium', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Zoo', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Office-Financial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Office', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Bank', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Courthouse', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Public safety station-Fire', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Public safety station-Police', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Public safety station', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Public safety-Detention center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Public safety-Correctional facility', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Public safety', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Warehouse-Refrigerated', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:RefrigerationSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Warehouse-Unrefrigerated', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:PlugLoad is recommended'], 'ERROR': ['A linked auc:LightingSystem is required']}), + ('Warehouse-Self-storage', {'INFO': ['No linked auc:HVACSystem found', 'No linked auc:PlugLoad found'], 'ERROR': ['A linked auc:LightingSystem is required']}), + ('Warehouse', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Assembly-Religious', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Assembly-Cultural entertainment', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Assembly-Social entertainment', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Assembly-Arcade or casino without lodging', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Assembly-Convention center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Assembly-Indoor arena', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Assembly-Race track', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Assembly-Stadium', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Assembly-Stadium (closed)', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Assembly-Stadium (open)', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Assembly-Public', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Recreation-Pool', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:ProcessLoad is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Recreation-Bowling alley', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Recreation-Fitness center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Recreation-Ice rink', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:RefrigerationSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Recreation-Roller rink', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Recreation-Indoor sport', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Recreation', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Education-Adult', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Education-Higher', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Education-Secondary', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Education-Primary', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Education-Preschool or daycare', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Education-Vocational', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Education', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Food service-Fast', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CookingSystem is required']}), + ('Food service-Full', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CookingSystem is required']}), + ('Food service-Limited', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CookingSystem is required']}), + ('Food service-Institutional', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CookingSystem is required']}), + ('Food service', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CookingSystem is required']}), + ('Lodging-Barracks', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Lodging-Institutional', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Lodging with extended amenities', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Lodging with limited amenities', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Lodging', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Retail-Automobile dealership', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Retail-Mall', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Retail-Strip mall', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Retail-Enclosed mall', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Retail-Dry goods retail', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Retail-Hypermarket', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:RefrigerationSystem is required']}), + ('Retail', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Service-Postal', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:ProcessLoad is recommended']}), + ('Service-Repair', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:ProcessLoad is recommended']}), + ('Service-Laundry or dry cleaning', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:LaundrySystem is required']}), + ('Service-Studio', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:ProcessLoad is recommended']}), + ('Service-Beauty and health', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:ProcessLoad is recommended']}), + ('Service-Production and assembly', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:ProcessLoad is recommended']}), + ('Service', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:ProcessLoad is recommended']}), + ('Transportation terminal', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Central Plant', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Water treatment-Wastewater', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), + ('Water treatment-Drinking water and distribution', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), + ('Water treatment', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), + ('Energy generation plant', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), + ('Industrial manufacturing plant', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), + ('Utility', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), + ('Industrial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), + ('Agricultural estate', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), + ('Mixed-use commercial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Parking', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:PlugLoad is recommended'], 'ERROR': ['A linked auc:LightingSystem is required'], 'INFO': ['No linked auc:ProcessLoad found']}), + ('Attic', {'INFO': ['No linked auc:HVACSystem found', 'No linked auc:LightingSystem found', 'No linked auc:PlugLoad found']}), + ('Basement', {'INFO': ['No linked auc:HVACSystem found', 'No linked auc:LightingSystem found', 'No linked auc:PlugLoad found']}), + ('Dining area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Living area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Sleeping area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Laundry area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:LaundrySystem is required']}), + ('Lodging area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Dressing area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Restroom', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Auditorium', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Classroom', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Day room', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Sport play area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Stage', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Spectator area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Office work area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Non-office work area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Common area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Reception area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Waiting area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Transportation waiting area', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Lobby', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Conference room', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Computer lab', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Data center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:CriticalITSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Printing room', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:ProcessLoad is recommended']}), + ('Media center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CriticalITSystem is required'], 'WARNING': ['A linked auc:ProcessLoad is recommended']}), + ('Refrigerated storage', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:RefrigerationSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Bar-Nightclub', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:CriticalITSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Bar', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Dance floor', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Trading floor', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CriticalITSystem is required'], 'WARNING': ['A linked auc:ProcessLoad is recommended']}), + ('TV studio', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CriticalITSystem is required']}), + ('Security room', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CriticalITSystem is required']}), + ('Shipping and receiving', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:PlugLoad is recommended', 'A linked auc:ProcessLoad is recommended'], 'ERROR': ['A linked auc:LightingSystem is required']}), + ('Mechanical room', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:PlugLoad is recommended'], 'ERROR': ['A linked auc:LightingSystem is required']}), + ('Chemical storage room', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Non-chemical storage room', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:PlugLoad is recommended'], 'ERROR': ['A linked auc:LightingSystem is required']}), + ('Janitorial closet', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:PlugLoad is recommended'], 'ERROR': ['A linked auc:LightingSystem is required']}), + ('Vault', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:PlugLoad is recommended'], 'ERROR': ['A linked auc:LightingSystem is required']}), + ('Corridor', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Deck', {'WARNING': ['A linked auc:LightingSystem is recommended', 'A linked auc:PlugLoad is recommended']}), + ('Courtyard', {'WARNING': ['A linked auc:LightingSystem is recommended']}), + ('Atrium', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:LightingSystem is recommended'], 'INFO': ['No linked auc:PlugLoad found']}), + ('Science park', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Other', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:LightingSystem is recommended', 'A linked auc:PlugLoad is recommended', 'A linked auc:RefrigerationSystem is recommended']}), + ('Unknown', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:LightingSystem is recommended', 'A linked auc:PlugLoad is recommended', 'A linked auc:RefrigerationSystem is recommended']}) + ]) + def test_section_is_invalid_when_missing_required_links(self, section_occupancy_classification, expected_errors): + # -- Setup + tree = etree.parse(self.example_file) + occ_classification_elem = tree.xpath('//auc:Buildings/auc:Building/auc:Sections/auc:Section/auc:OccupancyClassification', namespaces=BSYNC_NSMAP) + assert len(occ_classification_elem) == 1 + occ_classification_elem = occ_classification_elem[0] + occ_classification_elem.text = section_occupancy_classification + + # verify it's valid initially + failures = validate_schematron(self.schematron, tree, phase='section_systems') + self.assert_failure_messages(failures, {}) + + # change the ID of the section to "unlink" the systems and create errors + section_elem = occ_classification_elem.getparent() + section_elem.attrib['ID'] = 'Unlinked-Section' + + # -- Act + failures = validate_schematron(self.schematron, tree, phase='section_systems') + + # -- Assert + self.assert_failure_messages(failures, expected_errors) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 82c0e7ce..856706c9 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -448,4 +448,527 @@ "","","","","","","","","","auc:RecurringIncentives","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel","true","","","auc:EnergyResource","","","" "","","","","","","","","","auc:AnnualSavingsNativeUnits","","","" -"","","","","","","","","","auc:ResourceUnits","","","" \ No newline at end of file +"","","","","","","","","","auc:ResourceUnits","","","" +"Section Systems","","Section System Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Manufactured home""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Single family""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Multifamily""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Multifamily with commercial""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Multifamily individual unit""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public housing""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Residential""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Pharmacy""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Skilled nursing facility""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Residential treatment center""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Inpatient hospital""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Outpatient rehabilitation""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Diagnostic center""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Outpatient facility""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Outpatient non-diagnostic""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Outpatient surgical""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Veterinary""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Morgue or mortuary""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Gas station""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Convenience store""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Food sales-Grocery store""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Food sales""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Laboratory-Testing""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Laboratory-Medical""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Laboratory""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Vivarium""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Zoo""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Office-Financial""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Office""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Bank""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Courthouse""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety station-Fire""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety station-Police""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety station""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety-Detention center""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety-Correctional facility""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Warehouse-Refrigerated""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Warehouse-Unrefrigerated""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Warehouse-Self-storage""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:HVACSystem found","INFO","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:PlugLoad found","INFO","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Warehouse""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Religious""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Cultural entertainment""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Social entertainment""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Arcade or casino without lodging""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Convention center""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Indoor arena""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Race track""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Stadium""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Stadium (closed)""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Stadium (open)""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Public""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Pool""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Bowling alley""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Fitness center""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Ice rink""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Roller rink""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Indoor sport""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Adult""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Higher""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Secondary""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Primary""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Preschool or daycare""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Vocational""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Food service-Fast""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Food service-Full""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Food service-Limited""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Food service-Institutional""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Food service""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging-Barracks""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging-Institutional""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging with extended amenities""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging with limited amenities""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Retail-Automobile dealership""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Retail-Mall""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Retail-Strip mall""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Retail-Enclosed mall""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Retail-Dry goods retail""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Retail-Hypermarket""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Retail""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Service-Postal""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Service-Repair""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Service-Laundry or dry cleaning""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Service-Studio""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Service-Beauty and health""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Service-Production and assembly""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Service""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Transportation terminal""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Central Plant""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Water treatment-Wastewater""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Water treatment-Drinking water and distribution""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Water treatment""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Energy generation plant""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Industrial manufacturing plant""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Utility""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Industrial""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Agricultural estate""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Mixed-use commercial""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Parking""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:ProcessLoad found","INFO","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Attic""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:HVACSystem found","INFO","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:LightingSystem found","INFO","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:PlugLoad found","INFO","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Basement""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:HVACSystem found","INFO","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:LightingSystem found","INFO","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:PlugLoad found","INFO","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Dining area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Living area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Sleeping area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Laundry area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Dressing area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Restroom""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Auditorium""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Classroom""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Day room""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Sport play area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Stage""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Spectator area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Office work area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Non-office work area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Common area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Reception area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Waiting area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Transportation waiting area""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lobby""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Conference room""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Computer lab""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Data center""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:CriticalITSystems/auc:CriticalITSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CriticalITSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Printing room""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Media center""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:CriticalITSystems/auc:CriticalITSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CriticalITSystem is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Refrigerated storage""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Bar-Nightclub""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:CriticalITSystems/auc:CriticalITSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CriticalITSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Bar""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Dance floor""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Trading floor""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:CriticalITSystems/auc:CriticalITSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CriticalITSystem is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""TV studio""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:CriticalITSystems/auc:CriticalITSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CriticalITSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Security room""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:CriticalITSystems/auc:CriticalITSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CriticalITSystem is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Shipping and receiving""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Mechanical room""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Chemical storage room""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Non-chemical storage room""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Janitorial closet""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Vault""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Corridor""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Deck""]","False","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is recommended","WARNING","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Courtyard""]","False","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Atrium""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is recommended","WARNING","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:PlugLoad found","INFO","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Science park""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Other""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is recommended","WARNING","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Unknown""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is recommended","WARNING","" +"","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" \ No newline at end of file diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 96ac87fe..401424d4 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -131,6 +131,9 @@ + + + Document Structure Prerequisites Misc Building Info @@ -1245,4 +1248,830 @@ auc:ResourceUnits + + Section System Requirements + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + A linked auc:RefrigerationSystem is required + + + A linked auc:HVACSystem is recommended + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + No linked auc:HVACSystem found + A linked auc:LightingSystem is required + No linked auc:PlugLoad found + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + A linked auc:ProcessLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + A linked auc:RefrigerationSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:CookingSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:CookingSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:CookingSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:CookingSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:CookingSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:RefrigerationSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:LaundrySystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is recommended + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + No linked auc:ProcessLoad found + + + No linked auc:HVACSystem found + No linked auc:LightingSystem found + No linked auc:PlugLoad found + + + No linked auc:HVACSystem found + No linked auc:LightingSystem found + No linked auc:PlugLoad found + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:LaundrySystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + A linked auc:CriticalITSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:CriticalITSystem is required + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + A linked auc:RefrigerationSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + A linked auc:CriticalITSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:CriticalITSystem is required + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:CriticalITSystem is required + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + A linked auc:CriticalITSystem is required + + + A linked auc:HVACSystem is recommended + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + A linked auc:ProcessLoad is recommended + + + A linked auc:HVACSystem is recommended + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is recommended + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is recommended + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is recommended + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is recommended + + + A linked auc:LightingSystem is recommended + A linked auc:PlugLoad is recommended + + + A linked auc:LightingSystem is recommended + + + A linked auc:HVACSystem is recommended + A linked auc:LightingSystem is recommended + No linked auc:PlugLoad found + + + A linked auc:HVACSystem is required + A linked auc:LightingSystem is required + A linked auc:PlugLoad is required + + + A linked auc:HVACSystem is recommended + A linked auc:LightingSystem is recommended + A linked auc:PlugLoad is recommended + A linked auc:RefrigerationSystem is recommended + + + A linked auc:HVACSystem is recommended + A linked auc:LightingSystem is recommended + A linked auc:PlugLoad is recommended + A linked auc:RefrigerationSystem is recommended + + From 91f68244686ca62a23fa2c7c22f9c5f17913c9d8 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 8 Oct 2020 14:38:40 -0600 Subject: [PATCH 49/76] feat(L200): add submeter requirements --- .../v2.2.0/exemplary_files/L200_Audit.xml | 20 ++++++++++++++++++ .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 21 +++++++++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 8 +++++-- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 12 ++++++++--- 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 269664f8..71591071 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -929,6 +929,26 @@ + + + + Electricity + 50 + Total lighting + + + diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index f112ee75..7a6da38c 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -1032,3 +1032,24 @@ def test_section_is_invalid_when_missing_required_links(self, section_occupancy_ # -- Assert self.assert_failure_messages(failures, expected_errors) + + +class TestL200AuditSubmeter(AssertFailureRolesMixin): + schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') + exemplary_file = os.path.join(v2_2_0_SCH_DIR, 'exemplary_files', 'L200_Audit.xml') + + def test_is_invalid_when_submeter_not_linked_to_parent(self): + # -- Setup + tree = etree.parse(self.exemplary_file) + + # remove the link to parent resource + remove_xpath = '/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse[auc:ParentResourceUseID][1]/auc:ParentResourceUseID' + remove_element(tree, remove_xpath) + + # -- Act + failures = validate_schematron(self.schematron, tree) + + # -- Assert + self.assert_failure_messages(failures, { + 'ERROR': ['ParentResourceUseID must point to a valid resource use'] + }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 856706c9..3a1ae2ff 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -323,8 +323,8 @@ "","","","","","","","","","auc:Quantity","","","" "","","","","","","","","","auc:LinkedPremises","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:ConveyanceSystems/auc:ConveyanceSystem/auc:LinkedPremises","false","","","//auc:Buildings/auc:Building[@ID = current()/auc:Building/auc:LinkedBuildingID/@IDref]","auc:ConveyanceSystem must be linked to an auc:Building","","" -"Historical Energy Use","ASHRAE 211 6.1.2","Monthly Utility Data","ASHRAE 211 6.1.2.1","Monthly Utility Data - Resource Uses","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses","true","","","auc:ResourceUse[auc:EnergyResource/text() = 'Electricity']","There must be at least one Electricity ResourceUse","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse","true","","","auc:EnergyResource","","","" +"Historical Energy Use","ASHRAE 211 6.1.2","Monthly Utility Data","ASHRAE 211 6.1.2.1","Monthly Utility Data - Resource Uses","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses","true","","","auc:ResourceUse[auc:EnergyResource/text() = 'Electricity' and auc:EndUse/text() = 'All end uses' and auc:UtilityIDs/auc:UtilityID]","There must be at least one Electricity ResourceUse","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse[auc:UtilityIDs/auc:UtilityID]","true","","","auc:EnergyResource","","","" "","","","","","","","","","auc:ResourceUseNotes","Resource use must include ResourceUseNotes for documenting irregularities in monthy energy use patterns","","" "","","","","","","","","","auc:EndUse/text() =""All end uses""","","","" "","","","","","","","","","auc:ResourceUnits","","","" @@ -339,6 +339,10 @@ "","","","","","","","","","count(auc:AnnualFuelUseLinkedTimeSeriesIDs/auc:LinkedTimeSeriesID) >= 12 ","","","" "","","","","","","","","","(auc:EnergyResource/text() != 'Electricity') or auc:PeakResourceUnits","","","" "","","","","","","","","","(auc:EnergyResource/text() != 'Electricity') or auc:AnnualPeakNativeUnits","","","" +"","","","","Monthly Utility Data - Submeters","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse[not(auc:UtilityIDs/auc:UtilityID)]","false","","","auc:EnergyResource","","","" +"","","","","","","","","","auc:EndUse","","","" +"","","","","","","","","","auc:PercentResource","","","" +"","","","","","","","","","//auc:ResourceUses/auc:ResourceUse[@ID = current()/auc:ParentResourceUseID/@IDref]","ParentResourceUseID must point to a valid resource use","","" "","","","","Monthly Utility Data - Time Series","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:TimeSeriesData/auc:TimeSeries","true","","","auc:IntervalFrequency/text() = 'Month'","TimeSeries data for ResourceUse must include a IntervalFrequency of Month","","" "","","","","","","","","","auc:ReadingType","TimeSeries data for ResourceUse must include a ReadingType","","" "","","","","","","","","","auc:StartTimestamp","TimeSeries data for ResourceUse must include a StartTimestamp","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 401424d4..c0c0e399 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -1007,7 +1007,7 @@ Document Structure Prerequisites Monthly Utility Data /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses - /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse[auc:UtilityIDs/auc:UtilityID] /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:TimeSeriesData/auc:TimeSeries /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse/auc:AnnualFuelUseLinkedTimeSeriesIDs/auc:LinkedTimeSeriesID @@ -1015,9 +1015,9 @@ Monthly Utility Data - There must be at least one Electricity ResourceUse + There must be at least one Electricity ResourceUse - + auc:EnergyResource Resource use must include ResourceUseNotes for documenting irregularities in monthy energy use patterns auc:EndUse/text() ="All end uses" @@ -1034,6 +1034,12 @@ (auc:EnergyResource/text() != 'Electricity') or auc:PeakResourceUnits (auc:EnergyResource/text() != 'Electricity') or auc:AnnualPeakNativeUnits + + auc:EnergyResource + auc:EndUse + auc:PercentResource + ParentResourceUseID must point to a valid resource use + TimeSeries data for ResourceUse must include a IntervalFrequency of Month TimeSeries data for ResourceUse must include a ReadingType From 296b1d6188cb0121cf65a2f0f4f6d35cba6c468a Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 8 Oct 2020 14:41:31 -0600 Subject: [PATCH 50/76] refactor(L200): add more submeter examples --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 71591071..b85b9d77 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -937,7 +937,7 @@ Total lighting - + From f8621eb171610d3a4d8d1cd39dd0ca68bf51ebfe Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 9 Oct 2020 13:06:17 -0600 Subject: [PATCH 51/76] feat(L200): add capacity requirements for condenser plants --- schematron/v2.2.0/tests/data/HVAC_example1.xml | 6 ++++++ schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.csv | 2 ++ schematron/v2.2.0/v2-2-0_L200_Audit.sch | 4 ++++ 4 files changed, 13 insertions(+) diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 078ed2b9..ee8be7ba 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -128,6 +128,8 @@ Cooling tower + 123 + gpm Good 2020 @@ -142,6 +144,8 @@ Stepped Speed + 123 + gpm Good 2020 @@ -157,6 +161,8 @@ Open loop ground water 1 + 123 + gpm Good 2020 diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 7a6da38c..75340703 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -465,6 +465,7 @@ def test_is_invalid_when_missing_year_installed(self, xpath_to_remove): ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)][1]/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)][1]/auc:OutputCapacity', 'auc:OutputCapacity'), + ('//auc:CondenserPlants/auc:CondenserPlant[1]/*/auc:Capacity', 'auc:Capacity'), ]) def test_is_invalid_when_missing_capacity(self, xpath_to_remove, expected_message): # -- Setup diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 3a1ae2ff..db77bbd8 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -151,6 +151,8 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:InputCapacity","","","" "","","","","","","","","","auc:OutputCapacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant/*[contains('AirCooled WaterCooled GroundSource GlycolCooledDryCooler', local-name())]","false","","","auc:Capacity","","","" +"","","","","","","","","","auc:CapacityUnits","","","" "HVAC Condition","ASHRAE 211 6.2.1.3 (a)","Condition","ASHRAE 211 6.2.1.3 (a)","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant","false","","","auc:HeatingPlantCondition","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","auc:CoolingPlantCondition","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","auc:CondenserPlantCondition","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index c0c0e399..2f3016c5 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -584,6 +584,10 @@ auc:OutputCapacity auc:CapacityUnits + + auc:Capacity + auc:CapacityUnits + Condition From 6d3a4d93335fd7e9b3c16afa7d52a2a56d79cdad Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 9 Oct 2020 13:16:28 -0600 Subject: [PATCH 52/76] refactor(L200): change plant requirement from output capacity to capacity --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 2 +- schematron/v2.2.0/tests/data/HVAC_example1.xml | 10 +++++----- schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py | 6 +++--- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 8 ++++---- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 8 ++++---- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index b85b9d77..5f43dd7f 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -339,7 +339,7 @@ 123 - 123 + 123 gpm Good diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index ee8be7ba..eb8caf7d 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -25,7 +25,7 @@ Condensing Single stage 123 - 123 + 123 gpm 123 COP @@ -46,7 +46,7 @@ Hot water - 123 + 123 gpm 123 COP @@ -64,7 +64,7 @@ - 123 + 123 gpm 123 COP @@ -186,7 +186,7 @@ 123 - 123 + 123 gpm Good @@ -208,7 +208,7 @@ 123 - 123 + 123 gpm Good diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 75340703..6cd3d18e 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -460,11 +460,11 @@ def test_is_invalid_when_missing_year_installed(self, xpath_to_remove): ('//auc:CoolingPlant/auc:DistrictChilledWater/auc:Capacity', 'auc:Capacity'), ('//auc:CoolingPlant/auc:Chiller/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingPlant/auc:Boiler/auc:InputCapacity', 'auc:InputCapacity'), - ('//auc:HeatingPlant/auc:DistrictHeating/auc:OutputCapacity', 'auc:OutputCapacity'), - ('//auc:HeatingPlant/auc:SolarThermal/auc:OutputCapacity', 'auc:OutputCapacity'), + ('//auc:HeatingPlant/auc:DistrictHeating/auc:Capacity', 'auc:Capacity'), + ('//auc:HeatingPlant/auc:SolarThermal/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)][1]/auc:Capacity', 'auc:Capacity'), - ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)][1]/auc:OutputCapacity', 'auc:OutputCapacity'), + ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)][1]/auc:Capacity', 'auc:Capacity'), ('//auc:CondenserPlants/auc:CondenserPlant[1]/*/auc:Capacity', 'auc:Capacity'), ]) def test_is_invalid_when_missing_capacity(self, xpath_to_remove, expected_message): diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index db77bbd8..e61bcdf2 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -138,18 +138,18 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant/auc:Chiller","false","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:Boiler","false","","","auc:InputCapacity","","","" -"","","","","","","","","","auc:OutputCapacity","","","" +"","","","","","","","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:DistrictHeating","false","","","auc:OutputCapacity","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:DistrictHeating","false","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:SolarThermal","false","","","auc:OutputCapacity","","","" +"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:SolarThermal","false","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]","false","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:InputCapacity","","","" -"","","","","","","","","","auc:OutputCapacity","","","" +"","","","","","","","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant/*[contains('AirCooled WaterCooled GroundSource GlycolCooledDryCooler', local-name())]","false","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 2f3016c5..1b299347 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -560,15 +560,15 @@ auc:InputCapacity - auc:OutputCapacity + auc:Capacity auc:CapacityUnits - auc:OutputCapacity + auc:Capacity auc:CapacityUnits - auc:OutputCapacity + auc:Capacity auc:CapacityUnits @@ -581,7 +581,7 @@ auc:InputCapacity - auc:OutputCapacity + auc:Capacity auc:CapacityUnits From 0a8339491f0d33d04980cbb9da014ef4302c9750 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 9 Oct 2020 13:37:34 -0600 Subject: [PATCH 53/76] feat(L200): require lighting systems to be linked to schedule --- .../v2.2.0/exemplary_files/L200_Audit.xml | 12 +- .../v2.2.0/tests/data/Lighting_example1.xml | 145 +++++++++++------- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 1 + schematron/v2.2.0/v2-2-0_L200_Audit.sch | 1 + 4 files changed, 103 insertions(+), 56 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 5f43dd7f..3ea654cf 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -454,8 +454,16 @@ false - - + + + + + + + + + + diff --git a/schematron/v2.2.0/tests/data/Lighting_example1.xml b/schematron/v2.2.0/tests/data/Lighting_example1.xml index 54b9d268..f3d0bd6b 100644 --- a/schematron/v2.2.0/tests/data/Lighting_example1.xml +++ b/schematron/v2.2.0/tests/data/Lighting_example1.xml @@ -1,58 +1,95 @@ - - - - - - - - true - - - - - - - - - - - - - Spiral - - - Standard Electronic - - .2 - - 100 - 123 - 123 - 1 - 1 - 1 - false - - - - - - - Photocell - Continuous - - - - false + + + + + + + + true + + + + + + + + + + + + + Spiral + + + Standard Electronic + + .2 + + 100 + 123 + 123 + 1 + 1 + 1 + false + + + + + + + Photocell + Continuous + + + + false + + + + + + + + + + + + + + + + + Weekday + Lighting + 09:00:00 + 17:00:00 + 80 + + + Weekend + Lighting + 09:00:00 + 17:00:00 + 80 + + + Holiday + Lighting + 09:00:00 + 17:00:00 + 80 + + - - - + + + - - - - - + + + + diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index e61bcdf2..c2ed85d0 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -301,6 +301,7 @@ "","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlSystemType","","","" "","","","","","","","","","auc:Controls/auc:Control/*/auc:ControlStrategy","","","" "","","","","","","","","","//auc:Sections/auc:Section[@ID = current()/auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref]","","","" +"","","","","","","","","","//auc:Schedules/auc:Schedule[@ID = current()/auc:LinkedPremises/auc:Section/auc:LinkedSectionID/auc:LinkedScheduleIDs/auc:LinkedScheduleID/@IDref]","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:LightingSystems/auc:LightingSystem/auc:LampType[auc:Incandescent or auc:LinearFluorescent or auc:CompactFluorescent or auc:Halogen or auc:HighIntensityDischarge or auc:SolidStateLighting]/*","false","","","auc:LampLabel","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:LightingSystems/auc:LightingSystem/auc:Controls/auc:Control[auc:Daylighting or auc:Occupancy]/*","false","","","auc:ControlSensor","","","" "","","Lighting with Ballast","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:LightingSystems/auc:LightingSystem[auc:BallastType != 'No ballast']","false","","","auc:NumberOfLampsPerBallast","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 1b299347..00dc6ccc 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -942,6 +942,7 @@ auc:Controls/auc:Control/*/auc:ControlSystemType auc:Controls/auc:Control/*/auc:ControlStrategy //auc:Sections/auc:Section[@ID = current()/auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref] + //auc:Schedules/auc:Schedule[@ID = current()/auc:LinkedPremises/auc:Section/auc:LinkedSectionID/auc:LinkedScheduleIDs/auc:LinkedScheduleID/@IDref] auc:LampLabel From c9f0959666b99a4f7bb8bd661154609df1c5f786 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Tue, 13 Oct 2020 09:39:57 -0600 Subject: [PATCH 54/76] feat(L200): require scenarios linked to building --- .../v2.2.0/exemplary_files/L200_Audit.xml | 22 +++++++++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 2 ++ schematron/v2.2.0/v2-2-0_L200_Audit.sch | 15 +++++++++++++ 3 files changed, 39 insertions(+) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 3ea654cf..5c817f54 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -1963,6 +1963,12 @@ 1.07 + + + + + + @@ -1982,6 +1988,11 @@ 123 + + + + + @@ -2004,6 +2015,12 @@ 123 + + + + + + @@ -2049,6 +2066,11 @@ 123 + + + + + diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index c2ed85d0..1b17091c 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -45,6 +45,8 @@ "","","","","","","","","","//auc:HVACSystem[auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref = current()/@ID]","auc:Section[auc:SectionType='Space function'] must have a linked auc:HVACSystem","","" "","","","","","","","","","//auc:LightingSystem[auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref = current()/@ID]/auc:LampType","auc:Section[auc:SectionType='Space function'] must have a linked auc:LightingSystem with auc:LampType defined","","" "","","","","","","","","","//auc:LightingSystem[auc:LinkedPremises/auc:Section/auc:LinkedSectionID/@IDref = current()/@ID]/auc:LampType//auc:LampLabel","auc:Section[auc:SectionType='Space function'] must have a linked auc:LightingSystem with auc:LampLabel defined","WARNING","" +"","","Scenarios","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario","true","","","auc:LinkedPremises/auc:Building/auc:LinkedBuildingID","","","" +"","","","","","","","","","//auc:Buildings/auc:Building[@ID = current()/auc:LinkedPremises/auc:Building/auc:LinkedBuildingID/@IDref]","Every auc:Scenario must be linked to an auc:Building through auc:LinkedPremises","","" "Schedules","ASHRAE 211 6.2.1.1 (e)","General Schedule Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Schedules/auc:Schedule/auc:ScheduleDetails","true","","","auc:ScheduleDetail","There shoudl be at least one auc:ScheduleDetail in every auc:ScheduleDetails","","" "","","","","","","","","","count(auc:ScheduleDetail/auc:ScheduleCategory) = count(auc:ScheduleDetail)","Every auc:ScheduleDetail should have an auc:ScheduleCategory","","" "","","","","","","","scheduleCategory","auc:ScheduleDetail[1]/auc:ScheduleCategory","count(auc:ScheduleDetail[auc:ScheduleCategory/text() = $scheduleCategory]) = count(auc:ScheduleDetail)","All auc:ScheduleDetail within an auc:ScheduleDetails should have the same auc:ScheduleCategory","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 00dc6ccc..7a073e35 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -8,6 +8,8 @@ + + @@ -231,6 +233,19 @@ auc:Section[auc:SectionType='Space function'] must have a linked auc:LightingSystem with auc:LampLabel defined + + Document Structure Prerequisites Scenarios + + /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario + + + + Scenarios + + auc:LinkedPremises/auc:Building/auc:LinkedBuildingID + Every auc:Scenario must be linked to an auc:Building through auc:LinkedPremises + + Document Structure Prerequisites General Schedule Requirements From ab6c31bb87be17ecd1213053674240296e863d1d Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Thu, 15 Oct 2020 09:58:24 -0400 Subject: [PATCH 55/76] feat: add clean_all arg to CLI tool; enable consistent xml file formatting --- buildingsch.py | 31 +++++++++++++++++++++++++++++++ tools/clean_xml.py | 20 ++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 tools/clean_xml.py diff --git a/buildingsch.py b/buildingsch.py index ade6f937..15116a2a 100755 --- a/buildingsch.py +++ b/buildingsch.py @@ -5,6 +5,7 @@ from tools.validate_sch import validate_schematron, print_failure from tools.generate_sch import generate_sch +from tools.clean_xml import clean_files def validate_schematrons(args): @@ -58,6 +59,33 @@ def generate_all_schematron(args): sys.exit(0) +def clean_all_files(args): + """ + Cleans all *.sch and *.xml files in the schematron directory. Cleaning consists of: + - Removing blank lines + - Two space indentation + - Serializing with doctype = ' + """ + base_dir = 'schematron/' + updated_files = [] + for root, _, files in os.walk(base_dir): + for name in files: + if not name.endswith('.xml') and not name.endswith('.sch'): + continue + filename = os.path.join(root, name) + updated = clean_files(filename) + if updated: + updated_files.append(filename) + + for file_ in updated_files: + print(file_) + # + # if args.dry_run and len(updated_files) > 0: + # print('Expected no files to be modified after generating Schematron. Update the Schematron by running `./buildingsch.py generate_all`') + # sys.exit(1) + sys.exit(0) + + # Construct Parsers parser = argparse.ArgumentParser(description='Tool for validating and generating Schematron documents') subparsers = parser.add_subparsers() @@ -145,6 +173,9 @@ def generate_all_schematron(args): ) parser_generate.set_defaults(func=generate_all_schematron) +parser_clean_all_files = subparsers.add_parser('clean_all', description='Command for formatting all *.xml and *.sch files') +parser_clean_all_files.set_defaults(func=clean_all_files) + # command with no sub-commands should just print help parser.set_defaults(func=lambda _: parser.print_help()) diff --git a/tools/clean_xml.py b/tools/clean_xml.py new file mode 100644 index 00000000..a3d3b678 --- /dev/null +++ b/tools/clean_xml.py @@ -0,0 +1,20 @@ +from lxml import etree + + +def clean_files(file_name): + """ + Cleans up a given xml file. If unable to parse due to XMLSyntaxError, skips file. + + :param file_name: str, path to an xml file to clean up + """ + parser = etree.XMLParser(remove_blank_text=True) + try: + tree = etree.parse(file_name, parser) + except etree.XMLSyntaxError: + print(f"Syntax Error, file not updated: {file_name}") + return False + etree.indent(tree) + output = etree.tostring(tree, doctype='', pretty_print=True) + with open(file_name, 'wb') as f: + f.write(output) + return output From a4e1cc4fd75adf10543165bbb2467f4978fea66f Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Thu, 15 Oct 2020 10:01:46 -0400 Subject: [PATCH 56/76] style: run cleanup --- schematron/lib/buildingElements.sch | 2 +- schematron/lib/contactElements.sch | 9 +- schematron/lib/floorElements.sch | 30 +- schematron/lib/id.sch | 12 +- schematron/lib/measureElements.sch | 2 +- schematron/lib/scenarioElements.sch | 17 +- schematron/lib/siteBuildingElements.sch | 9 +- schematron/lib/tests/data/ex01.xml | 2 +- .../L100_OpenStudio_Simulation_01.xml | 2 +- schematron/v2.0.0/examples/SEED_01.xml | 3 +- schematron/v2.0.0/v2-0-0_BRICR_SEED.sch | 64 -- .../v2-0-0_L100_OpenStudio_Simulation.sch | 15 +- schematron/v2.0.0/v2-0-0_SEED.sch | 4 +- schematron/v2.2.0/examples/L100_Audit_01.xml | 2 +- .../L100_OpenStudio_Simulation_01.xml | 2 +- schematron/v2.2.0/examples/SEED_01.xml | 3 +- .../exemplary_files/L000_Prelim_Analysis.xml | 11 +- .../v2.2.0/exemplary_files/L100_Audit.xml | 241 ++--- .../v2.2.0/exemplary_files/L200_Audit.xml | 353 +++---- schematron/v2.2.0/tests/data/DHW_example1.xml | 430 ++++---- .../v2.2.0/tests/data/HVAC_example1.xml | 932 +++++++++--------- .../v2.2.0/tests/data/Lighting_example1.xml | 185 ++-- .../v2.2.0/tests/data/Loads_example1.xml | 189 ++-- .../tests/data/Section_System_Links.xml | 202 ++-- schematron/v2.2.0/v2-2-0_BRICR_SEED.sch | 4 +- .../v2-2-0_L000_OpenStudio_Simulation.sch | 2 +- .../v2.2.0/v2-2-0_L000_Prelim_Analysis.sch | 2 +- schematron/v2.2.0/v2-2-0_L100_Audit.sch | 2 +- .../v2-2-0_L100_OpenStudio_Simulation.sch | 15 +- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 2 +- schematron/v2.2.0/v2-2-0_SEED.sch | 4 +- 31 files changed, 1284 insertions(+), 1468 deletions(-) diff --git a/schematron/lib/buildingElements.sch b/schematron/lib/buildingElements.sch index 3923fd85..f848bf53 100644 --- a/schematron/lib/buildingElements.sch +++ b/schematron/lib/buildingElements.sch @@ -60,7 +60,7 @@ element 'auc:StreetAddress' within element 'auc:Address/auc:StreetAddressDetail/auc:Simplified' is REQUIRED EXACTLY ONCE for: '' - + element 'auc:Latitude' within element 'auc:Address' is REQUIRED EXACTLY ONCE for: '' diff --git a/schematron/lib/contactElements.sch b/schematron/lib/contactElements.sch index 478b1d8f..93dfc3af 100644 --- a/schematron/lib/contactElements.sch +++ b/schematron/lib/contactElements.sch @@ -26,9 +26,12 @@ - element 'auc:Contact' is REQUIRED AT LEAST TWICE for: '’. Current number of occurrences: - element 'auc:Contact' with child element 'auc:ContactRoles/auc:ContactRole' with value 'Energy Auditor' is REQUIRED AT LEAST ONCE for: '’. Current number of occurrences: - element 'auc:Contact' with child element 'auc:ContactRoles/auc:ContactRole' with value 'Owner' is REQUIRED AT LEAST ONCE for: '’. Current number of occurrences: + element 'auc:Contact' is REQUIRED AT LEAST TWICE for: '’. Current number of occurrences: + + element 'auc:Contact' with child element 'auc:ContactRoles/auc:ContactRole' with value 'Energy Auditor' is REQUIRED AT LEAST ONCE for: '’. Current number of occurrences: + + element 'auc:Contact' with child element 'auc:ContactRoles/auc:ContactRole' with value 'Owner' is REQUIRED AT LEAST ONCE for: '’. Current number of occurrences: + - element 'auc:FloorAreaType' with value '' is REQUIRED EXACTLY ONCE within element 'auc:FloorArea' for ''. Currently occurs: + element 'auc:FloorAreaType' with value '' is REQUIRED EXACTLY ONCE within element 'auc:FloorArea' for ''. Currently occurs: + - + + + + + diff --git a/schematron/lib/scenarioElements.sch b/schematron/lib/scenarioElements.sch index 4f93dc6d..193655e2 100644 --- a/schematron/lib/scenarioElements.sch +++ b/schematron/lib/scenarioElements.sch @@ -48,18 +48,18 @@ --> - - - child element for 'auc:BenchmarkType' is REQUIRED AT LEAST ONCE for '’ + + + child element for 'auc:BenchmarkType' is REQUIRED AT LEAST ONCE for ' - element 'auc:BenchmarkTool' is REQUIRED EXACTLY ONCE for '’ + element 'auc:BenchmarkTool' is REQUIRED EXACTLY ONCE for ' - element 'auc:BenchmarkYear' is REQUIRED EXACTLY ONCE for '’ + element 'auc:BenchmarkYear' is REQUIRED EXACTLY ONCE for ' - elements 'auc:LinkedPremises/auc:Building/auc:LinkedBuildingID' is REQUIRED EXACTLY ONCE for '’ + elements 'auc:LinkedPremises/auc:Building/auc:LinkedBuildingID' is REQUIRED EXACTLY ONCE for ' @@ -87,17 +87,16 @@ '' ID = '' MUST HAVE EXACTLY ONE 'auc:ResourceUses' child element - + '' ID = '' MUST HAVE AT LEAST ONE 'auc:ResourceUses/auc:ResourceUse/auc:EnergyResource' - - - - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Address/auc:StreetAddressDetail/auc:Simplified/auc:StreetAddress" is REQUIRED - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Address/auc:City" is REQUIRED - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Address/auc:State" is REQUIRED - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Address/auc:PostalCode" is REQUIRED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Longitude" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Latitude" is RECOMMENDED - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building" is REQUIRED - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section/auc:OccupancyClassification" is REQUIRED - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:YearOfConstruction" is REQUIRED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:ConditionedFloorsAboveGrade" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:ConditionedFloorsBelowGrade" is RECOMMENDED - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:PremisesIdentifiers/auc:PremisesIdentifier[auc:IdentifierCustomName="City Custom Building ID"]/auc:IdentifierValue" is REQUIRED - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:PremisesIdentifiers/auc:PremisesIdentifier[auc:IdentifierCustomName="Custom ID 1"]/auc:IdentifierValue" is REQUIRED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType="Gross"]/auc:FloorAreaValue" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType="Net"]/auc:FloorAreaValue" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType="Footprint"]/auc:FloorAreaValue" is RECOMMENDED - - - - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/" is REQUIRED - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TechnologyCategories/auc:TechnologyCategory/*[1]" is REQUIRED - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TechnologyCategories/auc:TechnologyCategory/*[1]//auc:MeasureName" is REQUIRED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:ImplementationStatus" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:MeasureScaleOfApplication" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:SystemCategoryAffected" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:Recommended" is RECOMMENDED - - - - - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[@ID='Baseline']" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[@ID='Baseline']/auc:ScenarioType/auc:PackageOfMeasures/auc:ReferenceCase/@IDref" is RECOMMENDED to be "Baseline" - - - - - [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioName" is REQUIRED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:ReferenceCase" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsSiteEnergy" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsSourceEnergy" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsCost" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel[auc:EnergyResource="Electricity"]/auc:AnnualSavingsNativeUnits" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel[auc:EnergyResource="Natural gas"]/auc:AnnualSavingsNativeUnits" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:AllResourceTotals/auc:AllResourceTotal[auc:EndUse="All end uses"]/auc:SiteEnergyUse" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:AllResourceTotals/auc:AllResourceTotal[auc:EndUse="All end uses"]/auc:SiteEnergyUseIntensity" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:AllResourceTotals/auc:AllResourceTotal[auc:EndUse="All end uses"]/auc:SourceEnergyUse" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:AllResourceTotals/auc:AllResourceTotal[auc:EndUse="All end uses"]/auc:SourceEnergyUseIntensity" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse[auc:EnergyResource="Electricity"]/auc:AnnualFuelUseConsistentUnits" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse[auc:EnergyResource="Electricity"]/auc:AnnualPeakConsistentUnits" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse[auc:EnergyResource="Natural gas"]/auc:AnnualFuelUseConsistentUnits" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:CalculationMethod/auc:Modeled" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:MeasureIDs" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:TimeSeriesData/auc:TimeSeries" is RECOMMENDED - - - diff --git a/schematron/v2.0.0/v2-0-0_L100_OpenStudio_Simulation.sch b/schematron/v2.0.0/v2-0-0_L100_OpenStudio_Simulation.sch index 7f8769f9..5719096c 100644 --- a/schematron/v2.0.0/v2-0-0_L100_OpenStudio_Simulation.sch +++ b/schematron/v2.0.0/v2-0-0_L100_OpenStudio_Simulation.sch @@ -63,14 +63,14 @@ - + - + - + @@ -132,12 +132,12 @@ - + - + @@ -146,7 +146,7 @@ - + @@ -176,10 +176,9 @@ - - + diff --git a/schematron/v2.0.0/v2-0-0_SEED.sch b/schematron/v2.0.0/v2-0-0_SEED.sch index c1494d4a..5d28c9a9 100644 --- a/schematron/v2.0.0/v2-0-0_SEED.sch +++ b/schematron/v2.0.0/v2-0-0_SEED.sch @@ -57,8 +57,8 @@ element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse[auc:EnergyResource="Natural gas"]/auc:AnnualFuelUseConsistentUnits" is RECOMMENDED element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:CalculationMethod/auc:Modeled" is RECOMMENDED element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:MeasureIDs" is RECOMMENDED - element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse" is RECOMMENDED - element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:TimeSeriesData/auc:TimeSeries" is RECOMMENDED + element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse" is RECOMMENDED + element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:TimeSeriesData/auc:TimeSeries" is RECOMMENDED diff --git a/schematron/v2.2.0/examples/L100_Audit_01.xml b/schematron/v2.2.0/examples/L100_Audit_01.xml index 52bacd16..80520ded 100644 --- a/schematron/v2.2.0/examples/L100_Audit_01.xml +++ b/schematron/v2.2.0/examples/L100_Audit_01.xml @@ -1,4 +1,4 @@ - + diff --git a/schematron/v2.2.0/examples/L100_OpenStudio_Simulation_01.xml b/schematron/v2.2.0/examples/L100_OpenStudio_Simulation_01.xml index bafe7029..ceeff249 100644 --- a/schematron/v2.2.0/examples/L100_OpenStudio_Simulation_01.xml +++ b/schematron/v2.2.0/examples/L100_OpenStudio_Simulation_01.xml @@ -1,4 +1,4 @@ - + diff --git a/schematron/v2.2.0/examples/SEED_01.xml b/schematron/v2.2.0/examples/SEED_01.xml index 12bce6a2..39622004 100644 --- a/schematron/v2.2.0/examples/SEED_01.xml +++ b/schematron/v2.2.0/examples/SEED_01.xml @@ -1,5 +1,6 @@ + - + diff --git a/schematron/v2.2.0/exemplary_files/L000_Prelim_Analysis.xml b/schematron/v2.2.0/exemplary_files/L000_Prelim_Analysis.xml index 78bd0ab2..c57e4537 100644 --- a/schematron/v2.2.0/exemplary_files/L000_Prelim_Analysis.xml +++ b/schematron/v2.2.0/exemplary_files/L000_Prelim_Analysis.xml @@ -30,7 +30,6 @@ - @@ -39,17 +38,15 @@ - + - Electricity - @@ -58,14 +55,12 @@ 123 - - + - @@ -82,7 +77,7 @@ - + diff --git a/schematron/v2.2.0/exemplary_files/L100_Audit.xml b/schematron/v2.2.0/exemplary_files/L100_Audit.xml index 8bc2217f..ed522efc 100644 --- a/schematron/v2.2.0/exemplary_files/L100_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L100_Audit.xml @@ -13,7 +13,6 @@ Building Name - Problems or Needs @@ -37,7 +36,6 @@ ----------------- Other conditions causing unusual operating costs - @@ -51,11 +49,9 @@ GA 30161 - Mixed use commercial Office - 2 2 1 1 - true - @@ -91,21 +83,18 @@ 5502 - 1993 2018 2016 - Space function Office Office - @@ -114,21 +103,18 @@ 123 - 40 Hours per week - 30 Weeks per year - @@ -139,30 +125,25 @@ Conditioned 23 - - - - Packaged Terminal Air Conditioner - + - @@ -175,32 +156,28 @@ - + - 123 - + - - Air Distribution - @@ -208,18 +185,15 @@ - Low Cost Measure Name This measure does something cheap - Air Distribution - @@ -233,7 +207,6 @@ This measure does something expensive - @@ -242,7 +215,7 @@ - + @@ -281,10 +254,9 @@ 19.07 5029.59 - + - Natural gas @@ -316,10 +288,9 @@ 324 - + - Electricity-Onsite generated @@ -351,11 +322,10 @@ 543 - + - @@ -366,7 +336,7 @@ 2019-02-01T00:00:00 Month 4102.51 - + Total @@ -374,7 +344,7 @@ 2019-03-01T00:00:00 Month 3737.04 - + Total @@ -382,7 +352,7 @@ 2019-04-01T00:00:00 Month 4167.07 - + Total @@ -390,7 +360,7 @@ 2019-05-01T00:00:00 Month 3897.44 - + Total @@ -398,7 +368,7 @@ 2019-06-01T00:00:00 Month 4565.50 - + Total @@ -406,7 +376,7 @@ 2019-07-01T00:00:00 Month 4870.87 - + Total @@ -414,7 +384,7 @@ 2019-08-01T00:00:00 Month 4977.64 - + Total @@ -422,7 +392,7 @@ 2019-09-01T00:00:00 Month 5275.05 - + Total @@ -430,7 +400,7 @@ 2019-10-01T00:00:00 Month 4788.79 - + Total @@ -438,7 +408,7 @@ 2019-11-01T00:00:00 Month 4353.99 - + Total @@ -446,7 +416,7 @@ 2019-12-01T00:00:00 Month 4154.67 - + Total @@ -454,7 +424,7 @@ 2020-01-01T00:00:00 Month 4052.43 - + @@ -463,7 +433,7 @@ 2019-02-01T00:00:00 Month 14.78 - + Peak @@ -471,7 +441,7 @@ 2019-03-01T00:00:00 Month 14.12 - + Peak @@ -479,7 +449,7 @@ 2019-04-01T00:00:00 Month 14.36 - + Peak @@ -487,7 +457,7 @@ 2019-05-01T00:00:00 Month 15.14 - + Peak @@ -495,7 +465,7 @@ 2019-06-01T00:00:00 Month 16.41 - + Peak @@ -503,7 +473,7 @@ 2019-07-01T00:00:00 Month 17.51 - + Peak @@ -511,7 +481,7 @@ 2019-08-01T00:00:00 Month 18.14 - + Peak @@ -519,7 +489,7 @@ 2019-09-01T00:00:00 Month 19.07 - + Peak @@ -527,7 +497,7 @@ 2019-10-01T00:00:00 Month 17.85 - + Peak @@ -535,7 +505,7 @@ 2019-11-01T00:00:00 Month 16.54 - + Peak @@ -543,7 +513,7 @@ 2019-12-01T00:00:00 Month 15.19 - + Peak @@ -551,7 +521,7 @@ 2020-01-01T00:00:00 Month 15.05 - + @@ -560,7 +530,7 @@ 2019-02-01T00:00:00 Month 389.74 - + Cost @@ -568,7 +538,7 @@ 2019-03-01T00:00:00 Month 355.02 - + Cost @@ -576,7 +546,7 @@ 2019-04-01T00:00:00 Month 395.87 - + Cost @@ -584,7 +554,7 @@ 2019-05-01T00:00:00 Month 370.26 - + Cost @@ -592,7 +562,7 @@ 2019-06-01T00:00:00 Month 433.72 - + Cost @@ -600,7 +570,7 @@ 2019-07-01T00:00:00 Month 462.73 - + Cost @@ -608,7 +578,7 @@ 2019-08-01T00:00:00 Month 472.88 - + Cost @@ -616,7 +586,7 @@ 2019-09-01T00:00:00 Month 501.13 - + Cost @@ -624,7 +594,7 @@ 2019-10-01T00:00:00 Month 454.94 - + Cost @@ -632,7 +602,7 @@ 2019-11-01T00:00:00 Month 413.63 - + Cost @@ -640,7 +610,7 @@ 2019-12-01T00:00:00 Month 394.69 - + Cost @@ -648,9 +618,8 @@ 2020-01-01T00:00:00 Month 384.98 - + - Total @@ -658,7 +627,7 @@ 2019-02-01T00:00:00 Month 0.1 - + Total @@ -666,7 +635,7 @@ 2019-03-01T00:00:00 Month 0.05 - + Total @@ -674,7 +643,7 @@ 2019-04-01T00:00:00 Month 0.01 - + Total @@ -682,7 +651,7 @@ 2019-05-01T00:00:00 Month 0 - + Total @@ -690,7 +659,7 @@ 2019-06-01T00:00:00 Month 0 - + Total @@ -698,7 +667,7 @@ 2019-07-01T00:00:00 Month 0 - + Total @@ -706,7 +675,7 @@ 2019-08-01T00:00:00 Month 0 - + Total @@ -714,7 +683,7 @@ 2019-09-01T00:00:00 Month 0 - + Total @@ -722,7 +691,7 @@ 2019-10-01T00:00:00 Month 0 - + Total @@ -730,7 +699,7 @@ 2019-11-01T00:00:00 Month 0 - + Total @@ -738,7 +707,7 @@ 2019-12-01T00:00:00 Month 0 - + Total @@ -746,7 +715,7 @@ 2020-01-01T00:00:00 Month 0.06 - + @@ -755,7 +724,7 @@ 2019-02-01T00:00:00 Month 27 - + Cost @@ -763,7 +732,7 @@ 2019-03-01T00:00:00 Month 27 - + Cost @@ -771,7 +740,7 @@ 2019-04-01T00:00:00 Month 27 - + Cost @@ -779,7 +748,7 @@ 2019-05-01T00:00:00 Month 27 - + Cost @@ -787,7 +756,7 @@ 2019-06-01T00:00:00 Month 27 - + Cost @@ -795,7 +764,7 @@ 2019-07-01T00:00:00 Month 27 - + Cost @@ -803,7 +772,7 @@ 2019-08-01T00:00:00 Month 27 - + Cost @@ -811,7 +780,7 @@ 2019-09-01T00:00:00 Month 27 - + Cost @@ -819,7 +788,7 @@ 2019-10-01T00:00:00 Month 27 - + Cost @@ -827,7 +796,7 @@ 2019-11-01T00:00:00 Month 27 - + Cost @@ -835,7 +804,7 @@ 2019-12-01T00:00:00 Month 27 - + Cost @@ -843,9 +812,8 @@ 2020-01-01T00:00:00 Month 27 - + - @@ -854,7 +822,7 @@ 2019-02-01T00:00:00 Month 385 - + Total @@ -862,7 +830,7 @@ 2019-03-01T00:00:00 Month 436 - + Total @@ -870,7 +838,7 @@ 2019-04-01T00:00:00 Month 560 - + Total @@ -878,7 +846,7 @@ 2019-05-01T00:00:00 Month 532 - + Total @@ -886,7 +854,7 @@ 2019-06-01T00:00:00 Month 568 - + Total @@ -894,7 +862,7 @@ 2019-07-01T00:00:00 Month 590 - + Total @@ -902,7 +870,7 @@ 2019-08-01T00:00:00 Month 573 - + Total @@ -910,7 +878,7 @@ 2019-09-01T00:00:00 Month 543 - + Total @@ -918,7 +886,7 @@ 2019-10-01T00:00:00 Month 514 - + Total @@ -926,7 +894,7 @@ 2019-11-01T00:00:00 Month 461 - + Total @@ -934,7 +902,7 @@ 2019-12-01T00:00:00 Month 408 - + Total @@ -942,7 +910,7 @@ 2020-01-01T00:00:00 Month 359 - + @@ -952,7 +920,7 @@ 2019-02-01T00:00:00 Month 35 - + Cost @@ -960,7 +928,7 @@ 2019-03-01T00:00:00 Month 40 - + Cost @@ -968,7 +936,7 @@ 2019-04-01T00:00:00 Month 51 - + Cost @@ -976,7 +944,7 @@ 2019-05-01T00:00:00 Month 49 - + Cost @@ -984,7 +952,7 @@ 2019-06-01T00:00:00 Month 52 - + Cost @@ -992,7 +960,7 @@ 2019-07-01T00:00:00 Month 54 - + Cost @@ -1000,7 +968,7 @@ 2019-08-01T00:00:00 Month 53 - + Cost @@ -1008,7 +976,7 @@ 2019-09-01T00:00:00 Month 50 - + Cost @@ -1016,7 +984,7 @@ 2019-10-01T00:00:00 Month 47 - + Cost @@ -1024,7 +992,7 @@ 2019-11-01T00:00:00 Month 42 - + Cost @@ -1032,7 +1000,7 @@ 2019-12-01T00:00:00 Month 37 - + Cost @@ -1040,10 +1008,9 @@ 2020-01-01T00:00:00 Month 33 - + - @@ -1060,7 +1027,6 @@ - @@ -1079,21 +1045,19 @@ - - + Portfolio Manager 2020 75 - 123 @@ -1101,15 +1065,14 @@ - - + - + Low-Cost or No-Cost @@ -1123,11 +1086,9 @@ - - @@ -1147,13 +1108,10 @@ - 12345 - - @@ -1181,13 +1139,10 @@ - 12345 - - @@ -1217,16 +1172,13 @@ - 12345 - - + - @@ -1249,7 +1201,6 @@ - diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 5c817f54..63679adc 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -4,8 +4,7 @@ This file is intended to document all of the required elements and attributes for a Level 2 audit. --> - + @@ -14,7 +13,6 @@ Building Name - Problems or Needs @@ -38,7 +36,6 @@ ----------------- Other conditions causing unusual operating costs - @@ -52,11 +49,9 @@ GA 30161 - Mixed use commercial Office - 2 2 1 1 - true - true - Gross 5502 - + Conditioned 5502 - + - 123 123 0.2 0.1 - 1993 @@ -114,14 +102,12 @@ 2020-03-01 2016 - Space function Office Office - @@ -130,21 +116,18 @@ 123 - 40 Hours per week - 30 Weeks per year - @@ -155,16 +138,13 @@ Conditioned 23 - Single zone - Component Multifamily with commercial Other - @@ -173,21 +153,18 @@ 123 - 40 Hours per week - 30 Weeks per year - @@ -198,11 +175,9 @@ Conditioned 10 - Single zone - Whole building Rectangular @@ -297,14 +272,11 @@ - - - @@ -323,7 +295,7 @@ true - + @@ -346,7 +318,7 @@ - + @@ -357,7 +329,7 @@ - + @@ -376,15 +348,15 @@ - - + + 123 gpm - + @@ -399,7 +371,7 @@ Single Excellent - + @@ -409,19 +381,18 @@ - + - + - @@ -444,7 +415,7 @@ - + Photocell Continuous @@ -468,43 +439,38 @@ - Constant Volume - + - Stepped - + - Concrete poured 1 - Wood frame 1 - - + Steel Low e @@ -524,7 +490,6 @@ 0.5 - @@ -537,7 +502,6 @@ Concrete poured - @@ -546,19 +510,18 @@ - + - + - @@ -573,7 +536,6 @@ - @@ -586,7 +548,6 @@ - @@ -597,7 +558,6 @@ kW - Notes on the test conducted @@ -607,24 +567,22 @@ Blower door - + - Notes on the test conducted - + - @@ -652,7 +610,7 @@ - + @@ -682,7 +640,7 @@ - + @@ -712,7 +670,7 @@ - + @@ -742,26 +700,24 @@ - + - - - + + Air Distribution - @@ -769,7 +725,6 @@ - Individual system Low Cost Measure Name @@ -782,20 +737,18 @@ 2020-01-01 2020-12-01 - - - + + Air Distribution - @@ -816,7 +769,6 @@ 2020-12-01 - @@ -825,7 +777,7 @@ - + @@ -864,10 +816,9 @@ 19.07 5029.59 - + - Natural gas @@ -899,10 +850,9 @@ 324 - + - Electricity-Onsite generated @@ -934,10 +884,9 @@ 543 - + - Electricity @@ -958,7 +907,6 @@ - @@ -971,7 +919,7 @@ Day Month 4102.51 - + Total @@ -981,7 +929,7 @@ Day Month 3737.04 - + Total @@ -991,7 +939,7 @@ Day Month 4167.07 - + Total @@ -1001,7 +949,7 @@ Day Month 3897.44 - + Total @@ -1011,7 +959,7 @@ Day Month 4565.50 - + Total @@ -1021,7 +969,7 @@ Day Month 4870.87 - + Total @@ -1031,7 +979,7 @@ Day Month 4977.64 - + Total @@ -1041,7 +989,7 @@ Day Month 5275.05 - + Total @@ -1051,7 +999,7 @@ Day Month 4788.79 - + Total @@ -1061,7 +1009,7 @@ Day Month 4353.99 - + Total @@ -1071,7 +1019,7 @@ Day Month 4154.67 - + Total @@ -1081,7 +1029,7 @@ Day Month 4052.43 - + @@ -1093,7 +1041,7 @@ Day Month 14.78 - + Peak @@ -1104,7 +1052,7 @@ Day Month 14.12 - + Peak @@ -1115,7 +1063,7 @@ Day Month 14.36 - + Peak @@ -1126,7 +1074,7 @@ Day Month 15.14 - + Peak @@ -1137,7 +1085,7 @@ Day Month 16.41 - + Peak @@ -1148,7 +1096,7 @@ Day Month 17.51 - + Peak @@ -1159,7 +1107,7 @@ Day Month 18.14 - + Peak @@ -1170,7 +1118,7 @@ Day Month 19.07 - + Peak @@ -1181,7 +1129,7 @@ Day Month 17.85 - + Peak @@ -1192,7 +1140,7 @@ Day Month 16.54 - + Peak @@ -1203,7 +1151,7 @@ Day Month 15.19 - + Peak @@ -1214,7 +1162,7 @@ Day Month 15.05 - + @@ -1225,7 +1173,7 @@ Day Month 389.74 - + Cost @@ -1235,7 +1183,7 @@ Day Month 355.02 - + Cost @@ -1245,7 +1193,7 @@ Day Month 395.87 - + Cost @@ -1255,7 +1203,7 @@ Day Month 370.26 - + Cost @@ -1265,7 +1213,7 @@ Day Month 433.72 - + Cost @@ -1275,7 +1223,7 @@ Day Month 462.73 - + Cost @@ -1285,7 +1233,7 @@ Day Month 472.88 - + Cost @@ -1295,7 +1243,7 @@ Day Month 501.13 - + Cost @@ -1305,7 +1253,7 @@ Day Month 454.94 - + Cost @@ -1315,7 +1263,7 @@ Day Month 413.63 - + Cost @@ -1325,7 +1273,7 @@ Day Month 394.69 - + Cost @@ -1335,7 +1283,7 @@ Day Month 384.98 - + @@ -1346,7 +1294,7 @@ Day Month 0.373 - + Load factor @@ -1356,7 +1304,7 @@ Day Month 0.394 - + Load factor @@ -1366,7 +1314,7 @@ Day Month 0.390 - + Load factor @@ -1376,7 +1324,7 @@ Day Month 0.358 - + Load factor @@ -1386,7 +1334,7 @@ Day Month 0.374 - + Load factor @@ -1396,7 +1344,7 @@ Day Month 0.386 - + Load factor @@ -1406,7 +1354,7 @@ Day Month 0.369 - + Load factor @@ -1416,7 +1364,7 @@ Day Month 0.372 - + Load factor @@ -1426,7 +1374,7 @@ Day Month 0.373 - + Load factor @@ -1436,7 +1384,7 @@ Day Month 0.354 - + Load factor @@ -1446,7 +1394,7 @@ Day Month 0.380 - + Load factor @@ -1456,9 +1404,8 @@ Day Month 0.362 - + - Total @@ -1468,7 +1415,7 @@ Day Month 0.1 - + Total @@ -1478,7 +1425,7 @@ Day Month 0.05 - + Total @@ -1488,7 +1435,7 @@ Day Month 0.01 - + Total @@ -1498,7 +1445,7 @@ Day Month 0 - + Total @@ -1508,7 +1455,7 @@ Day Month 0 - + Total @@ -1518,7 +1465,7 @@ Day Month 0 - + Total @@ -1528,7 +1475,7 @@ Day Month 0 - + Total @@ -1538,7 +1485,7 @@ Day Month 0 - + Total @@ -1548,7 +1495,7 @@ Day Month 0 - + Total @@ -1558,7 +1505,7 @@ Day Month 0 - + Total @@ -1568,7 +1515,7 @@ Day Month 0 - + Total @@ -1578,7 +1525,7 @@ Day Month 0.06 - + @@ -1589,7 +1536,7 @@ Day Month 27 - + Cost @@ -1599,7 +1546,7 @@ Day Month 27 - + Cost @@ -1609,7 +1556,7 @@ Day Month 27 - + Cost @@ -1619,7 +1566,7 @@ Day Month 27 - + Cost @@ -1629,7 +1576,7 @@ Day Month 27 - + Cost @@ -1639,7 +1586,7 @@ Day Month 27 - + Cost @@ -1649,7 +1596,7 @@ Day Month 27 - + Cost @@ -1659,7 +1606,7 @@ Day Month 27 - + Cost @@ -1669,7 +1616,7 @@ Day Month 27 - + Cost @@ -1679,7 +1626,7 @@ Day Month 27 - + Cost @@ -1689,7 +1636,7 @@ Day Month 27 - + Cost @@ -1699,9 +1646,8 @@ Day Month 27 - + - @@ -1712,7 +1658,7 @@ Day Month 385 - + Total @@ -1722,7 +1668,7 @@ Day Month 436 - + Total @@ -1732,7 +1678,7 @@ Day Month 560 - + Total @@ -1742,7 +1688,7 @@ Day Month 532 - + Total @@ -1752,7 +1698,7 @@ Day Month 568 - + Total @@ -1762,7 +1708,7 @@ Day Month 590 - + Total @@ -1772,7 +1718,7 @@ Day Month 573 - + Total @@ -1782,7 +1728,7 @@ Day Month 543 - + Total @@ -1792,7 +1738,7 @@ Day Month 514 - + Total @@ -1802,7 +1748,7 @@ Day Month 461 - + Total @@ -1812,7 +1758,7 @@ Day Month 408 - + Total @@ -1822,7 +1768,7 @@ Day Month 359 - + @@ -1834,7 +1780,7 @@ Day Month 35 - + Cost @@ -1844,7 +1790,7 @@ Day Month 40 - + Cost @@ -1854,7 +1800,7 @@ Day Month 51 - + Cost @@ -1864,7 +1810,7 @@ Day Month 49 - + Cost @@ -1874,7 +1820,7 @@ Day Month 52 - + Cost @@ -1884,7 +1830,7 @@ Day Month 54 - + Cost @@ -1894,7 +1840,7 @@ Day Month 53 - + Cost @@ -1904,7 +1850,7 @@ Day Month 50 - + Cost @@ -1914,7 +1860,7 @@ Day Month 47 - + Cost @@ -1924,7 +1870,7 @@ Day Month 42 - + Cost @@ -1934,7 +1880,7 @@ Day Month 37 - + Cost @@ -1944,10 +1890,9 @@ Day Month 33 - + - @@ -1963,14 +1908,12 @@ 1.07 - - + - @@ -1990,47 +1933,43 @@ - + - - + Portfolio Manager 2020 75 - 123 123 - - + - - + - + Low-Cost or No-Cost 123 @@ -2068,16 +2007,14 @@ - + - - @@ -2097,19 +2034,14 @@ - 12345 - 12345 - Building Owner - - @@ -2137,19 +2069,14 @@ - 12345 - 12345 - Building Owner - - @@ -2179,22 +2106,17 @@ - 12345 - 12345 - Building Owner - - + - @@ -2217,7 +2139,6 @@ - diff --git a/schematron/v2.2.0/tests/data/DHW_example1.xml b/schematron/v2.2.0/tests/data/DHW_example1.xml index 9967eea3..b048b531 100644 --- a/schematron/v2.2.0/tests/data/DHW_example1.xml +++ b/schematron/v2.2.0/tests/data/DHW_example1.xml @@ -2,222 +2,222 @@ - - - - + + + + - - - - - - - - - - - - - Condensing - - - - - 123 - .5 - 123 - 123 - 123 - - - Notes - - 1 - 123 - Continuous - 123 - .5 - - Looped - Thermal Efficiency - .5 - 123 - 123 - 123 - 123 - gpm - - - - - - - - - - Electricity - Excellent - - - - - - 1 - - - - - - - - - .5 - - - - - 123 - .5 - 123 - 123 - 123 - - - Notes - - 1 - 123 - Continuous - 123 - .5 - - Looped - Thermal Efficiency - .5 - 123 - 123 - 123 - 123 - gpm - - - - - - - - - - Electricity - Excellent - - - - - - 1 - - - - - - - - - Hot water - Single glazing black - - - - - 123 - .5 - 123 - 123 - 123 - - - Notes - - 1 - 123 - Continuous - 123 - .5 - - Looped - Thermal Efficiency - .5 - 123 - 123 - 123 - 123 - gpm - - - - - - - - - - Electricity - Excellent - - - - - - 1 - - - - - - - Condensing - - - - - Notes - - 1 - 123 - Continuous - 123 - .5 - - Looped - Thermal Efficiency - .5 - 123 - 123 - 123 - 123 - gpm - - - - - - - - - - Electricity - Excellent - - - - - - 1 - - - + + + + + + + + + + + + + Condensing + + + + + 123 + .5 + 123 + 123 + 123 + + + Notes + + 1 + 123 + Continuous + 123 + .5 + + Looped + Thermal Efficiency + .5 + 123 + 123 + 123 + 123 + gpm + + + + + + + + + + Electricity + Excellent + + + + + + 1 + + + + + + + + + .5 + + + + + 123 + .5 + 123 + 123 + 123 + + + Notes + + 1 + 123 + Continuous + 123 + .5 + + Looped + Thermal Efficiency + .5 + 123 + 123 + 123 + 123 + gpm + + + + + + + + + + Electricity + Excellent + + + + + + 1 + + + + + + + + + Hot water + Single glazing black + + + + + 123 + .5 + 123 + 123 + 123 + + + Notes + + 1 + 123 + Continuous + 123 + .5 + + Looped + Thermal Efficiency + .5 + 123 + 123 + 123 + 123 + gpm + + + + + + + + + + Electricity + Excellent + + + + + + 1 + + + + + + + Condensing + + + + + Notes + + 1 + 123 + Continuous + 123 + .5 + + Looped + Thermal Efficiency + .5 + 123 + 123 + 123 + 123 + gpm + + + + + + + + + + Electricity + Excellent + + + + + + 1 + + + diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index eb8caf7d..8d9f9845 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -2,472 +2,472 @@ - - - - - true - - - - - - - - - - - - - - - Steam - Condensing - Single stage - 123 - 123 - gpm - 123 - COP - 123 - 123 - 1 - - Good - 2020 - Natural gas - true - - - - - - - - - Hot water - 123 - gpm - 123 - COP - 1 - - Good - 2020 - Electricity - true - - - - - - - - - 123 - gpm - 123 - COP - 1 - - Good - 2020 - true - - - - - - - - - - - 123 - COP - 123 - gpm - - Good - 2020 - Other - true - - - - - - - - - Absorption - Reciprocating - Multiple discrete stages - 2 - 123 - Other - Single effect - 123 - COP - 123 - gpm - 1 - - Good - 2020 - Other - true - - - - - - - - - - - Cooling tower - 123 - gpm - - Good - 2020 - Electricity - true - - - - - - - - - Stepped Speed - 123 - gpm - - Good - 2020 - Electricity - true - - - - - - - - - Open loop ground water - 1 - 123 - gpm - - Good - 2020 - Electricity - true - - - - - - - - - - Single zone - - - - - Warm air - - - 123 - 123 - gpm - Good - - - - - - - - - - 2020 - - - - - Packaged Terminal - Unknown - - - 123 - 123 - gpm - Good - - - - - - - - - - 2020 - - - - - - - Packaged terminal air conditioner (PTAC) - Screw - Modulating - - - 123 - gpm - Good - - - - - - - - - - 2020 - - - - - Direct - - - 123 - gpm - Good - - - - - - - - - - 2020 - - - - - - - Central fan - CAV terminal box no reheat - Heating plant - Single Maximum - - - - None - Fixed - - - - - - - 123 - gpm - - - - - - - - - - 2020 - 1 - Good - - - - - - - - Mini-split - 1 pipe - - - - - - - - 123 - gpm - - - - - - - - - - 2020 - 1 - Good - - - - - - Chilled beam - - - - - - 123 - gpm - - - - - - - - - - 2020 - 1 - Good - - - - - - Radiator - - - - - - 123 - gpm - - - - - - - - - - 2020 - 1 - Good - - - - - - Single - Excellent - - - - - - Digital - - - - - - - - - - - Constant Volume - - - - - - Constant Volume - - - - - - Constant Volume - - - - - - Constant Volume - - - - - - Constant Volume - - - - - - Constant Volume - - - - - - Constant Volume - - - - - - Constant Volume - - - - - - - - Stepped - - - - - - - - .5 - Heat pipe - - - - - + + + + + true + + + + + + + + + + + + + + + Steam + Condensing + Single stage + 123 + 123 + gpm + 123 + COP + 123 + 123 + 1 + + Good + 2020 + Natural gas + true + + + + + + + + + Hot water + 123 + gpm + 123 + COP + 1 + + Good + 2020 + Electricity + true + + + + + + + + + 123 + gpm + 123 + COP + 1 + + Good + 2020 + true + + + + + + + + + + + 123 + COP + 123 + gpm + + Good + 2020 + Other + true + + + + + + + + + Absorption + Reciprocating + Multiple discrete stages + 2 + 123 + Other + Single effect + 123 + COP + 123 + gpm + 1 + + Good + 2020 + Other + true + + + + + + + + + + + Cooling tower + 123 + gpm + + Good + 2020 + Electricity + true + + + + + + + + + Stepped Speed + 123 + gpm + + Good + 2020 + Electricity + true + + + + + + + + + Open loop ground water + 1 + 123 + gpm + + Good + 2020 + Electricity + true + + + + + + + + + + Single zone + + + + + Warm air + + + 123 + 123 + gpm + Good + + + + + + + + + + 2020 + + + + + Packaged Terminal + Unknown + + + 123 + 123 + gpm + Good + + + + + + + + + + 2020 + + + + + + + Packaged terminal air conditioner (PTAC) + Screw + Modulating + + + 123 + gpm + Good + + + + + + + + + + 2020 + + + + + Direct + + + 123 + gpm + Good + + + + + + + + + + 2020 + + + + + + + Central fan + CAV terminal box no reheat + Heating plant + Single Maximum + + + + None + Fixed + + + + + + + 123 + gpm + + + + + + + + + + 2020 + 1 + Good + + + + + + + + Mini-split + 1 pipe + + + + + + + + 123 + gpm + + + + + + + + + + 2020 + 1 + Good + + + + + + Chilled beam + + + + + + 123 + gpm + + + + + + + + + + 2020 + 1 + Good + + + + + + Radiator + + + + + + 123 + gpm + + + + + + + + + + 2020 + 1 + Good + + + + + + Single + Excellent + + + + + + Digital + + + + + + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + Constant Volume + + + + + + + + Stepped + + + + + + + + .5 + Heat pipe + + + + + diff --git a/schematron/v2.2.0/tests/data/Lighting_example1.xml b/schematron/v2.2.0/tests/data/Lighting_example1.xml index f3d0bd6b..eecd94bc 100644 --- a/schematron/v2.2.0/tests/data/Lighting_example1.xml +++ b/schematron/v2.2.0/tests/data/Lighting_example1.xml @@ -1,95 +1,94 @@ - - - - - - - - true - - - - - - - - - - - - - Spiral - - - Standard Electronic - - .2 - - 100 - 123 - 123 - 1 - 1 - 1 - false - - - - - - - Photocell - Continuous - - - - false - - - - - - - - - - - - - - - - - Weekday - Lighting - 09:00:00 - 17:00:00 - 80 - - - Weekend - Lighting - 09:00:00 - 17:00:00 - 80 - - - Holiday - Lighting - 09:00:00 - 17:00:00 - 80 - - - - - - - - - - - + + + + + + + + true + + + + + + + + + + + + + Spiral + + + Standard Electronic + + .2 + + 100 + 123 + 123 + 1 + 1 + 1 + false + + + + + + + Photocell + Continuous + + + + false + + + + + + + + + + + + + + + + + Weekday + Lighting + 09:00:00 + 17:00:00 + 80 + + + Weekend + Lighting + 09:00:00 + 17:00:00 + 80 + + + Holiday + Lighting + 09:00:00 + 17:00:00 + 80 + + + + + + + + + + + diff --git a/schematron/v2.2.0/tests/data/Loads_example1.xml b/schematron/v2.2.0/tests/data/Loads_example1.xml index 1d283935..c46ecd9f 100644 --- a/schematron/v2.2.0/tests/data/Loads_example1.xml +++ b/schematron/v2.2.0/tests/data/Loads_example1.xml @@ -1,97 +1,96 @@ - - - - - - - - - - - - - - - - - - 123 - - - - - - - - - - - - - - Gaming/Hobby/Leisure - 123 - - - - - - - - - - 1 - - - - - Escalator - People - 123 - Excellent - 1 - - - - - - - - - - - - - Weekday - Miscellaneous equipment - 09:00:00 - 17:00:00 - 80 - - - Weekend - Miscellaneous equipment - 09:00:00 - 17:00:00 - 80 - - - Holiday - Miscellaneous equipment - 09:00:00 - 17:00:00 - 80 - - - - - - - - - - - + + + + + + + + + + + + + + + + + + 123 + + + + + + + + + + + + + + Gaming/Hobby/Leisure + 123 + + + + + + + + + + 1 + + + + + Escalator + People + 123 + Excellent + 1 + + + + + + + + + + + + + Weekday + Miscellaneous equipment + 09:00:00 + 17:00:00 + 80 + + + Weekend + Miscellaneous equipment + 09:00:00 + 17:00:00 + 80 + + + Holiday + Miscellaneous equipment + 09:00:00 + 17:00:00 + 80 + + + + + + + + + + + diff --git a/schematron/v2.2.0/tests/data/Section_System_Links.xml b/schematron/v2.2.0/tests/data/Section_System_Links.xml index bd3e761c..ca06bfcf 100644 --- a/schematron/v2.2.0/tests/data/Section_System_Links.xml +++ b/schematron/v2.2.0/tests/data/Section_System_Links.xml @@ -1,104 +1,104 @@ - - - - - - - - - Space function - Manufactured home - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + Space function + Manufactured home + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/schematron/v2.2.0/v2-2-0_BRICR_SEED.sch b/schematron/v2.2.0/v2-2-0_BRICR_SEED.sch index 7dbcfd53..f9d9068a 100644 --- a/schematron/v2.2.0/v2-2-0_BRICR_SEED.sch +++ b/schematron/v2.2.0/v2-2-0_BRICR_SEED.sch @@ -57,8 +57,8 @@ [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse[auc:EnergyResource="Natural gas"]/auc:AnnualFuelUseConsistentUnits" is RECOMMENDED [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:CalculationMethod/auc:Modeled" is RECOMMENDED [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:MeasureIDs" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse" is RECOMMENDED - [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:TimeSeriesData/auc:TimeSeries" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:TimeSeriesData/auc:TimeSeries" is RECOMMENDED diff --git a/schematron/v2.2.0/v2-2-0_L000_OpenStudio_Simulation.sch b/schematron/v2.2.0/v2-2-0_L000_OpenStudio_Simulation.sch index cad1e5e2..78c423db 100644 --- a/schematron/v2.2.0/v2-2-0_L000_OpenStudio_Simulation.sch +++ b/schematron/v2.2.0/v2-2-0_L000_OpenStudio_Simulation.sch @@ -1,4 +1,4 @@ - + diff --git a/schematron/v2.2.0/v2-2-0_L000_Prelim_Analysis.sch b/schematron/v2.2.0/v2-2-0_L000_Prelim_Analysis.sch index 9f793d72..f4e9360d 100644 --- a/schematron/v2.2.0/v2-2-0_L000_Prelim_Analysis.sch +++ b/schematron/v2.2.0/v2-2-0_L000_Prelim_Analysis.sch @@ -1,4 +1,4 @@ - + diff --git a/schematron/v2.2.0/v2-2-0_L100_Audit.sch b/schematron/v2.2.0/v2-2-0_L100_Audit.sch index a786695e..2a6ca929 100644 --- a/schematron/v2.2.0/v2-2-0_L100_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L100_Audit.sch @@ -1,4 +1,4 @@ - + diff --git a/schematron/v2.2.0/v2-2-0_L100_OpenStudio_Simulation.sch b/schematron/v2.2.0/v2-2-0_L100_OpenStudio_Simulation.sch index e0993883..2ae61b55 100644 --- a/schematron/v2.2.0/v2-2-0_L100_OpenStudio_Simulation.sch +++ b/schematron/v2.2.0/v2-2-0_L100_OpenStudio_Simulation.sch @@ -63,14 +63,14 @@ - + - + - + @@ -132,12 +132,12 @@ - + - + @@ -146,7 +146,7 @@ - + @@ -176,10 +176,9 @@ - - + diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 7a073e35..6eab40f8 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -1,4 +1,4 @@ - + diff --git a/schematron/v2.2.0/v2-2-0_SEED.sch b/schematron/v2.2.0/v2-2-0_SEED.sch index d3cb4e8d..1d594821 100644 --- a/schematron/v2.2.0/v2-2-0_SEED.sch +++ b/schematron/v2.2.0/v2-2-0_SEED.sch @@ -134,10 +134,10 @@ [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:MeasureIDs" is RECOMMENDED - + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse" is RECOMMENDED - + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:TimeSeriesData/auc:TimeSeries" is RECOMMENDED From af97fac78000bb3e041c52a24f084fdffd98224a Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Thu, 15 Oct 2020 10:08:38 -0400 Subject: [PATCH 57/76] fix: add back content to deleted file, tests passing --- schematron/v2.0.0/v2-0-0_BRICR_SEED.sch | 64 +++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/schematron/v2.0.0/v2-0-0_BRICR_SEED.sch b/schematron/v2.0.0/v2-0-0_BRICR_SEED.sch index e69de29b..f9d9068a 100644 --- a/schematron/v2.0.0/v2-0-0_BRICR_SEED.sch +++ b/schematron/v2.0.0/v2-0-0_BRICR_SEED.sch @@ -0,0 +1,64 @@ + + + BRICR + + + + + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Address/auc:StreetAddressDetail/auc:Simplified/auc:StreetAddress" is REQUIRED + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Address/auc:City" is REQUIRED + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Address/auc:State" is REQUIRED + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Address/auc:PostalCode" is REQUIRED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Longitude" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Latitude" is RECOMMENDED + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building" is REQUIRED + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section/auc:OccupancyClassification" is REQUIRED + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:YearOfConstruction" is REQUIRED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:ConditionedFloorsAboveGrade" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:ConditionedFloorsBelowGrade" is RECOMMENDED + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:PremisesIdentifiers/auc:PremisesIdentifier[auc:IdentifierCustomName="City Custom Building ID"]/auc:IdentifierValue" is REQUIRED + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:PremisesIdentifiers/auc:PremisesIdentifier[auc:IdentifierCustomName="Custom ID 1"]/auc:IdentifierValue" is REQUIRED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType="Gross"]/auc:FloorAreaValue" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType="Net"]/auc:FloorAreaValue" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:FloorAreas/auc:FloorArea[auc:FloorAreaType="Footprint"]/auc:FloorAreaValue" is RECOMMENDED + + + + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/" is REQUIRED + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TechnologyCategories/auc:TechnologyCategory/*[1]" is REQUIRED + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:TechnologyCategories/auc:TechnologyCategory/*[1]//auc:MeasureName" is REQUIRED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:ImplementationStatus" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:MeasureScaleOfApplication" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:SystemCategoryAffected" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Measures/auc:Measure/auc:Recommended" is RECOMMENDED + + + + + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[@ID='Baseline']" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[@ID='Baseline']/auc:ScenarioType/auc:PackageOfMeasures/auc:ReferenceCase/@IDref" is RECOMMENDED to be "Baseline" + + + + + [ERROR] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioName" is REQUIRED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:ReferenceCase" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsSiteEnergy" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsSourceEnergy" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsCost" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel[auc:EnergyResource="Electricity"]/auc:AnnualSavingsNativeUnits" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:AnnualSavingsByFuels/auc:AnnualSavingsByFuel[auc:EnergyResource="Natural gas"]/auc:AnnualSavingsNativeUnits" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:AllResourceTotals/auc:AllResourceTotal[auc:EndUse="All end uses"]/auc:SiteEnergyUse" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:AllResourceTotals/auc:AllResourceTotal[auc:EndUse="All end uses"]/auc:SiteEnergyUseIntensity" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:AllResourceTotals/auc:AllResourceTotal[auc:EndUse="All end uses"]/auc:SourceEnergyUse" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:AllResourceTotals/auc:AllResourceTotal[auc:EndUse="All end uses"]/auc:SourceEnergyUseIntensity" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse[auc:EnergyResource="Electricity"]/auc:AnnualFuelUseConsistentUnits" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse[auc:EnergyResource="Electricity"]/auc:AnnualPeakConsistentUnits" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse[auc:EnergyResource="Natural gas"]/auc:AnnualFuelUseConsistentUnits" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:CalculationMethod/auc:Modeled" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ScenarioType/auc:PackageOfMeasures/auc:MeasureIDs" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:ResourceUses/auc:ResourceUse" is RECOMMENDED + [WARNING] element "/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario/auc:TimeSeriesData/auc:TimeSeries" is RECOMMENDED + + + From 5197247543f432226fd50026bc876b96290c06f9 Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Thu, 15 Oct 2020 10:16:08 -0400 Subject: [PATCH 58/76] fix: doctype declaration in generate_sch function --- tools/generate_sch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/generate_sch.py b/tools/generate_sch.py index 6c9ef3a1..56994889 100644 --- a/tools/generate_sch.py +++ b/tools/generate_sch.py @@ -304,7 +304,7 @@ def generate_sch(csv_file, output_file=None, exemplary_xml_file=None, dry_run=Fa for pattern in collected_patterns: root.append(pattern) - sch_bytes = etree.tostring(root, pretty_print=True, xml_declaration=True) + sch_bytes = etree.tostring(root, doctype='', pretty_print=True) if output_file is None: output_file = f'{os.path.splitext(csv_file)[0]}.sch' From 0033e68132b95776b3c17eaf94f9e47fe29ed598 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 15 Oct 2020 09:23:43 -0600 Subject: [PATCH 59/76] refactor(tools): add clean_file to pre-commit --- .pre-commit-config.yaml | 7 +++++++ buildingsch.py | 20 ++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e842266c..170a3990 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,3 +39,10 @@ repos: hooks: - id: flake8 args: ['--ignore=E501,E402,W503,W504,E731,F401'] + - repo: local + hooks: + - id: format-xml + name: format xml and sch files + language: system + entry: python buildingsch.py clean_all + files: ^.*.(xml|sch)$ diff --git a/buildingsch.py b/buildingsch.py index 15116a2a..b65513a2 100755 --- a/buildingsch.py +++ b/buildingsch.py @@ -59,6 +59,10 @@ def generate_all_schematron(args): sys.exit(0) +def _clean_file(args): + clean_files(args.filename) + + def clean_all_files(args): """ Cleans all *.sch and *.xml files in the schematron directory. Cleaning consists of: @@ -79,10 +83,7 @@ def clean_all_files(args): for file_ in updated_files: print(file_) - # - # if args.dry_run and len(updated_files) > 0: - # print('Expected no files to be modified after generating Schematron. Update the Schematron by running `./buildingsch.py generate_all`') - # sys.exit(1) + sys.exit(0) @@ -173,6 +174,17 @@ def clean_all_files(args): ) parser_generate.set_defaults(func=generate_all_schematron) +# Clean command +parser_clean_file = subparsers.add_parser('clean', description='Command for formatting a single *.xml or *.sch file') +parser_generate.add_argument( + 'filename', + metavar='filename', + type=str, + help='File to clean', +) +parser_clean_file.set_defaults(func=_clean_file) + +# Clean all command parser_clean_all_files = subparsers.add_parser('clean_all', description='Command for formatting all *.xml and *.sch files') parser_clean_all_files.set_defaults(func=clean_all_files) From 3ae85f75172d3bbdc2845b83256ad9477c568982 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 15 Oct 2020 09:32:01 -0600 Subject: [PATCH 60/76] chore: delete empty example xml file --- schematron/v2.2.0/examples/L100_OpenStudio_Simulation_02.xml | 1 - 1 file changed, 1 deletion(-) delete mode 100644 schematron/v2.2.0/examples/L100_OpenStudio_Simulation_02.xml diff --git a/schematron/v2.2.0/examples/L100_OpenStudio_Simulation_02.xml b/schematron/v2.2.0/examples/L100_OpenStudio_Simulation_02.xml deleted file mode 100644 index 2b5d4116..00000000 --- a/schematron/v2.2.0/examples/L100_OpenStudio_Simulation_02.xml +++ /dev/null @@ -1 +0,0 @@ - From f8dcab02dfaa7479846003c57c5d5caace1a7ec7 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 15 Oct 2020 09:45:31 -0600 Subject: [PATCH 61/76] refactor: add pre-commit to tox --- .pre-commit-config.yaml | 2 +- buildingsch.py | 18 ++++++++++-------- tox.ini | 6 ++++++ 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 170a3990..36b7bb07 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -44,5 +44,5 @@ repos: - id: format-xml name: format xml and sch files language: system - entry: python buildingsch.py clean_all + entry: python buildingsch.py clean files: ^.*.(xml|sch)$ diff --git a/buildingsch.py b/buildingsch.py index b65513a2..48c5fe47 100755 --- a/buildingsch.py +++ b/buildingsch.py @@ -59,8 +59,9 @@ def generate_all_schematron(args): sys.exit(0) -def _clean_file(args): - clean_files(args.filename) +def _clean_files(args): + for filename in args.filenames: + clean_files(filename) def clean_all_files(args): @@ -175,14 +176,15 @@ def clean_all_files(args): parser_generate.set_defaults(func=generate_all_schematron) # Clean command -parser_clean_file = subparsers.add_parser('clean', description='Command for formatting a single *.xml or *.sch file') -parser_generate.add_argument( - 'filename', - metavar='filename', +parser_clean_files = subparsers.add_parser('clean', description='Command for formatting one ore more *.xml or *.sch files') +parser_clean_files.add_argument( + 'filenames', + metavar='filenames', type=str, - help='File to clean', + help='File(s) to clean', + nargs='+' ) -parser_clean_file.set_defaults(func=_clean_file) +parser_clean_files.set_defaults(func=_clean_files) # Clean all command parser_clean_all_files = subparsers.add_parser('clean_all', description='Command for formatting all *.xml and *.sch files') diff --git a/tox.ini b/tox.ini index ba522c65..14d19b9e 100644 --- a/tox.ini +++ b/tox.ini @@ -21,3 +21,9 @@ deps= -r{toxinidir}/requirements.txt commands = ./buildingsch.py generate_all --dry-run + +[testenv:pre-commit] +deps = + pre-commit +commands = + pre-commit run -c ./.pre-commit-config.yaml --all-files From 7159c48c8ac46805c4fccd75405dfebb4d38e607 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Thu, 15 Oct 2020 09:46:05 -0600 Subject: [PATCH 62/76] style: fix for pre-commit --- spec/files/good/L100_Copy.xml | 2 +- spec/files/good/id.xml | 2 +- spec/files/good/root.xml | 2 +- templates/BuildingSync_template_L100.xml | 116 +++++++++++------------ tools/tests/test_validate_sch.py | 2 +- 5 files changed, 61 insertions(+), 63 deletions(-) diff --git a/spec/files/good/L100_Copy.xml b/spec/files/good/L100_Copy.xml index 111efbf9..4e88be12 100644 --- a/spec/files/good/L100_Copy.xml +++ b/spec/files/good/L100_Copy.xml @@ -1,4 +1,4 @@ - + diff --git a/spec/files/good/id.xml b/spec/files/good/id.xml index efc679d1..4b22b279 100644 --- a/spec/files/good/id.xml +++ b/spec/files/good/id.xml @@ -120,7 +120,7 @@ - + diff --git a/spec/files/good/root.xml b/spec/files/good/root.xml index fa05cccb..1adbc8ba 100644 --- a/spec/files/good/root.xml +++ b/spec/files/good/root.xml @@ -1,4 +1,4 @@ - + diff --git a/templates/BuildingSync_template_L100.xml b/templates/BuildingSync_template_L100.xml index 143ade47..be7a479a 100644 --- a/templates/BuildingSync_template_L100.xml +++ b/templates/BuildingSync_template_L100.xml @@ -1,61 +1,59 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - Gross - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + Gross + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/tests/test_validate_sch.py b/tools/tests/test_validate_sch.py index f1690c67..4250c86d 100644 --- a/tools/tests/test_validate_sch.py +++ b/tools/tests/test_validate_sch.py @@ -183,7 +183,7 @@ def test_when_phase_is_specified_and_it_does_not_exist_validation_fails(self): ''' # -- Act, Assert - with pytest.raises(Exception) as e: + with pytest.raises(Exception): validate_schematron(sch, doc, phase='bogus_phase_id') def test_when_using_strict_context_it_returns_failures_for_unfired_rules(self): From 1339ae26f132cd591f7cf4883199ee852875568a Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Mon, 19 Oct 2020 12:06:10 -0400 Subject: [PATCH 63/76] style: run clean_all --- .../L000_OpenStudio_Pre-Simulation_01.xml | 3 --- .../L000_OpenStudio_Pre-Simulation_02.xml | 3 --- .../L100_OpenStudio_Pre-Simulation_01.xml | 24 ++++--------------- .../v2-2-0_L000_OpenStudio_Pre-Simulation.sch | 2 +- .../v2-2-0_L100_OpenStudio_Pre-Simulation.sch | 2 +- 5 files changed, 7 insertions(+), 27 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L000_OpenStudio_Pre-Simulation_01.xml b/schematron/v2.2.0/exemplary_files/L000_OpenStudio_Pre-Simulation_01.xml index 067862da..041dfea8 100644 --- a/schematron/v2.2.0/exemplary_files/L000_OpenStudio_Pre-Simulation_01.xml +++ b/schematron/v2.2.0/exemplary_files/L000_OpenStudio_Pre-Simulation_01.xml @@ -7,7 +7,6 @@ Willis Tower - Chicago @@ -31,7 +30,6 @@ Baseline - @@ -32,7 +31,6 @@ Baseline - @@ -25,7 +24,6 @@ 0 2 0 - @@ -134,7 +129,6 @@ - @@ -216,7 +208,6 @@ - @@ -224,7 +215,6 @@ - @@ -239,7 +229,6 @@ Baseline - - + - - - + diff --git a/schematron/v2.2.0/v2-2-0_L000_OpenStudio_Pre-Simulation.sch b/schematron/v2.2.0/v2-2-0_L000_OpenStudio_Pre-Simulation.sch index 508d1f40..73ab7654 100644 --- a/schematron/v2.2.0/v2-2-0_L000_OpenStudio_Pre-Simulation.sch +++ b/schematron/v2.2.0/v2-2-0_L000_OpenStudio_Pre-Simulation.sch @@ -1,4 +1,4 @@ - + diff --git a/schematron/v2.2.0/v2-2-0_L100_OpenStudio_Pre-Simulation.sch b/schematron/v2.2.0/v2-2-0_L100_OpenStudio_Pre-Simulation.sch index db753f83..a2d937ee 100644 --- a/schematron/v2.2.0/v2-2-0_L100_OpenStudio_Pre-Simulation.sch +++ b/schematron/v2.2.0/v2-2-0_L100_OpenStudio_Pre-Simulation.sch @@ -1,4 +1,4 @@ - + From 0da60a82142b2a4d90a99add24bfa654db312e4a Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Mon, 19 Oct 2020 13:42:38 -0400 Subject: [PATCH 64/76] fix: update XSD to v2.2.0 in L200 file --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 63679adc..444d3afb 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -4,7 +4,7 @@ This file is intended to document all of the required elements and attributes for a Level 2 audit. --> - + From af8c8ddac6344a4ab983da778ae1d1efc75e22a5 Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Mon, 19 Oct 2020 14:04:23 -0400 Subject: [PATCH 65/76] feat(eems): update L200 file measures --- .../v2.2.0/exemplary_files/L200_Audit.xml | 107 ++++++++++++------ 1 file changed, 72 insertions(+), 35 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 444d3afb..2dcbbcdb 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -190,7 +190,7 @@ - + 123 @@ -208,7 +208,7 @@ - + 123 @@ -226,7 +226,7 @@ - + 123 @@ -244,7 +244,7 @@ - + 123 @@ -427,12 +427,12 @@ - + - + @@ -468,14 +468,25 @@ - + Steel - Low e + Clear uncoated Single pane - 0.5 + 1.25 + 0.5 + 0.5 + + + + + + Steel + Low e + Triple pane + 0.25 0.5 0.5 @@ -614,7 +625,7 @@ - + Weekday @@ -644,6 +655,36 @@ + + + + Weekday + Lighting + 09:00:00 + 17:00:00 + 40 + + + Weekend + Lighting + 09:00:00 + 12:00:00 + 40 + + + Holiday + Lighting + 09:00:00 + 17:00:00 + 0 + + + + + + + + @@ -709,15 +750,15 @@ - - - - - - + + + + + + - Air Distribution + Lighting @@ -727,9 +768,9 @@ Individual system - Low Cost Measure Name + Update lighting schedules - This measure does something cheap + The current lighting schedule is set to be at 80% output during weekdays, weekends, and holidays from 9am - 5pm. This measure would implement a modified schedule to reduce default output to 40%, reducing scheduled on-period on weekends to 9am - 12pm, and having no required schedule on holidays. 1 123 123 @@ -740,28 +781,24 @@ - - - - - - + + + + + + - Air Distribution + Fenestration - - Install advanced metering systems - + + Replace windows + - Individual system - - Capital Measure - - This measure does something expensive - 1 + Entire building + 20 123 123 true From 69e1c2f930941a9dceb9674f9397844e9200e1a2 Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Mon, 19 Oct 2020 17:26:14 -0400 Subject: [PATCH 66/76] fix: remove requirement that every window and door must be linked to a side --- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 2 -- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 8 -------- 2 files changed, 10 deletions(-) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 1b17091c..9e647e48 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -88,8 +88,6 @@ "","","","","","","","","","auc:WallArea","","","" "Building Envelope - Fenestration","ASHRAE 211 6.2.1.2 (c)","Fenestration General Requirements","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building","true","","","auc:OverallWindowToWallRatio","","","" "","","","","","","","","","auc:OverallDoorToWallRatio","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window]","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WindowIDs/auc:WindowID[@IDref = current()/@ID]","Each auc:Window must be linked to an auc:Side","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door/auc:ExteriorDoorType]","true","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:DoorIDs/auc:DoorID[@IDref = current()/@ID]","Each auc:Door must be linked to an auc:Side","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side","true","","","auc:WindowIDs/auc:WindowID","Found an auc:Side with no linked auc:Window","WARNING","" "","","","","","","","","","auc:DoorIDs/auc:DoorID","Found an auc:Side with no linked auc:Door","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = ""Whole building""]/auc:Sides/auc:Side/auc:WindowIDs/auc:WindowID","true","","","//auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window and @ID = current()/@IDref]","An auc:Side element's auc:WindowIDs/auc:WindowID must point to a valid auc:FenestrationSystem","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 6eab40f8..1ba0b73b 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -386,8 +386,6 @@ Document Structure Prerequisites Fenestration General Requirements /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building - /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Window] - /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FenestrationSystems/auc:FenestrationSystem[auc:FenestrationType/auc:Door/auc:ExteriorDoorType] /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side/auc:WindowIDs/auc:WindowID /auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() = "Whole building"]/auc:Sides/auc:Side/auc:DoorIDs/auc:DoorID @@ -399,12 +397,6 @@ auc:OverallWindowToWallRatio auc:OverallDoorToWallRatio - - Each auc:Window must be linked to an auc:Side - - - Each auc:Door must be linked to an auc:Side - Found an auc:Side with no linked auc:Window Found an auc:Side with no linked auc:Door From 3c5ab04d328f9da074a432783d74eb61a9605107 Mon Sep 17 00:00:00 2001 From: corymosiman12 Date: Mon, 19 Oct 2020 17:31:11 -0400 Subject: [PATCH 67/76] text(fix): envelope tests passing --- schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 6cd3d18e..d63449bd 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -132,7 +132,7 @@ def test_footprint_shape_and_number_of_sides_tests_work_as_expected(self, footpr footprint_elem = footprint_elem[0] footprint_elem.text = footprint_shape - replace_element(section_elem, 'auc:Sides', _sides_factory(footprint_shape)) + replace_element(section_elem, 'auc:Sides', _sides_factory(footprint_shape, window_id='Window-A-Original')) # make sure it's valid with substituted elements failures = validate_schematron(self.schematron, tree) From a99187d465bfba0b0d876e6178385ba60a7f10dc Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 21 Oct 2020 09:43:31 -0600 Subject: [PATCH 68/76] feat(L200): add AnnualHeatingEfficiency reqs --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 4 +++- schematron/v2.2.0/tests/data/HVAC_example1.xml | 10 ++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 6 ++++++ schematron/v2.2.0/v2-2-0_L200_Audit.sch | 6 ++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 2dcbbcdb..80243fc8 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -4,7 +4,7 @@ This file is intended to document all of the required elements and attributes for a Level 2 audit. --> - + @@ -310,6 +310,8 @@ Warm air + 123 + COP 123 123 gpm diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 8d9f9845..2440c18a 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -185,6 +185,8 @@ Warm air + 123 + COP 123 123 gpm @@ -205,8 +207,12 @@ Packaged Terminal Unknown + 123 + + 123 + COP 123 123 gpm @@ -232,6 +238,8 @@ Modulating + 123 + COP 123 gpm Good @@ -252,6 +260,8 @@ Direct + 123 + COP 123 gpm Good diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 9e647e48..3eeaa721 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -204,10 +204,16 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:HeatingSourceID","false","","","//auc:HeatingSource[@ID = current()/@IDref]","auc:HeatingSourceID must point to a valid auc:HeatingSource","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:CoolingSourceID","false","","","//auc:CoolingSource[@ID = current()/@IDref]","auc:CoolingSourceID must point to a valid auc:CoolingSource","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource","false","","","auc:HeatingSourceType/*","","","" +"","","","","","","","","","(auc:AnnualHeatingEfficiencyValue and not(auc:HeatingSourceType/auc:HeatingPlantID)) or (not(auc:AnnualHeatingEfficiencyValue) and auc:HeatingSourceType/auc:HeatingPlantID)","auc:HeatingSource must provide auc:AnnualHeatingEfficiencyValue or be linked to an auc:HeatingPlant","","" +"","","","","","","","","","(auc:AnnualHeatingEfficiencyUnits and not(auc:HeatingSourceType/auc:HeatingPlantID)) or (not(auc:AnnualHeatingEfficiencyUnits) and auc:HeatingSourceType/auc:HeatingPlantID)","auc:HeatingSource must provide auc:AnnualHeatingEfficiencyUnits or be linked to an auc:HeatingPlant","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource/auc:HeatingSourceType/auc:Furnace","false","","","auc:FurnaceType","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource/auc:HeatingSourceType/auc:HeatPump","false","","","auc:HeatPumpType","","","" "","","","","","","","","","auc:HeatPumpBackupSystemFuel","","","" +"","","","","","","","","","auc:HeatPumpBackupAFUE","","","" +"","","","","","","","","","auc:CoolingSourceID/@IDref = ancestor::auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[auc:CoolingSourceType/auc:DX]/@ID","An auc:HeatPump's auc:CoolingSourceID must point to an auc:CoolingSource[auc:CoolingSourceType/auc:DX]","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource","false","","","auc:CoolingSourceType/*","","","" +"","","","","","","","","","(auc:AnnualCoolingEfficiencyValue and not(auc:CoolingSourceType/auc:CoolingPlantID)) or (not(auc:AnnualCoolingEfficiencyValue) and auc:CoolingSourceType/auc:CoolingPlantID)","auc:CoolingSource must provide auc:AnnualCoolingEfficiencyValue or be linked to an auc:CoolingPlant","","" +"","","","","","","","","","(auc:AnnualCoolingEfficiencyUnits and not(auc:CoolingSourceType/auc:CoolingPlantID)) or (not(auc:AnnualCoolingEfficiencyUnits) and auc:CoolingSourceType/auc:CoolingPlantID)","auc:CoolingSource must provide auc:AnnualCoolingEfficiencyUnits or be linked to an auc:CoolingPlant","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource/auc:CoolingSourceType/auc:DX","false","","","auc:DXSystemType","","","" "","","","","","","","","","auc:CompressorType","","","" "","","","","","","","","","auc:CompressorStaging","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 1ba0b73b..a7b9d046 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -694,6 +694,8 @@ auc:HeatingSourceType/* + auc:HeatingSource must provide auc:AnnualHeatingEfficiencyValue or be linked to an auc:HeatingPlant + auc:HeatingSource must provide auc:AnnualHeatingEfficiencyUnits or be linked to an auc:HeatingPlant auc:FurnaceType @@ -701,9 +703,13 @@ auc:HeatPumpType auc:HeatPumpBackupSystemFuel + auc:HeatPumpBackupAFUE + An auc:HeatPump's auc:CoolingSourceID must point to an auc:CoolingSource[auc:CoolingSourceType/auc:DX] auc:CoolingSourceType/* + auc:CoolingSource must provide auc:AnnualCoolingEfficiencyValue or be linked to an auc:CoolingPlant + auc:CoolingSource must provide auc:AnnualCoolingEfficiencyUnits or be linked to an auc:CoolingPlant auc:DXSystemType From ffa31a1f2145a7e7a6b57c67a03c5879c6781b46 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 21 Oct 2020 09:53:06 -0600 Subject: [PATCH 69/76] refactor(L200): dont require Capacity for Delivery --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 2 -- schematron/v2.2.0/tests/data/HVAC_example1.xml | 8 -------- schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py | 1 - schematron/v2.2.0/v2-2-0_L200_Audit.csv | 2 -- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 4 ---- 5 files changed, 17 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 80243fc8..f4f6c69f 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -352,8 +352,6 @@ - 123 - gpm diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index 2440c18a..abaf661e 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -296,8 +296,6 @@ - 123 - gpm @@ -326,8 +324,6 @@ - 123 - gpm @@ -351,8 +347,6 @@ - 123 - gpm @@ -376,8 +370,6 @@ - 123 - gpm diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index d63449bd..293def76 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -462,7 +462,6 @@ def test_is_invalid_when_missing_year_installed(self, xpath_to_remove): ('//auc:HeatingPlant/auc:Boiler/auc:InputCapacity', 'auc:InputCapacity'), ('//auc:HeatingPlant/auc:DistrictHeating/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingPlant/auc:SolarThermal/auc:Capacity', 'auc:Capacity'), - ('//auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery[1]/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)][1]/auc:Capacity', 'auc:Capacity'), ('//auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)][1]/auc:Capacity', 'auc:Capacity'), ('//auc:CondenserPlants/auc:CondenserPlant[1]/*/auc:Capacity', 'auc:Capacity'), diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 3eeaa721..ccb26977 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -144,8 +144,6 @@ "","","","","","","","","","auc:CapacityUnits","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:HeatingPlants/auc:HeatingPlant/auc:SolarThermal","false","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" -"","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery","false","","","auc:Capacity","","","" -"","","","","","","","","","auc:CapacityUnits","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:CoolingSources/auc:CoolingSource[not(auc:CoolingSourceType/auc:CoolingPlantID)]","false","","","auc:Capacity","","","" "","","","","","","","","","auc:CapacityUnits","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:HeatingSources/auc:HeatingSource[not(auc:HeatingSourceType/auc:HeatingPlantID)]","false","","","auc:InputCapacity","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index a7b9d046..117bfc1e 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -578,10 +578,6 @@ auc:Capacity auc:CapacityUnits - - auc:Capacity - auc:CapacityUnits - auc:Capacity auc:CapacityUnits From b0bb041193012a6cc2713702071b47d292afbd1b Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 21 Oct 2020 10:08:45 -0600 Subject: [PATCH 70/76] refactor(L200)!: generalize linked delivery for all CentralAirDistribution --- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 2 +- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index ccb26977..b5809f42 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -221,7 +221,7 @@ "","","","","","","","","","auc:ReheatSource","","","" "","","","","","","","","","auc:ReheatSource/text() = 'None' or auc:ReheatControlMethod","","","" "","","","","","","","","","auc:ReheatSource/text() != 'Heating plant' or auc:ReheatPlantID","","","" -"","","Central Fan","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution[auc:AirDeliveryType/text() = 'Central fan']","false","deliveryID","current()/ancestor::auc:Delivery/@ID","//auc:Systems/auc:FanSystems/auc:FanSystem[auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = $deliveryID]","auc:Delivery ID must be linked to a valid auc:FanSystem","","" +"","","Central Air Distribution Delivery","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","deliveryID","current()/ancestor::auc:Delivery/@ID","//auc:Systems/auc:FanSystems/auc:FanSystem[auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = $deliveryID]","auc:Delivery ID must be linked to a valid auc:FanSystem","","" "","","","","","","","","","ancestor::auc:HVACSystem/auc:DuctSystems/auc:DuctSystem[auc:HeatingDeliveryID/@IDref = $deliveryID or auc:CoolingDeliveryID/@IDref = $deliveryID]","auc:Delivery ID must be linked to an auc:DuctSystem through auc:HeatingDeliveryID or auc:CoolingDeliveryID","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FanSystems/auc:FanSystem","false","","","auc:FanControlType","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:DuctSystems/auc:DuctSystem","false","","","auc:DuctConfiguration","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 117bfc1e..c1a21245 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -68,7 +68,7 @@ - + @@ -726,9 +726,9 @@ auc:ReheatSource/text() != 'Heating plant' or auc:ReheatPlantID - - Central Fan - + + Central Air Distribution Delivery + auc:Delivery ID must be linked to a valid auc:FanSystem auc:Delivery ID must be linked to an auc:DuctSystem through auc:HeatingDeliveryID or auc:CoolingDeliveryID From 2cbc6ac81ce20cb5af3ac4449a7f76a91560106e Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 21 Oct 2020 15:45:25 -0600 Subject: [PATCH 71/76] refactor(L200)!: require AnnualFuelUse for submeters Also, tweaks calculations for AnnualEnergyUse to only look at meters linked to utilities (ie not submeter) --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 9 ++++++--- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 9 +++++---- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 9 +++++---- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index f4f6c69f..10e64250 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -927,20 +927,23 @@ Electricity - 50 Total lighting + 123 + 123 Electricity - 25 Heating + 123 + 123 Electricity - 25 Cooling + 123 + 123 diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index b5809f42..221062e4 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -348,7 +348,8 @@ "","","","","","","","","","(auc:EnergyResource/text() != 'Electricity') or auc:AnnualPeakNativeUnits","","","" "","","","","Monthly Utility Data - Submeters","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse[not(auc:UtilityIDs/auc:UtilityID)]","false","","","auc:EnergyResource","","","" "","","","","","","","","","auc:EndUse","","","" -"","","","","","","","","","auc:PercentResource","","","" +"","","","","","","","","","auc:AnnualFuelUseConsistentUnits","","","" +"","","","","","","","","","auc:AnnualFuelUseNativeUnits","","","" "","","","","","","","","","//auc:ResourceUses/auc:ResourceUse[@ID = current()/auc:ParentResourceUseID/@IDref]","ParentResourceUseID must point to a valid resource use","","" "","","","","Monthly Utility Data - Time Series","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:TimeSeriesData/auc:TimeSeries","true","","","auc:IntervalFrequency/text() = 'Month'","TimeSeries data for ResourceUse must include a IntervalFrequency of Month","","" "","","","","","","","","","auc:ReadingType","TimeSeries data for ResourceUse must include a ReadingType","","" @@ -395,13 +396,13 @@ "","","","","","","","","","auc:ElectricDemandRate","auc:ElectricDemandRate must be defined if the parent auc:Utility's linked resource is of type Electricity","","" "","","","","","","","","","auc:DemandWindow","auc:DemandWindow must be defined if the parent auc:Utility's linked resource is of type Electricity","","" "","","Annual Energy Use","ASHRAE 211 6.1.2.2","Annual Energy Use","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding]/auc:AllResourceTotals/auc:AllResourceTotal","true","epsilonPct","0.05","","","","note that the test here is finding all resource uses whose energy resource ends with generated, and summing their annual use" -"","","","","","","","calculatedOnsiteEnergyProductionConsistentUnits","sum(//auc:ResourceUse/auc:EnergyResource['generated' = substring(text(), string-length(text()) - string-length('generated') + 1 )]/../auc:AnnualFuelUseConsistentUnits/text())","","","","" +"","","","","","","","calculatedOnsiteEnergyProductionConsistentUnits","sum(//auc:ResourceUse[auc:UtilityIDs/auc:UtilityID]/auc:EnergyResource['generated' = substring(text(), string-length(text()) - string-length('generated') + 1 )]/../auc:AnnualFuelUseConsistentUnits/text())","","","","" "","","","","","","","calculatedOnsiteEnergyProductionConsistentUnitsEpsilon","auc:OnsiteEnergyProductionConsistentUnits * $epsilonPct","","","","" "","","","","","","","calculatedOnsiteEnergyProductionConsistentUnitsDelta","translate(auc:OnsiteEnergyProductionConsistentUnits - $calculatedOnsiteEnergyProductionConsistentUnits, '-', '')","count(auc:OnsiteEnergyProductionConsistentUnits) = 1 and $calculatedOnsiteEnergyProductionConsistentUnitsDelta <= $calculatedOnsiteEnergyProductionConsistentUnitsEpsilon","auc:OnsiteEnergyProductionConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are generated (which is )","","" -"","","","","","","","calculatedExportedEnergyConsistentUnits","sum(//auc:ResourceUse/auc:EnergyResource['exported' = substring(text(), string-length(text()) - string-length('exported') + 1 )]/../auc:AnnualFuelUseConsistentUnits/text())","","","","note that the test here is finding all resource uses whose energy resource ends with exported, and summing their annual use" +"","","","","","","","calculatedExportedEnergyConsistentUnits","sum(//auc:ResourceUse[auc:UtilityIDs/auc:UtilityID]/auc:EnergyResource['exported' = substring(text(), string-length(text()) - string-length('exported') + 1 )]/../auc:AnnualFuelUseConsistentUnits/text())","","","","note that the test here is finding all resource uses whose energy resource ends with exported, and summing their annual use" "","","","","","","","calculatedExportedEnergyConsistentUnitsEpsilon","auc:ExportedEnergyConsistentUnits * $epsilonPct","","","","" "","","","","","","","calculatedExportedEnergyConsistentUnitsDelta","translate(auc:ExportedEnergyConsistentUnits - $calculatedExportedEnergyConsistentUnits, '-', '')","count(auc:ExportedEnergyConsistentUnits) = 1 and $calculatedExportedEnergyConsistentUnitsDelta <= $calculatedExportedEnergyConsistentUnitsEpsilon","auc:ExportedEnergyConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are exported (which is )","","" -"","","","","","","","calculatedImportedEnergyConsistentUnits","sum(//auc:ResourceUse/auc:AnnualFuelUseConsistentUnits/text()) - $calculatedOnsiteEnergyProductionConsistentUnits - $calculatedExportedEnergyConsistentUnits","","auc:ImportedEnergyConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are not generated or exported (which is )","","note that the test here is finding all resource uses, and summing their annual use and subtracting the generated and exported sums" +"","","","","","","","calculatedImportedEnergyConsistentUnits","sum(//auc:ResourceUse[auc:UtilityIDs/auc:UtilityID]/auc:AnnualFuelUseConsistentUnits/text()) - $calculatedOnsiteEnergyProductionConsistentUnits - $calculatedExportedEnergyConsistentUnits","","auc:ImportedEnergyConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are not generated or exported (which is )","","note that the test here is finding all resource uses, and summing their annual use and subtracting the generated and exported sums" "","","","","","","","calculatedImportedEnergyConsistentUnitsEpsilon","auc:ImportedEnergyConsistentUnits * $epsilonPct","","","","" "","","","","","","","calculatedImportedEnergyConsistentUnitsDelta","translate(auc:ImportedEnergyConsistentUnits - $calculatedImportedEnergyConsistentUnits, '-', '')","count(auc:ImportedEnergyConsistentUnits) = 1 and $calculatedImportedEnergyConsistentUnitsDelta <= $calculatedImportedEnergyConsistentUnitsEpsilon","auc:ImportedEnergyConsistentUnits (which is ) should equal the sum of all auc:AnnualFuelUseConsistentUnits for auc:ResourceUses that are not generated or exported (which is )","","" "","","","","","","","","","auc:NetIncreaseInStoredEnergyConsistentUnits","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index c1a21245..501ea988 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -1051,7 +1051,8 @@ auc:EnergyResource auc:EndUse - auc:PercentResource + auc:AnnualFuelUseConsistentUnits + auc:AnnualFuelUseNativeUnits ParentResourceUseID must point to a valid resource use @@ -1161,13 +1162,13 @@ Annual Energy Use - + - + - + From baedd9e4b1655c914e33b95ae06aea9c6b36818d Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Wed, 21 Oct 2020 16:01:23 -0600 Subject: [PATCH 72/76] refactor(L200): change Delivery requirement to XOR --- schematron/v2.2.0/v2-2-0_L200_Audit.csv | 2 +- schematron/v2.2.0/v2-2-0_L200_Audit.sch | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index 221062e4..a7df9555 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -237,7 +237,7 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:PumpSystems/auc:PumpSystem","false","","","auc:PumpControlType","","","" "HVAC Distribution System Delivery Outdoor Air Control","ASHRAE 211 6.2.1.3 (c)","Central Air Distribution","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","","","auc:FanBased/auc:AirSideEconomizer","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased/auc:AirSideEconomizer","false","","","auc:AirSideEconomizerType","","","" -"","","","","","","","","","auc:AirSideEconomizerType = 'None' or auc:EconomizerControl","","","" +"","","","","","","","","","(auc:AirSideEconomizerType = 'None' and auc:EconomizerControl) or (auc:AirSideEconomizerType != 'None' and not(auc:EconomizerControl))","If auc:AirSideEconomizerType is None then auc:EconomizerControl must be defined, otherwise auc:EconomizerControl must not exist.","","" "","","Heat Recovery System","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HeatRecoverySystems/auc:HeatRecoverySystem","false","","","auc:HeatRecoveryEfficiency or auc:EnergyRecoveryEfficiency","","","" "","","","","","","","","","auc:HeatRecoveryType","","","" "","","","","","","","","","auc:SystemIDReceivingHeat","","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 501ea988..8eca1dc3 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -781,7 +781,7 @@ auc:AirSideEconomizerType - auc:AirSideEconomizerType = 'None' or auc:EconomizerControl + If auc:AirSideEconomizerType is None then auc:EconomizerControl must be defined, otherwise auc:EconomizerControl must not exist. From 06c85b58b2dfb0d940b548f02fcc64452478650c Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 23 Oct 2020 09:22:00 -0600 Subject: [PATCH 73/76] fix(L200): fix section type in exemplary file --- schematron/v2.2.0/exemplary_files/L200_Audit.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 10e64250..9bdf03b6 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -142,7 +142,7 @@ Single zone - Component + Space function Multifamily with commercial Other @@ -622,6 +622,7 @@ + From ca9a4ca2df94a1257842f30091c0ec77d26ce3d0 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 23 Oct 2020 09:41:33 -0600 Subject: [PATCH 74/76] refactor(L200): update fan and pump requirements --- .../v2.2.0/exemplary_files/L200_Audit.xml | 7 +++++ .../v2.2.0/tests/data/HVAC_example1.xml | 27 +++++++++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 6 +++++ schematron/v2.2.0/v2-2-0_L200_Audit.sch | 6 +++++ 4 files changed, 46 insertions(+) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index 9bdf03b6..f3d04aa9 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -372,6 +372,7 @@ Single Excellent + @@ -441,6 +442,9 @@ + 123 + 123 + 123 Constant Volume @@ -449,6 +453,9 @@ + 123 + 123 + 123 Stepped diff --git a/schematron/v2.2.0/tests/data/HVAC_example1.xml b/schematron/v2.2.0/tests/data/HVAC_example1.xml index abaf661e..40909df5 100644 --- a/schematron/v2.2.0/tests/data/HVAC_example1.xml +++ b/schematron/v2.2.0/tests/data/HVAC_example1.xml @@ -405,48 +405,72 @@ + 123 + 123 + 123 Constant Volume + 123 + 123 + 123 Constant Volume + 123 + 123 + 123 Constant Volume + 123 + 123 + 123 Constant Volume + 123 + 123 + 123 Constant Volume + 123 + 123 + 123 Constant Volume + 123 + 123 + 123 Constant Volume + 123 + 123 + 123 Constant Volume @@ -455,6 +479,9 @@ + 123 + 123 + 123 Stepped diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index a7df9555..cbf4e5cb 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -224,6 +224,9 @@ "","","Central Air Distribution Delivery","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","deliveryID","current()/ancestor::auc:Delivery/@ID","//auc:Systems/auc:FanSystems/auc:FanSystem[auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = $deliveryID]","auc:Delivery ID must be linked to a valid auc:FanSystem","","" "","","","","","","","","","ancestor::auc:HVACSystem/auc:DuctSystems/auc:DuctSystem[auc:HeatingDeliveryID/@IDref = $deliveryID or auc:CoolingDeliveryID/@IDref = $deliveryID]","auc:Delivery ID must be linked to an auc:DuctSystem through auc:HeatingDeliveryID or auc:CoolingDeliveryID","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:FanSystems/auc:FanSystem","false","","","auc:FanControlType","","","" +"","","","","","","","","","auc:FanEfficiency","","","" +"","","","","","","","","","auc:FanSize","","","" +"","","","","","","","","","auc:InstalledFlowRate","","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:DuctSystems/auc:DuctSystem","false","","","auc:DuctConfiguration","","","" "","","Zone Equipment","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment","false","","","count(current()/*) >= 1","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:ZoneEquipment/auc:FanBased","false","","","auc:FanBasedDistributionType/auc:FanCoil","","","" @@ -235,6 +238,9 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CoolingPlants/auc:CoolingPlant","false","","","//auc:Systems/auc:PumpSystems/auc:PumpSystem/auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = current()/@ID","auc:CoolingPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:Plants/auc:CondenserPlants/auc:CondenserPlant","false","","","//auc:Systems/auc:PumpSystems/auc:PumpSystem/auc:LinkedSystemIDs/auc:LinkedSystemID/@IDref = current()/@ID","auc:CondenserPlant must be linked to an auc:PumpSystem through auc:PumpSystem/auc:LinkedSystemIDs","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:PumpSystems/auc:PumpSystem","false","","","auc:PumpControlType","","","" +"","","","","","","","","","auc:PumpEfficiency","","","" +"","","","","","","","","","auc:PumpMaximumFlowRate","","","" +"","","","","","","","","","auc:PumpInstalledFlowRate","","WARNING","" "HVAC Distribution System Delivery Outdoor Air Control","ASHRAE 211 6.2.1.3 (c)","Central Air Distribution","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution","false","","","auc:FanBased/auc:AirSideEconomizer","","","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Systems/auc:HVACSystems/auc:HVACSystem/auc:HeatingAndCoolingSystems/auc:Deliveries/auc:Delivery/auc:DeliveryType/auc:CentralAirDistribution/auc:FanBased/auc:AirSideEconomizer","false","","","auc:AirSideEconomizerType","","","" "","","","","","","","","","(auc:AirSideEconomizerType = 'None' and auc:EconomizerControl) or (auc:AirSideEconomizerType != 'None' and not(auc:EconomizerControl))","If auc:AirSideEconomizerType is None then auc:EconomizerControl must be defined, otherwise auc:EconomizerControl must not exist.","","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 8eca1dc3..872b4b99 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -735,6 +735,9 @@ auc:FanControlType + auc:FanEfficiency + auc:FanSize + auc:InstalledFlowRate auc:DuctConfiguration @@ -772,6 +775,9 @@ auc:PumpControlType + auc:PumpEfficiency + auc:PumpMaximumFlowRate + auc:PumpInstalledFlowRate From 6e234e84a4c845df5a4322bb94b3a193247db526 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 23 Oct 2020 11:51:57 -0600 Subject: [PATCH 75/76] refactor(L200): update section system requirements --- .../v2.2.0/tests/test_v2-2-0_L200_Audit.py | 99 +++++++------------ schematron/v2.2.0/v2-2-0_L200_Audit.csv | 62 ++++++++++++ schematron/v2.2.0/v2-2-0_L200_Audit.sch | 62 ++++++++++++ 3 files changed, 161 insertions(+), 62 deletions(-) diff --git a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py index 293def76..1201bf17 100644 --- a/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py +++ b/schematron/v2.2.0/tests/test_v2-2-0_L200_Audit.py @@ -862,15 +862,15 @@ class TestL200AuditSectionSystems(AssertFailureRolesMixin): @pytest.mark.parametrize("section_occupancy_classification,expected_errors", [ ('Manufactured home', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), ('Single family', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Multifamily', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Multifamily with commercial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Multifamily individual unit', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Public housing', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Multifamily', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), + ('Multifamily with commercial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), + ('Multifamily individual unit', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), + ('Public housing', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), ('Residential', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), ('Health care-Pharmacy', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), - ('Health care-Skilled nursing facility', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), - ('Health care-Residential treatment center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), - ('Health care-Inpatient hospital', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Skilled nursing facility', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:CookingSystem is recommended', 'A linked auc:ProcessLoad is recommended', 'A linked auc:LaundrySystem is recommended']}), + ('Health care-Residential treatment center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:CookingSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care-Inpatient hospital', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:DomesticHotWaterSystem is required', 'A linked auc:CookingSystem is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended', 'A linked auc:LaundrySystem is recommended']}), ('Health care-Outpatient rehabilitation', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), ('Health care-Diagnostic center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), ('Health care-Outpatient facility', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), @@ -878,30 +878,30 @@ class TestL200AuditSectionSystems(AssertFailureRolesMixin): ('Health care-Outpatient surgical', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), ('Health care-Veterinary', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), ('Health care-Morgue or mortuary', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), - ('Health care', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Health care', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:CookingSystem is recommended', 'A linked auc:ProcessLoad is recommended', 'A linked auc:LaundrySystem is recommended']}), ('Gas station', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended']}), ('Convenience store', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended']}), - ('Food sales-Grocery store', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended']}), + ('Food sales-Grocery store', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:CookingSystem is recommended']}), ('Food sales', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended']}), ('Laboratory-Testing', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), ('Laboratory-Medical', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), ('Laboratory', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), ('Vivarium', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Zoo', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Office-Financial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Office', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Zoo', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:CookingSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Office-Financial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), + ('Office', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), ('Bank', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), ('Courthouse', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), ('Public safety station-Fire', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Public safety station-Police', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Public safety station-Police', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:CookingSystem is recommended']}), ('Public safety station', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Public safety-Detention center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Public safety-Correctional facility', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Public safety-Detention center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:DomesticHotWaterSystem is required', 'A linked auc:CookingSystem is required'], 'WARNING': ['A linked auc:LaundrySystem is recommended']}), + ('Public safety-Correctional facility', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:DomesticHotWaterSystem is required', 'A linked auc:CookingSystem is required'], 'WARNING': ['A linked auc:LaundrySystem is recommended']}), ('Public safety', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Warehouse-Refrigerated', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:RefrigerationSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), - ('Warehouse-Unrefrigerated', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:PlugLoad is recommended'], 'ERROR': ['A linked auc:LightingSystem is required']}), - ('Warehouse-Self-storage', {'INFO': ['No linked auc:HVACSystem found', 'No linked auc:PlugLoad found'], 'ERROR': ['A linked auc:LightingSystem is required']}), - ('Warehouse', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Warehouse-Refrigerated', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:RefrigerationSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Warehouse-Unrefrigerated', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:PlugLoad is recommended', 'A linked auc:ProcessLoad is recommended'], 'ERROR': ['A linked auc:LightingSystem is required']}), + ('Warehouse-Self-storage', {'INFO': ['No linked auc:HVACSystem found', 'No linked auc:PlugLoad found'], 'ERROR': ['A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:RefrigerationSystem is recommended']}), + ('Warehouse', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:ProcessLoad is recommended']}), ('Assembly-Religious', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), ('Assembly-Cultural entertainment', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), ('Assembly-Social entertainment', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), @@ -913,30 +913,30 @@ class TestL200AuditSectionSystems(AssertFailureRolesMixin): ('Assembly-Stadium (closed)', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), ('Assembly-Stadium (open)', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), ('Assembly-Public', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Recreation-Pool', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:ProcessLoad is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), - ('Recreation-Bowling alley', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:ProcessLoad is recommended']}), - ('Recreation-Fitness center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:ProcessLoad is recommended']}), - ('Recreation-Ice rink', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:RefrigerationSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), - ('Recreation-Roller rink', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), + ('Recreation-Pool', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:ProcessLoad is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:CookingSystem is recommended', 'A linked auc:LaundrySystem is recommended']}), + ('Recreation-Bowling alley', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:CookingSystem is recommended', 'A linked auc:ProcessLoad is recommended']}), + ('Recreation-Fitness center', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:CookingSystem is recommended', 'A linked auc:ProcessLoad is recommended', 'A linked auc:LaundrySystem is recommended']}), + ('Recreation-Ice rink', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:RefrigerationSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:CookingSystem is recommended']}), + ('Recreation-Roller rink', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended', 'A linked auc:CookingSystem is recommended']}), ('Recreation-Indoor sport', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required'], 'WARNING': ['A linked auc:PlugLoad is recommended']}), ('Recreation', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Education-Adult', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Education-Higher', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Education-Secondary', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Education-Primary', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Education-Preschool or daycare', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Education-Vocational', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Education', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Education-Adult', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), + ('Education-Higher', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), + ('Education-Secondary', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), + ('Education-Primary', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), + ('Education-Preschool or daycare', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), + ('Education-Vocational', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), + ('Education', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:CookingSystem is recommended']}), ('Food service-Fast', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CookingSystem is required']}), ('Food service-Full', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CookingSystem is required']}), ('Food service-Limited', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CookingSystem is required']}), ('Food service-Institutional', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CookingSystem is required']}), ('Food service', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:CookingSystem is required']}), - ('Lodging-Barracks', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Lodging-Institutional', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Lodging with extended amenities', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Lodging with limited amenities', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), - ('Lodging', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Lodging-Barracks', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:LaundrySystem is recommended']}), + ('Lodging-Institutional', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:LaundrySystem is recommended']}), + ('Lodging with extended amenities', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:LaundrySystem is recommended']}), + ('Lodging with limited amenities', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:LaundrySystem is recommended']}), + ('Lodging', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended', 'A linked auc:LaundrySystem is recommended']}), ('Retail-Automobile dealership', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), ('Retail-Mall', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), ('Retail-Strip mall', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), @@ -961,7 +961,7 @@ class TestL200AuditSectionSystems(AssertFailureRolesMixin): ('Utility', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), ('Industrial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), ('Agricultural estate', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required', 'A linked auc:ProcessLoad is required']}), - ('Mixed-use commercial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required']}), + ('Mixed-use commercial', {'ERROR': ['A linked auc:HVACSystem is required', 'A linked auc:LightingSystem is required', 'A linked auc:PlugLoad is required'], 'WARNING': ['A linked auc:DomesticHotWaterSystem is recommended']}), ('Parking', {'WARNING': ['A linked auc:HVACSystem is recommended', 'A linked auc:PlugLoad is recommended'], 'ERROR': ['A linked auc:LightingSystem is required'], 'INFO': ['No linked auc:ProcessLoad found']}), ('Attic', {'INFO': ['No linked auc:HVACSystem found', 'No linked auc:LightingSystem found', 'No linked auc:PlugLoad found']}), ('Basement', {'INFO': ['No linked auc:HVACSystem found', 'No linked auc:LightingSystem found', 'No linked auc:PlugLoad found']}), @@ -1018,38 +1018,13 @@ def test_section_is_invalid_when_missing_required_links(self, section_occupancy_ assert len(occ_classification_elem) == 1 occ_classification_elem = occ_classification_elem[0] occ_classification_elem.text = section_occupancy_classification - # verify it's valid initially failures = validate_schematron(self.schematron, tree, phase='section_systems') self.assert_failure_messages(failures, {}) - # change the ID of the section to "unlink" the systems and create errors section_elem = occ_classification_elem.getparent() section_elem.attrib['ID'] = 'Unlinked-Section' - # -- Act failures = validate_schematron(self.schematron, tree, phase='section_systems') - # -- Assert self.assert_failure_messages(failures, expected_errors) - - -class TestL200AuditSubmeter(AssertFailureRolesMixin): - schematron = os.path.join(v2_2_0_SCH_DIR, 'v2-2-0_L200_Audit.sch') - exemplary_file = os.path.join(v2_2_0_SCH_DIR, 'exemplary_files', 'L200_Audit.xml') - - def test_is_invalid_when_submeter_not_linked_to_parent(self): - # -- Setup - tree = etree.parse(self.exemplary_file) - - # remove the link to parent resource - remove_xpath = '/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Reports/auc:Report/auc:Scenarios/auc:Scenario[auc:ScenarioType/auc:CurrentBuilding/auc:CalculationMethod/auc:Measured]/auc:ResourceUses/auc:ResourceUse[auc:ParentResourceUseID][1]/auc:ParentResourceUseID' - remove_element(tree, remove_xpath) - - # -- Act - failures = validate_schematron(self.schematron, tree) - - # -- Assert - self.assert_failure_messages(failures, { - 'ERROR': ['ParentResourceUseID must point to a valid resource use'] - }) diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.csv b/schematron/v2.2.0/v2-2-0_L200_Audit.csv index cbf4e5cb..1baf8eca 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.csv +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.csv @@ -476,15 +476,19 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Multifamily""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Multifamily with commercial""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Multifamily individual unit""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public housing""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Residential""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" @@ -497,17 +501,25 @@ "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" "","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Residential treatment center""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" "","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Inpatient hospital""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" "","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is required","ERROR","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is required","ERROR","" "","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Health care-Outpatient rehabilitation""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" @@ -547,7 +559,10 @@ "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" "","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Gas station""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" @@ -560,6 +575,8 @@ "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" "","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Food sales""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" @@ -585,12 +602,17 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Zoo""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Office-Financial""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Office""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Bank""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" @@ -603,15 +625,23 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety station-Police""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety station""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety-Detention center""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is required","ERROR","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is required","ERROR","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety-Correctional facility""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is required","ERROR","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is required","ERROR","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Public safety""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" @@ -619,15 +649,19 @@ "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" "","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is required","ERROR","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Warehouse-Unrefrigerated""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Warehouse-Self-storage""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:HVACSystem found","INFO","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","No linked auc:PlugLoad found","INFO","" +"","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Warehouse""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Assembly-Religious""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" @@ -664,22 +698,31 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Pool""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is required","ERROR","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Bowling alley""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Fitness center""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","","","","","//auc:ProcessLoads/auc:ProcessLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:ProcessLoad is recommended","WARNING","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Ice rink""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" "","","","","","","","","","//auc:RefrigerationSystems/auc:RefrigerationSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:RefrigerationSystem is required","ERROR","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Roller rink""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Recreation-Indoor sport""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" @@ -689,24 +732,32 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Adult""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Higher""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Secondary""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Primary""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Preschool or daycare""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education-Vocational""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Education""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:CookingSystems/auc:CookingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:CookingSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Food service-Fast""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" @@ -730,18 +781,28 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging-Barracks""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging-Institutional""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging with extended amenities""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging with limited amenities""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Lodging""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" +"","","","","","","","","","//auc:LaundrySystems/auc:LaundrySystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LaundrySystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Retail-Automobile dealership""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" @@ -834,6 +895,7 @@ "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Mixed-use commercial""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is required","ERROR","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is required","ERROR","" +"","","","","","","","","","//auc:DomesticHotWaterSystems/auc:DomesticHotWaterSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:DomesticHotWaterSystem is recommended","WARNING","" "","","","","","/auc:BuildingSync/auc:Facilities/auc:Facility/auc:Sites/auc:Site/auc:Buildings/auc:Building/auc:Sections/auc:Section[auc:SectionType/text() != ""Whole building"" and auc:OccupancyClassification/text() = ""Parking""]","False","","","//auc:HVACSystems/auc:HVACSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:HVACSystem is recommended","WARNING","" "","","","","","","","","","//auc:LightingSystems/auc:LightingSystem/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:LightingSystem is required","ERROR","" "","","","","","","","","","//auc:PlugLoads/auc:PlugLoad/auc:LinkedPremises/auc:Section/auc:LinkedSectionID[@IDref = current()/@ID]","A linked auc:PlugLoad is recommended","WARNING","" diff --git a/schematron/v2.2.0/v2-2-0_L200_Audit.sch b/schematron/v2.2.0/v2-2-0_L200_Audit.sch index 872b4b99..6956b291 100644 --- a/schematron/v2.2.0/v2-2-0_L200_Audit.sch +++ b/schematron/v2.2.0/v2-2-0_L200_Audit.sch @@ -1291,21 +1291,25 @@ A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required @@ -1324,13 +1328,18 @@ A linked auc:LightingSystem is required A linked auc:PlugLoad is required A linked auc:RefrigerationSystem is recommended + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:CookingSystem is recommended A linked auc:ProcessLoad is recommended + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required A linked auc:RefrigerationSystem is recommended + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:CookingSystem is recommended A linked auc:ProcessLoad is recommended @@ -1338,7 +1347,10 @@ A linked auc:LightingSystem is required A linked auc:PlugLoad is required A linked auc:RefrigerationSystem is recommended + A linked auc:DomesticHotWaterSystem is required + A linked auc:CookingSystem is required A linked auc:ProcessLoad is recommended + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required @@ -1394,7 +1406,10 @@ A linked auc:LightingSystem is required A linked auc:PlugLoad is required A linked auc:RefrigerationSystem is recommended + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:CookingSystem is recommended A linked auc:ProcessLoad is recommended + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required @@ -1413,6 +1428,8 @@ A linked auc:LightingSystem is required A linked auc:PlugLoad is required A linked auc:RefrigerationSystem is recommended + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:CookingSystem is recommended A linked auc:HVACSystem is required @@ -1450,16 +1467,21 @@ A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:CookingSystem is recommended + A linked auc:ProcessLoad is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required @@ -1480,6 +1502,8 @@ A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:CookingSystem is recommended A linked auc:HVACSystem is required @@ -1490,11 +1514,17 @@ A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is required + A linked auc:CookingSystem is required + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is required + A linked auc:CookingSystem is required + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required @@ -1506,21 +1536,25 @@ A linked auc:LightingSystem is required A linked auc:PlugLoad is recommended A linked auc:RefrigerationSystem is required + A linked auc:ProcessLoad is recommended A linked auc:HVACSystem is recommended A linked auc:LightingSystem is required A linked auc:PlugLoad is recommended + A linked auc:ProcessLoad is recommended No linked auc:HVACSystem found A linked auc:LightingSystem is required No linked auc:PlugLoad found + A linked auc:RefrigerationSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is recommended + A linked auc:ProcessLoad is recommended A linked auc:HVACSystem is required @@ -1581,30 +1615,39 @@ A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is recommended + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:CookingSystem is recommended A linked auc:ProcessLoad is required + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is recommended + A linked auc:CookingSystem is recommended A linked auc:ProcessLoad is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is recommended + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:CookingSystem is recommended A linked auc:ProcessLoad is recommended + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is recommended A linked auc:RefrigerationSystem is required + A linked auc:CookingSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is recommended + A linked auc:CookingSystem is recommended A linked auc:HVACSystem is required @@ -1620,36 +1663,44 @@ A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:CookingSystem is recommended A linked auc:HVACSystem is required @@ -1685,26 +1736,36 @@ A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended + A linked auc:LaundrySystem is recommended A linked auc:HVACSystem is required @@ -1847,6 +1908,7 @@ A linked auc:HVACSystem is required A linked auc:LightingSystem is required A linked auc:PlugLoad is required + A linked auc:DomesticHotWaterSystem is recommended A linked auc:HVACSystem is recommended From 4fb18343c44fee835fc7cb153498570692709b00 Mon Sep 17 00:00:00 2001 From: Ted Summer Date: Fri, 23 Oct 2020 14:39:33 -0600 Subject: [PATCH 76/76] fix(L200): fix exemplary file DHW --- .../v2.2.0/exemplary_files/L200_Audit.xml | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/schematron/v2.2.0/exemplary_files/L200_Audit.xml b/schematron/v2.2.0/exemplary_files/L200_Audit.xml index f3d04aa9..624b7564 100644 --- a/schematron/v2.2.0/exemplary_files/L200_Audit.xml +++ b/schematron/v2.2.0/exemplary_files/L200_Audit.xml @@ -440,6 +440,50 @@ + + + + + + Notes + + 1 + 123 + Continuous + 123 + 123 + + Looped + COP + 123 + 123 + 123 + 123 + 123 + gpm + + + + + + + + + + Electricity + Excellent + + + + + + + + + + 123 + + 123