import datetime
import base64
from lxml import etree
from copy import deepcopy

class _Base():
    ""
    def __repr__(self):
        ""
        return f'<{self.__class__.__name__} {self.tag}>'


    def copy(self):
        ""
        # get root and path to element
        path = []
        element = self
        while True:
            parent = element.getparent()
            if parent is None:
                break
            position = list(parent).index(element)
            path.insert(0,position)
            element = parent
            #break
        path
        root = element

        copy_root = deepcopy(root)  # only works for the root element...

        # get copied element

        copy_element = copy_root
        for i in path:
            copy_element = copy_element[i]

        copy_self = copy_element

        return copy_self


    def display(self, show_values = True):
        ""

        copy_self = self.copy()

        if show_values:

            for element in copy_self.iter():

                if not element.map_codes is None:

                    value = element.map_codes.get(element.text)

                    if not value is None:

                        element.text = f"{element.text} ['{value}']"

        return etree.tostring(copy_self, pretty_print=True).decode()
    
    
    @property
    def sap_xml_properties(self):
        ""
        return ['code', 'value', 'sap_xml_codes'] + self.subclass_method_names


    @property
    def sap_xml_methods(self):
        ""
        return (
            ['copy', 'display'] 
            + [f'add_{x}' for x in self.sap_xml_properties if not x in ['code', 'value', 'sap_xml_codes']]
            )


    @property
    def sap_xml_codes(self):
        ""
        return self.map_codes


class RdSAP_Report(_Base, etree.ElementBase):
    ""
    element_name = "RdSAP-Report"
    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
    element_type = "Energy-Performance-Certificate"
    class_name = "RdSAP_Report"
    documentation = None
    type_documentation = None
    has_text_node = False
    min_occurs = 1
    max_occurs = 1
    python_type_convertor = None
    map_codes = None
    map_values = None
    parent_class_name = None
    parent_method_name = None
    subclass_class_names = ["Calculation_Software_Name", "Calculation_Software_Version", "User_Interface_Name", "User_Interface_Version", "Schema_Version_Original", "Schema_Version_Current", "SAP_Version", "PCDF_Revision_Number", "Previous_EPC_Check", "Energy_Assessment", "SAP_Data", "Report_Header", "Insurance_Details", "ExternalDefinitions_Revision_Number"]
    subclass_method_names = ["calculation_software_name", "calculation_software_version", "user_interface_name", "user_interface_version", "schema_version_original", "schema_version_current", "sap_version", "pcdf_revision_number", "previous_epc_check", "energy_assessment", "sap_data", "report_header", "insurance_details", "externaldefinitions_revision_number"]

    @property
    def calculation_software_name(self): return self.find(f"{{{self.__class__.namespace}}}Calculation-Software-Name")

    def add_calculation_software_name(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Calculation-Software-Name")

    @property
    def calculation_software_version(self): return self.find(f"{{{self.__class__.namespace}}}Calculation-Software-Version")

    def add_calculation_software_version(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Calculation-Software-Version")

    @property
    def user_interface_name(self): return self.find(f"{{{self.__class__.namespace}}}User-Interface-Name")

    def add_user_interface_name(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}User-Interface-Name")

    @property
    def user_interface_version(self): return self.find(f"{{{self.__class__.namespace}}}User-Interface-Version")

    def add_user_interface_version(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}User-Interface-Version")

    @property
    def schema_version_original(self): return self.find(f"{{{self.__class__.namespace}}}Schema-Version-Original")

    def add_schema_version_original(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Schema-Version-Original")

    @property
    def schema_version_current(self): return self.find(f"{{{self.__class__.namespace}}}Schema-Version-Current")

    def add_schema_version_current(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Schema-Version-Current")

    @property
    def sap_version(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Version")

    def add_sap_version(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Version")

    @property
    def pcdf_revision_number(self): return self.find(f"{{{self.__class__.namespace}}}PCDF-Revision-Number")

    def add_pcdf_revision_number(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}PCDF-Revision-Number")

    @property
    def previous_epc_check(self): return self.find(f"{{{self.__class__.namespace}}}Previous-EPC-Check")

    def add_previous_epc_check(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Previous-EPC-Check")

    @property
    def energy_assessment(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Assessment")

    def add_energy_assessment(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Assessment")

    @property
    def sap_data(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Data")

    def add_sap_data(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Data")

    @property
    def report_header(self): return self.find(f"{{{self.__class__.namespace}}}Report-Header")

    def add_report_header(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Report-Header")

    @property
    def insurance_details(self): return self.find(f"{{{self.__class__.namespace}}}Insurance-Details")

    def add_insurance_details(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Insurance-Details")

    @property
    def externaldefinitions_revision_number(self): return self.find(f"{{{self.__class__.namespace}}}ExternalDefinitions-Revision-Number")

    def add_externaldefinitions_revision_number(self):
        return etree.SubElement(self,f"{{{self.__class__.namespace}}}ExternalDefinitions-Revision-Number")

    class Calculation_Software_Name(_Base, etree.ElementBase):
        ""
        element_name = "Calculation-Software-Name"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "xs:string"
        class_name = "Calculation_Software_Name"
        documentation = """Name of the software used to perform the SAP calculation."""
        type_documentation = None
        has_text_node = True
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = str
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = []
        subclass_method_names = []
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def value(self): return self.text
    
        @value.setter
        def value(self, value): self.text = str(value)
    
        @property
        def code(self): return self.text
    
        @code.setter
        def code(self, code): self.text = str(code)
    
    class Calculation_Software_Version(_Base, etree.ElementBase):
        ""
        element_name = "Calculation-Software-Version"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "xs:string"
        class_name = "Calculation_Software_Version"
        documentation = """Version of the software used to perform the SAP calculation."""
        type_documentation = None
        has_text_node = True
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = str
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = []
        subclass_method_names = []
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def value(self): return self.text
    
        @value.setter
        def value(self, value): self.text = str(value)
    
        @property
        def code(self): return self.text
    
        @code.setter
        def code(self, code): self.text = str(code)
    
    class User_Interface_Name(_Base, etree.ElementBase):
        ""
        element_name = "User-Interface-Name"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "xs:string"
        class_name = "User_Interface_Name"
        documentation = """The name of the user interface used for data entry. This can be the same as Calculation-Software-Name, or different."""
        type_documentation = None
        has_text_node = True
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = str
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = []
        subclass_method_names = []
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def value(self): return self.text
    
        @value.setter
        def value(self, value): self.text = str(value)
    
        @property
        def code(self): return self.text
    
        @code.setter
        def code(self, code): self.text = str(code)
    
    class User_Interface_Version(_Base, etree.ElementBase):
        ""
        element_name = "User-Interface-Version"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "xs:string"
        class_name = "User_Interface_Version"
        documentation = """The version of the user interface used for data entry. This can be the same as Calculation-Software-Version, or different."""
        type_documentation = None
        has_text_node = True
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = str
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = []
        subclass_method_names = []
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def value(self): return self.text
    
        @value.setter
        def value(self, value): self.text = str(value)
    
        @property
        def code(self): return self.text
    
        @code.setter
        def code(self, code): self.text = str(code)
    
    class Schema_Version_Original(_Base, etree.ElementBase):
        ""
        element_name = "Schema-Version-Original"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "xs:string"
        class_name = "Schema_Version_Original"
        documentation = """The schema version that the data conformed to when it was lodged."""
        type_documentation = None
        has_text_node = True
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = str
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = []
        subclass_method_names = []
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def value(self): return self.text
    
        @value.setter
        def value(self, value): self.text = str(value)
    
        @property
        def code(self): return self.text
    
        @code.setter
        def code(self, code): self.text = str(code)
    
    class Schema_Version_Current(_Base, etree.ElementBase):
        ""
        element_name = "Schema-Version-Current"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "xs:string"
        class_name = "Schema_Version_Current"
        documentation = """The schema version to which the data conforms. This node is inserted by the register when a retrieval is requested. It must not be present in a lodgement being sent to the register."""
        type_documentation = None
        has_text_node = True
        min_occurs = 0
        max_occurs = 1
        python_type_convertor = str
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = []
        subclass_method_names = []
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def value(self): return self.text
    
        @value.setter
        def value(self, value): self.text = str(value)
    
        @property
        def code(self): return self.text
    
        @code.setter
        def code(self, code): self.text = str(code)
    
    class SAP_Version(_Base, etree.ElementBase):
        ""
        element_name = "SAP-Version"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "SAP-VersionCode"
        class_name = "SAP_Version"
        documentation = """Version of RdSAP that was used for the assessment."""
        type_documentation = None
        has_text_node = True
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = str
        map_codes = {'9.80': 'SAP 2005 version 9.80, dated October 2005', '9.81': 'SAP version 9.81, dated January 2008', '9.82': 'SAP version 9.82, dated Jun 2008', '9.83': 'SAP version 9.83, dated Jun 2009', '9.90': 'SAP version 9.90, dated March 2010', '9.91': 'SAP version 9.91, dated January 2012', '9.92': 'SAP version 9.92, dated Oct 2013', '9.93': 'SAP version 9.93, dated Jun 2017', '9.94': 'SAP version 9.94, dated Feb 2019', '10.2': 'SAP version 10.2, dated April 2023'}
        map_values = {'SAP 2005 version 9.80, dated October 2005': '9.80', 'SAP version 9.81, dated January 2008': '9.81', 'SAP version 9.82, dated Jun 2008': '9.82', 'SAP version 9.83, dated Jun 2009': '9.83', 'SAP version 9.90, dated March 2010': '9.90', 'SAP version 9.91, dated January 2012': '9.91', 'SAP version 9.92, dated Oct 2013': '9.92', 'SAP version 9.93, dated Jun 2017': '9.93', 'SAP version 9.94, dated Feb 2019': '9.94', 'SAP version 10.2, dated April 2023': '10.2'}
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = []
        subclass_method_names = []
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def value(self): return self.__class__.map_codes[self.text]
    
        @value.setter
        def value(self, value):
            if value in self.__class__.map_values:
                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
            else:
                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
    
        @property
        def code(self): return self.text
    
        @code.setter
        def code(self, code):
            if code in self.__class__.map_codes:
                self.text = str(code)
            else:
                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
    
    class PCDF_Revision_Number(_Base, etree.ElementBase):
        ""
        element_name = "PCDF-Revision-Number"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "xs:string"
        class_name = "PCDF_Revision_Number"
        documentation = None
        type_documentation = None
        has_text_node = True
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = str
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = []
        subclass_method_names = []
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def value(self): return self.text
    
        @value.setter
        def value(self, value): self.text = str(value)
    
        @property
        def code(self): return self.text
    
        @code.setter
        def code(self, code): self.text = str(code)
    
    class Previous_EPC_Check(_Base, etree.ElementBase):
        ""
        element_name = "Previous-EPC-Check"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "Previous-EPC-Check"
        class_name = "Previous_EPC_Check"
        documentation = None
        type_documentation = None
        has_text_node = False
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = None
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = ["Previous_EPC_Checked", "Previous_EPC_Exists", "Previous_EPC_Reason_Code"]
        subclass_method_names = ["previous_epc_checked", "previous_epc_exists", "previous_epc_reason_code"]
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def previous_epc_checked(self): return self.find(f"{{{self.__class__.namespace}}}Previous-EPC-Checked")
    
        def add_previous_epc_checked(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Previous-EPC-Checked")
    
        @property
        def previous_epc_exists(self): return self.find(f"{{{self.__class__.namespace}}}Previous-EPC-Exists")
    
        def add_previous_epc_exists(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Previous-EPC-Exists")
    
        @property
        def previous_epc_reason_code(self): return self.find(f"{{{self.__class__.namespace}}}Previous-EPC-Reason-Code")
    
        def add_previous_epc_reason_code(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Previous-EPC-Reason-Code")
    
        class Previous_EPC_Checked(_Base, etree.ElementBase):
            ""
            element_name = "Previous-EPC-Checked"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "PreviousEpcCheckedCode"
            class_name = "Previous_EPC_Checked"
            documentation = """Confirm a check for the existence of an EPC before carrying out another energy assessment."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'Y': 'Confirm a check for the existence of an EPC before carrying out another energy assessment', 'NR': 'not recorded; for backwards compatibility only, do not use'}
            map_values = {'Confirm a check for the existence of an EPC before carrying out another energy assessment': 'Y', 'not recorded; for backwards compatibility only, do not use': 'NR'}
            parent_class_name = "Previous_EPC_Check"
            parent_method_name ="previous_epc_check"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def previous_epc_check(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
        class Previous_EPC_Exists(_Base, etree.ElementBase):
            ""
            element_name = "Previous-EPC-Exists"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "PreviousEpcExistsCode"
            class_name = "Previous_EPC_Exists"
            documentation = """Does an EPC exist at the point of carrying out this energy assessment."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'Y': 'A previous EPC exists', 'N': 'A previous EPC does not exist', 'NR': 'not recorded; for backwards compatibility only, do not use'}
            map_values = {'A previous EPC exists': 'Y', 'A previous EPC does not exist': 'N', 'not recorded; for backwards compatibility only, do not use': 'NR'}
            parent_class_name = "Previous_EPC_Check"
            parent_method_name ="previous_epc_check"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def previous_epc_check(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
        class Previous_EPC_Reason_Code(_Base, etree.ElementBase):
            ""
            element_name = "Previous-EPC-Reason-Code"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "PreviousEpcReasonCode"
            class_name = "Previous_EPC_Reason_Code"
            documentation = """Reason for not using a previous RdSAP EPC."""
            type_documentation = None
            has_text_node = True
            min_occurs = 0
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'1': 'EPC has expired', '2': 'Building fabric and/or services has changed since the last EPC assessment and a new EPC has been commissioned for that building', '3': 'Assessor instructed to produce a new EPC upon request from building owner/tenant/landlord after confirming to the requestor that a valid EPC already exists', '4': 'Duplicate EPC produced by systematic or human error', '5': "Replacement of an erroneous EPC where the original EPC has been marked 'not for issue'", '6': "Replacement of an erroneous EPC where the original EPC has not been marked 'not for issue'", '7': 'Green Deal Advice Report: existing EPC pre-dates 1 April 2012', '8': 'Green Deal Advice Report: previous EPC is inaccurate', '9': 'Renewable Heat Incentive (RHI): existing EPC is more than 24 months old on the date of RHI application', '10': 'Feed-In-Tariff: householder has chosen to undertake energy efficiency measures to improve the previous EPC rating before installing solar panels and applying for FITs', '11': 'Rental purposes: existing EPC is more than 10 years old or is below an E rating', '12': 'A valid EPC is required to demonstrate that the building has an EPC rating of E, F or G to determine if the householder is eligible for Energy Company Obligation scheme measures', '13': 'A valid EPC is required to demonstrate that the building has an EPC rating of D to determine if the householder is eligible for Energy Company Obligation scheme innovation measures', '14': 'A valid EPC is required to demonstrate that the building has an EPC rating of E, F or G to determine if the social housing tenant is eligible for the Energy Company Obligation scheme First Time Central Heating measures', '15': 'A valid EPC less than 12 weeks old is needed to support production of a Home Report for the marketed sale of the dwelling'}
            map_values = {'EPC has expired': '1', 'Building fabric and/or services has changed since the last EPC assessment and a new EPC has been commissioned for that building': '2', 'Assessor instructed to produce a new EPC upon request from building owner/tenant/landlord after confirming to the requestor that a valid EPC already exists': '3', 'Duplicate EPC produced by systematic or human error': '4', "Replacement of an erroneous EPC where the original EPC has been marked 'not for issue'": '5', "Replacement of an erroneous EPC where the original EPC has not been marked 'not for issue'": '6', 'Green Deal Advice Report: existing EPC pre-dates 1 April 2012': '7', 'Green Deal Advice Report: previous EPC is inaccurate': '8', 'Renewable Heat Incentive (RHI): existing EPC is more than 24 months old on the date of RHI application': '9', 'Feed-In-Tariff: householder has chosen to undertake energy efficiency measures to improve the previous EPC rating before installing solar panels and applying for FITs': '10', 'Rental purposes: existing EPC is more than 10 years old or is below an E rating': '11', 'A valid EPC is required to demonstrate that the building has an EPC rating of E, F or G to determine if the householder is eligible for Energy Company Obligation scheme measures': '12', 'A valid EPC is required to demonstrate that the building has an EPC rating of D to determine if the householder is eligible for Energy Company Obligation scheme innovation measures': '13', 'A valid EPC is required to demonstrate that the building has an EPC rating of E, F or G to determine if the social housing tenant is eligible for the Energy Company Obligation scheme First Time Central Heating measures': '14', 'A valid EPC less than 12 weeks old is needed to support production of a Home Report for the marketed sale of the dwelling': '15'}
            parent_class_name = "Previous_EPC_Check"
            parent_method_name ="previous_epc_check"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def previous_epc_check(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
    class Energy_Assessment(_Base, etree.ElementBase):
        ""
        element_name = "Energy-Assessment"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "Energy-Assessment"
        class_name = "Energy_Assessment"
        documentation = None
        type_documentation = """Energy Efficiency Assessment Report is an inspection report whose purpose is to assess the energy efficiency of the inspected property and provide energy ratings for the significant heat-loss features of the property. The report also identifies a number of potential improvements that may be made to the property in order to increase the energy efficiency."""
        has_text_node = False
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = None
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = ["Property_Summary", "Energy_Use", "Suggested_Improvements", "LZC_Energy_Sources", "Addendum", "Renewable_Heat_Incentive", "Green_Deal_Package", "Alternative_Improvements"]
        subclass_method_names = ["property_summary", "energy_use", "suggested_improvements", "lzc_energy_sources", "addendum", "renewable_heat_incentive", "green_deal_package", "alternative_improvements"]
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def property_summary(self): return self.find(f"{{{self.__class__.namespace}}}Property-Summary")
    
        def add_property_summary(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Property-Summary")
    
        @property
        def energy_use(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Use")
    
        def add_energy_use(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Use")
    
        @property
        def suggested_improvements(self): return self.find(f"{{{self.__class__.namespace}}}Suggested-Improvements")
    
        def add_suggested_improvements(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Suggested-Improvements")
    
        @property
        def lzc_energy_sources(self): return self.find(f"{{{self.__class__.namespace}}}LZC-Energy-Sources")
    
        def add_lzc_energy_sources(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}LZC-Energy-Sources")
    
        @property
        def addendum(self): return self.find(f"{{{self.__class__.namespace}}}Addendum")
    
        def add_addendum(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Addendum")
    
        @property
        def renewable_heat_incentive(self): return self.find(f"{{{self.__class__.namespace}}}Renewable-Heat-Incentive")
    
        def add_renewable_heat_incentive(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Renewable-Heat-Incentive")
    
        @property
        def green_deal_package(self): return self.find(f"{{{self.__class__.namespace}}}Green-Deal-Package")
    
        def add_green_deal_package(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Green-Deal-Package")
    
        @property
        def alternative_improvements(self): return self.find(f"{{{self.__class__.namespace}}}Alternative-Improvements")
    
        def add_alternative_improvements(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Alternative-Improvements")
    
        class Property_Summary(_Base, etree.ElementBase):
            ""
            element_name = "Property-Summary"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "Property-Summary"
            class_name = "Property_Summary"
            documentation = None
            type_documentation = None
            has_text_node = False
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Energy_Assessment"
            parent_method_name ="energy_assessment"
            subclass_class_names = ["Wall", "Roof", "Floor", "Window", "Air_Tightness", "Main_Heating", "Main_Heating_Controls", "Hot_Water", "Lighting", "Secondary_Heating", "Has_Hot_Water_Cylinder", "Has_Heated_Separate_Conservatory", "Dwelling_Type", "Total_Floor_Area", "Has_Fixed_Air_Conditioning", "Multiple_Glazed_Proportion", "Multiple_Glazed_Proportion_NR"]
            subclass_method_names = ["wall", "roof", "floor", "window", "air_tightness", "main_heating", "main_heating_controls", "hot_water", "lighting", "secondary_heating", "has_hot_water_cylinder", "has_heated_separate_conservatory", "dwelling_type", "total_floor_area", "has_fixed_air_conditioning", "multiple_glazed_proportion", "multiple_glazed_proportion_nr"]
        
            @property
            def energy_assessment(self): return self.getparent()
        
            @property
            def wall(self): return self.findall(f"{{{self.__class__.namespace}}}Wall")
        
            def add_wall(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall")
        
            @property
            def roof(self): return self.findall(f"{{{self.__class__.namespace}}}Roof")
        
            def add_roof(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Roof")
        
            @property
            def floor(self): return self.findall(f"{{{self.__class__.namespace}}}Floor")
        
            def add_floor(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Floor")
        
            @property
            def window(self): return self.find(f"{{{self.__class__.namespace}}}Window")
        
            def add_window(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Window")
        
            @property
            def air_tightness(self): return self.find(f"{{{self.__class__.namespace}}}Air-Tightness")
        
            def add_air_tightness(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Air-Tightness")
        
            @property
            def main_heating(self): return self.findall(f"{{{self.__class__.namespace}}}Main-Heating")
        
            def add_main_heating(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Heating")
        
            @property
            def main_heating_controls(self): return self.findall(f"{{{self.__class__.namespace}}}Main-Heating-Controls")
        
            def add_main_heating_controls(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Heating-Controls")
        
            @property
            def hot_water(self): return self.find(f"{{{self.__class__.namespace}}}Hot-Water")
        
            def add_hot_water(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Hot-Water")
        
            @property
            def lighting(self): return self.find(f"{{{self.__class__.namespace}}}Lighting")
        
            def add_lighting(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Lighting")
        
            @property
            def secondary_heating(self): return self.find(f"{{{self.__class__.namespace}}}Secondary-Heating")
        
            def add_secondary_heating(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Secondary-Heating")
        
            @property
            def has_hot_water_cylinder(self): return self.find(f"{{{self.__class__.namespace}}}Has-Hot-Water-Cylinder")
        
            def add_has_hot_water_cylinder(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Has-Hot-Water-Cylinder")
        
            @property
            def has_heated_separate_conservatory(self): return self.find(f"{{{self.__class__.namespace}}}Has-Heated-Separate-Conservatory")
        
            def add_has_heated_separate_conservatory(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Has-Heated-Separate-Conservatory")
        
            @property
            def dwelling_type(self): return self.find(f"{{{self.__class__.namespace}}}Dwelling-Type")
        
            def add_dwelling_type(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Dwelling-Type")
        
            @property
            def total_floor_area(self): return self.find(f"{{{self.__class__.namespace}}}Total-Floor-Area")
        
            def add_total_floor_area(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Total-Floor-Area")
        
            @property
            def has_fixed_air_conditioning(self): return self.find(f"{{{self.__class__.namespace}}}Has-Fixed-Air-Conditioning")
        
            def add_has_fixed_air_conditioning(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Has-Fixed-Air-Conditioning")
        
            @property
            def multiple_glazed_proportion(self): return self.find(f"{{{self.__class__.namespace}}}Multiple-Glazed-Proportion")
        
            def add_multiple_glazed_proportion(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Multiple-Glazed-Proportion")
        
            @property
            def multiple_glazed_proportion_nr(self): return self.find(f"{{{self.__class__.namespace}}}Multiple-Glazed-Proportion-NR")
        
            def add_multiple_glazed_proportion_nr(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Multiple-Glazed-Proportion-NR")
        
            class Wall(_Base, etree.ElementBase):
                ""
                element_name = "Wall"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertySummaryType"
                class_name = "Wall"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = "unbounded"
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = ["Description", "Energy_Efficiency_Rating", "Environmental_Efficiency_Rating"]
                subclass_method_names = ["description", "energy_efficiency_rating", "environmental_efficiency_rating"]
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
            
                def add_description(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
            
                @property
                def energy_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                def add_energy_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                @property
                def environmental_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                def add_environmental_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                class Description(_Base, etree.ElementBase):
                    ""
                    element_name = "Description"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Sentence"
                    class_name = "Description"
                    documentation = """Overall description of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Wall"
                    parent_method_name ="wall"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def wall(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Energy_Efficiency_Rating"
                    documentation = """Overall summary of the energy efficiency of the property feature."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Wall"
                    parent_method_name ="wall"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def wall(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Environmental_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Environmental_Efficiency_Rating"
                    documentation = """Summary of the environmental efficiency of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Wall"
                    parent_method_name ="wall"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def wall(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Roof(_Base, etree.ElementBase):
                ""
                element_name = "Roof"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertySummaryType"
                class_name = "Roof"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = "unbounded"
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = ["Description", "Energy_Efficiency_Rating", "Environmental_Efficiency_Rating"]
                subclass_method_names = ["description", "energy_efficiency_rating", "environmental_efficiency_rating"]
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
            
                def add_description(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
            
                @property
                def energy_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                def add_energy_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                @property
                def environmental_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                def add_environmental_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                class Description(_Base, etree.ElementBase):
                    ""
                    element_name = "Description"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Sentence"
                    class_name = "Description"
                    documentation = """Overall description of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Roof"
                    parent_method_name ="roof"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def roof(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Energy_Efficiency_Rating"
                    documentation = """Overall summary of the energy efficiency of the property feature."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Roof"
                    parent_method_name ="roof"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def roof(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Environmental_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Environmental_Efficiency_Rating"
                    documentation = """Summary of the environmental efficiency of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Roof"
                    parent_method_name ="roof"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def roof(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Floor(_Base, etree.ElementBase):
                ""
                element_name = "Floor"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertySummaryType"
                class_name = "Floor"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = "unbounded"
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = ["Description", "Energy_Efficiency_Rating", "Environmental_Efficiency_Rating"]
                subclass_method_names = ["description", "energy_efficiency_rating", "environmental_efficiency_rating"]
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
            
                def add_description(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
            
                @property
                def energy_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                def add_energy_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                @property
                def environmental_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                def add_environmental_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                class Description(_Base, etree.ElementBase):
                    ""
                    element_name = "Description"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Sentence"
                    class_name = "Description"
                    documentation = """Overall description of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Floor"
                    parent_method_name ="floor"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def floor(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Energy_Efficiency_Rating"
                    documentation = """Overall summary of the energy efficiency of the property feature."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Floor"
                    parent_method_name ="floor"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def floor(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Environmental_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Environmental_Efficiency_Rating"
                    documentation = """Summary of the environmental efficiency of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Floor"
                    parent_method_name ="floor"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def floor(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Window(_Base, etree.ElementBase):
                ""
                element_name = "Window"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertySummaryType"
                class_name = "Window"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = ["Description", "Energy_Efficiency_Rating", "Environmental_Efficiency_Rating"]
                subclass_method_names = ["description", "energy_efficiency_rating", "environmental_efficiency_rating"]
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
            
                def add_description(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
            
                @property
                def energy_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                def add_energy_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                @property
                def environmental_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                def add_environmental_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                class Description(_Base, etree.ElementBase):
                    ""
                    element_name = "Description"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Sentence"
                    class_name = "Description"
                    documentation = """Overall description of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Window"
                    parent_method_name ="window"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def window(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Energy_Efficiency_Rating"
                    documentation = """Overall summary of the energy efficiency of the property feature."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Window"
                    parent_method_name ="window"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def window(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Environmental_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Environmental_Efficiency_Rating"
                    documentation = """Summary of the environmental efficiency of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Window"
                    parent_method_name ="window"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def window(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Air_Tightness(_Base, etree.ElementBase):
                ""
                element_name = "Air-Tightness"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertySummaryType"
                class_name = "Air_Tightness"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = ["Description", "Energy_Efficiency_Rating", "Environmental_Efficiency_Rating"]
                subclass_method_names = ["description", "energy_efficiency_rating", "environmental_efficiency_rating"]
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
            
                def add_description(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
            
                @property
                def energy_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                def add_energy_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                @property
                def environmental_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                def add_environmental_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                class Description(_Base, etree.ElementBase):
                    ""
                    element_name = "Description"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Sentence"
                    class_name = "Description"
                    documentation = """Overall description of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Air_Tightness"
                    parent_method_name ="air_tightness"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def air_tightness(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Energy_Efficiency_Rating"
                    documentation = """Overall summary of the energy efficiency of the property feature."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Air_Tightness"
                    parent_method_name ="air_tightness"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def air_tightness(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Environmental_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Environmental_Efficiency_Rating"
                    documentation = """Summary of the environmental efficiency of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Air_Tightness"
                    parent_method_name ="air_tightness"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def air_tightness(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Main_Heating(_Base, etree.ElementBase):
                ""
                element_name = "Main-Heating"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertySummaryType"
                class_name = "Main_Heating"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = 2
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = ["Description", "Energy_Efficiency_Rating", "Environmental_Efficiency_Rating"]
                subclass_method_names = ["description", "energy_efficiency_rating", "environmental_efficiency_rating"]
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
            
                def add_description(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
            
                @property
                def energy_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                def add_energy_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                @property
                def environmental_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                def add_environmental_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                class Description(_Base, etree.ElementBase):
                    ""
                    element_name = "Description"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Sentence"
                    class_name = "Description"
                    documentation = """Overall description of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Main_Heating"
                    parent_method_name ="main_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def main_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Energy_Efficiency_Rating"
                    documentation = """Overall summary of the energy efficiency of the property feature."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Main_Heating"
                    parent_method_name ="main_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def main_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Environmental_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Environmental_Efficiency_Rating"
                    documentation = """Summary of the environmental efficiency of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Main_Heating"
                    parent_method_name ="main_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def main_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Main_Heating_Controls(_Base, etree.ElementBase):
                ""
                element_name = "Main-Heating-Controls"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertySummaryType"
                class_name = "Main_Heating_Controls"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = 2
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = ["Description", "Energy_Efficiency_Rating", "Environmental_Efficiency_Rating"]
                subclass_method_names = ["description", "energy_efficiency_rating", "environmental_efficiency_rating"]
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
            
                def add_description(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
            
                @property
                def energy_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                def add_energy_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                @property
                def environmental_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                def add_environmental_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                class Description(_Base, etree.ElementBase):
                    ""
                    element_name = "Description"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Sentence"
                    class_name = "Description"
                    documentation = """Overall description of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Main_Heating_Controls"
                    parent_method_name ="main_heating_controls"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def main_heating_controls(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Energy_Efficiency_Rating"
                    documentation = """Overall summary of the energy efficiency of the property feature."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Main_Heating_Controls"
                    parent_method_name ="main_heating_controls"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def main_heating_controls(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Environmental_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Environmental_Efficiency_Rating"
                    documentation = """Summary of the environmental efficiency of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Main_Heating_Controls"
                    parent_method_name ="main_heating_controls"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def main_heating_controls(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Hot_Water(_Base, etree.ElementBase):
                ""
                element_name = "Hot-Water"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertySummaryType"
                class_name = "Hot_Water"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = ["Description", "Energy_Efficiency_Rating", "Environmental_Efficiency_Rating"]
                subclass_method_names = ["description", "energy_efficiency_rating", "environmental_efficiency_rating"]
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
            
                def add_description(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
            
                @property
                def energy_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                def add_energy_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                @property
                def environmental_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                def add_environmental_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                class Description(_Base, etree.ElementBase):
                    ""
                    element_name = "Description"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Sentence"
                    class_name = "Description"
                    documentation = """Overall description of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Hot_Water"
                    parent_method_name ="hot_water"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def hot_water(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Energy_Efficiency_Rating"
                    documentation = """Overall summary of the energy efficiency of the property feature."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Hot_Water"
                    parent_method_name ="hot_water"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def hot_water(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Environmental_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Environmental_Efficiency_Rating"
                    documentation = """Summary of the environmental efficiency of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Hot_Water"
                    parent_method_name ="hot_water"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def hot_water(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Lighting(_Base, etree.ElementBase):
                ""
                element_name = "Lighting"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertySummaryType"
                class_name = "Lighting"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = ["Description", "Energy_Efficiency_Rating", "Environmental_Efficiency_Rating"]
                subclass_method_names = ["description", "energy_efficiency_rating", "environmental_efficiency_rating"]
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
            
                def add_description(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
            
                @property
                def energy_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                def add_energy_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                @property
                def environmental_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                def add_environmental_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                class Description(_Base, etree.ElementBase):
                    ""
                    element_name = "Description"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Sentence"
                    class_name = "Description"
                    documentation = """Overall description of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Lighting"
                    parent_method_name ="lighting"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def lighting(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Energy_Efficiency_Rating"
                    documentation = """Overall summary of the energy efficiency of the property feature."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Lighting"
                    parent_method_name ="lighting"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def lighting(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Environmental_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Environmental_Efficiency_Rating"
                    documentation = """Summary of the environmental efficiency of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Lighting"
                    parent_method_name ="lighting"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def lighting(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Secondary_Heating(_Base, etree.ElementBase):
                ""
                element_name = "Secondary-Heating"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertySummaryType"
                class_name = "Secondary_Heating"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = ["Description", "Energy_Efficiency_Rating", "Environmental_Efficiency_Rating"]
                subclass_method_names = ["description", "energy_efficiency_rating", "environmental_efficiency_rating"]
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
            
                def add_description(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
            
                @property
                def energy_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                def add_energy_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Efficiency-Rating")
            
                @property
                def environmental_efficiency_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                def add_environmental_efficiency_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Efficiency-Rating")
            
                class Description(_Base, etree.ElementBase):
                    ""
                    element_name = "Description"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Sentence"
                    class_name = "Description"
                    documentation = """Overall description of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Secondary_Heating"
                    parent_method_name ="secondary_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def secondary_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Energy_Efficiency_Rating"
                    documentation = """Overall summary of the energy efficiency of the property feature."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Secondary_Heating"
                    parent_method_name ="secondary_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def secondary_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Environmental_Efficiency_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Efficiency-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyEfficiencySummaryCode"
                    class_name = "Environmental_Efficiency_Rating"
                    documentation = """Summary of the environmental efficiency of the property feature"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'N/A', '1': 'Very Poor', '2': 'Poor', '3': 'Average', '4': 'Good', '5': 'Very Good'}
                    map_values = {'N/A': '0', 'Very Poor': '1', 'Poor': '2', 'Average': '3', 'Good': '4', 'Very Good': '5'}
                    parent_class_name = "Secondary_Heating"
                    parent_method_name ="secondary_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def secondary_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Has_Hot_Water_Cylinder(_Base, etree.ElementBase):
                ""
                element_name = "Has-Hot-Water-Cylinder"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "Has_Hot_Water_Cylinder"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Has_Heated_Separate_Conservatory(_Base, etree.ElementBase):
                ""
                element_name = "Has-Heated-Separate-Conservatory"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "Has_Heated_Separate_Conservatory"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Dwelling_Type(_Base, etree.ElementBase):
                ""
                element_name = "Dwelling-Type"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Sentence"
                class_name = "Dwelling_Type"
                documentation = """A string such as Detached house or Top-floor flat"""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Total_Floor_Area(_Base, etree.ElementBase):
                ""
                element_name = "Total-Floor-Area"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:integer"
                class_name = "Total_Floor_Area"
                documentation = """A number such as 125"""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Has_Fixed_Air_Conditioning(_Base, etree.ElementBase):
                ""
                element_name = "Has-Fixed-Air-Conditioning"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "Has_Fixed_Air_Conditioning"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Multiple_Glazed_Proportion(_Base, etree.ElementBase):
                ""
                element_name = "Multiple-Glazed-Proportion"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Percentage"
                class_name = "Multiple_Glazed_Proportion"
                documentation = """If all windows measured, fraction of windows that are multiply glazed to nearest 1%. If windows not measured, same as SAP-Data\Energy-Assessment\Property-Summary\Multiple-Glazed-Proportion."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Multiple_Glazed_Proportion_NR(_Base, etree.ElementBase):
                ""
                element_name = "Multiple-Glazed-Proportion-NR"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:string"
                class_name = "Multiple_Glazed_Proportion_NR"
                documentation = """For backward compatibility only, do not use."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Property_Summary"
                parent_method_name ="property_summary"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def property_summary(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
        class Energy_Use(_Base, etree.ElementBase):
            ""
            element_name = "Energy-Use"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "Energy-Use"
            class_name = "Energy_Use"
            documentation = None
            type_documentation = """Part of an Energy Report summarising the results of the various energy calculations made by the Home Inspector."""
            has_text_node = False
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Energy_Assessment"
            parent_method_name ="energy_assessment"
            subclass_class_names = ["Energy_Rating_Current", "Energy_Rating_Potential", "Energy_Rating_Average", "Environmental_Impact_Current", "Environmental_Impact_Potential", "Energy_Consumption_Current", "Energy_Consumption_Potential", "CO2_Emissions_Current", "CO2_Emissions_Current_Per_Floor_Area", "CO2_Emissions_Potential", "Lighting_Cost_Current", "Lighting_Cost_Potential", "Heating_Cost_Current", "Heating_Cost_Potential", "Hot_Water_Cost_Current", "Hot_Water_Cost_Potential"]
            subclass_method_names = ["energy_rating_current", "energy_rating_potential", "energy_rating_average", "environmental_impact_current", "environmental_impact_potential", "energy_consumption_current", "energy_consumption_potential", "co2_emissions_current", "co2_emissions_current_per_floor_area", "co2_emissions_potential", "lighting_cost_current", "lighting_cost_potential", "heating_cost_current", "heating_cost_potential", "hot_water_cost_current", "hot_water_cost_potential"]
        
            @property
            def energy_assessment(self): return self.getparent()
        
            @property
            def energy_rating_current(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Rating-Current")
        
            def add_energy_rating_current(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Rating-Current")
        
            @property
            def energy_rating_potential(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Rating-Potential")
        
            def add_energy_rating_potential(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Rating-Potential")
        
            @property
            def energy_rating_average(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Rating-Average")
        
            def add_energy_rating_average(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Rating-Average")
        
            @property
            def environmental_impact_current(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Impact-Current")
        
            def add_environmental_impact_current(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Impact-Current")
        
            @property
            def environmental_impact_potential(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Impact-Potential")
        
            def add_environmental_impact_potential(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Impact-Potential")
        
            @property
            def energy_consumption_current(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Consumption-Current")
        
            def add_energy_consumption_current(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Consumption-Current")
        
            @property
            def energy_consumption_potential(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Consumption-Potential")
        
            def add_energy_consumption_potential(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Consumption-Potential")
        
            @property
            def co2_emissions_current(self): return self.find(f"{{{self.__class__.namespace}}}CO2-Emissions-Current")
        
            def add_co2_emissions_current(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}CO2-Emissions-Current")
        
            @property
            def co2_emissions_current_per_floor_area(self): return self.find(f"{{{self.__class__.namespace}}}CO2-Emissions-Current-Per-Floor-Area")
        
            def add_co2_emissions_current_per_floor_area(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}CO2-Emissions-Current-Per-Floor-Area")
        
            @property
            def co2_emissions_potential(self): return self.find(f"{{{self.__class__.namespace}}}CO2-Emissions-Potential")
        
            def add_co2_emissions_potential(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}CO2-Emissions-Potential")
        
            @property
            def lighting_cost_current(self): return self.find(f"{{{self.__class__.namespace}}}Lighting-Cost-Current")
        
            def add_lighting_cost_current(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Lighting-Cost-Current")
        
            @property
            def lighting_cost_potential(self): return self.find(f"{{{self.__class__.namespace}}}Lighting-Cost-Potential")
        
            def add_lighting_cost_potential(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Lighting-Cost-Potential")
        
            @property
            def heating_cost_current(self): return self.find(f"{{{self.__class__.namespace}}}Heating-Cost-Current")
        
            def add_heating_cost_current(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Heating-Cost-Current")
        
            @property
            def heating_cost_potential(self): return self.find(f"{{{self.__class__.namespace}}}Heating-Cost-Potential")
        
            def add_heating_cost_potential(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Heating-Cost-Potential")
        
            @property
            def hot_water_cost_current(self): return self.find(f"{{{self.__class__.namespace}}}Hot-Water-Cost-Current")
        
            def add_hot_water_cost_current(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Hot-Water-Cost-Current")
        
            @property
            def hot_water_cost_potential(self): return self.find(f"{{{self.__class__.namespace}}}Hot-Water-Cost-Potential")
        
            def add_hot_water_cost_potential(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Hot-Water-Cost-Potential")
        
            class Energy_Rating_Current(_Base, etree.ElementBase):
                ""
                element_name = "Energy-Rating-Current"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "EnergyRatingType"
                class_name = "Energy_Rating_Current"
                documentation = """The Current Energy Rating of the Property"""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Energy_Rating_Potential(_Base, etree.ElementBase):
                ""
                element_name = "Energy-Rating-Potential"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "EnergyRatingType"
                class_name = "Energy_Rating_Potential"
                documentation = """The overall Energy Rating for the Property being assessed."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Energy_Rating_Average(_Base, etree.ElementBase):
                ""
                element_name = "Energy-Rating-Average"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "EnergyRatingType"
                class_name = "Energy_Rating_Average"
                documentation = """Average SAP rating for the country concerned. 0 if unknown or not applicable"""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Environmental_Impact_Current(_Base, etree.ElementBase):
                ""
                element_name = "Environmental-Impact-Current"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "EnergyRatingType"
                class_name = "Environmental_Impact_Current"
                documentation = """The estimated current Environmental Impact Rating of the property"""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Environmental_Impact_Potential(_Base, etree.ElementBase):
                ""
                element_name = "Environmental-Impact-Potential"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "EnergyRatingType"
                class_name = "Environmental_Impact_Potential"
                documentation = """The estimated potential Environmental Impact Rating of the property"""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Energy_Consumption_Current(_Base, etree.ElementBase):
                ""
                element_name = "Energy-Consumption-Current"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Measurement"
                class_name = "Energy_Consumption_Current"
                documentation = """Estimated total energy consumption for the Property in a 12 month period. Value is Kilowatt Hours per Square Metre (kWh/m2)"""
                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Energy_Consumption_Potential(_Base, etree.ElementBase):
                ""
                element_name = "Energy-Consumption-Potential"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Measurement"
                class_name = "Energy_Consumption_Potential"
                documentation = """Estimated total energy consumption for the Property in a 12 month period. Value is Kilowatt Hours per Square Metre (kWh/m2)"""
                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class CO2_Emissions_Current(_Base, etree.ElementBase):
                ""
                element_name = "CO2-Emissions-Current"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Measurement"
                class_name = "CO2_Emissions_Current"
                documentation = """CO2 emissions per year in tonnes/year."""
                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class CO2_Emissions_Current_Per_Floor_Area(_Base, etree.ElementBase):
                ""
                element_name = "CO2-Emissions-Current-Per-Floor-Area"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Measurement"
                class_name = "CO2_Emissions_Current_Per_Floor_Area"
                documentation = """CO2 emissions per square metre floor area per year in kg/m2."""
                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class CO2_Emissions_Potential(_Base, etree.ElementBase):
                ""
                element_name = "CO2-Emissions-Potential"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Measurement"
                class_name = "CO2_Emissions_Potential"
                documentation = """Estimated value in Tonnes per Year of the total CO2 emissions produced by the Property in 12 month period."""
                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Lighting_Cost_Current(_Base, etree.ElementBase):
                ""
                element_name = "Lighting-Cost-Current"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Money"
                class_name = "Lighting_Cost_Current"
                documentation = """The current estimated cost of Lighting for the property"""
                type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Lighting_Cost_Potential(_Base, etree.ElementBase):
                ""
                element_name = "Lighting-Cost-Potential"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Money"
                class_name = "Lighting_Cost_Potential"
                documentation = """The current estimated cost of Lighting for the property"""
                type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Heating_Cost_Current(_Base, etree.ElementBase):
                ""
                element_name = "Heating-Cost-Current"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Money"
                class_name = "Heating_Cost_Current"
                documentation = """The current estimated cost of Heating for the property"""
                type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Heating_Cost_Potential(_Base, etree.ElementBase):
                ""
                element_name = "Heating-Cost-Potential"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Money"
                class_name = "Heating_Cost_Potential"
                documentation = """The current estimated cost of Heating for the property"""
                type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Hot_Water_Cost_Current(_Base, etree.ElementBase):
                ""
                element_name = "Hot-Water-Cost-Current"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Money"
                class_name = "Hot_Water_Cost_Current"
                documentation = """|The current estimated cost of Hot Water for the property"""
                type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Hot_Water_Cost_Potential(_Base, etree.ElementBase):
                ""
                element_name = "Hot-Water-Cost-Potential"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Money"
                class_name = "Hot_Water_Cost_Potential"
                documentation = """|The current estimated cost of Hot Water for the property"""
                type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Use"
                parent_method_name ="energy_use"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_use(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
        class Suggested_Improvements(_Base, etree.ElementBase):
            ""
            element_name = "Suggested-Improvements"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "Suggested-Improvements"
            class_name = "Suggested_Improvements"
            documentation = None
            type_documentation = """Part of an Energy Report that describes the a set of improvements that the Home Inspector considers would contribute to the overall energy rating of the property."""
            has_text_node = False
            min_occurs = 0
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Energy_Assessment"
            parent_method_name ="energy_assessment"
            subclass_class_names = ["Improvement"]
            subclass_method_names = ["improvement"]
        
            @property
            def energy_assessment(self): return self.getparent()
        
            @property
            def improvement(self): return self.findall(f"{{{self.__class__.namespace}}}Improvement")
        
            def add_improvement(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement")
        
            class Improvement(_Base, etree.ElementBase):
                ""
                element_name = "Improvement"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Improvement"
                class_name = "Improvement"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = "unbounded"
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Suggested_Improvements"
                parent_method_name ="suggested_improvements"
                subclass_class_names = ["Sequence", "Improvement_Category", "Improvement_Type", "Typical_Saving", "Energy_Performance_Rating", "Environmental_Impact_Rating", "Improvement_Details", "Indicative_Cost"]
                subclass_method_names = ["sequence", "improvement_category", "improvement_type", "typical_saving", "energy_performance_rating", "environmental_impact_rating", "improvement_details", "indicative_cost"]
            
                @property
                def suggested_improvements(self): return self.getparent()
            
                @property
                def sequence(self): return self.find(f"{{{self.__class__.namespace}}}Sequence")
            
                def add_sequence(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Sequence")
            
                @property
                def improvement_category(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Category")
            
                def add_improvement_category(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Category")
            
                @property
                def improvement_type(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Type")
            
                def add_improvement_type(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Type")
            
                @property
                def typical_saving(self): return self.find(f"{{{self.__class__.namespace}}}Typical-Saving")
            
                def add_typical_saving(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Typical-Saving")
            
                @property
                def energy_performance_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Performance-Rating")
            
                def add_energy_performance_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Performance-Rating")
            
                @property
                def environmental_impact_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Impact-Rating")
            
                def add_environmental_impact_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Impact-Rating")
            
                @property
                def improvement_details(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Details")
            
                def add_improvement_details(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Details")
            
                @property
                def indicative_cost(self): return self.find(f"{{{self.__class__.namespace}}}Indicative-Cost")
            
                def add_indicative_cost(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Indicative-Cost")
            
                class Sequence(_Base, etree.ElementBase):
                    ""
                    element_name = "Sequence"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:integer"
                    class_name = "Sequence"
                    documentation = """Sequence of the Suggested Improvements within the set of Suggested Improvements. This is used to order the Recommendations on the output HCR / EPC so that the cumulative Ratings make sense. The Improved Energy Ratings that result from carrying out a Suggested Improvement are cumulative and assume that the improvements have been installed in the order they appear in the list. Hence they must be sequenced."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Improvement_Category(_Base, etree.ElementBase):
                    ""
                    element_name = "Improvement-Category"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "RecommendationCategoryCode"
                    class_name = "Improvement_Category"
                    documentation = """The category of improvement. This identifies where on the report the recommendation is printed."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'1': 'Lower cost - this is for backwards compatibility only and should not be used', '2': 'Higher cost - this is for backwards compatibility only and should not be used', '3': 'Further measure - this is for backwards compatibility only and should not be used', '4': 'Deselected. This is for backwards compatibility only and should not be used.', '5': 'Normal measure', '6': 'Alternative measure'}
                    map_values = {'Lower cost - this is for backwards compatibility only and should not be used': '1', 'Higher cost - this is for backwards compatibility only and should not be used': '2', 'Further measure - this is for backwards compatibility only and should not be used': '3', 'Deselected. This is for backwards compatibility only and should not be used.': '4', 'Normal measure': '5', 'Alternative measure': '6'}
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Improvement_Type(_Base, etree.ElementBase):
                    ""
                    element_name = "Improvement-Type"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-ImprovementMeasureCode"
                    class_name = "Improvement_Type"
                    documentation = """Suggested work to be carried out on the Property to improve its energy efficiency."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'A': 'Loft Insulation', 'A2': 'Flat roof insulation', 'A3': 'Room-in-roof insulation', 'B': 'Cavity wall insulation', 'B4': 'Party wall insulation', 'C': 'Hot water cylinder insulation', 'D': 'Draughtproofing', 'E': 'Low energy lights', 'F': 'Cylinder thermostat', 'G': 'Heating controls for wet central heating system', 'G2': 'Water heating controls', 'H': 'Heating controls for warm air system', 'I': 'Upgrade boiler, same fuel', 'J': 'Biomass boiler', 'J2': 'Biomass boiler as alternative improvement', 'K': 'Biomass room heater with boiler', 'L': 'New or replacement fan-assisted storage heaters', 'L2': 'New or replacement high heat retention storage heaters', 'M': 'Replacement warm-air unit', 'N': 'Solar water heating', 'O': 'Replacement double glazed windows', 'O3': 'Replacement double glazing units', 'P': 'Secondary glazing', 'Q': 'Solid wall insulation', 'Q2': 'External insulation with cavity wall insulation', 'R': 'Condensing oil boiler', 'S': 'Change heating to Band A gas condensing boiler (no fuel switch)', 'T': 'Change heating to Band A gas condensing boiler (fuel switch)', 'T2': 'Flue gas heat recovery', 'U': 'Photovoltaics', 'U1': 'PV Battery', 'U2': 'PV Diverter', 'V': 'Wind turbine (roof mounted)', 'V2': 'Wind turbine (on mast)', 'W': 'Floor insulation; for backwards compatibility only, do not use', 'W1': 'Insulation of suspended floor', 'W2': 'Insulation of solid ground floor', 'X': 'Insulated doors', 'Y': 'Instantaneous waste water heat recovery', 'Y2': 'Storage waste water heat recovery', 'Z1': 'Air or ground source heat pump', 'Z2': 'Air or ground source heat pump with underfloor heating', 'Z3': 'Micro-CHP', 'NR': 'Not recorded'}
                    map_values = {'Loft Insulation': 'A', 'Flat roof insulation': 'A2', 'Room-in-roof insulation': 'A3', 'Cavity wall insulation': 'B', 'Party wall insulation': 'B4', 'Hot water cylinder insulation': 'C', 'Draughtproofing': 'D', 'Low energy lights': 'E', 'Cylinder thermostat': 'F', 'Heating controls for wet central heating system': 'G', 'Water heating controls': 'G2', 'Heating controls for warm air system': 'H', 'Upgrade boiler, same fuel': 'I', 'Biomass boiler': 'J', 'Biomass boiler as alternative improvement': 'J2', 'Biomass room heater with boiler': 'K', 'New or replacement fan-assisted storage heaters': 'L', 'New or replacement high heat retention storage heaters': 'L2', 'Replacement warm-air unit': 'M', 'Solar water heating': 'N', 'Replacement double glazed windows': 'O', 'Replacement double glazing units': 'O3', 'Secondary glazing': 'P', 'Solid wall insulation': 'Q', 'External insulation with cavity wall insulation': 'Q2', 'Condensing oil boiler': 'R', 'Change heating to Band A gas condensing boiler (no fuel switch)': 'S', 'Change heating to Band A gas condensing boiler (fuel switch)': 'T', 'Flue gas heat recovery': 'T2', 'Photovoltaics': 'U', 'PV Battery': 'U1', 'PV Diverter': 'U2', 'Wind turbine (roof mounted)': 'V', 'Wind turbine (on mast)': 'V2', 'Floor insulation; for backwards compatibility only, do not use': 'W', 'Insulation of suspended floor': 'W1', 'Insulation of solid ground floor': 'W2', 'Insulated doors': 'X', 'Instantaneous waste water heat recovery': 'Y', 'Storage waste water heat recovery': 'Y2', 'Air or ground source heat pump': 'Z1', 'Air or ground source heat pump with underfloor heating': 'Z2', 'Micro-CHP': 'Z3', 'Not recorded': 'NR'}
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Typical_Saving(_Base, etree.ElementBase):
                    ""
                    element_name = "Typical-Saving"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Money"
                    class_name = "Typical_Saving"
                    documentation = """Typical savings (in British Pounds) per year if the suggested improvement is carried out. 0 if not assessed"""
                    type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = float
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Performance_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Performance-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyRatingType"
                    class_name = "Energy_Performance_Rating"
                    documentation = """The estimated Energy performance rating of the Property after the Suggested Improvement has been carried out providing any preceding Suggested Improvement has also been carried out. 0 if not assessed"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Environmental_Impact_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Impact-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyRatingType"
                    class_name = "Environmental_Impact_Rating"
                    documentation = """The estimated Environmental Impact rating of the Property after the Suggested Improvement has been carried out providing any preceding Suggested Improvement has also been carried out. 0 if not assessed"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Improvement_Details(_Base, etree.ElementBase):
                    ""
                    element_name = "Improvement-Details"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "None"
                    class_name = "Improvement_Details"
                    documentation = None
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = ["Improvement_Texts", "Improvement_Number"]
                    subclass_method_names = ["improvement_texts", "improvement_number"]
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def improvement_texts(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Texts")
                
                    def add_improvement_texts(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Texts")
                
                    @property
                    def improvement_number(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Number")
                
                    def add_improvement_number(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Number")
                
                    class Improvement_Texts(_Base, etree.ElementBase):
                        ""
                        element_name = "Improvement-Texts"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "ImprovementTexts"
                        class_name = "Improvement_Texts"
                        documentation = """For backward compatibility only"""
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "Improvement_Details"
                        parent_method_name ="improvement_details"
                        subclass_class_names = ["Improvement_Summary", "Improvement_Heading", "Improvement_Description"]
                        subclass_method_names = ["improvement_summary", "improvement_heading", "improvement_description"]
                    
                        @property
                        def improvement_details(self): return self.getparent()
                    
                        @property
                        def improvement_summary(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Summary")
                    
                        def add_improvement_summary(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Summary")
                    
                        @property
                        def improvement_heading(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Heading")
                    
                        def add_improvement_heading(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Heading")
                    
                        @property
                        def improvement_description(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Description")
                    
                        def add_improvement_description(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Description")
                    
                        class Improvement_Summary(_Base, etree.ElementBase):
                            ""
                            element_name = "Improvement-Summary"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Sentence"
                            class_name = "Improvement_Summary"
                            documentation = """A short description of the suggested improvement."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = None
                            map_values = None
                            parent_class_name = "Improvement_Texts"
                            parent_method_name ="improvement_texts"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def improvement_texts(self): return self.getparent()
                        
                            @property
                            def value(self): return self.text
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Improvement_Heading(_Base, etree.ElementBase):
                            ""
                            element_name = "Improvement-Heading"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Sentence"
                            class_name = "Improvement_Heading"
                            documentation = """Text to precede the improvement description. If this field is not provided the 'Improvement-Summary' is used instead."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = None
                            map_values = None
                            parent_class_name = "Improvement_Texts"
                            parent_method_name ="improvement_texts"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def improvement_texts(self): return self.getparent()
                        
                            @property
                            def value(self): return self.text
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Improvement_Description(_Base, etree.ElementBase):
                            ""
                            element_name = "Improvement-Description"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Sentence"
                            class_name = "Improvement_Description"
                            documentation = """Detailed description of the suggested improvement."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = None
                            map_values = None
                            parent_class_name = "Improvement_Texts"
                            parent_method_name ="improvement_texts"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def improvement_texts(self): return self.getparent()
                        
                            @property
                            def value(self): return self.text
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                    class Improvement_Number(_Base, etree.ElementBase):
                        ""
                        element_name = "Improvement-Number"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "RecommendationSummaryCode"
                        class_name = "Improvement_Number"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'Insulate hot water cylinder with 80 mm jacket', '2': 'Increase hot water cylinder insulation', '3': 'Add additional 80 mm jacket to hot water cylinder', '4': 'Hot water cylinder thermostat', '5': 'Increase loft insulation to 270 mm', '6': 'Cavity wall insulation', '7': 'Internal or external wall insulation', '8': 'Replace single glazed windows with low-E double glazing', '9': 'Secondary glazing to single glazed windows', '10': 'Draught proofing', '11': 'Heating controls (programmer, room thermostat and TRVs)', '12': 'Heating controls (room thermostat and TRVs)', '13': 'Heating controls (thermostatic radiator valves)', '14': 'Heating controls (room thermostat)', '15': 'Heating controls (programmer and TRVs)', '16': 'Heating controls (time and temperature zone control)', '17': 'Heating controls (programmer and room thermostat)', '18': 'Heating controls (room thermostat)', '19': 'Solar water heating', '20': 'Replace boiler with new condensing boiler', '21': 'Replace boiler with new condensing boiler', '22': 'Replace boiler with biomass boiler', '23': 'Wood pellet stove with boiler and radiators', '24': 'Fan assisted storage heaters and dual immersion cylinder', '25': 'Fan assisted storage heaters', '26': 'Replacement warm air unit', '27': 'Change heating to gas condensing boiler', '28': 'Condensing oil boiler with radiators', '29': 'Change heating to gas condensing boiler', '30': 'Fan assisted storage heaters and dual immersion cylinder', '31': 'Fan-assisted storage heaters', '32': 'Change heating to gas condensing boiler', '34': 'Solar photovoltaic panels, 2.5 kWp', '35': 'Low energy lighting for all fixed outlets', '36': 'Replace heating unit with condensing unit', '37': 'Condensing boiler (separate from the range cooker)', '38': 'Condensing boiler (separate from the range cooker)', '39': 'Wood pellet stove with boiler and radiators', '40': 'Change room heaters to condensing boiler', '41': 'Change room heaters to condensing boiler', '42': 'Replace heating unit with mains gas condensing unit', '43': 'Condensing oil boiler with radiators', '44': 'Wind turbine', '45': 'Flat roof or sloping ceiling insulation', '46': 'Room-in-roof insulation', '47': 'Floor insulation', '48': 'High performance external doors', '49': 'Heat recovery system for mixer showers', '50': 'Flue gas heat recovery device in conjunction with boiler', '51': 'Air or ground source heat pump', '52': 'Air or ground source heat pump with underfloor heating', '53': 'Micro CHP', '54': 'Biomass boiler (Exempted Appliance if in Smoke Control Area)', '55': 'External insulation with cavity wall insulation', '56': 'Replacement glazing units', '57': 'Suspended floor insulation', '58': 'Solid floor insulation', '59': 'High heat retention storage heaters and dual immersion cylinder', '60': 'High heat retention storage heaters', '61': 'High heat retention storage heaters and dual immersion cylinder', '62': 'High heat retention storage heaters', '63': 'Party wall insulation', '65': 'Internal insulation with cavity wall insulation', '66': 'Heating controls for wet central heating system', '70': 'Water Heating Controls', '72': 'PV Battery', '73': 'PV Diverter', '75': 'Ground source heat pump with radiators', '76': 'Ground source heat pump with underfloor heating'}
                        map_values = {'Insulate hot water cylinder with 80 mm jacket': '1', 'Increase hot water cylinder insulation': '2', 'Add additional 80 mm jacket to hot water cylinder': '3', 'Hot water cylinder thermostat': '4', 'Increase loft insulation to 270 mm': '5', 'Cavity wall insulation': '6', 'Internal or external wall insulation': '7', 'Replace single glazed windows with low-E double glazing': '8', 'Secondary glazing to single glazed windows': '9', 'Draught proofing': '10', 'Heating controls (programmer, room thermostat and TRVs)': '11', 'Heating controls (room thermostat and TRVs)': '12', 'Heating controls (thermostatic radiator valves)': '13', 'Heating controls (room thermostat)': '18', 'Heating controls (programmer and TRVs)': '15', 'Heating controls (time and temperature zone control)': '16', 'Heating controls (programmer and room thermostat)': '17', 'Solar water heating': '19', 'Replace boiler with new condensing boiler': '21', 'Replace boiler with biomass boiler': '22', 'Wood pellet stove with boiler and radiators': '39', 'Fan assisted storage heaters and dual immersion cylinder': '30', 'Fan assisted storage heaters': '25', 'Replacement warm air unit': '26', 'Change heating to gas condensing boiler': '32', 'Condensing oil boiler with radiators': '43', 'Fan-assisted storage heaters': '31', 'Solar photovoltaic panels, 2.5 kWp': '34', 'Low energy lighting for all fixed outlets': '35', 'Replace heating unit with condensing unit': '36', 'Condensing boiler (separate from the range cooker)': '38', 'Change room heaters to condensing boiler': '41', 'Replace heating unit with mains gas condensing unit': '42', 'Wind turbine': '44', 'Flat roof or sloping ceiling insulation': '45', 'Room-in-roof insulation': '46', 'Floor insulation': '47', 'High performance external doors': '48', 'Heat recovery system for mixer showers': '49', 'Flue gas heat recovery device in conjunction with boiler': '50', 'Air or ground source heat pump': '51', 'Air or ground source heat pump with underfloor heating': '52', 'Micro CHP': '53', 'Biomass boiler (Exempted Appliance if in Smoke Control Area)': '54', 'External insulation with cavity wall insulation': '55', 'Replacement glazing units': '56', 'Suspended floor insulation': '57', 'Solid floor insulation': '58', 'High heat retention storage heaters and dual immersion cylinder': '61', 'High heat retention storage heaters': '62', 'Party wall insulation': '63', 'Internal insulation with cavity wall insulation': '65', 'Heating controls for wet central heating system': '66', 'Water Heating Controls': '70', 'PV Battery': '72', 'PV Diverter': '73', 'Ground source heat pump with radiators': '75', 'Ground source heat pump with underfloor heating': '76'}
                        parent_class_name = "Improvement_Details"
                        parent_method_name ="improvement_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def improvement_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                class Indicative_Cost(_Base, etree.ElementBase):
                    ""
                    element_name = "Indicative-Cost"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Indicative_Cost"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
        class LZC_Energy_Sources(_Base, etree.ElementBase):
            ""
            element_name = "LZC-Energy-Sources"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "LZC-Energy-Sources"
            class_name = "LZC_Energy_Sources"
            documentation = None
            type_documentation = None
            has_text_node = False
            min_occurs = 0
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Energy_Assessment"
            parent_method_name ="energy_assessment"
            subclass_class_names = ["LZC_Energy_Source"]
            subclass_method_names = ["lzc_energy_source"]
        
            @property
            def energy_assessment(self): return self.getparent()
        
            @property
            def lzc_energy_source(self): return self.findall(f"{{{self.__class__.namespace}}}LZC-Energy-Source")
        
            def add_lzc_energy_source(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}LZC-Energy-Source")
        
            class LZC_Energy_Source(_Base, etree.ElementBase):
                ""
                element_name = "LZC-Energy-Source"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-LZCEnergySourceCode"
                class_name = "LZC_Energy_Source"
                documentation = """Low and zero carbon energy source(s) for the property."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = "unbounded"
                python_type_convertor = str
                map_codes = {'1': 'Biomass main heating', '2': 'Biomass community heating', '3': 'Biomass community heating for some of heat generation', '4': 'Biomass secondary heating', '5': 'Geothermal heat source', '6': 'Community combined heat and power', '7': 'Ground source heat pump', '8': 'Water source heat pump', '9': 'Air source heat pump', '10': 'Solar water heating', '11': 'Solar photovoltaics', '12': 'Wind turbine', '13': 'Community heat pump', '14': 'Hydro-electric generation', '15': 'Micro-CHP', '16': 'Exhaust air heat pump', '17': 'Solar-assisted heat pump'}
                map_values = {'Biomass main heating': '1', 'Biomass community heating': '2', 'Biomass community heating for some of heat generation': '3', 'Biomass secondary heating': '4', 'Geothermal heat source': '5', 'Community combined heat and power': '6', 'Ground source heat pump': '7', 'Water source heat pump': '8', 'Air source heat pump': '9', 'Solar water heating': '10', 'Solar photovoltaics': '11', 'Wind turbine': '12', 'Community heat pump': '13', 'Hydro-electric generation': '14', 'Micro-CHP': '15', 'Exhaust air heat pump': '16', 'Solar-assisted heat pump': '17'}
                parent_class_name = "LZC_Energy_Sources"
                parent_method_name ="lzc_energy_sources"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def lzc_energy_sources(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
        class Addendum(_Base, etree.ElementBase):
            ""
            element_name = "Addendum"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "Addendum"
            class_name = "Addendum"
            documentation = None
            type_documentation = None
            has_text_node = False
            min_occurs = 0
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Energy_Assessment"
            parent_method_name ="energy_assessment"
            subclass_class_names = ["Addendum_Number", "Cavity_Fill_Recommended", "Stone_Walls", "System_Build", "Access_Issues", "High_Exposure", "Narrow_Cavities"]
            subclass_method_names = ["addendum_number", "cavity_fill_recommended", "stone_walls", "system_build", "access_issues", "high_exposure", "narrow_cavities"]
        
            @property
            def energy_assessment(self): return self.getparent()
        
            @property
            def addendum_number(self): return self.findall(f"{{{self.__class__.namespace}}}Addendum-Number")
        
            def add_addendum_number(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Addendum-Number")
        
            @property
            def cavity_fill_recommended(self): return self.find(f"{{{self.__class__.namespace}}}Cavity-Fill-Recommended")
        
            def add_cavity_fill_recommended(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Cavity-Fill-Recommended")
        
            @property
            def stone_walls(self): return self.find(f"{{{self.__class__.namespace}}}Stone-Walls")
        
            def add_stone_walls(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stone-Walls")
        
            @property
            def system_build(self): return self.find(f"{{{self.__class__.namespace}}}System-Build")
        
            def add_system_build(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}System-Build")
        
            @property
            def access_issues(self): return self.find(f"{{{self.__class__.namespace}}}Access-Issues")
        
            def add_access_issues(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Access-Issues")
        
            @property
            def high_exposure(self): return self.find(f"{{{self.__class__.namespace}}}High-Exposure")
        
            def add_high_exposure(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}High-Exposure")
        
            @property
            def narrow_cavities(self): return self.find(f"{{{self.__class__.namespace}}}Narrow-Cavities")
        
            def add_narrow_cavities(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Narrow-Cavities")
        
            class Addendum_Number(_Base, etree.ElementBase):
                ""
                element_name = "Addendum-Number"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "AddendumCode"
                class_name = "Addendum_Number"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = "unbounded"
                python_type_convertor = str
                map_codes = {'1': '1. Wall type does not correspond to options available in RdSAP', '2': '2. Room heater specified for water heating instead of a range cooker', '3': '3. Space heating from individual system and water heating from community system', '4': '4. Dwelling has a swimming pool', '5': '5. Dwelling has micro-CHP not found in database', '6': '6. Storage heater or dual immersion, and single electric meter', '7': '7. Heating controlled by TRVs only', '8': '8. PVs or wind turbine present on the property (England, Wales or Scotland)', '9': '9. Two main heating systems and heating system upgrade is recommended', '10': '10. Dual electricity meter selected but there is also an electricity meter for standard tariff', '11': '11. Single electricity meter selected but there is also an electricity meter for an off-peak tariff', '12': '12. Dwelling is using a biomass fuel that is not in the RdSAP fuel options', '13': '13. Park Home', '14': '14. Dwelling has a special energy saving feature'}
                map_values = {'1. Wall type does not correspond to options available in RdSAP': '1', '2. Room heater specified for water heating instead of a range cooker': '2', '3. Space heating from individual system and water heating from community system': '3', '4. Dwelling has a swimming pool': '4', '5. Dwelling has micro-CHP not found in database': '5', '6. Storage heater or dual immersion, and single electric meter': '6', '7. Heating controlled by TRVs only': '7', '8. PVs or wind turbine present on the property (England, Wales or Scotland)': '8', '9. Two main heating systems and heating system upgrade is recommended': '9', '10. Dual electricity meter selected but there is also an electricity meter for standard tariff': '10', '11. Single electricity meter selected but there is also an electricity meter for an off-peak tariff': '11', '12. Dwelling is using a biomass fuel that is not in the RdSAP fuel options': '12', '13. Park Home': '13', '14. Dwelling has a special energy saving feature': '14'}
                parent_class_name = "Addendum"
                parent_method_name ="addendum"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def addendum(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Cavity_Fill_Recommended(_Base, etree.ElementBase):
                ""
                element_name = "Cavity-Fill-Recommended"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "Cavity_Fill_Recommended"
                documentation = """Cavity fill is recommended"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "Addendum"
                parent_method_name ="addendum"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def addendum(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Stone_Walls(_Base, etree.ElementBase):
                ""
                element_name = "Stone-Walls"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "Stone_Walls"
                documentation = """Stone walls present, not insulated"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "Addendum"
                parent_method_name ="addendum"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def addendum(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class System_Build(_Base, etree.ElementBase):
                ""
                element_name = "System-Build"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "System_Build"
                documentation = """System build present"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "Addendum"
                parent_method_name ="addendum"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def addendum(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Access_Issues(_Base, etree.ElementBase):
                ""
                element_name = "Access-Issues"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "Access_Issues"
                documentation = """Dwelling has access issues for cavity wall insulation. Include only when at least one of Cavity-Fill-Recommended, Stone-Walls, System-Build is also present"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "Addendum"
                parent_method_name ="addendum"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def addendum(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class High_Exposure(_Base, etree.ElementBase):
                ""
                element_name = "High-Exposure"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "High_Exposure"
                documentation = """Dwelling may be exposed to wind-driven rain. Include only when at least one of Cavity-Fill-Recommended, Stone-Walls, System-Build is also present"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "Addendum"
                parent_method_name ="addendum"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def addendum(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Narrow_Cavities(_Base, etree.ElementBase):
                ""
                element_name = "Narrow-Cavities"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "Narrow_Cavities"
                documentation = """Dwelling may have narrow cavities. Include only when Cavity-Fill-Recommended is also present"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "Addendum"
                parent_method_name ="addendum"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def addendum(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
        class Renewable_Heat_Incentive(_Base, etree.ElementBase):
            ""
            element_name = "Renewable-Heat-Incentive"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "Renewable-Heat-Incentive"
            class_name = "Renewable_Heat_Incentive"
            documentation = None
            type_documentation = None
            has_text_node = False
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Energy_Assessment"
            parent_method_name ="energy_assessment"
            subclass_class_names = ["Space_Heating_Existing_Dwelling", "Space_Heating_With_Loft_Insulation", "Space_Heating_With_Cavity_Insulation", "Space_Heating_With_Loft_And_Cavity_Insulation", "Water_Heating", "Impact_Of_Loft_Insulation", "Impact_Of_Cavity_Insulation", "Impact_Of_Solid_Wall_Insulation"]
            subclass_method_names = ["space_heating_existing_dwelling", "space_heating_with_loft_insulation", "space_heating_with_cavity_insulation", "space_heating_with_loft_and_cavity_insulation", "water_heating", "impact_of_loft_insulation", "impact_of_cavity_insulation", "impact_of_solid_wall_insulation"]
        
            @property
            def energy_assessment(self): return self.getparent()
        
            @property
            def space_heating_existing_dwelling(self): return self.find(f"{{{self.__class__.namespace}}}Space-Heating-Existing-Dwelling")
        
            def add_space_heating_existing_dwelling(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Space-Heating-Existing-Dwelling")
        
            @property
            def space_heating_with_loft_insulation(self): return self.find(f"{{{self.__class__.namespace}}}Space-Heating-With-Loft-Insulation")
        
            def add_space_heating_with_loft_insulation(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Space-Heating-With-Loft-Insulation")
        
            @property
            def space_heating_with_cavity_insulation(self): return self.find(f"{{{self.__class__.namespace}}}Space-Heating-With-Cavity-Insulation")
        
            def add_space_heating_with_cavity_insulation(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Space-Heating-With-Cavity-Insulation")
        
            @property
            def space_heating_with_loft_and_cavity_insulation(self): return self.find(f"{{{self.__class__.namespace}}}Space-Heating-With-Loft-And-Cavity-Insulation")
        
            def add_space_heating_with_loft_and_cavity_insulation(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Space-Heating-With-Loft-And-Cavity-Insulation")
        
            @property
            def water_heating(self): return self.find(f"{{{self.__class__.namespace}}}Water-Heating")
        
            def add_water_heating(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Water-Heating")
        
            @property
            def impact_of_loft_insulation(self): return self.find(f"{{{self.__class__.namespace}}}Impact-Of-Loft-Insulation")
        
            def add_impact_of_loft_insulation(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Impact-Of-Loft-Insulation")
        
            @property
            def impact_of_cavity_insulation(self): return self.find(f"{{{self.__class__.namespace}}}Impact-Of-Cavity-Insulation")
        
            def add_impact_of_cavity_insulation(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Impact-Of-Cavity-Insulation")
        
            @property
            def impact_of_solid_wall_insulation(self): return self.find(f"{{{self.__class__.namespace}}}Impact-Of-Solid-Wall-Insulation")
        
            def add_impact_of_solid_wall_insulation(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Impact-Of-Solid-Wall-Insulation")
        
            class Space_Heating_Existing_Dwelling(_Base, etree.ElementBase):
                ""
                element_name = "Space-Heating-Existing-Dwelling"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Measurement"
                class_name = "Space_Heating_Existing_Dwelling"
                documentation = """Space heating requirement for existing dwelling."""
                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Renewable_Heat_Incentive"
                parent_method_name ="renewable_heat_incentive"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def renewable_heat_incentive(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Space_Heating_With_Loft_Insulation(_Base, etree.ElementBase):
                ""
                element_name = "Space-Heating-With-Loft-Insulation"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Measurement"
                class_name = "Space_Heating_With_Loft_Insulation"
                documentation = """Space heating requirement after implementation of loft insulation recommendation, omit if loft insulation not recommended. For backwards compatibility only, do not use"""
                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Renewable_Heat_Incentive"
                parent_method_name ="renewable_heat_incentive"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def renewable_heat_incentive(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Space_Heating_With_Cavity_Insulation(_Base, etree.ElementBase):
                ""
                element_name = "Space-Heating-With-Cavity-Insulation"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Measurement"
                class_name = "Space_Heating_With_Cavity_Insulation"
                documentation = """Space heating requirement after implementation of cavity insulation recommendation, omit if cavity insulation not recommended. For backwards compatibility only, do not use"""
                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Renewable_Heat_Incentive"
                parent_method_name ="renewable_heat_incentive"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def renewable_heat_incentive(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Space_Heating_With_Loft_And_Cavity_Insulation(_Base, etree.ElementBase):
                ""
                element_name = "Space-Heating-With-Loft-And-Cavity-Insulation"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Measurement"
                class_name = "Space_Heating_With_Loft_And_Cavity_Insulation"
                documentation = """Space heating requirement after implementation of loft and cavity insulation recommendations, same as existing dwelling if neither is recommended. For backwards compatibility only, do not use"""
                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Renewable_Heat_Incentive"
                parent_method_name ="renewable_heat_incentive"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def renewable_heat_incentive(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Water_Heating(_Base, etree.ElementBase):
                ""
                element_name = "Water-Heating"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Measurement"
                class_name = "Water_Heating"
                documentation = """Water heating requirement."""
                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Renewable_Heat_Incentive"
                parent_method_name ="renewable_heat_incentive"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def renewable_heat_incentive(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Impact_Of_Loft_Insulation(_Base, etree.ElementBase):
                ""
                element_name = "Impact-Of-Loft-Insulation"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:nonPositiveInteger"
                class_name = "Impact_Of_Loft_Insulation"
                documentation = """Reduction in space heating requirement with loft insulation (as negative value). Omit if not applicable"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "Renewable_Heat_Incentive"
                parent_method_name ="renewable_heat_incentive"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def renewable_heat_incentive(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Impact_Of_Cavity_Insulation(_Base, etree.ElementBase):
                ""
                element_name = "Impact-Of-Cavity-Insulation"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:nonPositiveInteger"
                class_name = "Impact_Of_Cavity_Insulation"
                documentation = """Reduction in space heating requirement with cavity insulation (as negative value). Omit if not applicable"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "Renewable_Heat_Incentive"
                parent_method_name ="renewable_heat_incentive"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def renewable_heat_incentive(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Impact_Of_Solid_Wall_Insulation(_Base, etree.ElementBase):
                ""
                element_name = "Impact-Of-Solid-Wall-Insulation"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:nonPositiveInteger"
                class_name = "Impact_Of_Solid_Wall_Insulation"
                documentation = """Reduction in space heating requirement with solid wall insulation (as negative value). Omit if not applicable"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "Renewable_Heat_Incentive"
                parent_method_name ="renewable_heat_incentive"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def renewable_heat_incentive(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
        class Green_Deal_Package(_Base, etree.ElementBase):
            ""
            element_name = "Green-Deal-Package"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "Green-Deal-Package"
            class_name = "Green_Deal_Package"
            documentation = """Improvements that can form a Green Deal package"""
            type_documentation = None
            has_text_node = False
            min_occurs = 0
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Energy_Assessment"
            parent_method_name ="energy_assessment"
            subclass_class_names = ["Green_Deal_Improvement", "Electricity_Saving", "Gas_Saving", "Other_Fuel_Saving"]
            subclass_method_names = ["green_deal_improvement", "electricity_saving", "gas_saving", "other_fuel_saving"]
        
            @property
            def energy_assessment(self): return self.getparent()
        
            @property
            def green_deal_improvement(self): return self.findall(f"{{{self.__class__.namespace}}}Green-Deal-Improvement")
        
            def add_green_deal_improvement(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Green-Deal-Improvement")
        
            @property
            def electricity_saving(self): return self.find(f"{{{self.__class__.namespace}}}Electricity-Saving")
        
            def add_electricity_saving(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Electricity-Saving")
        
            @property
            def gas_saving(self): return self.find(f"{{{self.__class__.namespace}}}Gas-Saving")
        
            def add_gas_saving(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gas-Saving")
        
            @property
            def other_fuel_saving(self): return self.find(f"{{{self.__class__.namespace}}}Other-Fuel-Saving")
        
            def add_other_fuel_saving(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Other-Fuel-Saving")
        
            class Green_Deal_Improvement(_Base, etree.ElementBase):
                ""
                element_name = "Green-Deal-Improvement"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Green-Deal-Improvement"
                class_name = "Green_Deal_Improvement"
                documentation = """Improvements from Suggested-Improvements in the Green Deal package"""
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = "unbounded"
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Green_Deal_Package"
                parent_method_name ="green_deal_package"
                subclass_class_names = ["Improvement_Type", "Improvement_Number"]
                subclass_method_names = ["improvement_type", "improvement_number"]
            
                @property
                def green_deal_package(self): return self.getparent()
            
                @property
                def improvement_type(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Type")
            
                def add_improvement_type(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Type")
            
                @property
                def improvement_number(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Number")
            
                def add_improvement_number(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Number")
            
                class Improvement_Type(_Base, etree.ElementBase):
                    ""
                    element_name = "Improvement-Type"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-ImprovementMeasureCode"
                    class_name = "Improvement_Type"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'A': 'Loft Insulation', 'A2': 'Flat roof insulation', 'A3': 'Room-in-roof insulation', 'B': 'Cavity wall insulation', 'B4': 'Party wall insulation', 'C': 'Hot water cylinder insulation', 'D': 'Draughtproofing', 'E': 'Low energy lights', 'F': 'Cylinder thermostat', 'G': 'Heating controls for wet central heating system', 'G2': 'Water heating controls', 'H': 'Heating controls for warm air system', 'I': 'Upgrade boiler, same fuel', 'J': 'Biomass boiler', 'J2': 'Biomass boiler as alternative improvement', 'K': 'Biomass room heater with boiler', 'L': 'New or replacement fan-assisted storage heaters', 'L2': 'New or replacement high heat retention storage heaters', 'M': 'Replacement warm-air unit', 'N': 'Solar water heating', 'O': 'Replacement double glazed windows', 'O3': 'Replacement double glazing units', 'P': 'Secondary glazing', 'Q': 'Solid wall insulation', 'Q2': 'External insulation with cavity wall insulation', 'R': 'Condensing oil boiler', 'S': 'Change heating to Band A gas condensing boiler (no fuel switch)', 'T': 'Change heating to Band A gas condensing boiler (fuel switch)', 'T2': 'Flue gas heat recovery', 'U': 'Photovoltaics', 'U1': 'PV Battery', 'U2': 'PV Diverter', 'V': 'Wind turbine (roof mounted)', 'V2': 'Wind turbine (on mast)', 'W': 'Floor insulation; for backwards compatibility only, do not use', 'W1': 'Insulation of suspended floor', 'W2': 'Insulation of solid ground floor', 'X': 'Insulated doors', 'Y': 'Instantaneous waste water heat recovery', 'Y2': 'Storage waste water heat recovery', 'Z1': 'Air or ground source heat pump', 'Z2': 'Air or ground source heat pump with underfloor heating', 'Z3': 'Micro-CHP', 'NR': 'Not recorded'}
                    map_values = {'Loft Insulation': 'A', 'Flat roof insulation': 'A2', 'Room-in-roof insulation': 'A3', 'Cavity wall insulation': 'B', 'Party wall insulation': 'B4', 'Hot water cylinder insulation': 'C', 'Draughtproofing': 'D', 'Low energy lights': 'E', 'Cylinder thermostat': 'F', 'Heating controls for wet central heating system': 'G', 'Water heating controls': 'G2', 'Heating controls for warm air system': 'H', 'Upgrade boiler, same fuel': 'I', 'Biomass boiler': 'J', 'Biomass boiler as alternative improvement': 'J2', 'Biomass room heater with boiler': 'K', 'New or replacement fan-assisted storage heaters': 'L', 'New or replacement high heat retention storage heaters': 'L2', 'Replacement warm-air unit': 'M', 'Solar water heating': 'N', 'Replacement double glazed windows': 'O', 'Replacement double glazing units': 'O3', 'Secondary glazing': 'P', 'Solid wall insulation': 'Q', 'External insulation with cavity wall insulation': 'Q2', 'Condensing oil boiler': 'R', 'Change heating to Band A gas condensing boiler (no fuel switch)': 'S', 'Change heating to Band A gas condensing boiler (fuel switch)': 'T', 'Flue gas heat recovery': 'T2', 'Photovoltaics': 'U', 'PV Battery': 'U1', 'PV Diverter': 'U2', 'Wind turbine (roof mounted)': 'V', 'Wind turbine (on mast)': 'V2', 'Floor insulation; for backwards compatibility only, do not use': 'W', 'Insulation of suspended floor': 'W1', 'Insulation of solid ground floor': 'W2', 'Insulated doors': 'X', 'Instantaneous waste water heat recovery': 'Y', 'Storage waste water heat recovery': 'Y2', 'Air or ground source heat pump': 'Z1', 'Air or ground source heat pump with underfloor heating': 'Z2', 'Micro-CHP': 'Z3', 'Not recorded': 'NR'}
                    parent_class_name = "Green_Deal_Improvement"
                    parent_method_name ="green_deal_improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def green_deal_improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Improvement_Number(_Base, etree.ElementBase):
                    ""
                    element_name = "Improvement-Number"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "RecommendationSummaryCode"
                    class_name = "Improvement_Number"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'1': 'Insulate hot water cylinder with 80 mm jacket', '2': 'Increase hot water cylinder insulation', '3': 'Add additional 80 mm jacket to hot water cylinder', '4': 'Hot water cylinder thermostat', '5': 'Increase loft insulation to 270 mm', '6': 'Cavity wall insulation', '7': 'Internal or external wall insulation', '8': 'Replace single glazed windows with low-E double glazing', '9': 'Secondary glazing to single glazed windows', '10': 'Draught proofing', '11': 'Heating controls (programmer, room thermostat and TRVs)', '12': 'Heating controls (room thermostat and TRVs)', '13': 'Heating controls (thermostatic radiator valves)', '14': 'Heating controls (room thermostat)', '15': 'Heating controls (programmer and TRVs)', '16': 'Heating controls (time and temperature zone control)', '17': 'Heating controls (programmer and room thermostat)', '18': 'Heating controls (room thermostat)', '19': 'Solar water heating', '20': 'Replace boiler with new condensing boiler', '21': 'Replace boiler with new condensing boiler', '22': 'Replace boiler with biomass boiler', '23': 'Wood pellet stove with boiler and radiators', '24': 'Fan assisted storage heaters and dual immersion cylinder', '25': 'Fan assisted storage heaters', '26': 'Replacement warm air unit', '27': 'Change heating to gas condensing boiler', '28': 'Condensing oil boiler with radiators', '29': 'Change heating to gas condensing boiler', '30': 'Fan assisted storage heaters and dual immersion cylinder', '31': 'Fan-assisted storage heaters', '32': 'Change heating to gas condensing boiler', '34': 'Solar photovoltaic panels, 2.5 kWp', '35': 'Low energy lighting for all fixed outlets', '36': 'Replace heating unit with condensing unit', '37': 'Condensing boiler (separate from the range cooker)', '38': 'Condensing boiler (separate from the range cooker)', '39': 'Wood pellet stove with boiler and radiators', '40': 'Change room heaters to condensing boiler', '41': 'Change room heaters to condensing boiler', '42': 'Replace heating unit with mains gas condensing unit', '43': 'Condensing oil boiler with radiators', '44': 'Wind turbine', '45': 'Flat roof or sloping ceiling insulation', '46': 'Room-in-roof insulation', '47': 'Floor insulation', '48': 'High performance external doors', '49': 'Heat recovery system for mixer showers', '50': 'Flue gas heat recovery device in conjunction with boiler', '51': 'Air or ground source heat pump', '52': 'Air or ground source heat pump with underfloor heating', '53': 'Micro CHP', '54': 'Biomass boiler (Exempted Appliance if in Smoke Control Area)', '55': 'External insulation with cavity wall insulation', '56': 'Replacement glazing units', '57': 'Suspended floor insulation', '58': 'Solid floor insulation', '59': 'High heat retention storage heaters and dual immersion cylinder', '60': 'High heat retention storage heaters', '61': 'High heat retention storage heaters and dual immersion cylinder', '62': 'High heat retention storage heaters', '63': 'Party wall insulation', '65': 'Internal insulation with cavity wall insulation', '66': 'Heating controls for wet central heating system', '70': 'Water Heating Controls', '72': 'PV Battery', '73': 'PV Diverter', '75': 'Ground source heat pump with radiators', '76': 'Ground source heat pump with underfloor heating'}
                    map_values = {'Insulate hot water cylinder with 80 mm jacket': '1', 'Increase hot water cylinder insulation': '2', 'Add additional 80 mm jacket to hot water cylinder': '3', 'Hot water cylinder thermostat': '4', 'Increase loft insulation to 270 mm': '5', 'Cavity wall insulation': '6', 'Internal or external wall insulation': '7', 'Replace single glazed windows with low-E double glazing': '8', 'Secondary glazing to single glazed windows': '9', 'Draught proofing': '10', 'Heating controls (programmer, room thermostat and TRVs)': '11', 'Heating controls (room thermostat and TRVs)': '12', 'Heating controls (thermostatic radiator valves)': '13', 'Heating controls (room thermostat)': '18', 'Heating controls (programmer and TRVs)': '15', 'Heating controls (time and temperature zone control)': '16', 'Heating controls (programmer and room thermostat)': '17', 'Solar water heating': '19', 'Replace boiler with new condensing boiler': '21', 'Replace boiler with biomass boiler': '22', 'Wood pellet stove with boiler and radiators': '39', 'Fan assisted storage heaters and dual immersion cylinder': '30', 'Fan assisted storage heaters': '25', 'Replacement warm air unit': '26', 'Change heating to gas condensing boiler': '32', 'Condensing oil boiler with radiators': '43', 'Fan-assisted storage heaters': '31', 'Solar photovoltaic panels, 2.5 kWp': '34', 'Low energy lighting for all fixed outlets': '35', 'Replace heating unit with condensing unit': '36', 'Condensing boiler (separate from the range cooker)': '38', 'Change room heaters to condensing boiler': '41', 'Replace heating unit with mains gas condensing unit': '42', 'Wind turbine': '44', 'Flat roof or sloping ceiling insulation': '45', 'Room-in-roof insulation': '46', 'Floor insulation': '47', 'High performance external doors': '48', 'Heat recovery system for mixer showers': '49', 'Flue gas heat recovery device in conjunction with boiler': '50', 'Air or ground source heat pump': '51', 'Air or ground source heat pump with underfloor heating': '52', 'Micro CHP': '53', 'Biomass boiler (Exempted Appliance if in Smoke Control Area)': '54', 'External insulation with cavity wall insulation': '55', 'Replacement glazing units': '56', 'Suspended floor insulation': '57', 'Solid floor insulation': '58', 'High heat retention storage heaters and dual immersion cylinder': '61', 'High heat retention storage heaters': '62', 'Party wall insulation': '63', 'Internal insulation with cavity wall insulation': '65', 'Heating controls for wet central heating system': '66', 'Water Heating Controls': '70', 'PV Battery': '72', 'PV Diverter': '73', 'Ground source heat pump with radiators': '75', 'Ground source heat pump with underfloor heating': '76'}
                    parent_class_name = "Green_Deal_Improvement"
                    parent_method_name ="green_deal_improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def green_deal_improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Electricity_Saving(_Base, etree.ElementBase):
                ""
                element_name = "Electricity-Saving"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Money"
                class_name = "Electricity_Saving"
                documentation = """Total electricity saving for the package"""
                type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Green_Deal_Package"
                parent_method_name ="green_deal_package"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def green_deal_package(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Gas_Saving(_Base, etree.ElementBase):
                ""
                element_name = "Gas-Saving"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Money"
                class_name = "Gas_Saving"
                documentation = """Total gas saving for the package"""
                type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Green_Deal_Package"
                parent_method_name ="green_deal_package"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def green_deal_package(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Other_Fuel_Saving(_Base, etree.ElementBase):
                ""
                element_name = "Other-Fuel-Saving"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Money"
                class_name = "Other_Fuel_Saving"
                documentation = """Total other saving for the package"""
                type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "Green_Deal_Package"
                parent_method_name ="green_deal_package"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def green_deal_package(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
        class Alternative_Improvements(_Base, etree.ElementBase):
            ""
            element_name = "Alternative-Improvements"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "Suggested-Improvements"
            class_name = "Alternative_Improvements"
            documentation = """Alternative improvements to some of those given in Suggested-Improvements"""
            type_documentation = """Part of an Energy Report that describes the a set of improvements that the Home Inspector considers would contribute to the overall energy rating of the property."""
            has_text_node = False
            min_occurs = 0
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Energy_Assessment"
            parent_method_name ="energy_assessment"
            subclass_class_names = ["Improvement"]
            subclass_method_names = ["improvement"]
        
            @property
            def energy_assessment(self): return self.getparent()
        
            @property
            def improvement(self): return self.findall(f"{{{self.__class__.namespace}}}Improvement")
        
            def add_improvement(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement")
        
            class Improvement(_Base, etree.ElementBase):
                ""
                element_name = "Improvement"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Improvement"
                class_name = "Improvement"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = "unbounded"
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Alternative_Improvements"
                parent_method_name ="alternative_improvements"
                subclass_class_names = ["Sequence", "Improvement_Category", "Improvement_Type", "Typical_Saving", "Energy_Performance_Rating", "Environmental_Impact_Rating", "Improvement_Details", "Indicative_Cost"]
                subclass_method_names = ["sequence", "improvement_category", "improvement_type", "typical_saving", "energy_performance_rating", "environmental_impact_rating", "improvement_details", "indicative_cost"]
            
                @property
                def alternative_improvements(self): return self.getparent()
            
                @property
                def sequence(self): return self.find(f"{{{self.__class__.namespace}}}Sequence")
            
                def add_sequence(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Sequence")
            
                @property
                def improvement_category(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Category")
            
                def add_improvement_category(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Category")
            
                @property
                def improvement_type(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Type")
            
                def add_improvement_type(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Type")
            
                @property
                def typical_saving(self): return self.find(f"{{{self.__class__.namespace}}}Typical-Saving")
            
                def add_typical_saving(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Typical-Saving")
            
                @property
                def energy_performance_rating(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Performance-Rating")
            
                def add_energy_performance_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Performance-Rating")
            
                @property
                def environmental_impact_rating(self): return self.find(f"{{{self.__class__.namespace}}}Environmental-Impact-Rating")
            
                def add_environmental_impact_rating(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Environmental-Impact-Rating")
            
                @property
                def improvement_details(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Details")
            
                def add_improvement_details(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Details")
            
                @property
                def indicative_cost(self): return self.find(f"{{{self.__class__.namespace}}}Indicative-Cost")
            
                def add_indicative_cost(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Indicative-Cost")
            
                class Sequence(_Base, etree.ElementBase):
                    ""
                    element_name = "Sequence"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:integer"
                    class_name = "Sequence"
                    documentation = """Sequence of the Suggested Improvements within the set of Suggested Improvements. This is used to order the Recommendations on the output HCR / EPC so that the cumulative Ratings make sense. The Improved Energy Ratings that result from carrying out a Suggested Improvement are cumulative and assume that the improvements have been installed in the order they appear in the list. Hence they must be sequenced."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Improvement_Category(_Base, etree.ElementBase):
                    ""
                    element_name = "Improvement-Category"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "RecommendationCategoryCode"
                    class_name = "Improvement_Category"
                    documentation = """The category of improvement. This identifies where on the report the recommendation is printed."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'1': 'Lower cost - this is for backwards compatibility only and should not be used', '2': 'Higher cost - this is for backwards compatibility only and should not be used', '3': 'Further measure - this is for backwards compatibility only and should not be used', '4': 'Deselected. This is for backwards compatibility only and should not be used.', '5': 'Normal measure', '6': 'Alternative measure'}
                    map_values = {'Lower cost - this is for backwards compatibility only and should not be used': '1', 'Higher cost - this is for backwards compatibility only and should not be used': '2', 'Further measure - this is for backwards compatibility only and should not be used': '3', 'Deselected. This is for backwards compatibility only and should not be used.': '4', 'Normal measure': '5', 'Alternative measure': '6'}
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Improvement_Type(_Base, etree.ElementBase):
                    ""
                    element_name = "Improvement-Type"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-ImprovementMeasureCode"
                    class_name = "Improvement_Type"
                    documentation = """Suggested work to be carried out on the Property to improve its energy efficiency."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'A': 'Loft Insulation', 'A2': 'Flat roof insulation', 'A3': 'Room-in-roof insulation', 'B': 'Cavity wall insulation', 'B4': 'Party wall insulation', 'C': 'Hot water cylinder insulation', 'D': 'Draughtproofing', 'E': 'Low energy lights', 'F': 'Cylinder thermostat', 'G': 'Heating controls for wet central heating system', 'G2': 'Water heating controls', 'H': 'Heating controls for warm air system', 'I': 'Upgrade boiler, same fuel', 'J': 'Biomass boiler', 'J2': 'Biomass boiler as alternative improvement', 'K': 'Biomass room heater with boiler', 'L': 'New or replacement fan-assisted storage heaters', 'L2': 'New or replacement high heat retention storage heaters', 'M': 'Replacement warm-air unit', 'N': 'Solar water heating', 'O': 'Replacement double glazed windows', 'O3': 'Replacement double glazing units', 'P': 'Secondary glazing', 'Q': 'Solid wall insulation', 'Q2': 'External insulation with cavity wall insulation', 'R': 'Condensing oil boiler', 'S': 'Change heating to Band A gas condensing boiler (no fuel switch)', 'T': 'Change heating to Band A gas condensing boiler (fuel switch)', 'T2': 'Flue gas heat recovery', 'U': 'Photovoltaics', 'U1': 'PV Battery', 'U2': 'PV Diverter', 'V': 'Wind turbine (roof mounted)', 'V2': 'Wind turbine (on mast)', 'W': 'Floor insulation; for backwards compatibility only, do not use', 'W1': 'Insulation of suspended floor', 'W2': 'Insulation of solid ground floor', 'X': 'Insulated doors', 'Y': 'Instantaneous waste water heat recovery', 'Y2': 'Storage waste water heat recovery', 'Z1': 'Air or ground source heat pump', 'Z2': 'Air or ground source heat pump with underfloor heating', 'Z3': 'Micro-CHP', 'NR': 'Not recorded'}
                    map_values = {'Loft Insulation': 'A', 'Flat roof insulation': 'A2', 'Room-in-roof insulation': 'A3', 'Cavity wall insulation': 'B', 'Party wall insulation': 'B4', 'Hot water cylinder insulation': 'C', 'Draughtproofing': 'D', 'Low energy lights': 'E', 'Cylinder thermostat': 'F', 'Heating controls for wet central heating system': 'G', 'Water heating controls': 'G2', 'Heating controls for warm air system': 'H', 'Upgrade boiler, same fuel': 'I', 'Biomass boiler': 'J', 'Biomass boiler as alternative improvement': 'J2', 'Biomass room heater with boiler': 'K', 'New or replacement fan-assisted storage heaters': 'L', 'New or replacement high heat retention storage heaters': 'L2', 'Replacement warm-air unit': 'M', 'Solar water heating': 'N', 'Replacement double glazed windows': 'O', 'Replacement double glazing units': 'O3', 'Secondary glazing': 'P', 'Solid wall insulation': 'Q', 'External insulation with cavity wall insulation': 'Q2', 'Condensing oil boiler': 'R', 'Change heating to Band A gas condensing boiler (no fuel switch)': 'S', 'Change heating to Band A gas condensing boiler (fuel switch)': 'T', 'Flue gas heat recovery': 'T2', 'Photovoltaics': 'U', 'PV Battery': 'U1', 'PV Diverter': 'U2', 'Wind turbine (roof mounted)': 'V', 'Wind turbine (on mast)': 'V2', 'Floor insulation; for backwards compatibility only, do not use': 'W', 'Insulation of suspended floor': 'W1', 'Insulation of solid ground floor': 'W2', 'Insulated doors': 'X', 'Instantaneous waste water heat recovery': 'Y', 'Storage waste water heat recovery': 'Y2', 'Air or ground source heat pump': 'Z1', 'Air or ground source heat pump with underfloor heating': 'Z2', 'Micro-CHP': 'Z3', 'Not recorded': 'NR'}
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Typical_Saving(_Base, etree.ElementBase):
                    ""
                    element_name = "Typical-Saving"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Money"
                    class_name = "Typical_Saving"
                    documentation = """Typical savings (in British Pounds) per year if the suggested improvement is carried out. 0 if not assessed"""
                    type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = float
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Energy_Performance_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Energy-Performance-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyRatingType"
                    class_name = "Energy_Performance_Rating"
                    documentation = """The estimated Energy performance rating of the Property after the Suggested Improvement has been carried out providing any preceding Suggested Improvement has also been carried out. 0 if not assessed"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Environmental_Impact_Rating(_Base, etree.ElementBase):
                    ""
                    element_name = "Environmental-Impact-Rating"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "EnergyRatingType"
                    class_name = "Environmental_Impact_Rating"
                    documentation = """The estimated Environmental Impact rating of the Property after the Suggested Improvement has been carried out providing any preceding Suggested Improvement has also been carried out. 0 if not assessed"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Improvement_Details(_Base, etree.ElementBase):
                    ""
                    element_name = "Improvement-Details"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "None"
                    class_name = "Improvement_Details"
                    documentation = None
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = ["Improvement_Texts", "Improvement_Number"]
                    subclass_method_names = ["improvement_texts", "improvement_number"]
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def improvement_texts(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Texts")
                
                    def add_improvement_texts(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Texts")
                
                    @property
                    def improvement_number(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Number")
                
                    def add_improvement_number(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Number")
                
                    class Improvement_Texts(_Base, etree.ElementBase):
                        ""
                        element_name = "Improvement-Texts"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "ImprovementTexts"
                        class_name = "Improvement_Texts"
                        documentation = """For backward compatibility only"""
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "Improvement_Details"
                        parent_method_name ="improvement_details"
                        subclass_class_names = ["Improvement_Summary", "Improvement_Heading", "Improvement_Description"]
                        subclass_method_names = ["improvement_summary", "improvement_heading", "improvement_description"]
                    
                        @property
                        def improvement_details(self): return self.getparent()
                    
                        @property
                        def improvement_summary(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Summary")
                    
                        def add_improvement_summary(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Summary")
                    
                        @property
                        def improvement_heading(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Heading")
                    
                        def add_improvement_heading(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Heading")
                    
                        @property
                        def improvement_description(self): return self.find(f"{{{self.__class__.namespace}}}Improvement-Description")
                    
                        def add_improvement_description(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Improvement-Description")
                    
                        class Improvement_Summary(_Base, etree.ElementBase):
                            ""
                            element_name = "Improvement-Summary"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Sentence"
                            class_name = "Improvement_Summary"
                            documentation = """A short description of the suggested improvement."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = None
                            map_values = None
                            parent_class_name = "Improvement_Texts"
                            parent_method_name ="improvement_texts"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def improvement_texts(self): return self.getparent()
                        
                            @property
                            def value(self): return self.text
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Improvement_Heading(_Base, etree.ElementBase):
                            ""
                            element_name = "Improvement-Heading"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Sentence"
                            class_name = "Improvement_Heading"
                            documentation = """Text to precede the improvement description. If this field is not provided the 'Improvement-Summary' is used instead."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = None
                            map_values = None
                            parent_class_name = "Improvement_Texts"
                            parent_method_name ="improvement_texts"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def improvement_texts(self): return self.getparent()
                        
                            @property
                            def value(self): return self.text
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Improvement_Description(_Base, etree.ElementBase):
                            ""
                            element_name = "Improvement-Description"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Sentence"
                            class_name = "Improvement_Description"
                            documentation = """Detailed description of the suggested improvement."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = None
                            map_values = None
                            parent_class_name = "Improvement_Texts"
                            parent_method_name ="improvement_texts"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def improvement_texts(self): return self.getparent()
                        
                            @property
                            def value(self): return self.text
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                    class Improvement_Number(_Base, etree.ElementBase):
                        ""
                        element_name = "Improvement-Number"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "RecommendationSummaryCode"
                        class_name = "Improvement_Number"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'Insulate hot water cylinder with 80 mm jacket', '2': 'Increase hot water cylinder insulation', '3': 'Add additional 80 mm jacket to hot water cylinder', '4': 'Hot water cylinder thermostat', '5': 'Increase loft insulation to 270 mm', '6': 'Cavity wall insulation', '7': 'Internal or external wall insulation', '8': 'Replace single glazed windows with low-E double glazing', '9': 'Secondary glazing to single glazed windows', '10': 'Draught proofing', '11': 'Heating controls (programmer, room thermostat and TRVs)', '12': 'Heating controls (room thermostat and TRVs)', '13': 'Heating controls (thermostatic radiator valves)', '14': 'Heating controls (room thermostat)', '15': 'Heating controls (programmer and TRVs)', '16': 'Heating controls (time and temperature zone control)', '17': 'Heating controls (programmer and room thermostat)', '18': 'Heating controls (room thermostat)', '19': 'Solar water heating', '20': 'Replace boiler with new condensing boiler', '21': 'Replace boiler with new condensing boiler', '22': 'Replace boiler with biomass boiler', '23': 'Wood pellet stove with boiler and radiators', '24': 'Fan assisted storage heaters and dual immersion cylinder', '25': 'Fan assisted storage heaters', '26': 'Replacement warm air unit', '27': 'Change heating to gas condensing boiler', '28': 'Condensing oil boiler with radiators', '29': 'Change heating to gas condensing boiler', '30': 'Fan assisted storage heaters and dual immersion cylinder', '31': 'Fan-assisted storage heaters', '32': 'Change heating to gas condensing boiler', '34': 'Solar photovoltaic panels, 2.5 kWp', '35': 'Low energy lighting for all fixed outlets', '36': 'Replace heating unit with condensing unit', '37': 'Condensing boiler (separate from the range cooker)', '38': 'Condensing boiler (separate from the range cooker)', '39': 'Wood pellet stove with boiler and radiators', '40': 'Change room heaters to condensing boiler', '41': 'Change room heaters to condensing boiler', '42': 'Replace heating unit with mains gas condensing unit', '43': 'Condensing oil boiler with radiators', '44': 'Wind turbine', '45': 'Flat roof or sloping ceiling insulation', '46': 'Room-in-roof insulation', '47': 'Floor insulation', '48': 'High performance external doors', '49': 'Heat recovery system for mixer showers', '50': 'Flue gas heat recovery device in conjunction with boiler', '51': 'Air or ground source heat pump', '52': 'Air or ground source heat pump with underfloor heating', '53': 'Micro CHP', '54': 'Biomass boiler (Exempted Appliance if in Smoke Control Area)', '55': 'External insulation with cavity wall insulation', '56': 'Replacement glazing units', '57': 'Suspended floor insulation', '58': 'Solid floor insulation', '59': 'High heat retention storage heaters and dual immersion cylinder', '60': 'High heat retention storage heaters', '61': 'High heat retention storage heaters and dual immersion cylinder', '62': 'High heat retention storage heaters', '63': 'Party wall insulation', '65': 'Internal insulation with cavity wall insulation', '66': 'Heating controls for wet central heating system', '70': 'Water Heating Controls', '72': 'PV Battery', '73': 'PV Diverter', '75': 'Ground source heat pump with radiators', '76': 'Ground source heat pump with underfloor heating'}
                        map_values = {'Insulate hot water cylinder with 80 mm jacket': '1', 'Increase hot water cylinder insulation': '2', 'Add additional 80 mm jacket to hot water cylinder': '3', 'Hot water cylinder thermostat': '4', 'Increase loft insulation to 270 mm': '5', 'Cavity wall insulation': '6', 'Internal or external wall insulation': '7', 'Replace single glazed windows with low-E double glazing': '8', 'Secondary glazing to single glazed windows': '9', 'Draught proofing': '10', 'Heating controls (programmer, room thermostat and TRVs)': '11', 'Heating controls (room thermostat and TRVs)': '12', 'Heating controls (thermostatic radiator valves)': '13', 'Heating controls (room thermostat)': '18', 'Heating controls (programmer and TRVs)': '15', 'Heating controls (time and temperature zone control)': '16', 'Heating controls (programmer and room thermostat)': '17', 'Solar water heating': '19', 'Replace boiler with new condensing boiler': '21', 'Replace boiler with biomass boiler': '22', 'Wood pellet stove with boiler and radiators': '39', 'Fan assisted storage heaters and dual immersion cylinder': '30', 'Fan assisted storage heaters': '25', 'Replacement warm air unit': '26', 'Change heating to gas condensing boiler': '32', 'Condensing oil boiler with radiators': '43', 'Fan-assisted storage heaters': '31', 'Solar photovoltaic panels, 2.5 kWp': '34', 'Low energy lighting for all fixed outlets': '35', 'Replace heating unit with condensing unit': '36', 'Condensing boiler (separate from the range cooker)': '38', 'Change room heaters to condensing boiler': '41', 'Replace heating unit with mains gas condensing unit': '42', 'Wind turbine': '44', 'Flat roof or sloping ceiling insulation': '45', 'Room-in-roof insulation': '46', 'Floor insulation': '47', 'High performance external doors': '48', 'Heat recovery system for mixer showers': '49', 'Flue gas heat recovery device in conjunction with boiler': '50', 'Air or ground source heat pump': '51', 'Air or ground source heat pump with underfloor heating': '52', 'Micro CHP': '53', 'Biomass boiler (Exempted Appliance if in Smoke Control Area)': '54', 'External insulation with cavity wall insulation': '55', 'Replacement glazing units': '56', 'Suspended floor insulation': '57', 'Solid floor insulation': '58', 'High heat retention storage heaters and dual immersion cylinder': '61', 'High heat retention storage heaters': '62', 'Party wall insulation': '63', 'Internal insulation with cavity wall insulation': '65', 'Heating controls for wet central heating system': '66', 'Water Heating Controls': '70', 'PV Battery': '72', 'PV Diverter': '73', 'Ground source heat pump with radiators': '75', 'Ground source heat pump with underfloor heating': '76'}
                        parent_class_name = "Improvement_Details"
                        parent_method_name ="improvement_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def improvement_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                class Indicative_Cost(_Base, etree.ElementBase):
                    ""
                    element_name = "Indicative-Cost"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Indicative_Cost"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Improvement"
                    parent_method_name ="improvement"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def improvement(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
    class SAP_Data(_Base, etree.ElementBase):
        ""
        element_name = "SAP-Data"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "SAP-Data"
        class_name = "SAP_Data"
        documentation = None
        type_documentation = """These are the specific data-items collected by the HI / EA needed to perform the SAP calculation."""
        has_text_node = False
        min_occurs = 0
        max_occurs = 1
        python_type_convertor = None
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = ["SAP_Property_Details"]
        subclass_method_names = ["sap_property_details"]
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def sap_property_details(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Property-Details")
    
        def add_sap_property_details(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Property-Details")
    
        class SAP_Property_Details(_Base, etree.ElementBase):
            ""
            element_name = "SAP-Property-Details"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "SAP-Property-Details"
            class_name = "SAP_Property_Details"
            documentation = None
            type_documentation = None
            has_text_node = False
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "SAP_Data"
            parent_method_name ="sap_data"
            subclass_class_names = ["Built_Form", "Extensions_Count", "Habitable_Room_Count", "Heated_Room_Count", "Low_Energy_Fixed_Lighting_Bulbs_Count", "Incandescent_Fixed_Lighting_Bulbs_Count", "LED_Fixed_Lighting_Bulbs_Count", "CFL_Fixed_Lighting_Bulbs_Count", "Measurement_Type", "Property_Type", "Solar_Water_Heating", "Wet_Rooms_Count", "Pressure_Test", "Pressure_Test_Certificate_Number", "Air_Permeability", "Has_Draught_Lobby", "Open_Chimneys_Count", "Blocked_Chimneys_Count", "Open_Flues_Count", "Closed_Flues_Count", "Boilers_Flues_Count", "Other_Flues_Count", "Extract_Fans_Count", "PSV_Count", "Flueless_Gas_Fires_Count", "Mechanical_Ventilation_Index_Number", "Mechanical_Ventilation", "Mechanical_Vent_Duct_Type", "Mechanical_Vent_Duct_Placement", "Mechanical_Vent_Duct_Insulation", "Mechanical_Vent_Duct_Insulation_Level", "Mechanical_Vent_Measured_Installation", "Is_Mechanical_Vent_Approved_Installer_Scheme", "Kitchen_Room_Fans_Count", "Non_Kitchen_Room_Fans_Count", "Kitchen_Duct_Fans_Count", "Non_Kitchen_Duct_Fans_Count", "Kitchen_Wall_Fans_Count", "Non_Kitchen_Wall_Fans_Count", "Conservatory_Type", "SAP_Heating", "SAP_Energy_Source", "SAP_Building_Parts", "SAP_Flat_Details", "SAP_Windows", "Windows_Transmission_Details", "SAP_Deselected_Improvements", "Door_Count", "Insulated_Door_Count", "Draughtproofed_Door_Count", "Insulated_Door_U_Value", "Percent_Draughtproofed", "SAP_Special_Features"]
            subclass_method_names = ["built_form", "extensions_count", "habitable_room_count", "heated_room_count", "low_energy_fixed_lighting_bulbs_count", "incandescent_fixed_lighting_bulbs_count", "led_fixed_lighting_bulbs_count", "cfl_fixed_lighting_bulbs_count", "measurement_type", "property_type", "solar_water_heating", "wet_rooms_count", "pressure_test", "pressure_test_certificate_number", "air_permeability", "has_draught_lobby", "open_chimneys_count", "blocked_chimneys_count", "open_flues_count", "closed_flues_count", "boilers_flues_count", "other_flues_count", "extract_fans_count", "psv_count", "flueless_gas_fires_count", "mechanical_ventilation_index_number", "mechanical_ventilation", "mechanical_vent_duct_type", "mechanical_vent_duct_placement", "mechanical_vent_duct_insulation", "mechanical_vent_duct_insulation_level", "mechanical_vent_measured_installation", "is_mechanical_vent_approved_installer_scheme", "kitchen_room_fans_count", "non_kitchen_room_fans_count", "kitchen_duct_fans_count", "non_kitchen_duct_fans_count", "kitchen_wall_fans_count", "non_kitchen_wall_fans_count", "conservatory_type", "sap_heating", "sap_energy_source", "sap_building_parts", "sap_flat_details", "sap_windows", "windows_transmission_details", "sap_deselected_improvements", "door_count", "insulated_door_count", "draughtproofed_door_count", "insulated_door_u_value", "percent_draughtproofed", "sap_special_features"]
        
            @property
            def sap_data(self): return self.getparent()
        
            @property
            def built_form(self): return self.find(f"{{{self.__class__.namespace}}}Built-Form")
        
            def add_built_form(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Built-Form")
        
            @property
            def extensions_count(self): return self.find(f"{{{self.__class__.namespace}}}Extensions-Count")
        
            def add_extensions_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Extensions-Count")
        
            @property
            def habitable_room_count(self): return self.find(f"{{{self.__class__.namespace}}}Habitable-Room-Count")
        
            def add_habitable_room_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Habitable-Room-Count")
        
            @property
            def heated_room_count(self): return self.find(f"{{{self.__class__.namespace}}}Heated-Room-Count")
        
            def add_heated_room_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Heated-Room-Count")
        
            @property
            def low_energy_fixed_lighting_bulbs_count(self): return self.find(f"{{{self.__class__.namespace}}}Low-Energy-Fixed-Lighting-Bulbs-Count")
        
            def add_low_energy_fixed_lighting_bulbs_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Low-Energy-Fixed-Lighting-Bulbs-Count")
        
            @property
            def incandescent_fixed_lighting_bulbs_count(self): return self.find(f"{{{self.__class__.namespace}}}Incandescent-Fixed-Lighting-Bulbs-Count")
        
            def add_incandescent_fixed_lighting_bulbs_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Incandescent-Fixed-Lighting-Bulbs-Count")
        
            @property
            def led_fixed_lighting_bulbs_count(self): return self.find(f"{{{self.__class__.namespace}}}LED-Fixed-Lighting-Bulbs-Count")
        
            def add_led_fixed_lighting_bulbs_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}LED-Fixed-Lighting-Bulbs-Count")
        
            @property
            def cfl_fixed_lighting_bulbs_count(self): return self.find(f"{{{self.__class__.namespace}}}CFL-Fixed-Lighting-Bulbs-Count")
        
            def add_cfl_fixed_lighting_bulbs_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}CFL-Fixed-Lighting-Bulbs-Count")
        
            @property
            def measurement_type(self): return self.find(f"{{{self.__class__.namespace}}}Measurement-Type")
        
            def add_measurement_type(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Measurement-Type")
        
            @property
            def property_type(self): return self.find(f"{{{self.__class__.namespace}}}Property-Type")
        
            def add_property_type(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Property-Type")
        
            @property
            def solar_water_heating(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Water-Heating")
        
            def add_solar_water_heating(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Water-Heating")
        
            @property
            def wet_rooms_count(self): return self.find(f"{{{self.__class__.namespace}}}Wet-Rooms-Count")
        
            def add_wet_rooms_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wet-Rooms-Count")
        
            @property
            def pressure_test(self): return self.find(f"{{{self.__class__.namespace}}}Pressure-Test")
        
            def add_pressure_test(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Pressure-Test")
        
            @property
            def pressure_test_certificate_number(self): return self.find(f"{{{self.__class__.namespace}}}Pressure-Test-Certificate-Number")
        
            def add_pressure_test_certificate_number(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Pressure-Test-Certificate-Number")
        
            @property
            def air_permeability(self): return self.find(f"{{{self.__class__.namespace}}}Air-Permeability")
        
            def add_air_permeability(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Air-Permeability")
        
            @property
            def has_draught_lobby(self): return self.find(f"{{{self.__class__.namespace}}}Has-Draught-Lobby")
        
            def add_has_draught_lobby(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Has-Draught-Lobby")
        
            @property
            def open_chimneys_count(self): return self.find(f"{{{self.__class__.namespace}}}Open-Chimneys-Count")
        
            def add_open_chimneys_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Open-Chimneys-Count")
        
            @property
            def blocked_chimneys_count(self): return self.find(f"{{{self.__class__.namespace}}}Blocked-Chimneys-Count")
        
            def add_blocked_chimneys_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Blocked-Chimneys-Count")
        
            @property
            def open_flues_count(self): return self.find(f"{{{self.__class__.namespace}}}Open-Flues-Count")
        
            def add_open_flues_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Open-Flues-Count")
        
            @property
            def closed_flues_count(self): return self.find(f"{{{self.__class__.namespace}}}Closed-Flues-Count")
        
            def add_closed_flues_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Closed-Flues-Count")
        
            @property
            def boilers_flues_count(self): return self.find(f"{{{self.__class__.namespace}}}Boilers-Flues-Count")
        
            def add_boilers_flues_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Boilers-Flues-Count")
        
            @property
            def other_flues_count(self): return self.find(f"{{{self.__class__.namespace}}}Other-Flues-Count")
        
            def add_other_flues_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Other-Flues-Count")
        
            @property
            def extract_fans_count(self): return self.find(f"{{{self.__class__.namespace}}}Extract-Fans-Count")
        
            def add_extract_fans_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Extract-Fans-Count")
        
            @property
            def psv_count(self): return self.find(f"{{{self.__class__.namespace}}}PSV-Count")
        
            def add_psv_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}PSV-Count")
        
            @property
            def flueless_gas_fires_count(self): return self.find(f"{{{self.__class__.namespace}}}Flueless-Gas-Fires-Count")
        
            def add_flueless_gas_fires_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flueless-Gas-Fires-Count")
        
            @property
            def mechanical_ventilation_index_number(self): return self.find(f"{{{self.__class__.namespace}}}Mechanical-Ventilation-Index-Number")
        
            def add_mechanical_ventilation_index_number(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Mechanical-Ventilation-Index-Number")
        
            @property
            def mechanical_ventilation(self): return self.find(f"{{{self.__class__.namespace}}}Mechanical-Ventilation")
        
            def add_mechanical_ventilation(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Mechanical-Ventilation")
        
            @property
            def mechanical_vent_duct_type(self): return self.find(f"{{{self.__class__.namespace}}}Mechanical-Vent-Duct-Type")
        
            def add_mechanical_vent_duct_type(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Mechanical-Vent-Duct-Type")
        
            @property
            def mechanical_vent_duct_placement(self): return self.find(f"{{{self.__class__.namespace}}}Mechanical-Vent-Duct-Placement")
        
            def add_mechanical_vent_duct_placement(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Mechanical-Vent-Duct-Placement")
        
            @property
            def mechanical_vent_duct_insulation(self): return self.find(f"{{{self.__class__.namespace}}}Mechanical-Vent-Duct-Insulation")
        
            def add_mechanical_vent_duct_insulation(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Mechanical-Vent-Duct-Insulation")
        
            @property
            def mechanical_vent_duct_insulation_level(self): return self.find(f"{{{self.__class__.namespace}}}Mechanical-Vent-Duct-Insulation-Level")
        
            def add_mechanical_vent_duct_insulation_level(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Mechanical-Vent-Duct-Insulation-Level")
        
            @property
            def mechanical_vent_measured_installation(self): return self.find(f"{{{self.__class__.namespace}}}Mechanical-Vent-Measured-Installation")
        
            def add_mechanical_vent_measured_installation(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Mechanical-Vent-Measured-Installation")
        
            @property
            def is_mechanical_vent_approved_installer_scheme(self): return self.find(f"{{{self.__class__.namespace}}}Is-Mechanical-Vent-Approved-Installer-Scheme")
        
            def add_is_mechanical_vent_approved_installer_scheme(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Is-Mechanical-Vent-Approved-Installer-Scheme")
        
            @property
            def kitchen_room_fans_count(self): return self.find(f"{{{self.__class__.namespace}}}Kitchen-Room-Fans-Count")
        
            def add_kitchen_room_fans_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Kitchen-Room-Fans-Count")
        
            @property
            def non_kitchen_room_fans_count(self): return self.find(f"{{{self.__class__.namespace}}}Non-Kitchen-Room-Fans-Count")
        
            def add_non_kitchen_room_fans_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Non-Kitchen-Room-Fans-Count")
        
            @property
            def kitchen_duct_fans_count(self): return self.find(f"{{{self.__class__.namespace}}}Kitchen-Duct-Fans-Count")
        
            def add_kitchen_duct_fans_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Kitchen-Duct-Fans-Count")
        
            @property
            def non_kitchen_duct_fans_count(self): return self.find(f"{{{self.__class__.namespace}}}Non-Kitchen-Duct-Fans-Count")
        
            def add_non_kitchen_duct_fans_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Non-Kitchen-Duct-Fans-Count")
        
            @property
            def kitchen_wall_fans_count(self): return self.find(f"{{{self.__class__.namespace}}}Kitchen-Wall-Fans-Count")
        
            def add_kitchen_wall_fans_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Kitchen-Wall-Fans-Count")
        
            @property
            def non_kitchen_wall_fans_count(self): return self.find(f"{{{self.__class__.namespace}}}Non-Kitchen-Wall-Fans-Count")
        
            def add_non_kitchen_wall_fans_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Non-Kitchen-Wall-Fans-Count")
        
            @property
            def conservatory_type(self): return self.find(f"{{{self.__class__.namespace}}}Conservatory-Type")
        
            def add_conservatory_type(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Conservatory-Type")
        
            @property
            def sap_heating(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Heating")
        
            def add_sap_heating(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Heating")
        
            @property
            def sap_energy_source(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Energy-Source")
        
            def add_sap_energy_source(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Energy-Source")
        
            @property
            def sap_building_parts(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Building-Parts")
        
            def add_sap_building_parts(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Building-Parts")
        
            @property
            def sap_flat_details(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Flat-Details")
        
            def add_sap_flat_details(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Flat-Details")
        
            @property
            def sap_windows(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Windows")
        
            def add_sap_windows(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Windows")
        
            @property
            def windows_transmission_details(self): return self.find(f"{{{self.__class__.namespace}}}Windows-Transmission-Details")
        
            def add_windows_transmission_details(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Windows-Transmission-Details")
        
            @property
            def sap_deselected_improvements(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Deselected-Improvements")
        
            def add_sap_deselected_improvements(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Deselected-Improvements")
        
            @property
            def door_count(self): return self.find(f"{{{self.__class__.namespace}}}Door-Count")
        
            def add_door_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Door-Count")
        
            @property
            def insulated_door_count(self): return self.find(f"{{{self.__class__.namespace}}}Insulated-Door-Count")
        
            def add_insulated_door_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Insulated-Door-Count")
        
            @property
            def draughtproofed_door_count(self): return self.find(f"{{{self.__class__.namespace}}}Draughtproofed-Door-Count")
        
            def add_draughtproofed_door_count(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Draughtproofed-Door-Count")
        
            @property
            def insulated_door_u_value(self): return self.find(f"{{{self.__class__.namespace}}}Insulated-Door-U-Value")
        
            def add_insulated_door_u_value(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Insulated-Door-U-Value")
        
            @property
            def percent_draughtproofed(self): return self.find(f"{{{self.__class__.namespace}}}Percent-Draughtproofed")
        
            def add_percent_draughtproofed(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Percent-Draughtproofed")
        
            @property
            def sap_special_features(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Special-Features")
        
            def add_sap_special_features(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Special-Features")
        
            class Built_Form(_Base, etree.ElementBase):
                ""
                element_name = "Built-Form"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-BuiltFormCode"
                class_name = "Built_Form"
                documentation = """The building type of the Property e.g. Detached, Semi-Detached, Terrace etc. Together with the Property Type, the Build Form produces a structured description of the property."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'1': 'Detached', '2': 'Semi-Detached', '3': 'End-Terrace', '4': 'Mid-Terrace', '5': 'Enclosed End-Terrace', '6': 'Enclosed Mid-Terrace', 'NR': 'Not Recorded'}
                map_values = {'Detached': '1', 'Semi-Detached': '2', 'End-Terrace': '3', 'Mid-Terrace': '4', 'Enclosed End-Terrace': '5', 'Enclosed Mid-Terrace': '6', 'Not Recorded': 'NR'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Extensions_Count(_Base, etree.ElementBase):
                ""
                element_name = "Extensions-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "ExtensionsCount"
                class_name = "Extensions_Count"
                documentation = """The number of extensions added to the house."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Habitable_Room_Count(_Base, etree.ElementBase):
                ""
                element_name = "Habitable-Room-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Habitable_Room_Count"
                documentation = """Count of the number of habitable rooms within the property. This is the number of Reception Rooms (including Living Rooms, Sitting Rooms, Dining Rooms), Bedrooms, Study and similar rooms but excludes hall, stairs, kitchen, utility rooms, bathrooms, cloakrooms, en-suites and similar rooms."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Heated_Room_Count(_Base, etree.ElementBase):
                ""
                element_name = "Heated-Room-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Heated_Room_Count"
                documentation = """The numbewr of heated rooms in the property if more than half of the abitable rooms are not heated."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Low_Energy_Fixed_Lighting_Bulbs_Count(_Base, etree.ElementBase):
                ""
                element_name = "Low-Energy-Fixed-Lighting-Bulbs-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Low_Energy_Fixed_Lighting_Bulbs_Count"
                documentation = """If exact number of CFL and LED not known, provide number of low energy fixed lighting outlets."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Incandescent_Fixed_Lighting_Bulbs_Count(_Base, etree.ElementBase):
                ""
                element_name = "Incandescent-Fixed-Lighting-Bulbs-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Incandescent_Fixed_Lighting_Bulbs_Count"
                documentation = """Number of incandescent fixed bulbs."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class LED_Fixed_Lighting_Bulbs_Count(_Base, etree.ElementBase):
                ""
                element_name = "LED-Fixed-Lighting-Bulbs-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "LED_Fixed_Lighting_Bulbs_Count"
                documentation = """Number of LED fixed bulbs."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class CFL_Fixed_Lighting_Bulbs_Count(_Base, etree.ElementBase):
                ""
                element_name = "CFL-Fixed-Lighting-Bulbs-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "CFL_Fixed_Lighting_Bulbs_Count"
                documentation = """Number of CFL fixed bulbs."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Measurement_Type(_Base, etree.ElementBase):
                ""
                element_name = "Measurement-Type"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "MeasurementTypeCode"
                class_name = "Measurement_Type"
                documentation = """Indicates the type of measurements taken to calculate floor areas e.g. "Internal" or "External"."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'1': 'Internal', '2': 'External'}
                map_values = {'Internal': '1', 'External': '2'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Property_Type(_Base, etree.ElementBase):
                ""
                element_name = "Property-Type"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PropertyTypeCode"
                class_name = "Property_Type"
                documentation = """Describes the type of property such as House, Flat, Mansion, Maisonette etc. This is actually the type differentiator for Property but only a limited number of property types, notably Apartment and Apartment Block, have any specific characteristics and warrant their own definition."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'0': 'House', '1': 'Bungalow', '2': 'Flat', '3': 'Maisonette', '4': 'Park home'}
                map_values = {'House': '0', 'Bungalow': '1', 'Flat': '2', 'Maisonette': '3', 'Park home': '4'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Solar_Water_Heating(_Base, etree.ElementBase):
                ""
                element_name = "Solar-Water-Heating"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Flag"
                class_name = "Solar_Water_Heating"
                documentation = """Indicates whether the heating in the Property is solar powered."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'Y': 'Yes', 'N': 'No'}
                map_values = {'Yes': 'Y', 'No': 'N'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Wet_Rooms_Count(_Base, etree.ElementBase):
                ""
                element_name = "Wet-Rooms-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Wet_Rooms_Count"
                documentation = """Relevant when mechanical ventilation system is from PCDB."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Pressure_Test(_Base, etree.ElementBase):
                ""
                element_name = "Pressure-Test"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-PressureTestCode"
                class_name = "Pressure_Test"
                documentation = """Whether there has been a pressure test, or whether an assumed value is used for the air permeability."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'4': 'no test, SAP algorithm used', '6': 'yes - measured at 50 Pa', '7': 'yes - measured at 4 Pa'}
                map_values = {'no test, SAP algorithm used': '4', 'yes - measured at 50 Pa': '6', 'yes - measured at 4 Pa': '7'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Pressure_Test_Certificate_Number(_Base, etree.ElementBase):
                ""
                element_name = "Pressure-Test-Certificate-Number"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:string"
                class_name = "Pressure_Test_Certificate_Number"
                documentation = """The pressure test certificate number or test engineer reference."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Air_Permeability(_Base, etree.ElementBase):
                ""
                element_name = "Air-Permeability"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:decimal"
                class_name = "Air_Permeability"
                documentation = """Air permeability; only if pressure test (yes or assumed)."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Has_Draught_Lobby(_Base, etree.ElementBase):
                ""
                element_name = "Has-Draught-Lobby"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "Has_Draught_Lobby"
                documentation = """Is there a draft lobby? Only if no pressure test."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Open_Chimneys_Count(_Base, etree.ElementBase):
                ""
                element_name = "Open-Chimneys-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Open_Chimneys_Count"
                documentation = """The number of Open Chimneys in the Property."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Blocked_Chimneys_Count(_Base, etree.ElementBase):
                ""
                element_name = "Blocked-Chimneys-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Blocked_Chimneys_Count"
                documentation = """The number of Blocked Chimneys in the Property."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Open_Flues_Count(_Base, etree.ElementBase):
                ""
                element_name = "Open-Flues-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Open_Flues_Count"
                documentation = """The number of Open Flues in the Property."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Closed_Flues_Count(_Base, etree.ElementBase):
                ""
                element_name = "Closed-Flues-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Closed_Flues_Count"
                documentation = """Chimney/Flues attached to closed fires."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Boilers_Flues_Count(_Base, etree.ElementBase):
                ""
                element_name = "Boilers-Flues-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Boilers_Flues_Count"
                documentation = """The number of Boiler Flues or chimneys in the Property."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Other_Flues_Count(_Base, etree.ElementBase):
                ""
                element_name = "Other-Flues-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Other_Flues_Count"
                documentation = """The number of Other Flues or chimneys in the Property."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Extract_Fans_Count(_Base, etree.ElementBase):
                ""
                element_name = "Extract-Fans-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Extract_Fans_Count"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class PSV_Count(_Base, etree.ElementBase):
                ""
                element_name = "PSV-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "PSV_Count"
                documentation = """Number of passive vents."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Flueless_Gas_Fires_Count(_Base, etree.ElementBase):
                ""
                element_name = "Flueless-Gas-Fires-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Flueless_Gas_Fires_Count"
                documentation = """The number of flueless gas fires in the Property."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Mechanical_Ventilation_Index_Number(_Base, etree.ElementBase):
                ""
                element_name = "Mechanical-Ventilation-Index-Number"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:positiveInteger"
                class_name = "Mechanical_Ventilation_Index_Number"
                documentation = """Relevant when mechanical ventilation system is from PCDB."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Mechanical_Ventilation(_Base, etree.ElementBase):
                ""
                element_name = "Mechanical-Ventilation"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "VentilationTypeCode"
                class_name = "Mechanical_Ventilation"
                documentation = """Identifies the type of mechanical ventilation the property has. This is required for the RdSAP calculation."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'0': 'natural', '1': 'mechanical ventilation without heat recovery (MV)', '2': 'mechanical extract, decentralised (MEV dc)', '3': 'mechanical extract, centralised (MEV c)', '4': 'mechanical ventilation with heat recovery (MVHR)', '5': 'positive input from loft', '6': 'positive input from outside'}
                map_values = {'natural': '0', 'mechanical ventilation without heat recovery (MV)': '1', 'mechanical extract, decentralised (MEV dc)': '2', 'mechanical extract, centralised (MEV c)': '3', 'mechanical ventilation with heat recovery (MVHR)': '4', 'positive input from loft': '5', 'positive input from outside': '6'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Mechanical_Vent_Duct_Type(_Base, etree.ElementBase):
                ""
                element_name = "Mechanical-Vent-Duct-Type"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-DuctTypeCode"
                class_name = "Mechanical_Vent_Duct_Type"
                documentation = """Mechanical vent duct type; if MEV c, MV or MVHR from PCDB."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'1': 'flexible', '2': 'rigid', '3': 'semi-rigid'}
                map_values = {'flexible': '1', 'rigid': '2', 'semi-rigid': '3'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Mechanical_Vent_Duct_Placement(_Base, etree.ElementBase):
                ""
                element_name = "Mechanical-Vent-Duct-Placement"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-DuctPlacement"
                class_name = "Mechanical_Vent_Duct_Placement"
                documentation = """Mechanical ventilation duct insulation; if MVHR from PCDB."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'1': 'inside heated envelope', '2': 'outside heated envelope'}
                map_values = {'inside heated envelope': '1', 'outside heated envelope': '2'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Mechanical_Vent_Duct_Insulation(_Base, etree.ElementBase):
                ""
                element_name = "Mechanical-Vent-Duct-Insulation"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-DuctInsulationCode"
                class_name = "Mechanical_Vent_Duct_Insulation"
                documentation = """Relevant when mechanical ventilation system is from PCDB."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'1': 'not insulated', '2': 'insulated'}
                map_values = {'not insulated': '1', 'insulated': '2'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Mechanical_Vent_Duct_Insulation_Level(_Base, etree.ElementBase):
                ""
                element_name = "Mechanical-Vent-Duct-Insulation-Level"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-DuctInsulationLevel"
                class_name = "Mechanical_Vent_Duct_Insulation_Level"
                documentation = """Mechanical vent duct insulation; if MVHR from PCDB."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'1': 'level 1', '2': 'level 2'}
                map_values = {'level 1': '1', 'level 2': '2'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Mechanical_Vent_Measured_Installation(_Base, etree.ElementBase):
                ""
                element_name = "Mechanical-Vent-Measured-Installation"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "Mechanical_Vent_Measured_Installation"
                documentation = """Mechanical ventilation SPF measured in situ; if MVHR or balanced from pcdb."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Is_Mechanical_Vent_Approved_Installer_Scheme(_Base, etree.ElementBase):
                ""
                element_name = "Is-Mechanical-Vent-Approved-Installer-Scheme"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:boolean"
                class_name = "Is_Mechanical_Vent_Approved_Installer_Scheme"
                documentation = """If MVHR from pcdb."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = bool
                map_codes = {'true': True, '1': True, 'false': False, '0': False}
                map_values = {True: '1', False: '0'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Kitchen_Room_Fans_Count(_Base, etree.ElementBase):
                ""
                element_name = "Kitchen-Room-Fans-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Kitchen_Room_Fans_Count"
                documentation = """MEV dc, number of fans in room, kitchen; if mechanical vent data from database or manufacturer declaration (MEV dc)."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Non_Kitchen_Room_Fans_Count(_Base, etree.ElementBase):
                ""
                element_name = "Non-Kitchen-Room-Fans-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Non_Kitchen_Room_Fans_Count"
                documentation = """MEV dc, number of fans in room, rooms other than kitchen; if mechanical vent data from database or manufacturer declaration (MEV dc)."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Kitchen_Duct_Fans_Count(_Base, etree.ElementBase):
                ""
                element_name = "Kitchen-Duct-Fans-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Kitchen_Duct_Fans_Count"
                documentation = """MEV dc, number of fans via duct, kitchen; if mechanical vent data from database or manufacturer declaration (MEV dc)."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Non_Kitchen_Duct_Fans_Count(_Base, etree.ElementBase):
                ""
                element_name = "Non-Kitchen-Duct-Fans-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Non_Kitchen_Duct_Fans_Count"
                documentation = """MEV dc, number of fans via duct, rooms other than kitchen; if mechanical vent data from database or manufacturer declaration (MEV dc)."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Kitchen_Wall_Fans_Count(_Base, etree.ElementBase):
                ""
                element_name = "Kitchen-Wall-Fans-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Kitchen_Wall_Fans_Count"
                documentation = """MEV dc, number of fans through wall, kitchen; if mechanical vent data from database or manufacturer declaration (MEV dc)."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Non_Kitchen_Wall_Fans_Count(_Base, etree.ElementBase):
                ""
                element_name = "Non-Kitchen-Wall-Fans-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Non_Kitchen_Wall_Fans_Count"
                documentation = """MEV dc, number of fans through wall, rooms other than kitchen; if mechanical vent data from database or manufacturer declaration (MEV dc)."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Conservatory_Type(_Base, etree.ElementBase):
                ""
                element_name = "Conservatory-Type"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-ConservatoryTypeCode"
                class_name = "Conservatory_Type"
                documentation = """Type of Conservatory"""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'1': 'no conservatory', '2': 'separated unheated conservatory', '3': 'separated heated conservatory', '4': 'not separated', '5': 'not recorded - this is for backwards compatibility only and should not be used'}
                map_values = {'no conservatory': '1', 'separated unheated conservatory': '2', 'separated heated conservatory': '3', 'not separated': '4', 'not recorded - this is for backwards compatibility only and should not be used': '5'}
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class SAP_Heating(_Base, etree.ElementBase):
                ""
                element_name = "SAP-Heating"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-Heating"
                class_name = "SAP_Heating"
                documentation = None
                type_documentation = """Details of the means by which the Main Building is heated."""
                has_text_node = False
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = ["Secondary_Fuel_Type", "Water_Heating_Fuel", "Secondary_Heating_Type", "Water_Heating_Code", "Immersion_Heating_Type", "Cylinder_Size", "Cylinder_Size_Measured", "Cylinder_Insulation_Type", "Cylinder_Heat_Loss", "Cylinder_Insulation_Thickness", "Cylinder_Thermostat", "Has_Fixed_Air_Conditioning", "Main_Heating_Details", "Solar_Water_Heating_Details", "Instantaneous_WWHRS", "Storage_WWHRS", "Shower_Outlets", "Number_Baths", "Number_Baths_WWHRS", "Community_DHW_Network_Index_Number", "Community_DHW_Sub_Network_Name", "Community_DHW_Distribution_Type", "Community_DHW_CHP_Electricity_Generation"]
                subclass_method_names = ["secondary_fuel_type", "water_heating_fuel", "secondary_heating_type", "water_heating_code", "immersion_heating_type", "cylinder_size", "cylinder_size_measured", "cylinder_insulation_type", "cylinder_heat_loss", "cylinder_insulation_thickness", "cylinder_thermostat", "has_fixed_air_conditioning", "main_heating_details", "solar_water_heating_details", "instantaneous_wwhrs", "storage_wwhrs", "shower_outlets", "number_baths", "number_baths_wwhrs", "community_dhw_network_index_number", "community_dhw_sub_network_name", "community_dhw_distribution_type", "community_dhw_chp_electricity_generation"]
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def secondary_fuel_type(self): return self.find(f"{{{self.__class__.namespace}}}Secondary-Fuel-Type")
            
                def add_secondary_fuel_type(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Secondary-Fuel-Type")
            
                @property
                def water_heating_fuel(self): return self.find(f"{{{self.__class__.namespace}}}Water-Heating-Fuel")
            
                def add_water_heating_fuel(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Water-Heating-Fuel")
            
                @property
                def secondary_heating_type(self): return self.find(f"{{{self.__class__.namespace}}}Secondary-Heating-Type")
            
                def add_secondary_heating_type(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Secondary-Heating-Type")
            
                @property
                def water_heating_code(self): return self.find(f"{{{self.__class__.namespace}}}Water-Heating-Code")
            
                def add_water_heating_code(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Water-Heating-Code")
            
                @property
                def immersion_heating_type(self): return self.find(f"{{{self.__class__.namespace}}}Immersion-Heating-Type")
            
                def add_immersion_heating_type(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Immersion-Heating-Type")
            
                @property
                def cylinder_size(self): return self.find(f"{{{self.__class__.namespace}}}Cylinder-Size")
            
                def add_cylinder_size(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Cylinder-Size")
            
                @property
                def cylinder_size_measured(self): return self.find(f"{{{self.__class__.namespace}}}Cylinder-Size-Measured")
            
                def add_cylinder_size_measured(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Cylinder-Size-Measured")
            
                @property
                def cylinder_insulation_type(self): return self.find(f"{{{self.__class__.namespace}}}Cylinder-Insulation-Type")
            
                def add_cylinder_insulation_type(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Cylinder-Insulation-Type")
            
                @property
                def cylinder_heat_loss(self): return self.find(f"{{{self.__class__.namespace}}}Cylinder-Heat-Loss")
            
                def add_cylinder_heat_loss(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Cylinder-Heat-Loss")
            
                @property
                def cylinder_insulation_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Cylinder-Insulation-Thickness")
            
                def add_cylinder_insulation_thickness(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Cylinder-Insulation-Thickness")
            
                @property
                def cylinder_thermostat(self): return self.find(f"{{{self.__class__.namespace}}}Cylinder-Thermostat")
            
                def add_cylinder_thermostat(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Cylinder-Thermostat")
            
                @property
                def has_fixed_air_conditioning(self): return self.find(f"{{{self.__class__.namespace}}}Has-Fixed-Air-Conditioning")
            
                def add_has_fixed_air_conditioning(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Has-Fixed-Air-Conditioning")
            
                @property
                def main_heating_details(self): return self.find(f"{{{self.__class__.namespace}}}Main-Heating-Details")
            
                def add_main_heating_details(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Heating-Details")
            
                @property
                def solar_water_heating_details(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Water-Heating-Details")
            
                def add_solar_water_heating_details(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Water-Heating-Details")
            
                @property
                def instantaneous_wwhrs(self): return self.find(f"{{{self.__class__.namespace}}}Instantaneous-WWHRS")
            
                def add_instantaneous_wwhrs(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Instantaneous-WWHRS")
            
                @property
                def storage_wwhrs(self): return self.find(f"{{{self.__class__.namespace}}}Storage-WWHRS")
            
                def add_storage_wwhrs(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Storage-WWHRS")
            
                @property
                def shower_outlets(self): return self.find(f"{{{self.__class__.namespace}}}Shower-Outlets")
            
                def add_shower_outlets(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Shower-Outlets")
            
                @property
                def number_baths(self): return self.find(f"{{{self.__class__.namespace}}}Number-Baths")
            
                def add_number_baths(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Number-Baths")
            
                @property
                def number_baths_wwhrs(self): return self.find(f"{{{self.__class__.namespace}}}Number-Baths-WWHRS")
            
                def add_number_baths_wwhrs(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Number-Baths-WWHRS")
            
                @property
                def community_dhw_network_index_number(self): return self.find(f"{{{self.__class__.namespace}}}Community-DHW-Network-Index-Number")
            
                def add_community_dhw_network_index_number(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Community-DHW-Network-Index-Number")
            
                @property
                def community_dhw_sub_network_name(self): return self.find(f"{{{self.__class__.namespace}}}Community-DHW-Sub-Network-Name")
            
                def add_community_dhw_sub_network_name(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Community-DHW-Sub-Network-Name")
            
                @property
                def community_dhw_distribution_type(self): return self.find(f"{{{self.__class__.namespace}}}Community-DHW-Distribution-Type")
            
                def add_community_dhw_distribution_type(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Community-DHW-Distribution-Type")
            
                @property
                def community_dhw_chp_electricity_generation(self): return self.find(f"{{{self.__class__.namespace}}}Community-DHW-CHP-Electricity-Generation")
            
                def add_community_dhw_chp_electricity_generation(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Community-DHW-CHP-Electricity-Generation")
            
                class Secondary_Fuel_Type(_Base, etree.ElementBase):
                    ""
                    element_name = "Secondary-Fuel-Type"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "HeatingFuelTypeCode"
                    class_name = "Secondary_Fuel_Type"
                    documentation = """The secondary type of fuel used to power the central heating e.g. Gas, Electricity"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'To be used only when there is no heating/hot-water system or data is from a community network', '1': 'mains gas - this is for backwards compatibility only and should not be used', '2': 'LPG - this is for backwards compatibility only and should not be used', '3': 'bottled LPG', '4': 'oil - this is for backwards compatibility only and should not be used', '5': 'anthracite', '6': 'wood logs', '7': 'bulk wood pellets', '8': 'wood chips', '9': 'dual fuel - mineral + wood', '10': 'electricity - this is for backwards compatibility only and should not be used', '11': 'waste combustion - this is for backwards compatibility only and should not be used', '12': 'biomass - this is for backwards compatibility only and should not be used', '13': 'biogas - landfill - this is for backwards compatibility only and should not be used', '14': 'house coal - this is for backwards compatibility only and should not be used', '15': 'smokeless coal', '16': 'wood pellets in bags for secondary heating', '17': 'LPG special condition', '18': 'B30K (not community)', '19': 'bioethanol', '20': 'mains gas (community)', '21': 'LPG (community)', '22': 'oil (community)', '23': 'B30D (community)', '24': 'coal (community)', '25': 'electricity (community)', '26': 'mains gas (not community)', '27': 'LPG (not community)', '28': 'oil (not community)', '29': 'electricity (not community)', '30': 'waste combustion (community)', '31': 'biomass (community)', '32': 'biogas (community)', '33': 'house coal (not community)', '34': 'biodiesel from any biomass source', '35': 'biodiesel from used cooking oil only', '36': 'biodiesel from vegetable oil only (not community)', '37': 'appliances able to use mineral oil or liquid biofuel', '51': 'biogas (not community)', '56': 'heat from boilers that can use mineral oil or biodiesel (community)', '57': 'heat from boilers using biodiesel from any biomass source (community)', '58': 'biodiesel from vegetable oil only (community)', '99': 'from heat network data (community)'}
                    map_values = {'To be used only when there is no heating/hot-water system or data is from a community network': '0', 'mains gas - this is for backwards compatibility only and should not be used': '1', 'LPG - this is for backwards compatibility only and should not be used': '2', 'bottled LPG': '3', 'oil - this is for backwards compatibility only and should not be used': '4', 'anthracite': '5', 'wood logs': '6', 'bulk wood pellets': '7', 'wood chips': '8', 'dual fuel - mineral + wood': '9', 'electricity - this is for backwards compatibility only and should not be used': '10', 'waste combustion - this is for backwards compatibility only and should not be used': '11', 'biomass - this is for backwards compatibility only and should not be used': '12', 'biogas - landfill - this is for backwards compatibility only and should not be used': '13', 'house coal - this is for backwards compatibility only and should not be used': '14', 'smokeless coal': '15', 'wood pellets in bags for secondary heating': '16', 'LPG special condition': '17', 'B30K (not community)': '18', 'bioethanol': '19', 'mains gas (community)': '20', 'LPG (community)': '21', 'oil (community)': '22', 'B30D (community)': '23', 'coal (community)': '24', 'electricity (community)': '25', 'mains gas (not community)': '26', 'LPG (not community)': '27', 'oil (not community)': '28', 'electricity (not community)': '29', 'waste combustion (community)': '30', 'biomass (community)': '31', 'biogas (community)': '32', 'house coal (not community)': '33', 'biodiesel from any biomass source': '34', 'biodiesel from used cooking oil only': '35', 'biodiesel from vegetable oil only (not community)': '36', 'appliances able to use mineral oil or liquid biofuel': '37', 'biogas (not community)': '51', 'heat from boilers that can use mineral oil or biodiesel (community)': '56', 'heat from boilers using biodiesel from any biomass source (community)': '57', 'biodiesel from vegetable oil only (community)': '58', 'from heat network data (community)': '99'}
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Water_Heating_Fuel(_Base, etree.ElementBase):
                    ""
                    element_name = "Water-Heating-Fuel"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "HeatingFuelTypeCode"
                    class_name = "Water_Heating_Fuel"
                    documentation = """The type of fuel used to heat the water e.g. Gas, Electricity"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'To be used only when there is no heating/hot-water system or data is from a community network', '1': 'mains gas - this is for backwards compatibility only and should not be used', '2': 'LPG - this is for backwards compatibility only and should not be used', '3': 'bottled LPG', '4': 'oil - this is for backwards compatibility only and should not be used', '5': 'anthracite', '6': 'wood logs', '7': 'bulk wood pellets', '8': 'wood chips', '9': 'dual fuel - mineral + wood', '10': 'electricity - this is for backwards compatibility only and should not be used', '11': 'waste combustion - this is for backwards compatibility only and should not be used', '12': 'biomass - this is for backwards compatibility only and should not be used', '13': 'biogas - landfill - this is for backwards compatibility only and should not be used', '14': 'house coal - this is for backwards compatibility only and should not be used', '15': 'smokeless coal', '16': 'wood pellets in bags for secondary heating', '17': 'LPG special condition', '18': 'B30K (not community)', '19': 'bioethanol', '20': 'mains gas (community)', '21': 'LPG (community)', '22': 'oil (community)', '23': 'B30D (community)', '24': 'coal (community)', '25': 'electricity (community)', '26': 'mains gas (not community)', '27': 'LPG (not community)', '28': 'oil (not community)', '29': 'electricity (not community)', '30': 'waste combustion (community)', '31': 'biomass (community)', '32': 'biogas (community)', '33': 'house coal (not community)', '34': 'biodiesel from any biomass source', '35': 'biodiesel from used cooking oil only', '36': 'biodiesel from vegetable oil only (not community)', '37': 'appliances able to use mineral oil or liquid biofuel', '51': 'biogas (not community)', '56': 'heat from boilers that can use mineral oil or biodiesel (community)', '57': 'heat from boilers using biodiesel from any biomass source (community)', '58': 'biodiesel from vegetable oil only (community)', '99': 'from heat network data (community)'}
                    map_values = {'To be used only when there is no heating/hot-water system or data is from a community network': '0', 'mains gas - this is for backwards compatibility only and should not be used': '1', 'LPG - this is for backwards compatibility only and should not be used': '2', 'bottled LPG': '3', 'oil - this is for backwards compatibility only and should not be used': '4', 'anthracite': '5', 'wood logs': '6', 'bulk wood pellets': '7', 'wood chips': '8', 'dual fuel - mineral + wood': '9', 'electricity - this is for backwards compatibility only and should not be used': '10', 'waste combustion - this is for backwards compatibility only and should not be used': '11', 'biomass - this is for backwards compatibility only and should not be used': '12', 'biogas - landfill - this is for backwards compatibility only and should not be used': '13', 'house coal - this is for backwards compatibility only and should not be used': '14', 'smokeless coal': '15', 'wood pellets in bags for secondary heating': '16', 'LPG special condition': '17', 'B30K (not community)': '18', 'bioethanol': '19', 'mains gas (community)': '20', 'LPG (community)': '21', 'oil (community)': '22', 'B30D (community)': '23', 'coal (community)': '24', 'electricity (community)': '25', 'mains gas (not community)': '26', 'LPG (not community)': '27', 'oil (not community)': '28', 'electricity (not community)': '29', 'waste combustion (community)': '30', 'biomass (community)': '31', 'biogas (community)': '32', 'house coal (not community)': '33', 'biodiesel from any biomass source': '34', 'biodiesel from used cooking oil only': '35', 'biodiesel from vegetable oil only (not community)': '36', 'appliances able to use mineral oil or liquid biofuel': '37', 'biogas (not community)': '51', 'heat from boilers that can use mineral oil or biodiesel (community)': '56', 'heat from boilers using biodiesel from any biomass source (community)': '57', 'biodiesel from vegetable oil only (community)': '58', 'from heat network data (community)': '99'}
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Secondary_Heating_Type(_Base, etree.ElementBase):
                    ""
                    element_name = "Secondary-Heating-Type"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-HeatingCode"
                    class_name = "Secondary_Heating_Type"
                    documentation = """Type of secondary heating (if any) present in the property."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Water_Heating_Code(_Base, etree.ElementBase):
                    ""
                    element_name = "Water-Heating-Code"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-HeatingCode"
                    class_name = "Water_Heating_Code"
                    documentation = """Describes the type of Water Heating present in the Property."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Immersion_Heating_Type(_Base, etree.ElementBase):
                    ""
                    element_name = "Immersion-Heating-Type"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "ImmersionHeatingTypeCode"
                    class_name = "Immersion_Heating_Type"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'1': 'Dual', '2': 'Single', 'NA': 'not applicable'}
                    map_values = {'Dual': '1', 'Single': '2', 'not applicable': 'NA'}
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Cylinder_Size(_Base, etree.ElementBase):
                    ""
                    element_name = "Cylinder-Size"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "CylinderSizeCode"
                    class_name = "Cylinder_Size"
                    documentation = """The size of the Hot Water Cylinder - taken from a range of standard sizes."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'No Access', '1': 'No Cylinder', '2': 'Normal - up to 130 litres', '3': 'Medium - between 131 and 170 litres', '4': 'Large - greater than 170 litres.', '5': 'actual size included in Solar-Water-Heating-Details', '6': 'Exact cylinder volume if known'}
                    map_values = {'No Access': '0', 'No Cylinder': '1', 'Normal - up to 130 litres': '2', 'Medium - between 131 and 170 litres': '3', 'Large - greater than 170 litres.': '4', 'actual size included in Solar-Water-Heating-Details': '5', 'Exact cylinder volume if known': '6'}
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Cylinder_Size_Measured(_Base, etree.ElementBase):
                    ""
                    element_name = "Cylinder-Size-Measured"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Measurement"
                    class_name = "Cylinder_Size_Measured"
                    documentation = """Exact cylinder size if known. When Cylinder-Size code is 6."""
                    type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = float
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Cylinder_Insulation_Type(_Base, etree.ElementBase):
                    ""
                    element_name = "Cylinder-Insulation-Type"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "CylinderInsulationTypeCode"
                    class_name = "Cylinder_Insulation_Type"
                    documentation = """the type of insulation surrounding the Hot Water Cylinder"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'None', '1': 'factory-applied', '2': 'loose jacket'}
                    map_values = {'None': '0', 'factory-applied': '1', 'loose jacket': '2'}
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Cylinder_Heat_Loss(_Base, etree.ElementBase):
                    ""
                    element_name = "Cylinder-Heat-Loss"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Measurement"
                    class_name = "Cylinder_Heat_Loss"
                    documentation = """Cylinder declared loss in kWh/day; only if there is a hot water store and if manufacturer declared loss."""
                    type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = float
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Cylinder_Insulation_Thickness(_Base, etree.ElementBase):
                    ""
                    element_name = "Cylinder-Insulation-Thickness"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "CylinderThicknessCode"
                    class_name = "Cylinder_Insulation_Thickness"
                    documentation = """Average thickness of the insulation surrounding the Hot Water Cylinder."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': '0mm', '12': '12mm', '25': '25 mm', '38': '38 mm', '50': '50 mm', '80': '80 mm', '120': '120mm', '160': '160mm'}
                    map_values = {'0mm': '0', '12mm': '12', '25 mm': '25', '38 mm': '38', '50 mm': '50', '80 mm': '80', '120mm': '120', '160mm': '160'}
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Cylinder_Thermostat(_Base, etree.ElementBase):
                    ""
                    element_name = "Cylinder-Thermostat"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Flag"
                    class_name = "Cylinder_Thermostat"
                    documentation = """Whether the cylinder has a thermostat. Omit if no cylinder."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'Y': 'Yes', 'N': 'No'}
                    map_values = {'Yes': 'Y', 'No': 'N'}
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Has_Fixed_Air_Conditioning(_Base, etree.ElementBase):
                    ""
                    element_name = "Has-Fixed-Air-Conditioning"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:boolean"
                    class_name = "Has_Fixed_Air_Conditioning"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = bool
                    map_codes = {'true': True, '1': True, 'false': False, '0': False}
                    map_values = {True: '1', False: '0'}
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Main_Heating_Details(_Base, etree.ElementBase):
                    ""
                    element_name = "Main-Heating-Details"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Main-Heating-Details"
                    class_name = "Main_Heating_Details"
                    documentation = None
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = ["Main_Heating"]
                    subclass_method_names = ["main_heating"]
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def main_heating(self): return self.findall(f"{{{self.__class__.namespace}}}Main-Heating")
                
                    def add_main_heating(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Heating")
                
                    class Main_Heating(_Base, etree.ElementBase):
                        ""
                        element_name = "Main-Heating"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "None"
                        class_name = "Main_Heating"
                        documentation = None
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 1
                        max_occurs = 2
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "Main_Heating_Details"
                        parent_method_name ="main_heating_details"
                        subclass_class_names = ["Main_Heating_Number", "Main_Heating_Category", "Main_Fuel_Type", "Main_Heating_Control", "Main_Heating_Index_Number", "Main_Heating_Data_Source", "SAP_Main_Heating_Code", "Boiler_Ignition_Type", "Boiler_Flue_Type", "Fan_Flue_Present", "Heat_Emitter_Type", "Main_Heating_Fraction", "Has_FGHRS", "FGHRS_Index_Number", "FGHRS_PV_Peak_Power", "FGHRS_PV_Orientation", "FGHRS_PV_Pitch", "FGHRS_PV_Overshading", "Compensating_Controller_Index_Number", "TTZC_Index_Number", "Community_Heat_Network_Index_Number", "Community_Heat_Sub_Network_Name", "Community_Heat_Distribution_Type", "Community_Heat_CHP_Electricity_Generation", "Storage_Heaters", "Emitter_Temperature", "MCS_Installed_Heat_Pump", "Central_Heating_Pump_Age"]
                        subclass_method_names = ["main_heating_number", "main_heating_category", "main_fuel_type", "main_heating_control", "main_heating_index_number", "main_heating_data_source", "sap_main_heating_code", "boiler_ignition_type", "boiler_flue_type", "fan_flue_present", "heat_emitter_type", "main_heating_fraction", "has_fghrs", "fghrs_index_number", "fghrs_pv_peak_power", "fghrs_pv_orientation", "fghrs_pv_pitch", "fghrs_pv_overshading", "compensating_controller_index_number", "ttzc_index_number", "community_heat_network_index_number", "community_heat_sub_network_name", "community_heat_distribution_type", "community_heat_chp_electricity_generation", "storage_heaters", "emitter_temperature", "mcs_installed_heat_pump", "central_heating_pump_age"]
                    
                        @property
                        def main_heating_details(self): return self.getparent()
                    
                        @property
                        def main_heating_number(self): return self.find(f"{{{self.__class__.namespace}}}Main-Heating-Number")
                    
                        def add_main_heating_number(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Heating-Number")
                    
                        @property
                        def main_heating_category(self): return self.find(f"{{{self.__class__.namespace}}}Main-Heating-Category")
                    
                        def add_main_heating_category(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Heating-Category")
                    
                        @property
                        def main_fuel_type(self): return self.find(f"{{{self.__class__.namespace}}}Main-Fuel-Type")
                    
                        def add_main_fuel_type(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Fuel-Type")
                    
                        @property
                        def main_heating_control(self): return self.find(f"{{{self.__class__.namespace}}}Main-Heating-Control")
                    
                        def add_main_heating_control(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Heating-Control")
                    
                        @property
                        def main_heating_index_number(self): return self.find(f"{{{self.__class__.namespace}}}Main-Heating-Index-Number")
                    
                        def add_main_heating_index_number(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Heating-Index-Number")
                    
                        @property
                        def main_heating_data_source(self): return self.find(f"{{{self.__class__.namespace}}}Main-Heating-Data-Source")
                    
                        def add_main_heating_data_source(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Heating-Data-Source")
                    
                        @property
                        def sap_main_heating_code(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Main-Heating-Code")
                    
                        def add_sap_main_heating_code(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Main-Heating-Code")
                    
                        @property
                        def boiler_ignition_type(self): return self.find(f"{{{self.__class__.namespace}}}Boiler-Ignition-Type")
                    
                        def add_boiler_ignition_type(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Boiler-Ignition-Type")
                    
                        @property
                        def boiler_flue_type(self): return self.find(f"{{{self.__class__.namespace}}}Boiler-Flue-Type")
                    
                        def add_boiler_flue_type(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Boiler-Flue-Type")
                    
                        @property
                        def fan_flue_present(self): return self.find(f"{{{self.__class__.namespace}}}Fan-Flue-Present")
                    
                        def add_fan_flue_present(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Fan-Flue-Present")
                    
                        @property
                        def heat_emitter_type(self): return self.find(f"{{{self.__class__.namespace}}}Heat-Emitter-Type")
                    
                        def add_heat_emitter_type(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Heat-Emitter-Type")
                    
                        @property
                        def main_heating_fraction(self): return self.find(f"{{{self.__class__.namespace}}}Main-Heating-Fraction")
                    
                        def add_main_heating_fraction(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Main-Heating-Fraction")
                    
                        @property
                        def has_fghrs(self): return self.find(f"{{{self.__class__.namespace}}}Has-FGHRS")
                    
                        def add_has_fghrs(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Has-FGHRS")
                    
                        @property
                        def fghrs_index_number(self): return self.find(f"{{{self.__class__.namespace}}}FGHRS-Index-Number")
                    
                        def add_fghrs_index_number(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}FGHRS-Index-Number")
                    
                        @property
                        def fghrs_pv_peak_power(self): return self.find(f"{{{self.__class__.namespace}}}FGHRS-PV-Peak-Power")
                    
                        def add_fghrs_pv_peak_power(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}FGHRS-PV-Peak-Power")
                    
                        @property
                        def fghrs_pv_orientation(self): return self.find(f"{{{self.__class__.namespace}}}FGHRS-PV-Orientation")
                    
                        def add_fghrs_pv_orientation(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}FGHRS-PV-Orientation")
                    
                        @property
                        def fghrs_pv_pitch(self): return self.find(f"{{{self.__class__.namespace}}}FGHRS-PV-Pitch")
                    
                        def add_fghrs_pv_pitch(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}FGHRS-PV-Pitch")
                    
                        @property
                        def fghrs_pv_overshading(self): return self.find(f"{{{self.__class__.namespace}}}FGHRS-PV-Overshading")
                    
                        def add_fghrs_pv_overshading(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}FGHRS-PV-Overshading")
                    
                        @property
                        def compensating_controller_index_number(self): return self.find(f"{{{self.__class__.namespace}}}Compensating-Controller-Index-Number")
                    
                        def add_compensating_controller_index_number(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Compensating-Controller-Index-Number")
                    
                        @property
                        def ttzc_index_number(self): return self.find(f"{{{self.__class__.namespace}}}TTZC-Index-Number")
                    
                        def add_ttzc_index_number(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}TTZC-Index-Number")
                    
                        @property
                        def community_heat_network_index_number(self): return self.find(f"{{{self.__class__.namespace}}}Community-Heat-Network-Index-Number")
                    
                        def add_community_heat_network_index_number(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Community-Heat-Network-Index-Number")
                    
                        @property
                        def community_heat_sub_network_name(self): return self.find(f"{{{self.__class__.namespace}}}Community-Heat-Sub-Network-Name")
                    
                        def add_community_heat_sub_network_name(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Community-Heat-Sub-Network-Name")
                    
                        @property
                        def community_heat_distribution_type(self): return self.find(f"{{{self.__class__.namespace}}}Community-Heat-Distribution-Type")
                    
                        def add_community_heat_distribution_type(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Community-Heat-Distribution-Type")
                    
                        @property
                        def community_heat_chp_electricity_generation(self): return self.find(f"{{{self.__class__.namespace}}}Community-Heat-CHP-Electricity-Generation")
                    
                        def add_community_heat_chp_electricity_generation(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Community-Heat-CHP-Electricity-Generation")
                    
                        @property
                        def storage_heaters(self): return self.find(f"{{{self.__class__.namespace}}}Storage-Heaters")
                    
                        def add_storage_heaters(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Storage-Heaters")
                    
                        @property
                        def emitter_temperature(self): return self.find(f"{{{self.__class__.namespace}}}Emitter-Temperature")
                    
                        def add_emitter_temperature(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Emitter-Temperature")
                    
                        @property
                        def mcs_installed_heat_pump(self): return self.find(f"{{{self.__class__.namespace}}}MCS-Installed-Heat-Pump")
                    
                        def add_mcs_installed_heat_pump(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}MCS-Installed-Heat-Pump")
                    
                        @property
                        def central_heating_pump_age(self): return self.find(f"{{{self.__class__.namespace}}}Central-Heating-Pump-Age")
                    
                        def add_central_heating_pump_age(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Central-Heating-Pump-Age")
                    
                        class Main_Heating_Number(_Base, etree.ElementBase):
                            ""
                            element_name = "Main-Heating-Number"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "None"
                            class_name = "Main_Heating_Number"
                            documentation = """Identifies the main heating as system 1 or system 2. System 1 must always be present, system 2 is included only when there are two systems."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = int
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Main_Heating_Category(_Base, etree.ElementBase):
                            ""
                            element_name = "Main-Heating-Category"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-MainHeatingCategoryCode"
                            class_name = "Main_Heating_Category"
                            documentation = """Category of heating system for the main heating system."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'none', '2': 'boiler with radiators or underfloor heating', '3': 'micro-cogeneration', '4': 'heat pump with radiators or underfloor heating', '5': 'heat pump with warm air distribution', '6': 'community heating system', '7': 'electric storage heaters', '8': 'electric underfloor heating', '9': 'warm air system (not heat pump)', '10': 'room heaters', '11': 'other system', '12': 'not recorded'}
                            map_values = {'none': '1', 'boiler with radiators or underfloor heating': '2', 'micro-cogeneration': '3', 'heat pump with radiators or underfloor heating': '4', 'heat pump with warm air distribution': '5', 'community heating system': '6', 'electric storage heaters': '7', 'electric underfloor heating': '8', 'warm air system (not heat pump)': '9', 'room heaters': '10', 'other system': '11', 'not recorded': '12'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Main_Fuel_Type(_Base, etree.ElementBase):
                            ""
                            element_name = "Main-Fuel-Type"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "HeatingFuelTypeCode"
                            class_name = "Main_Fuel_Type"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'0': 'To be used only when there is no heating/hot-water system or data is from a community network', '1': 'mains gas - this is for backwards compatibility only and should not be used', '2': 'LPG - this is for backwards compatibility only and should not be used', '3': 'bottled LPG', '4': 'oil - this is for backwards compatibility only and should not be used', '5': 'anthracite', '6': 'wood logs', '7': 'bulk wood pellets', '8': 'wood chips', '9': 'dual fuel - mineral + wood', '10': 'electricity - this is for backwards compatibility only and should not be used', '11': 'waste combustion - this is for backwards compatibility only and should not be used', '12': 'biomass - this is for backwards compatibility only and should not be used', '13': 'biogas - landfill - this is for backwards compatibility only and should not be used', '14': 'house coal - this is for backwards compatibility only and should not be used', '15': 'smokeless coal', '16': 'wood pellets in bags for secondary heating', '17': 'LPG special condition', '18': 'B30K (not community)', '19': 'bioethanol', '20': 'mains gas (community)', '21': 'LPG (community)', '22': 'oil (community)', '23': 'B30D (community)', '24': 'coal (community)', '25': 'electricity (community)', '26': 'mains gas (not community)', '27': 'LPG (not community)', '28': 'oil (not community)', '29': 'electricity (not community)', '30': 'waste combustion (community)', '31': 'biomass (community)', '32': 'biogas (community)', '33': 'house coal (not community)', '34': 'biodiesel from any biomass source', '35': 'biodiesel from used cooking oil only', '36': 'biodiesel from vegetable oil only (not community)', '37': 'appliances able to use mineral oil or liquid biofuel', '51': 'biogas (not community)', '56': 'heat from boilers that can use mineral oil or biodiesel (community)', '57': 'heat from boilers using biodiesel from any biomass source (community)', '58': 'biodiesel from vegetable oil only (community)', '99': 'from heat network data (community)'}
                            map_values = {'To be used only when there is no heating/hot-water system or data is from a community network': '0', 'mains gas - this is for backwards compatibility only and should not be used': '1', 'LPG - this is for backwards compatibility only and should not be used': '2', 'bottled LPG': '3', 'oil - this is for backwards compatibility only and should not be used': '4', 'anthracite': '5', 'wood logs': '6', 'bulk wood pellets': '7', 'wood chips': '8', 'dual fuel - mineral + wood': '9', 'electricity - this is for backwards compatibility only and should not be used': '10', 'waste combustion - this is for backwards compatibility only and should not be used': '11', 'biomass - this is for backwards compatibility only and should not be used': '12', 'biogas - landfill - this is for backwards compatibility only and should not be used': '13', 'house coal - this is for backwards compatibility only and should not be used': '14', 'smokeless coal': '15', 'wood pellets in bags for secondary heating': '16', 'LPG special condition': '17', 'B30K (not community)': '18', 'bioethanol': '19', 'mains gas (community)': '20', 'LPG (community)': '21', 'oil (community)': '22', 'B30D (community)': '23', 'coal (community)': '24', 'electricity (community)': '25', 'mains gas (not community)': '26', 'LPG (not community)': '27', 'oil (not community)': '28', 'electricity (not community)': '29', 'waste combustion (community)': '30', 'biomass (community)': '31', 'biogas (community)': '32', 'house coal (not community)': '33', 'biodiesel from any biomass source': '34', 'biodiesel from used cooking oil only': '35', 'biodiesel from vegetable oil only (not community)': '36', 'appliances able to use mineral oil or liquid biofuel': '37', 'biogas (not community)': '51', 'heat from boilers that can use mineral oil or biodiesel (community)': '56', 'heat from boilers using biodiesel from any biomass source (community)': '57', 'biodiesel from vegetable oil only (community)': '58', 'from heat network data (community)': '99'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Main_Heating_Control(_Base, etree.ElementBase):
                            ""
                            element_name = "Main-Heating-Control"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-HeatingCode"
                            class_name = "Main_Heating_Control"
                            documentation = """Type of Main Control for the Heating System."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.text
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Main_Heating_Index_Number(_Base, etree.ElementBase):
                            ""
                            element_name = "Main-Heating-Index-Number"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:string"
                            class_name = "Main_Heating_Index_Number"
                            documentation = """The ID of the heating system from the product database, if system from database."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.text
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Main_Heating_Data_Source(_Base, etree.ElementBase):
                            ""
                            element_name = "Main-Heating-Data-Source"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "BoilerDataSourceCode"
                            class_name = "Main_Heating_Data_Source"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'database', '2': 'SAP Table'}
                            map_values = {'database': '1', 'SAP Table': '2'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class SAP_Main_Heating_Code(_Base, etree.ElementBase):
                            ""
                            element_name = "SAP-Main-Heating-Code"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-HeatingCode"
                            class_name = "SAP_Main_Heating_Code"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.text
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Boiler_Ignition_Type(_Base, etree.ElementBase):
                            ""
                            element_name = "Boiler-Ignition-Type"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "BoilerIgnitionCode"
                            class_name = "Boiler_Ignition_Type"
                            documentation = """Only relevant for boilers 1998 or later."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'auto-ignition', '2': 'permanent pilot light'}
                            map_values = {'auto-ignition': '1', 'permanent pilot light': '2'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Boiler_Flue_Type(_Base, etree.ElementBase):
                            ""
                            element_name = "Boiler-Flue-Type"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "BoilerFlueTypeCode"
                            class_name = "Boiler_Flue_Type"
                            documentation = """Indicates the flue type of the heating system."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'open', '2': 'room-sealed'}
                            map_values = {'open': '1', 'room-sealed': '2'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Fan_Flue_Present(_Base, etree.ElementBase):
                            ""
                            element_name = "Fan-Flue-Present"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Flag"
                            class_name = "Fan_Flue_Present"
                            documentation = """Indicates whether the heating system contains a fan flue. This is required by RdSAP and should be part of the 3-letter codes but isn't."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'Y': 'Yes', 'N': 'No'}
                            map_values = {'Yes': 'Y', 'No': 'N'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Heat_Emitter_Type(_Base, etree.ElementBase):
                            ""
                            element_name = "Heat-Emitter-Type"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "HeatEmitterCode"
                            class_name = "Heat_Emitter_Type"
                            documentation = """Identifies the means by which the central heating system (if present) emits heat."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'0': 'not radiators or underfloor', '1': 'radiators', '2': 'underfloor', '3': 'fan coil units', '4': 'both radiators and underfloor'}
                            map_values = {'not radiators or underfloor': '0', 'radiators': '1', 'underfloor': '2', 'fan coil units': '3', 'both radiators and underfloor': '4'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Main_Heating_Fraction(_Base, etree.ElementBase):
                            ""
                            element_name = "Main-Heating-Fraction"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "Main_Heating_Fraction"
                            documentation = """Fraction of total floor area served by this system."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Has_FGHRS(_Base, etree.ElementBase):
                            ""
                            element_name = "Has-FGHRS"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Flag"
                            class_name = "Has_FGHRS"
                            documentation = """Flue Gas Heat Recovery System"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'Y': 'Yes', 'N': 'No'}
                            map_values = {'Yes': 'Y', 'No': 'N'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class FGHRS_Index_Number(_Base, etree.ElementBase):
                            ""
                            element_name = "FGHRS-Index-Number"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:nonNegativeInteger"
                            class_name = "FGHRS_Index_Number"
                            documentation = """FGHRS index number; only if FGHRS"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = int
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class FGHRS_PV_Peak_Power(_Base, etree.ElementBase):
                            ""
                            element_name = "FGHRS-PV-Peak-Power"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "FGHRS_PV_Peak_Power"
                            documentation = """Applies only for FGHRS with its own PV supply"""
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class FGHRS_PV_Orientation(_Base, etree.ElementBase):
                            ""
                            element_name = "FGHRS-PV-Orientation"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-CompassDirectionCode"
                            class_name = "FGHRS_PV_Orientation"
                            documentation = """Applies only for FGHRS with its own PV supply"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'North', '2': 'North East', '3': 'East', '4': 'South East', '5': 'South', '6': 'South West', '7': 'West', '8': 'North West', 'ND': 'To be used when the pitch is horizontal'}
                            map_values = {'North': '1', 'North East': '2', 'East': '3', 'South East': '4', 'South': '5', 'South West': '6', 'West': '7', 'North West': '8', 'To be used when the pitch is horizontal': 'ND'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class FGHRS_PV_Pitch(_Base, etree.ElementBase):
                            ""
                            element_name = "FGHRS-PV-Pitch"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-VerticalPitchCode"
                            class_name = "FGHRS_PV_Pitch"
                            documentation = """Applies only for FGHRS with its own PV supply"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'horizontal', '2': '30 degrees', '3': '45 degrees', '4': '60 degrees', '5': 'vertical'}
                            map_values = {'horizontal': '1', '30 degrees': '2', '45 degrees': '3', '60 degrees': '4', 'vertical': '5'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class FGHRS_PV_Overshading(_Base, etree.ElementBase):
                            ""
                            element_name = "FGHRS-PV-Overshading"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-SolarCollectorOvershadingCode"
                            class_name = "FGHRS_PV_Overshading"
                            documentation = """Applies only for FGHRS with its own PV supply"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'none or very little', '2': 'modest', '3': 'significant', '4': 'heavy', '5': 'severe'}
                            map_values = {'none or very little': '1', 'modest': '2', 'significant': '3', 'heavy': '4', 'severe': '5'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Compensating_Controller_Index_Number(_Base, etree.ElementBase):
                            ""
                            element_name = "Compensating-Controller-Index-Number"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:positiveInteger"
                            class_name = "Compensating_Controller_Index_Number"
                            documentation = """The ID of the controller from the product database."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = int
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class TTZC_Index_Number(_Base, etree.ElementBase):
                            ""
                            element_name = "TTZC-Index-Number"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:positiveInteger"
                            class_name = "TTZC_Index_Number"
                            documentation = """The ID of the time and temperature zone control from the product database."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = int
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Community_Heat_Network_Index_Number(_Base, etree.ElementBase):
                            ""
                            element_name = "Community-Heat-Network-Index-Number"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:positiveInteger"
                            class_name = "Community_Heat_Network_Index_Number"
                            documentation = """index number of heat network, if applicable, community space heating or community space and water heating."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = int
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Community_Heat_Sub_Network_Name(_Base, etree.ElementBase):
                            ""
                            element_name = "Community-Heat-Sub-Network-Name"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:string"
                            class_name = "Community_Heat_Sub_Network_Name"
                            documentation = """only if heat network from pcdb. The name by which the sub community heat network is known."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.text
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Community_Heat_Distribution_Type(_Base, etree.ElementBase):
                            ""
                            element_name = "Community-Heat-Distribution-Type"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-HeatingDistributionCode"
                            class_name = "Community_Heat_Distribution_Type"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'5': 'calculated', '6': 'unknown', '9': 'Two adjoining dwellings'}
                            map_values = {'calculated': '5', 'unknown': '6', 'Two adjoining dwellings': '9'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Community_Heat_CHP_Electricity_Generation(_Base, etree.ElementBase):
                            ""
                            element_name = "Community-Heat-CHP-Electricity-Generation"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-CHPElectricityGenerationCode"
                            class_name = "Community_Heat_CHP_Electricity_Generation"
                            documentation = """Only if community heating not from pcdb and a heat source with CHP. CHP Electricity generation options from table 12f."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'81': 'New CHP, export only.', '82': 'New CHP, flexible operation.', '83': 'New CHP, standard.', '84': 'Existing CHP (2015+), export only.', '85': 'Existing CHP (2015+), flexible operation.', '86': 'Existing CHP (2015+),standard.', '87': 'Existing CHP (pre-2015), export only.', '88': 'Existing CHP (pre-2015), flexible operation.', '89': 'Existing CHP (pre-2015), standard.'}
                            map_values = {'New CHP, export only.': '81', 'New CHP, flexible operation.': '82', 'New CHP, standard.': '83', 'Existing CHP (2015+), export only.': '84', 'Existing CHP (2015+), flexible operation.': '85', 'Existing CHP (2015+),standard.': '86', 'Existing CHP (pre-2015), export only.': '87', 'Existing CHP (pre-2015), flexible operation.': '88', 'Existing CHP (pre-2015), standard.': '89'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Storage_Heaters(_Base, etree.ElementBase):
                            ""
                            element_name = "Storage-Heaters"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Storage-Heaters"
                            class_name = "Storage_Heaters"
                            documentation = None
                            type_documentation = None
                            has_text_node = False
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = None
                            map_codes = None
                            map_values = None
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = ["Storage_Heater"]
                            subclass_method_names = ["storage_heater"]
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def storage_heater(self): return self.findall(f"{{{self.__class__.namespace}}}Storage-Heater")
                        
                            def add_storage_heater(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Storage-Heater")
                        
                            class Storage_Heater(_Base, etree.ElementBase):
                                ""
                                element_name = "Storage-Heater"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Storage-Heater"
                                class_name = "Storage_Heater"
                                documentation = None
                                type_documentation = None
                                has_text_node = False
                                min_occurs = 1
                                max_occurs = 4
                                python_type_convertor = None
                                map_codes = None
                                map_values = None
                                parent_class_name = "Storage_Heaters"
                                parent_method_name ="storage_heaters"
                                subclass_class_names = ["Number_Of_Heaters", "Index_Number", "High_Heat_Retention"]
                                subclass_method_names = ["number_of_heaters", "index_number", "high_heat_retention"]
                            
                                @property
                                def storage_heaters(self): return self.getparent()
                            
                                @property
                                def number_of_heaters(self): return self.find(f"{{{self.__class__.namespace}}}Number-Of-Heaters")
                            
                                def add_number_of_heaters(self):
                                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Number-Of-Heaters")
                            
                                @property
                                def index_number(self): return self.find(f"{{{self.__class__.namespace}}}Index-Number")
                            
                                def add_index_number(self):
                                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Index-Number")
                            
                                @property
                                def high_heat_retention(self): return self.find(f"{{{self.__class__.namespace}}}High-Heat-Retention")
                            
                                def add_high_heat_retention(self):
                                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}High-Heat-Retention")
                            
                                class Number_Of_Heaters(_Base, etree.ElementBase):
                                    ""
                                    element_name = "Number-Of-Heaters"
                                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                    element_type = "xs:positiveInteger"
                                    class_name = "Number_Of_Heaters"
                                    documentation = """The number of storage heaters with this index number."""
                                    type_documentation = None
                                    has_text_node = True
                                    min_occurs = 1
                                    max_occurs = 1
                                    python_type_convertor = int
                                    map_codes = None
                                    map_values = None
                                    parent_class_name = "Storage_Heater"
                                    parent_method_name ="storage_heater"
                                    subclass_class_names = []
                                    subclass_method_names = []
                                
                                    @property
                                    def storage_heater(self): return self.getparent()
                                
                                    @property
                                    def value(self): return self.__class__.python_type_convertor(self.text)
                                
                                    @value.setter
                                    def value(self, value): self.text = str(value)
                                
                                    @property
                                    def code(self): return self.text
                                
                                    @code.setter
                                    def code(self, code): self.text = str(code)
                                
                                class Index_Number(_Base, etree.ElementBase):
                                    ""
                                    element_name = "Index-Number"
                                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                    element_type = "xs:positiveInteger"
                                    class_name = "Index_Number"
                                    documentation = """The index number of the heater from the product database."""
                                    type_documentation = None
                                    has_text_node = True
                                    min_occurs = 1
                                    max_occurs = 1
                                    python_type_convertor = int
                                    map_codes = None
                                    map_values = None
                                    parent_class_name = "Storage_Heater"
                                    parent_method_name ="storage_heater"
                                    subclass_class_names = []
                                    subclass_method_names = []
                                
                                    @property
                                    def storage_heater(self): return self.getparent()
                                
                                    @property
                                    def value(self): return self.__class__.python_type_convertor(self.text)
                                
                                    @value.setter
                                    def value(self, value): self.text = str(value)
                                
                                    @property
                                    def code(self): return self.text
                                
                                    @code.setter
                                    def code(self, code): self.text = str(code)
                                
                                class High_Heat_Retention(_Base, etree.ElementBase):
                                    ""
                                    element_name = "High-Heat-Retention"
                                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                    element_type = "xs:boolean"
                                    class_name = "High_Heat_Retention"
                                    documentation = """Whether heater is high heat retention type."""
                                    type_documentation = None
                                    has_text_node = True
                                    min_occurs = 1
                                    max_occurs = 1
                                    python_type_convertor = bool
                                    map_codes = {'true': True, '1': True, 'false': False, '0': False}
                                    map_values = {True: '1', False: '0'}
                                    parent_class_name = "Storage_Heater"
                                    parent_method_name ="storage_heater"
                                    subclass_class_names = []
                                    subclass_method_names = []
                                
                                    @property
                                    def storage_heater(self): return self.getparent()
                                
                                    @property
                                    def value(self): return self.__class__.map_codes[self.text]
                                
                                    @value.setter
                                    def value(self, value):
                                        if value in self.__class__.map_values:
                                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                        else:
                                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                                
                                    @property
                                    def code(self): return self.text
                                
                                    @code.setter
                                    def code(self, code):
                                        if code in self.__class__.map_codes:
                                            self.text = str(code)
                                        else:
                                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                                
                        class Emitter_Temperature(_Base, etree.ElementBase):
                            ""
                            element_name = "Emitter-Temperature"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "EmitterTemperatureCode"
                            class_name = "Emitter_Temperature"
                            documentation = """0, 1, 3 or 4 applicable to condensing boilers and heat pumps. Other systems NA."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'0': 'unknown', '1': 'over 45degC', '3': 'over 35degC and less than or equal to 45degC', '4': 'less than or equal to 35degC', 'NA': 'not applicable for the heating system'}
                            map_values = {'unknown': '0', 'over 45degC': '1', 'over 35degC and less than or equal to 45degC': '3', 'less than or equal to 35degC': '4', 'not applicable for the heating system': 'NA'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class MCS_Installed_Heat_Pump(_Base, etree.ElementBase):
                            ""
                            element_name = "MCS-Installed-Heat-Pump"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:boolean"
                            class_name = "MCS_Installed_Heat_Pump"
                            documentation = """Whether heat pump was installed under the Microgeneration Certification Scheme."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = bool
                            map_codes = {'true': True, '1': True, 'false': False, '0': False}
                            map_values = {True: '1', False: '0'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Central_Heating_Pump_Age(_Base, etree.ElementBase):
                            ""
                            element_name = "Central-Heating-Pump-Age"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "PumpAge"
                            class_name = "Central_Heating_Pump_Age"
                            documentation = """Included for systems with a central heating pump, i.e. wet system."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'0': 'unknown', '1': '2012 or earlier', '2': '2013 or later'}
                            map_values = {'unknown': '0', '2012 or earlier': '1', '2013 or later': '2'}
                            parent_class_name = "Main_Heating"
                            parent_method_name ="main_heating"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def main_heating(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                class Solar_Water_Heating_Details(_Base, etree.ElementBase):
                    ""
                    element_name = "Solar-Water-Heating-Details"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Solar-Water-Heating-Details"
                    class_name = "Solar_Water_Heating_Details"
                    documentation = """Included only when details are known"""
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = ["Solar_Panel_Collector_Data_Source", "Solar_Panel_Collector_Orientation", "Solar_Panel_Collector_Pitch", "Solar_Panel_Collector_Overshading", "Solar_Water_Pump", "Store_Volume_Details_Known", "Solar_Collector_Details", "Solar_Volume_Details", "Shower_Types", "Collector_Loop_Efficiency", "Incidence_Angle_Modifier", "Is_Community_Solar", "Service_Provision", "Overall_Heat_Loss"]
                    subclass_method_names = ["solar_panel_collector_data_source", "solar_panel_collector_orientation", "solar_panel_collector_pitch", "solar_panel_collector_overshading", "solar_water_pump", "store_volume_details_known", "solar_collector_details", "solar_volume_details", "shower_types", "collector_loop_efficiency", "incidence_angle_modifier", "is_community_solar", "service_provision", "overall_heat_loss"]
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def solar_panel_collector_data_source(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Panel-Collector-Data-Source")
                
                    def add_solar_panel_collector_data_source(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Panel-Collector-Data-Source")
                
                    @property
                    def solar_panel_collector_orientation(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Panel-Collector-Orientation")
                
                    def add_solar_panel_collector_orientation(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Panel-Collector-Orientation")
                
                    @property
                    def solar_panel_collector_pitch(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Panel-Collector-Pitch")
                
                    def add_solar_panel_collector_pitch(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Panel-Collector-Pitch")
                
                    @property
                    def solar_panel_collector_overshading(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Panel-Collector-Overshading")
                
                    def add_solar_panel_collector_overshading(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Panel-Collector-Overshading")
                
                    @property
                    def solar_water_pump(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Water-Pump")
                
                    def add_solar_water_pump(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Water-Pump")
                
                    @property
                    def store_volume_details_known(self): return self.find(f"{{{self.__class__.namespace}}}Store-Volume-Details-Known")
                
                    def add_store_volume_details_known(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Store-Volume-Details-Known")
                
                    @property
                    def solar_collector_details(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Collector-Details")
                
                    def add_solar_collector_details(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Collector-Details")
                
                    @property
                    def solar_volume_details(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Volume-Details")
                
                    def add_solar_volume_details(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Volume-Details")
                
                    @property
                    def shower_types(self): return self.find(f"{{{self.__class__.namespace}}}Shower-Types")
                
                    def add_shower_types(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Shower-Types")
                
                    @property
                    def collector_loop_efficiency(self): return self.find(f"{{{self.__class__.namespace}}}Collector-Loop-Efficiency")
                
                    def add_collector_loop_efficiency(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Collector-Loop-Efficiency")
                
                    @property
                    def incidence_angle_modifier(self): return self.find(f"{{{self.__class__.namespace}}}Incidence-Angle-Modifier")
                
                    def add_incidence_angle_modifier(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Incidence-Angle-Modifier")
                
                    @property
                    def is_community_solar(self): return self.find(f"{{{self.__class__.namespace}}}Is-Community-Solar")
                
                    def add_is_community_solar(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Is-Community-Solar")
                
                    @property
                    def service_provision(self): return self.find(f"{{{self.__class__.namespace}}}Service-Provision")
                
                    def add_service_provision(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Service-Provision")
                
                    @property
                    def overall_heat_loss(self): return self.find(f"{{{self.__class__.namespace}}}Overall-Heat-Loss")
                
                    def add_overall_heat_loss(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Overall-Heat-Loss")
                
                    class Solar_Panel_Collector_Data_Source(_Base, etree.ElementBase):
                        ""
                        element_name = "Solar-Panel-Collector-Data-Source"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-SolarCollectorDataSourceCode"
                        class_name = "Solar_Panel_Collector_Data_Source"
                        documentation = """Source of solar panel collector data."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'default', '2': 'declared values'}
                        map_values = {'default': '1', 'declared values': '2'}
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Solar_Panel_Collector_Orientation(_Base, etree.ElementBase):
                        ""
                        element_name = "Solar-Panel-Collector-Orientation"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-CompassDirectionCode"
                        class_name = "Solar_Panel_Collector_Orientation"
                        documentation = """Collector orientation."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'North', '2': 'North East', '3': 'East', '4': 'South East', '5': 'South', '6': 'South West', '7': 'West', '8': 'North West', 'ND': 'To be used when the pitch is horizontal'}
                        map_values = {'North': '1', 'North East': '2', 'East': '3', 'South East': '4', 'South': '5', 'South West': '6', 'West': '7', 'North West': '8', 'To be used when the pitch is horizontal': 'ND'}
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Solar_Panel_Collector_Pitch(_Base, etree.ElementBase):
                        ""
                        element_name = "Solar-Panel-Collector-Pitch"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-VerticalPitchCode"
                        class_name = "Solar_Panel_Collector_Pitch"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'horizontal', '2': '30 degrees', '3': '45 degrees', '4': '60 degrees', '5': 'vertical'}
                        map_values = {'horizontal': '1', '30 degrees': '2', '45 degrees': '3', '60 degrees': '4', 'vertical': '5'}
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Solar_Panel_Collector_Overshading(_Base, etree.ElementBase):
                        ""
                        element_name = "Solar-Panel-Collector-Overshading"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-SolarCollectorOvershadingCode"
                        class_name = "Solar_Panel_Collector_Overshading"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'none or very little', '2': 'modest', '3': 'significant', '4': 'heavy', '5': 'severe'}
                        map_values = {'none or very little': '1', 'modest': '2', 'significant': '3', 'heavy': '4', 'severe': '5'}
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Solar_Water_Pump(_Base, etree.ElementBase):
                        ""
                        element_name = "Solar-Water-Pump"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SolarPumpType"
                        class_name = "Solar_Water_Pump"
                        documentation = """Energy source for pumping water through the solar system"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'0': 'unknown', '1': 'electrically powered', '2': 'PV powered'}
                        map_values = {'unknown': '0', 'electrically powered': '1', 'PV powered': '2'}
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Store_Volume_Details_Known(_Base, etree.ElementBase):
                        ""
                        element_name = "Store-Volume-Details-Known"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Flag"
                        class_name = "Store_Volume_Details_Known"
                        documentation = """When Y the total store volume, dedicated solar volume and combined cylinder are to be provided"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'Y': 'Yes', 'N': 'No'}
                        map_values = {'Yes': 'Y', 'No': 'N'}
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Solar_Collector_Details(_Base, etree.ElementBase):
                        ""
                        element_name = "Solar-Collector-Details"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Solar-Collector-Details"
                        class_name = "Solar_Collector_Details"
                        documentation = """Include when collector details known."""
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = ["Aperture_Area", "Collector_Type", "Zero_Loss_Efficiency", "Heat_Loss_Rate", "Linear_Heat_Loss_Coefficient", "Second_Order_Heat_Loss_Coefficient"]
                        subclass_method_names = ["aperture_area", "collector_type", "zero_loss_efficiency", "heat_loss_rate", "linear_heat_loss_coefficient", "second_order_heat_loss_coefficient"]
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def aperture_area(self): return self.find(f"{{{self.__class__.namespace}}}Aperture-Area")
                    
                        def add_aperture_area(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Aperture-Area")
                    
                        @property
                        def collector_type(self): return self.find(f"{{{self.__class__.namespace}}}Collector-Type")
                    
                        def add_collector_type(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Collector-Type")
                    
                        @property
                        def zero_loss_efficiency(self): return self.find(f"{{{self.__class__.namespace}}}Zero-Loss-Efficiency")
                    
                        def add_zero_loss_efficiency(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Zero-Loss-Efficiency")
                    
                        @property
                        def heat_loss_rate(self): return self.find(f"{{{self.__class__.namespace}}}Heat-Loss-Rate")
                    
                        def add_heat_loss_rate(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Heat-Loss-Rate")
                    
                        @property
                        def linear_heat_loss_coefficient(self): return self.find(f"{{{self.__class__.namespace}}}Linear-Heat-Loss-Coefficient")
                    
                        def add_linear_heat_loss_coefficient(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Linear-Heat-Loss-Coefficient")
                    
                        @property
                        def second_order_heat_loss_coefficient(self): return self.find(f"{{{self.__class__.namespace}}}Second-Order-Heat-Loss-Coefficient")
                    
                        def add_second_order_heat_loss_coefficient(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Second-Order-Heat-Loss-Coefficient")
                    
                        class Aperture_Area(_Base, etree.ElementBase):
                            ""
                            element_name = "Aperture-Area"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "Aperture_Area"
                            documentation = """Panel aperture area in square metres."""
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Solar_Collector_Details"
                            parent_method_name ="solar_collector_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def solar_collector_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Collector_Type(_Base, etree.ElementBase):
                            ""
                            element_name = "Collector-Type"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-SolarCollectorTypeCode"
                            class_name = "Collector_Type"
                            documentation = """Type of solar panel collector."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'unglazed', '2': 'flat panel', '3': 'evacuated tube'}
                            map_values = {'unglazed': '1', 'flat panel': '2', 'evacuated tube': '3'}
                            parent_class_name = "Solar_Collector_Details"
                            parent_method_name ="solar_collector_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def solar_collector_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Zero_Loss_Efficiency(_Base, etree.ElementBase):
                            ""
                            element_name = "Zero-Loss-Efficiency"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Percentage"
                            class_name = "Zero_Loss_Efficiency"
                            documentation = """Collector zero-loss efficiency."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = int
                            map_codes = None
                            map_values = None
                            parent_class_name = "Solar_Collector_Details"
                            parent_method_name ="solar_collector_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def solar_collector_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Heat_Loss_Rate(_Base, etree.ElementBase):
                            ""
                            element_name = "Heat-Loss-Rate"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "Heat_Loss_Rate"
                            documentation = """Collector heat loss rate; for backward compatibility only, do not use."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Solar_Collector_Details"
                            parent_method_name ="solar_collector_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def solar_collector_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Linear_Heat_Loss_Coefficient(_Base, etree.ElementBase):
                            ""
                            element_name = "Linear-Heat-Loss-Coefficient"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "Linear_Heat_Loss_Coefficient"
                            documentation = """Collector linear heat loss coefficient."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Solar_Collector_Details"
                            parent_method_name ="solar_collector_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def solar_collector_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Second_Order_Heat_Loss_Coefficient(_Base, etree.ElementBase):
                            ""
                            element_name = "Second-Order-Heat-Loss-Coefficient"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "Second_Order_Heat_Loss_Coefficient"
                            documentation = """Collector 2nd order heat loss coefficient."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Solar_Collector_Details"
                            parent_method_name ="solar_collector_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def solar_collector_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                    class Solar_Volume_Details(_Base, etree.ElementBase):
                        ""
                        element_name = "Solar-Volume-Details"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Solar-Volume-Details"
                        class_name = "Solar_Volume_Details"
                        documentation = """Include when volume details known."""
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = ["Total_Store_Volume", "Dedicated_Solar_Volume", "Combined_Cylinder"]
                        subclass_method_names = ["total_store_volume", "dedicated_solar_volume", "combined_cylinder"]
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def total_store_volume(self): return self.find(f"{{{self.__class__.namespace}}}Total-Store-Volume")
                    
                        def add_total_store_volume(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Total-Store-Volume")
                    
                        @property
                        def dedicated_solar_volume(self): return self.find(f"{{{self.__class__.namespace}}}Dedicated-Solar-Volume")
                    
                        def add_dedicated_solar_volume(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Dedicated-Solar-Volume")
                    
                        @property
                        def combined_cylinder(self): return self.find(f"{{{self.__class__.namespace}}}Combined-Cylinder")
                    
                        def add_combined_cylinder(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Combined-Cylinder")
                    
                        class Total_Store_Volume(_Base, etree.ElementBase):
                            ""
                            element_name = "Total-Store-Volume"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "Total_Store_Volume"
                            documentation = """Total volume of hot water store in litres."""
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Solar_Volume_Details"
                            parent_method_name ="solar_volume_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def solar_volume_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Dedicated_Solar_Volume(_Base, etree.ElementBase):
                            ""
                            element_name = "Dedicated-Solar-Volume"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "Dedicated_Solar_Volume"
                            documentation = """Volume of hot water store dedicated to solar heated water, in litres."""
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Solar_Volume_Details"
                            parent_method_name ="solar_volume_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def solar_volume_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Combined_Cylinder(_Base, etree.ElementBase):
                            ""
                            element_name = "Combined-Cylinder"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Flag"
                            class_name = "Combined_Cylinder"
                            documentation = """If combined cylinder the total hot water store volume is inclusive of the dedicated solar volume."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'Y': 'Yes', 'N': 'No'}
                            map_values = {'Yes': 'Y', 'No': 'N'}
                            parent_class_name = "Solar_Volume_Details"
                            parent_method_name ="solar_volume_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def solar_volume_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                    class Shower_Types(_Base, etree.ElementBase):
                        ""
                        element_name = "Shower-Types"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "ShowerTypeCode"
                        class_name = "Shower_Types"
                        documentation = """Type of showers in the property."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'0': 'unknown - for backward compatibility only, do not use', '1': 'non-electric shower(s) only', '2': 'electric shower(s) only', '3': 'both electric and non-electric showers', '4': 'no shower'}
                        map_values = {'unknown - for backward compatibility only, do not use': '0', 'non-electric shower(s) only': '1', 'electric shower(s) only': '2', 'both electric and non-electric showers': '3', 'no shower': '4'}
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Collector_Loop_Efficiency(_Base, etree.ElementBase):
                        ""
                        element_name = "Collector-Loop-Efficiency"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:decimal"
                        class_name = "Collector_Loop_Efficiency"
                        documentation = """Collector loop efficiency; only if declared values."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Incidence_Angle_Modifier(_Base, etree.ElementBase):
                        ""
                        element_name = "Incidence-Angle-Modifier"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:decimal"
                        class_name = "Incidence_Angle_Modifier"
                        documentation = """Incidence angle modifier; only if declared values."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Is_Community_Solar(_Base, etree.ElementBase):
                        ""
                        element_name = "Is-Community-Solar"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:boolean"
                        class_name = "Is_Community_Solar"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = bool
                        map_codes = {'true': True, '1': True, 'false': False, '0': False}
                        map_values = {True: '1', False: '0'}
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Service_Provision(_Base, etree.ElementBase):
                        ""
                        element_name = "Service-Provision"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "ServiceProvisionCode"
                        class_name = "Service_Provision"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'space and water heating', '2': 'space heating only', '3': 'water heating only'}
                        map_values = {'space and water heating': '1', 'space heating only': '2', 'water heating only': '3'}
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Overall_Heat_Loss(_Base, etree.ElementBase):
                        ""
                        element_name = "Overall-Heat-Loss"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:decimal"
                        class_name = "Overall_Heat_Loss"
                        documentation = """Overall heat loss coefficient of system; only if declared values."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "Solar_Water_Heating_Details"
                        parent_method_name ="solar_water_heating_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def solar_water_heating_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                class Instantaneous_WWHRS(_Base, etree.ElementBase):
                    ""
                    element_name = "Instantaneous-WWHRS"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Instantaneous-WWHRS"
                    class_name = "Instantaneous_WWHRS"
                    documentation = """Waste Water Heat Recovery Systems"""
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = ["WWHRS_Index_Number1", "WWHRS_Index_Number2"]
                    subclass_method_names = ["wwhrs_index_number1", "wwhrs_index_number2"]
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def wwhrs_index_number1(self): return self.find(f"{{{self.__class__.namespace}}}WWHRS-Index-Number1")
                
                    def add_wwhrs_index_number1(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}WWHRS-Index-Number1")
                
                    @property
                    def wwhrs_index_number2(self): return self.find(f"{{{self.__class__.namespace}}}WWHRS-Index-Number2")
                
                    def add_wwhrs_index_number2(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}WWHRS-Index-Number2")
                
                    class WWHRS_Index_Number1(_Base, etree.ElementBase):
                        ""
                        element_name = "WWHRS-Index-Number1"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:positiveInteger"
                        class_name = "WWHRS_Index_Number1"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = int
                        map_codes = None
                        map_values = None
                        parent_class_name = "Instantaneous_WWHRS"
                        parent_method_name ="instantaneous_wwhrs"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def instantaneous_wwhrs(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class WWHRS_Index_Number2(_Base, etree.ElementBase):
                        ""
                        element_name = "WWHRS-Index-Number2"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:positiveInteger"
                        class_name = "WWHRS_Index_Number2"
                        documentation = """Omit if no second system."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = int
                        map_codes = None
                        map_values = None
                        parent_class_name = "Instantaneous_WWHRS"
                        parent_method_name ="instantaneous_wwhrs"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def instantaneous_wwhrs(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                class Storage_WWHRS(_Base, etree.ElementBase):
                    ""
                    element_name = "Storage-WWHRS"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Storage-WWHRS"
                    class_name = "Storage_WWHRS"
                    documentation = None
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = ["WWHRS_Index_Number", "WWHRS_Store_Volume"]
                    subclass_method_names = ["wwhrs_index_number", "wwhrs_store_volume"]
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def wwhrs_index_number(self): return self.find(f"{{{self.__class__.namespace}}}WWHRS-Index-Number")
                
                    def add_wwhrs_index_number(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}WWHRS-Index-Number")
                
                    @property
                    def wwhrs_store_volume(self): return self.find(f"{{{self.__class__.namespace}}}WWHRS-Store-Volume")
                
                    def add_wwhrs_store_volume(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}WWHRS-Store-Volume")
                
                    class WWHRS_Index_Number(_Base, etree.ElementBase):
                        ""
                        element_name = "WWHRS-Index-Number"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:positiveInteger"
                        class_name = "WWHRS_Index_Number"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = int
                        map_codes = None
                        map_values = None
                        parent_class_name = "Storage_WWHRS"
                        parent_method_name ="storage_wwhrs"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def storage_wwhrs(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class WWHRS_Store_Volume(_Base, etree.ElementBase):
                        ""
                        element_name = "WWHRS-Store-Volume"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Measurement"
                        class_name = "WWHRS_Store_Volume"
                        documentation = """Dedicated store volume in litres."""
                        type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "Storage_WWHRS"
                        parent_method_name ="storage_wwhrs"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def storage_wwhrs(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                class Shower_Outlets(_Base, etree.ElementBase):
                    ""
                    element_name = "Shower-Outlets"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Shower-Outlets"
                    class_name = "Shower_Outlets"
                    documentation = None
                    type_documentation = """Shower outlets present in the dwelling. If there are more than 5 then only include the 5 with the highest flow rates used."""
                    has_text_node = False
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = ["Shower_Outlet"]
                    subclass_method_names = ["shower_outlet"]
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def shower_outlet(self): return self.findall(f"{{{self.__class__.namespace}}}Shower-Outlet")
                
                    def add_shower_outlet(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Shower-Outlet")
                
                    class Shower_Outlet(_Base, etree.ElementBase):
                        ""
                        element_name = "Shower-Outlet"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Shower-Outlet"
                        class_name = "Shower_Outlet"
                        documentation = None
                        type_documentation = """Various details for each shower outlet."""
                        has_text_node = False
                        min_occurs = 1
                        max_occurs = 5
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "Shower_Outlets"
                        parent_method_name ="shower_outlets"
                        subclass_class_names = ["Shower_Outlet_Type", "Shower_WWHRS"]
                        subclass_method_names = ["shower_outlet_type", "shower_wwhrs"]
                    
                        @property
                        def shower_outlets(self): return self.getparent()
                    
                        @property
                        def shower_outlet_type(self): return self.find(f"{{{self.__class__.namespace}}}Shower-Outlet-Type")
                    
                        def add_shower_outlet_type(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Shower-Outlet-Type")
                    
                        @property
                        def shower_wwhrs(self): return self.find(f"{{{self.__class__.namespace}}}Shower-WWHRS")
                    
                        def add_shower_wwhrs(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Shower-WWHRS")
                    
                        class Shower_Outlet_Type(_Base, etree.ElementBase):
                            ""
                            element_name = "Shower-Outlet-Type"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "ShowerTypeCode"
                            class_name = "Shower_Outlet_Type"
                            documentation = """Hot water type for this shower outlet."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'0': 'unknown - for backward compatibility only, do not use', '1': 'non-electric shower(s) only', '2': 'electric shower(s) only', '3': 'both electric and non-electric showers', '4': 'no shower'}
                            map_values = {'unknown - for backward compatibility only, do not use': '0', 'non-electric shower(s) only': '1', 'electric shower(s) only': '2', 'both electric and non-electric showers': '3', 'no shower': '4'}
                            parent_class_name = "Shower_Outlet"
                            parent_method_name ="shower_outlet"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def shower_outlet(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Shower_WWHRS(_Base, etree.ElementBase):
                            ""
                            element_name = "Shower-WWHRS"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "ShowerWWHRSCode"
                            class_name = "Shower_WWHRS"
                            documentation = """The WWHRS with which the shower is connected. If shower outlet type is instantaneous electric shower then only a storage WWHRS can be selected or none."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'none', '2': 'Instantaneous WWHRS 1', '3': 'Instantaneous WWHRS 2', '4': 'Storage WWHRS'}
                            map_values = {'none': '1', 'Instantaneous WWHRS 1': '2', 'Instantaneous WWHRS 2': '3', 'Storage WWHRS': '4'}
                            parent_class_name = "Shower_Outlet"
                            parent_method_name ="shower_outlet"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def shower_outlet(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                class Number_Baths(_Base, etree.ElementBase):
                    ""
                    element_name = "Number-Baths"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Count"
                    class_name = "Number_Baths"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Number_Baths_WWHRS(_Base, etree.ElementBase):
                    ""
                    element_name = "Number-Baths-WWHRS"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Count"
                    class_name = "Number_Baths_WWHRS"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Community_DHW_Network_Index_Number(_Base, etree.ElementBase):
                    ""
                    element_name = "Community-DHW-Network-Index-Number"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:positiveInteger"
                    class_name = "Community_DHW_Network_Index_Number"
                    documentation = """index number of heat network, if applicable, community water heating only."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Community_DHW_Sub_Network_Name(_Base, etree.ElementBase):
                    ""
                    element_name = "Community-DHW-Sub-Network-Name"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Community_DHW_Sub_Network_Name"
                    documentation = """only if hot water only heat network from pcdb. The name by which the sub community heat network is known."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Community_DHW_Distribution_Type(_Base, etree.ElementBase):
                    ""
                    element_name = "Community-DHW-Distribution-Type"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-HeatingDistributionCode"
                    class_name = "Community_DHW_Distribution_Type"
                    documentation = """only if hot water only heat network."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'5': 'calculated', '6': 'unknown', '9': 'Two adjoining dwellings'}
                    map_values = {'calculated': '5', 'unknown': '6', 'Two adjoining dwellings': '9'}
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Community_DHW_CHP_Electricity_Generation(_Base, etree.ElementBase):
                    ""
                    element_name = "Community-DHW-CHP-Electricity-Generation"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-CHPElectricityGenerationCode"
                    class_name = "Community_DHW_CHP_Electricity_Generation"
                    documentation = """Only if community heating not from pcdb and a heat source with CHP. CHP Electricity generation options from table 12f."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'81': 'New CHP, export only.', '82': 'New CHP, flexible operation.', '83': 'New CHP, standard.', '84': 'Existing CHP (2015+), export only.', '85': 'Existing CHP (2015+), flexible operation.', '86': 'Existing CHP (2015+),standard.', '87': 'Existing CHP (pre-2015), export only.', '88': 'Existing CHP (pre-2015), flexible operation.', '89': 'Existing CHP (pre-2015), standard.'}
                    map_values = {'New CHP, export only.': '81', 'New CHP, flexible operation.': '82', 'New CHP, standard.': '83', 'Existing CHP (2015+), export only.': '84', 'Existing CHP (2015+), flexible operation.': '85', 'Existing CHP (2015+),standard.': '86', 'Existing CHP (pre-2015), export only.': '87', 'Existing CHP (pre-2015), flexible operation.': '88', 'Existing CHP (pre-2015), standard.': '89'}
                    parent_class_name = "SAP_Heating"
                    parent_method_name ="sap_heating"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_heating(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class SAP_Energy_Source(_Base, etree.ElementBase):
                ""
                element_name = "SAP-Energy-Source"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-Energy-Source"
                class_name = "SAP_Energy_Source"
                documentation = """Details of energy sources available to the property."""
                type_documentation = """Details of the main Electricity supply to the Property."""
                has_text_node = False
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = ["Meter_Type", "Mains_Gas", "Electricity_Smart_Meter_Present", "Gas_Smart_Meter_Present", "Is_Dwelling_Export_Capable", "Wind_Turbines_Count", "Wind_Turbines_Terrain_Type", "Wind_Turbine_Details", "Photovoltaic_Supply", "PV_Connection", "PV_Diverter", "PV_Battery_Count", "PV_Batteries", "Hydro_Electric_Generation", "Is_Hydro_Output_Connected_To_Dwelling_Meter"]
                subclass_method_names = ["meter_type", "mains_gas", "electricity_smart_meter_present", "gas_smart_meter_present", "is_dwelling_export_capable", "wind_turbines_count", "wind_turbines_terrain_type", "wind_turbine_details", "photovoltaic_supply", "pv_connection", "pv_diverter", "pv_battery_count", "pv_batteries", "hydro_electric_generation", "is_hydro_output_connected_to_dwelling_meter"]
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def meter_type(self): return self.find(f"{{{self.__class__.namespace}}}Meter-Type")
            
                def add_meter_type(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Meter-Type")
            
                @property
                def mains_gas(self): return self.find(f"{{{self.__class__.namespace}}}Mains-Gas")
            
                def add_mains_gas(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Mains-Gas")
            
                @property
                def electricity_smart_meter_present(self): return self.find(f"{{{self.__class__.namespace}}}Electricity-Smart-Meter-Present")
            
                def add_electricity_smart_meter_present(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Electricity-Smart-Meter-Present")
            
                @property
                def gas_smart_meter_present(self): return self.find(f"{{{self.__class__.namespace}}}Gas-Smart-Meter-Present")
            
                def add_gas_smart_meter_present(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gas-Smart-Meter-Present")
            
                @property
                def is_dwelling_export_capable(self): return self.find(f"{{{self.__class__.namespace}}}Is-Dwelling-Export-Capable")
            
                def add_is_dwelling_export_capable(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Is-Dwelling-Export-Capable")
            
                @property
                def wind_turbines_count(self): return self.find(f"{{{self.__class__.namespace}}}Wind-Turbines-Count")
            
                def add_wind_turbines_count(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wind-Turbines-Count")
            
                @property
                def wind_turbines_terrain_type(self): return self.find(f"{{{self.__class__.namespace}}}Wind-Turbines-Terrain-Type")
            
                def add_wind_turbines_terrain_type(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wind-Turbines-Terrain-Type")
            
                @property
                def wind_turbine_details(self): return self.find(f"{{{self.__class__.namespace}}}Wind-Turbine-Details")
            
                def add_wind_turbine_details(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wind-Turbine-Details")
            
                @property
                def photovoltaic_supply(self): return self.find(f"{{{self.__class__.namespace}}}Photovoltaic-Supply")
            
                def add_photovoltaic_supply(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Photovoltaic-Supply")
            
                @property
                def pv_connection(self): return self.find(f"{{{self.__class__.namespace}}}PV-Connection")
            
                def add_pv_connection(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}PV-Connection")
            
                @property
                def pv_diverter(self): return self.find(f"{{{self.__class__.namespace}}}PV-Diverter")
            
                def add_pv_diverter(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}PV-Diverter")
            
                @property
                def pv_battery_count(self): return self.find(f"{{{self.__class__.namespace}}}PV-Battery-Count")
            
                def add_pv_battery_count(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}PV-Battery-Count")
            
                @property
                def pv_batteries(self): return self.find(f"{{{self.__class__.namespace}}}PV-Batteries")
            
                def add_pv_batteries(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}PV-Batteries")
            
                @property
                def hydro_electric_generation(self): return self.find(f"{{{self.__class__.namespace}}}Hydro-Electric-Generation")
            
                def add_hydro_electric_generation(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Hydro-Electric-Generation")
            
                @property
                def is_hydro_output_connected_to_dwelling_meter(self): return self.find(f"{{{self.__class__.namespace}}}Is-Hydro-Output-Connected-To-Dwelling-Meter")
            
                def add_is_hydro_output_connected_to_dwelling_meter(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Is-Hydro-Output-Connected-To-Dwelling-Meter")
            
                class Meter_Type(_Base, etree.ElementBase):
                    ""
                    element_name = "Meter-Type"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "ElectricMeterTypeCode"
                    class_name = "Meter_Type"
                    documentation = """The type of Electricity Meter - taken from a pre-defined list of values."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'1': 'dual', '2': 'Single', '3': 'Unknown', '4': 'dual (24 hour)', '5': 'off-peak 18 hour', '6': 'off-peak 10 hour'}
                    map_values = {'dual': '1', 'Single': '2', 'Unknown': '3', 'dual (24 hour)': '4', 'off-peak 18 hour': '5', 'off-peak 10 hour': '6'}
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Mains_Gas(_Base, etree.ElementBase):
                    ""
                    element_name = "Mains-Gas"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "MainsGasCode"
                    class_name = "Mains_Gas"
                    documentation = """Whether mains gas is available in the property."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'Y': 'mains gas available in the property', 'N': 'mains gas not available in the property', 'NR': 'not recorded; for backwards compatibility only, do not use'}
                    map_values = {'mains gas available in the property': 'Y', 'mains gas not available in the property': 'N', 'not recorded; for backwards compatibility only, do not use': 'NR'}
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Electricity_Smart_Meter_Present(_Base, etree.ElementBase):
                    ""
                    element_name = "Electricity-Smart-Meter-Present"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:boolean"
                    class_name = "Electricity_Smart_Meter_Present"
                    documentation = """Is an electricity Smart Meter present?"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = bool
                    map_codes = {'true': True, '1': True, 'false': False, '0': False}
                    map_values = {True: '1', False: '0'}
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Gas_Smart_Meter_Present(_Base, etree.ElementBase):
                    ""
                    element_name = "Gas-Smart-Meter-Present"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:boolean"
                    class_name = "Gas_Smart_Meter_Present"
                    documentation = """Is a gas Smart Meter present?"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = bool
                    map_codes = {'true': True, '1': True, 'false': False, '0': False}
                    map_values = {True: '1', False: '0'}
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Is_Dwelling_Export_Capable(_Base, etree.ElementBase):
                    ""
                    element_name = "Is-Dwelling-Export-Capable"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:boolean"
                    class_name = "Is_Dwelling_Export_Capable"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = bool
                    map_codes = {'true': True, '1': True, 'false': False, '0': False}
                    map_values = {True: '1', False: '0'}
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Wind_Turbines_Count(_Base, etree.ElementBase):
                    ""
                    element_name = "Wind-Turbines-Count"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-WindTurbinesCount"
                    class_name = "Wind_Turbines_Count"
                    documentation = """Number of wind turbines; 0 if none."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Wind_Turbines_Terrain_Type(_Base, etree.ElementBase):
                    ""
                    element_name = "Wind-Turbines-Terrain-Type"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-TerrainTypeCode"
                    class_name = "Wind_Turbines_Terrain_Type"
                    documentation = """Terrain type"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'1': 'urban', '2': 'suburban', '3': 'rural', '4': 'not recorded'}
                    map_values = {'urban': '1', 'suburban': '2', 'rural': '3', 'not recorded': '4'}
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Wind_Turbine_Details(_Base, etree.ElementBase):
                    ""
                    element_name = "Wind-Turbine-Details"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Wind-Turbine-Details"
                    class_name = "Wind_Turbine_Details"
                    documentation = """Included when details are known"""
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = ["Rotor_Diameter", "Hub_Height"]
                    subclass_method_names = ["rotor_diameter", "hub_height"]
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def rotor_diameter(self): return self.find(f"{{{self.__class__.namespace}}}Rotor-Diameter")
                
                    def add_rotor_diameter(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Rotor-Diameter")
                
                    @property
                    def hub_height(self): return self.find(f"{{{self.__class__.namespace}}}Hub-Height")
                
                    def add_hub_height(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Hub-Height")
                
                    class Rotor_Diameter(_Base, etree.ElementBase):
                        ""
                        element_name = "Rotor-Diameter"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Measurement"
                        class_name = "Rotor_Diameter"
                        documentation = """Diameter of rotor of wind turbine"""
                        type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "Wind_Turbine_Details"
                        parent_method_name ="wind_turbine_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def wind_turbine_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Hub_Height(_Base, etree.ElementBase):
                        ""
                        element_name = "Hub-Height"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Measurement"
                        class_name = "Hub_Height"
                        documentation = """Height of rotor hub above ridge of roof"""
                        type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "Wind_Turbine_Details"
                        parent_method_name ="wind_turbine_details"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def wind_turbine_details(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                class Photovoltaic_Supply(_Base, etree.ElementBase):
                    ""
                    element_name = "Photovoltaic-Supply"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Photovoltaic-Supply"
                    class_name = "Photovoltaic_Supply"
                    documentation = None
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = ["PV_Arrays", "None_Or_No_Details"]
                    subclass_method_names = ["pv_arrays", "none_or_no_details"]
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def pv_arrays(self): return self.findall(f"{{{self.__class__.namespace}}}PV-Arrays")
                
                    def add_pv_arrays(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}PV-Arrays")
                
                    @property
                    def none_or_no_details(self): return self.find(f"{{{self.__class__.namespace}}}None-Or-No-Details")
                
                    def add_none_or_no_details(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}None-Or-No-Details")
                
                    class PV_Arrays(_Base, etree.ElementBase):
                        ""
                        element_name = "PV-Arrays"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "PV-Arrays"
                        class_name = "PV_Arrays"
                        documentation = None
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 1
                        max_occurs = 3
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "Photovoltaic_Supply"
                        parent_method_name ="photovoltaic_supply"
                        subclass_class_names = ["PV_Array"]
                        subclass_method_names = ["pv_array"]
                    
                        @property
                        def photovoltaic_supply(self): return self.getparent()
                    
                        @property
                        def pv_array(self): return self.find(f"{{{self.__class__.namespace}}}PV-Array")
                    
                        def add_pv_array(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}PV-Array")
                    
                        class PV_Array(_Base, etree.ElementBase):
                            ""
                            element_name = "PV-Array"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "PV-Array"
                            class_name = "PV_Array"
                            documentation = None
                            type_documentation = None
                            has_text_node = False
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = None
                            map_codes = None
                            map_values = None
                            parent_class_name = "PV_Arrays"
                            parent_method_name ="pv_arrays"
                            subclass_class_names = ["Peak_Power", "Orientation", "Pitch", "Overshading"]
                            subclass_method_names = ["peak_power", "orientation", "pitch", "overshading"]
                        
                            @property
                            def pv_arrays(self): return self.getparent()
                        
                            @property
                            def peak_power(self): return self.find(f"{{{self.__class__.namespace}}}Peak-Power")
                        
                            def add_peak_power(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Peak-Power")
                        
                            @property
                            def orientation(self): return self.find(f"{{{self.__class__.namespace}}}Orientation")
                        
                            def add_orientation(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Orientation")
                        
                            @property
                            def pitch(self): return self.find(f"{{{self.__class__.namespace}}}Pitch")
                        
                            def add_pitch(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Pitch")
                        
                            @property
                            def overshading(self): return self.find(f"{{{self.__class__.namespace}}}Overshading")
                        
                            def add_overshading(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Overshading")
                        
                            class Peak_Power(_Base, etree.ElementBase):
                                ""
                                element_name = "Peak-Power"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Peak_Power"
                                documentation = """Peak kW of photovoltaics (PVs) (kWp). If the total peak power has been apportioned between different dwellings within the same building, this is the kWp ascribed to the dwelling being assessed."""
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "PV_Array"
                                parent_method_name ="pv_array"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def pv_array(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Orientation(_Base, etree.ElementBase):
                                ""
                                element_name = "Orientation"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "SAP-CompassDirectionCode"
                                class_name = "Orientation"
                                documentation = """PV orientation; only if peak kWp > 0."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'1': 'North', '2': 'North East', '3': 'East', '4': 'South East', '5': 'South', '6': 'South West', '7': 'West', '8': 'North West', 'ND': 'To be used when the pitch is horizontal'}
                                map_values = {'North': '1', 'North East': '2', 'East': '3', 'South East': '4', 'South': '5', 'South West': '6', 'West': '7', 'North West': '8', 'To be used when the pitch is horizontal': 'ND'}
                                parent_class_name = "PV_Array"
                                parent_method_name ="pv_array"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def pv_array(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Pitch(_Base, etree.ElementBase):
                                ""
                                element_name = "Pitch"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "SAP-VerticalPitchCode"
                                class_name = "Pitch"
                                documentation = """PV pitch; only if peak kWp > 0."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'1': 'horizontal', '2': '30 degrees', '3': '45 degrees', '4': '60 degrees', '5': 'vertical'}
                                map_values = {'horizontal': '1', '30 degrees': '2', '45 degrees': '3', '60 degrees': '4', 'vertical': '5'}
                                parent_class_name = "PV_Array"
                                parent_method_name ="pv_array"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def pv_array(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Overshading(_Base, etree.ElementBase):
                                ""
                                element_name = "Overshading"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "SAP-SolarCollectorOvershadingCode"
                                class_name = "Overshading"
                                documentation = """PV overshading; only if peak kWp > 0."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'1': 'none or very little', '2': 'modest', '3': 'significant', '4': 'heavy', '5': 'severe'}
                                map_values = {'none or very little': '1', 'modest': '2', 'significant': '3', 'heavy': '4', 'severe': '5'}
                                parent_class_name = "PV_Array"
                                parent_method_name ="pv_array"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def pv_array(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                    class None_Or_No_Details(_Base, etree.ElementBase):
                        ""
                        element_name = "None-Or-No-Details"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "None"
                        class_name = "None_Or_No_Details"
                        documentation = None
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "Photovoltaic_Supply"
                        parent_method_name ="photovoltaic_supply"
                        subclass_class_names = ["Percent_Roof_Area"]
                        subclass_method_names = ["percent_roof_area"]
                    
                        @property
                        def photovoltaic_supply(self): return self.getparent()
                    
                        @property
                        def percent_roof_area(self): return self.find(f"{{{self.__class__.namespace}}}Percent-Roof-Area")
                    
                        def add_percent_roof_area(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Percent-Roof-Area")
                    
                        class Percent_Roof_Area(_Base, etree.ElementBase):
                            ""
                            element_name = "Percent-Roof-Area"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Percentage"
                            class_name = "Percent_Roof_Area"
                            documentation = """Photovoltaic area as percentage of total roof area. 0% indicates that a photovoltaic supply is not present in the property."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = int
                            map_codes = None
                            map_values = None
                            parent_class_name = "None_Or_No_Details"
                            parent_method_name ="none_or_no_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def none_or_no_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                class PV_Connection(_Base, etree.ElementBase):
                    ""
                    element_name = "PV-Connection"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "PVConnectionCode"
                    class_name = "PV_Connection"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'not applicable (FGHRS or no PV)', '1': "not connected to dwelling's electricity meter", '2': "connected to dwelling's electricity meter", 'NR': 'not recorded; for backwards compatibility only, do not use'}
                    map_values = {'not applicable (FGHRS or no PV)': '0', "not connected to dwelling's electricity meter": '1', "connected to dwelling's electricity meter": '2', 'not recorded; for backwards compatibility only, do not use': 'NR'}
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class PV_Diverter(_Base, etree.ElementBase):
                    ""
                    element_name = "PV-Diverter"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:boolean"
                    class_name = "PV_Diverter"
                    documentation = """Diverter present."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = bool
                    map_codes = {'true': True, '1': True, 'false': False, '0': False}
                    map_values = {True: '1', False: '0'}
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class PV_Battery_Count(_Base, etree.ElementBase):
                    ""
                    element_name = "PV-Battery-Count"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:nonNegativeInteger"
                    class_name = "PV_Battery_Count"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class PV_Batteries(_Base, etree.ElementBase):
                    ""
                    element_name = "PV-Batteries"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "PV-Batteries"
                    class_name = "PV_Batteries"
                    documentation = None
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = ["PV_Battery"]
                    subclass_method_names = ["pv_battery"]
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def pv_battery(self): return self.findall(f"{{{self.__class__.namespace}}}PV-Battery")
                
                    def add_pv_battery(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}PV-Battery")
                
                    class PV_Battery(_Base, etree.ElementBase):
                        ""
                        element_name = "PV-Battery"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "PV-Battery"
                        class_name = "PV_Battery"
                        documentation = None
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 1
                        max_occurs = 20
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "PV_Batteries"
                        parent_method_name ="pv_batteries"
                        subclass_class_names = ["Battery_Capacity"]
                        subclass_method_names = ["battery_capacity"]
                    
                        @property
                        def pv_batteries(self): return self.getparent()
                    
                        @property
                        def battery_capacity(self): return self.find(f"{{{self.__class__.namespace}}}Battery-Capacity")
                    
                        def add_battery_capacity(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Battery-Capacity")
                    
                        class Battery_Capacity(_Base, etree.ElementBase):
                            ""
                            element_name = "Battery-Capacity"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "Battery_Capacity"
                            documentation = """Battery capacity in kWh. defaults to 5kW in unknown."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "PV_Battery"
                            parent_method_name ="pv_battery"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def pv_battery(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                class Hydro_Electric_Generation(_Base, etree.ElementBase):
                    ""
                    element_name = "Hydro-Electric-Generation"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:decimal"
                    class_name = "Hydro_Electric_Generation"
                    documentation = """Electricity generated by hydro-electric generator, in kWh/year. To be provided if Hydro-Electric-Generation-Month is not provided."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = float
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Is_Hydro_Output_Connected_To_Dwelling_Meter(_Base, etree.ElementBase):
                    ""
                    element_name = "Is-Hydro-Output-Connected-To-Dwelling-Meter"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:boolean"
                    class_name = "Is_Hydro_Output_Connected_To_Dwelling_Meter"
                    documentation = """Whether the hydro-electric station is connected to dwelling's electricity meter"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = bool
                    map_codes = {'true': True, '1': True, 'false': False, '0': False}
                    map_values = {True: '1', False: '0'}
                    parent_class_name = "SAP_Energy_Source"
                    parent_method_name ="sap_energy_source"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_energy_source(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class SAP_Building_Parts(_Base, etree.ElementBase):
                ""
                element_name = "SAP-Building-Parts"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-Building-Parts"
                class_name = "SAP_Building_Parts"
                documentation = None
                type_documentation = """Details of the significant building parts that comprise the main habitable building in the property. The main habitable area generally consists of a single main building but can over time be extended to include extensions such as new wings and additional storeys. For the purpose of calculating the overall Energy Assessment for the property details of each distinct Building Part, such as its construction, have to be gathered because different materials have different insulation ratings (obviously) which affects the overall rating."""
                has_text_node = False
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = ["SAP_Integral_Conservatory", "SAP_Building_Part"]
                subclass_method_names = ["sap_integral_conservatory", "sap_building_part"]
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def sap_integral_conservatory(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Integral-Conservatory")
            
                def add_sap_integral_conservatory(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Integral-Conservatory")
            
                @property
                def sap_building_part(self): return self.findall(f"{{{self.__class__.namespace}}}SAP-Building-Part")
            
                def add_sap_building_part(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Building-Part")
            
                class SAP_Integral_Conservatory(_Base, etree.ElementBase):
                    ""
                    element_name = "SAP-Integral-Conservatory"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-Integral-Conservatory"
                    class_name = "SAP_Integral_Conservatory"
                    documentation = None
                    type_documentation = """A conservatory intergrated into the property that is within the heat-loss perimeter and forms part of the habitable area."""
                    has_text_node = False
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Building_Parts"
                    parent_method_name ="sap_building_parts"
                    subclass_class_names = ["Double_Glazed", "Floor_Area", "Glazed_Perimeter", "Room_Height"]
                    subclass_method_names = ["double_glazed", "floor_area", "glazed_perimeter", "room_height"]
                
                    @property
                    def sap_building_parts(self): return self.getparent()
                
                    @property
                    def double_glazed(self): return self.find(f"{{{self.__class__.namespace}}}Double-Glazed")
                
                    def add_double_glazed(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Double-Glazed")
                
                    @property
                    def floor_area(self): return self.find(f"{{{self.__class__.namespace}}}Floor-Area")
                
                    def add_floor_area(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Floor-Area")
                
                    @property
                    def glazed_perimeter(self): return self.find(f"{{{self.__class__.namespace}}}Glazed-Perimeter")
                
                    def add_glazed_perimeter(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Glazed-Perimeter")
                
                    @property
                    def room_height(self): return self.find(f"{{{self.__class__.namespace}}}Room-Height")
                
                    def add_room_height(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Room-Height")
                
                    class Double_Glazed(_Base, etree.ElementBase):
                        ""
                        element_name = "Double-Glazed"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Flag"
                        class_name = "Double_Glazed"
                        documentation = """Indicates whether the conservatory is double glazed"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'Y': 'Yes', 'N': 'No'}
                        map_values = {'Yes': 'Y', 'No': 'N'}
                        parent_class_name = "SAP_Integral_Conservatory"
                        parent_method_name ="sap_integral_conservatory"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_integral_conservatory(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Floor_Area(_Base, etree.ElementBase):
                        ""
                        element_name = "Floor-Area"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Measurement"
                        class_name = "Floor_Area"
                        documentation = """The gross floor area of the conservatory"""
                        type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Integral_Conservatory"
                        parent_method_name ="sap_integral_conservatory"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_integral_conservatory(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Glazed_Perimeter(_Base, etree.ElementBase):
                        ""
                        element_name = "Glazed-Perimeter"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Measurement"
                        class_name = "Glazed_Perimeter"
                        documentation = """The length of the glazed area"""
                        type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Integral_Conservatory"
                        parent_method_name ="sap_integral_conservatory"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_integral_conservatory(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Room_Height(_Base, etree.ElementBase):
                        ""
                        element_name = "Room-Height"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "ConservatoryHeightCode"
                        class_name = "Room_Height"
                        documentation = """The average height of the conservatory"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': '1 storey', '1.5': '1.5 storey', '2': '2 storey', '2.5': '2.5 storey', '3': '3 storey'}
                        map_values = {'1 storey': '1', '1.5 storey': '1.5', '2 storey': '2', '2.5 storey': '2.5', '3 storey': '3'}
                        parent_class_name = "SAP_Integral_Conservatory"
                        parent_method_name ="sap_integral_conservatory"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_integral_conservatory(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                class SAP_Building_Part(_Base, etree.ElementBase):
                    ""
                    element_name = "SAP-Building-Part"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-Building-Part"
                    class_name = "SAP_Building_Part"
                    documentation = None
                    type_documentation = """A permanent structure that forms part of the Property and is built primarily for human habitation. A Building is usually made up of one or more Storey's and may contain a number of Internal Structural Features. An extension would be a Building Part."""
                    has_text_node = False
                    min_occurs = 1
                    max_occurs = "unbounded"
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Building_Parts"
                    parent_method_name ="sap_building_parts"
                    subclass_class_names = ["Building_Part_Number", "Identifier", "Construction_Age_Band", "SAP_Floor_Dimensions", "Floor_U_Value", "Floor_Insulation_Thickness", "Floor_Heat_Loss", "Roof_Construction", "Roof_Insulation_Location", "Roof_U_Value", "Roof_Insulation_Thickness", "Rafter_Insulation_Thickness", "Flat_Roof_Insulation_Thickness", "Sloping_Ceiling_Insulation_Thickness", "Wall_Construction", "Wall_Insulation_Type", "Wall_Thickness_Measured", "Wall_Thickness", "Wall_Dry_Lined", "Wall_U_Value", "Wall_Insulation_Thickness", "Wall_Insulation_Thickness_Measured", "Wall_Insulation_Thermal_Conductivity", "SAP_Room_In_Roof", "SAP_Alternative_Wall_1", "SAP_Alternative_Wall_2", "Party_Wall_Construction"]
                    subclass_method_names = ["building_part_number", "identifier", "construction_age_band", "sap_floor_dimensions", "floor_u_value", "floor_insulation_thickness", "floor_heat_loss", "roof_construction", "roof_insulation_location", "roof_u_value", "roof_insulation_thickness", "rafter_insulation_thickness", "flat_roof_insulation_thickness", "sloping_ceiling_insulation_thickness", "wall_construction", "wall_insulation_type", "wall_thickness_measured", "wall_thickness", "wall_dry_lined", "wall_u_value", "wall_insulation_thickness", "wall_insulation_thickness_measured", "wall_insulation_thermal_conductivity", "sap_room_in_roof", "sap_alternative_wall_1", "sap_alternative_wall_2", "party_wall_construction"]
                
                    @property
                    def sap_building_parts(self): return self.getparent()
                
                    @property
                    def building_part_number(self): return self.find(f"{{{self.__class__.namespace}}}Building-Part-Number")
                
                    def add_building_part_number(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Building-Part-Number")
                
                    @property
                    def identifier(self): return self.find(f"{{{self.__class__.namespace}}}Identifier")
                
                    def add_identifier(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Identifier")
                
                    @property
                    def construction_age_band(self): return self.find(f"{{{self.__class__.namespace}}}Construction-Age-Band")
                
                    def add_construction_age_band(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Construction-Age-Band")
                
                    @property
                    def sap_floor_dimensions(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Floor-Dimensions")
                
                    def add_sap_floor_dimensions(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Floor-Dimensions")
                
                    @property
                    def floor_u_value(self): return self.find(f"{{{self.__class__.namespace}}}Floor-U-Value")
                
                    def add_floor_u_value(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Floor-U-Value")
                
                    @property
                    def floor_insulation_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Floor-Insulation-Thickness")
                
                    def add_floor_insulation_thickness(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Floor-Insulation-Thickness")
                
                    @property
                    def floor_heat_loss(self): return self.find(f"{{{self.__class__.namespace}}}Floor-Heat-Loss")
                
                    def add_floor_heat_loss(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Floor-Heat-Loss")
                
                    @property
                    def roof_construction(self): return self.find(f"{{{self.__class__.namespace}}}Roof-Construction")
                
                    def add_roof_construction(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Roof-Construction")
                
                    @property
                    def roof_insulation_location(self): return self.find(f"{{{self.__class__.namespace}}}Roof-Insulation-Location")
                
                    def add_roof_insulation_location(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Roof-Insulation-Location")
                
                    @property
                    def roof_u_value(self): return self.find(f"{{{self.__class__.namespace}}}Roof-U-Value")
                
                    def add_roof_u_value(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Roof-U-Value")
                
                    @property
                    def roof_insulation_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Roof-Insulation-Thickness")
                
                    def add_roof_insulation_thickness(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Roof-Insulation-Thickness")
                
                    @property
                    def rafter_insulation_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Rafter-Insulation-Thickness")
                
                    def add_rafter_insulation_thickness(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Rafter-Insulation-Thickness")
                
                    @property
                    def flat_roof_insulation_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Roof-Insulation-Thickness")
                
                    def add_flat_roof_insulation_thickness(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Roof-Insulation-Thickness")
                
                    @property
                    def sloping_ceiling_insulation_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Sloping-Ceiling-Insulation-Thickness")
                
                    def add_sloping_ceiling_insulation_thickness(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Sloping-Ceiling-Insulation-Thickness")
                
                    @property
                    def wall_construction(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Construction")
                
                    def add_wall_construction(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Construction")
                
                    @property
                    def wall_insulation_type(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Type")
                
                    def add_wall_insulation_type(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Type")
                
                    @property
                    def wall_thickness_measured(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Thickness-Measured")
                
                    def add_wall_thickness_measured(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Thickness-Measured")
                
                    @property
                    def wall_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Thickness")
                
                    def add_wall_thickness(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Thickness")
                
                    @property
                    def wall_dry_lined(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Dry-Lined")
                
                    def add_wall_dry_lined(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Dry-Lined")
                
                    @property
                    def wall_u_value(self): return self.find(f"{{{self.__class__.namespace}}}Wall-U-Value")
                
                    def add_wall_u_value(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-U-Value")
                
                    @property
                    def wall_insulation_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness")
                
                    def add_wall_insulation_thickness(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness")
                
                    @property
                    def wall_insulation_thickness_measured(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness-Measured")
                
                    def add_wall_insulation_thickness_measured(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness-Measured")
                
                    @property
                    def wall_insulation_thermal_conductivity(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Thermal-Conductivity")
                
                    def add_wall_insulation_thermal_conductivity(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Thermal-Conductivity")
                
                    @property
                    def sap_room_in_roof(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Room-In-Roof")
                
                    def add_sap_room_in_roof(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Room-In-Roof")
                
                    @property
                    def sap_alternative_wall_1(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Alternative-Wall-1")
                
                    def add_sap_alternative_wall_1(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Alternative-Wall-1")
                
                    @property
                    def sap_alternative_wall_2(self): return self.find(f"{{{self.__class__.namespace}}}SAP-Alternative-Wall-2")
                
                    def add_sap_alternative_wall_2(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Alternative-Wall-2")
                
                    @property
                    def party_wall_construction(self): return self.find(f"{{{self.__class__.namespace}}}Party-Wall-Construction")
                
                    def add_party_wall_construction(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Party-Wall-Construction")
                
                    class Building_Part_Number(_Base, etree.ElementBase):
                        ""
                        element_name = "Building-Part-Number"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:positiveInteger"
                        class_name = "Building_Part_Number"
                        documentation = """An integer value which uniquely identifies the building part in the property. The value "1" must be assigned to the main dwelling."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = int
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Identifier(_Base, etree.ElementBase):
                        ""
                        element_name = "Identifier"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "IDString"
                        class_name = "Identifier"
                        documentation = """Identifier for the Building part - generally only required if there are more that one Building Parts of the same type e.g. "West Wing" and "East Wing" Extensions"""
                        type_documentation = """A string containing a unique identifier for something. The underlying assumption is that each instance of a class or entity will have a unique identifier assigned to it which can then be assigned to any referencing entity as a reference to the entity instance. This is a very similar concept to XML ID datatype but is locally defined because of the need to extend the datatype with domain specific attributes."""
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.text
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Construction_Age_Band(_Base, etree.ElementBase):
                        ""
                        element_name = "Construction-Age-Band"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "ConstructionDateCode"
                        class_name = "Construction_Age_Band"
                        documentation = """The age band when this building part was constructed."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'A': 'England and Wales: before 1900; Scotland: before 1919; Northern Ireland: before 1919', 'B': 'England and Wales: 1900-1929; Scotland: 1919-1929; Northern Ireland: 1919-1929', 'C': 'England and Wales: 1930-1949; Scotland: 1930-1949; Northern Ireland: 1930-1949', 'D': 'England and Wales: 1950-1966; Scotland: 1950-1964; Northern Ireland: 1950-1973', 'E': 'England and Wales: 1967-1975; Scotland: 1965-1975; Northern Ireland: 1974-1977', 'F': 'England and Wales: 1976-1982; Scotland: 1976-1983; Northern Ireland: 1978-1985', 'G': 'England and Wales: 1983-1990; Scotland: 1984-1991; Northern Ireland: 1986-1991', 'H': 'England and Wales: 1991-1995; Scotland: 1992-1998; Northern Ireland: 1992-1999', 'I': 'England and Wales: 1996-2002; Scotland: 1999-2002; Northern Ireland: 2000-2006', 'J': 'England and Wales: 2003-2006; Scotland: 2003-2007; Northern Ireland: not applicable', 'K': 'England and Wales: 2007-2011; Scotland: 2008-2011; Northern Ireland: 2007-2013', 'L': 'England and Wales: 2012-2021; Scotland: 2012-2022; Northern Ireland: 2014 onwards', 'M': 'England and Wales: 2022 onwards; Scotland: 2023 onwards (TBA); Northern Ireland: 2014 onwards (TBA)', '0': 'Not applicable', 'NR': 'Not recorded'}
                        map_values = {'England and Wales: before 1900; Scotland: before 1919; Northern Ireland: before 1919': 'A', 'England and Wales: 1900-1929; Scotland: 1919-1929; Northern Ireland: 1919-1929': 'B', 'England and Wales: 1930-1949; Scotland: 1930-1949; Northern Ireland: 1930-1949': 'C', 'England and Wales: 1950-1966; Scotland: 1950-1964; Northern Ireland: 1950-1973': 'D', 'England and Wales: 1967-1975; Scotland: 1965-1975; Northern Ireland: 1974-1977': 'E', 'England and Wales: 1976-1982; Scotland: 1976-1983; Northern Ireland: 1978-1985': 'F', 'England and Wales: 1983-1990; Scotland: 1984-1991; Northern Ireland: 1986-1991': 'G', 'England and Wales: 1991-1995; Scotland: 1992-1998; Northern Ireland: 1992-1999': 'H', 'England and Wales: 1996-2002; Scotland: 1999-2002; Northern Ireland: 2000-2006': 'I', 'England and Wales: 2003-2006; Scotland: 2003-2007; Northern Ireland: not applicable': 'J', 'England and Wales: 2007-2011; Scotland: 2008-2011; Northern Ireland: 2007-2013': 'K', 'England and Wales: 2012-2021; Scotland: 2012-2022; Northern Ireland: 2014 onwards': 'L', 'England and Wales: 2022 onwards; Scotland: 2023 onwards (TBA); Northern Ireland: 2014 onwards (TBA)': 'M', 'Not applicable': '0', 'Not recorded': 'NR'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class SAP_Floor_Dimensions(_Base, etree.ElementBase):
                        ""
                        element_name = "SAP-Floor-Dimensions"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-Floor-Dimensions"
                        class_name = "SAP_Floor_Dimensions"
                        documentation = None
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = ["SAP_Floor_Dimension"]
                        subclass_method_names = ["sap_floor_dimension"]
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def sap_floor_dimension(self): return self.findall(f"{{{self.__class__.namespace}}}SAP-Floor-Dimension")
                    
                        def add_sap_floor_dimension(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Floor-Dimension")
                    
                        class SAP_Floor_Dimension(_Base, etree.ElementBase):
                            ""
                            element_name = "SAP-Floor-Dimension"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-Floor-Dimension"
                            class_name = "SAP_Floor_Dimension"
                            documentation = None
                            type_documentation = """Various measurements for each floor that makes up a particular Build-Part."""
                            has_text_node = False
                            min_occurs = 1
                            max_occurs = "unbounded"
                            python_type_convertor = None
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Floor_Dimensions"
                            parent_method_name ="sap_floor_dimensions"
                            subclass_class_names = ["Heat_Loss_Perimeter", "Room_Height", "Total_Floor_Area", "Floor", "Floor_Construction", "Floor_Insulation", "Party_Wall_Length"]
                            subclass_method_names = ["heat_loss_perimeter", "room_height", "total_floor_area", "floor", "floor_construction", "floor_insulation", "party_wall_length"]
                        
                            @property
                            def sap_floor_dimensions(self): return self.getparent()
                        
                            @property
                            def heat_loss_perimeter(self): return self.find(f"{{{self.__class__.namespace}}}Heat-Loss-Perimeter")
                        
                            def add_heat_loss_perimeter(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Heat-Loss-Perimeter")
                        
                            @property
                            def room_height(self): return self.find(f"{{{self.__class__.namespace}}}Room-Height")
                        
                            def add_room_height(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Room-Height")
                        
                            @property
                            def total_floor_area(self): return self.find(f"{{{self.__class__.namespace}}}Total-Floor-Area")
                        
                            def add_total_floor_area(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Total-Floor-Area")
                        
                            @property
                            def floor(self): return self.find(f"{{{self.__class__.namespace}}}Floor")
                        
                            def add_floor(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Floor")
                        
                            @property
                            def floor_construction(self): return self.find(f"{{{self.__class__.namespace}}}Floor-Construction")
                        
                            def add_floor_construction(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Floor-Construction")
                        
                            @property
                            def floor_insulation(self): return self.find(f"{{{self.__class__.namespace}}}Floor-Insulation")
                        
                            def add_floor_insulation(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Floor-Insulation")
                        
                            @property
                            def party_wall_length(self): return self.find(f"{{{self.__class__.namespace}}}Party-Wall-Length")
                        
                            def add_party_wall_length(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Party-Wall-Length")
                        
                            class Heat_Loss_Perimeter(_Base, etree.ElementBase):
                                ""
                                element_name = "Heat-Loss-Perimeter"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Heat_Loss_Perimeter"
                                documentation = """The estimate total heat loss perimeter for the Storey. The heat loss perimeter is any part of the storey that is exposed to the outside world through which heat may escape."""
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "SAP_Floor_Dimension"
                                parent_method_name ="sap_floor_dimension"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def sap_floor_dimension(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Room_Height(_Base, etree.ElementBase):
                                ""
                                element_name = "Room-Height"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Room_Height"
                                documentation = """Average height of the Storey"""
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "SAP_Floor_Dimension"
                                parent_method_name ="sap_floor_dimension"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def sap_floor_dimension(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Total_Floor_Area(_Base, etree.ElementBase):
                                ""
                                element_name = "Total-Floor-Area"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Total_Floor_Area"
                                documentation = """The total floor area of the storey"""
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "SAP_Floor_Dimension"
                                parent_method_name ="sap_floor_dimension"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def sap_floor_dimension(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Floor(_Base, etree.ElementBase):
                                ""
                                element_name = "Floor"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "SAP-StoreyFloorCode"
                                class_name = "Floor"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'lowest occupied', '1': 'lowest+1', '2': 'lowest+2', '3': 'lowest+3', '4': 'lowest+4', '5': 'lowest+5', '6': 'lowest+6', '99': 'roof rooms', 'NR': 'not recorded'}
                                map_values = {'lowest occupied': '0', 'lowest+1': '1', 'lowest+2': '2', 'lowest+3': '3', 'lowest+4': '4', 'lowest+5': '5', 'lowest+6': '6', 'roof rooms': '99', 'not recorded': 'NR'}
                                parent_class_name = "SAP_Floor_Dimension"
                                parent_method_name ="sap_floor_dimension"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def sap_floor_dimension(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Floor_Construction(_Base, etree.ElementBase):
                                ""
                                element_name = "Floor-Construction"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "SAP-FloorConstructionCode"
                                class_name = "Floor_Construction"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'unknown', '1': 'solid', '2': 'suspended timber', '3': 'suspended (not timber)', '4': 'basement floor'}
                                map_values = {'unknown': '0', 'solid': '1', 'suspended timber': '2', 'suspended (not timber)': '3', 'basement floor': '4'}
                                parent_class_name = "SAP_Floor_Dimension"
                                parent_method_name ="sap_floor_dimension"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def sap_floor_dimension(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Floor_Insulation(_Base, etree.ElementBase):
                                ""
                                element_name = "Floor-Insulation"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "SAP-FloorInsulationCode"
                                class_name = "Floor_Insulation"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'unknown', '1': 'as built', '2': 'retro-fitted'}
                                map_values = {'unknown': '0', 'as built': '1', 'retro-fitted': '2'}
                                parent_class_name = "SAP_Floor_Dimension"
                                parent_method_name ="sap_floor_dimension"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def sap_floor_dimension(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Party_Wall_Length(_Base, etree.ElementBase):
                                ""
                                element_name = "Party-Wall-Length"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Party_Wall_Length"
                                documentation = """set to zero if no party wall"""
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "SAP_Floor_Dimension"
                                parent_method_name ="sap_floor_dimension"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def sap_floor_dimension(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                    class Floor_U_Value(_Base, etree.ElementBase):
                        ""
                        element_name = "Floor-U-Value"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:decimal"
                        class_name = "Floor_U_Value"
                        documentation = """Only one of Floor-Insulation-Thickness and Floor-U-Value is included"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Floor_Insulation_Thickness(_Base, etree.ElementBase):
                        ""
                        element_name = "Floor-Insulation-Thickness"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "FloorInsulationThicknessCode"
                        class_name = "Floor_Insulation_Thickness"
                        documentation = """Only one of Floor-Insulation-Thickness and Floor-U-Value is included"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'NI': 'unknown', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm'}
                        map_values = {'unknown': 'NI', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Floor_Heat_Loss(_Base, etree.ElementBase):
                        ""
                        element_name = "Floor-Heat-Loss"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "HeatLossFloorCode"
                        class_name = "Floor_Heat_Loss"
                        documentation = """Identifies the type of foor through which heat loss occurs."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'exposed floor', '2': 'semi-exposed upper floor to unheated space', '3': 'semi-exposed upper floor to partially heated space', '6': 'Other flat below', '7': 'Ground floor', '8': 'same dwelling below'}
                        map_values = {'exposed floor': '1', 'semi-exposed upper floor to unheated space': '2', 'semi-exposed upper floor to partially heated space': '3', 'Other flat below': '6', 'Ground floor': '7', 'same dwelling below': '8'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Roof_Construction(_Base, etree.ElementBase):
                        ""
                        element_name = "Roof-Construction"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "RoofTypeCode"
                        class_name = "Roof_Construction"
                        documentation = """Describes the material that the roof of the Building Part is constructed from e.g. Tile, Slate etc."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'0': 'None', '1': 'Flat', '2': 'Pitched. This is retained for backwards compatibility only and should not be used. A pitched roof should be 4, 5, 6 or 8', '3': 'Another dwelling above', '4': 'Pitched (slates or tiles), access to loft', '5': 'Pitched (slates or tiles), no access to loft', '6': 'Pitched (thatch)', '7': 'Same dwelling above', '8': 'Pitched roof with sloping ceiling', '9': 'Non residential/unheated space', 'NR': 'Not recorded'}
                        map_values = {'None': '0', 'Flat': '1', 'Pitched. This is retained for backwards compatibility only and should not be used. A pitched roof should be 4, 5, 6 or 8': '2', 'Another dwelling above': '3', 'Pitched (slates or tiles), access to loft': '4', 'Pitched (slates or tiles), no access to loft': '5', 'Pitched (thatch)': '6', 'Same dwelling above': '7', 'Pitched roof with sloping ceiling': '8', 'Non residential/unheated space': '9', 'Not recorded': 'NR'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Roof_Insulation_Location(_Base, etree.ElementBase):
                        ""
                        element_name = "Roof-Insulation-Location"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "RoofInsulationLocationCode"
                        class_name = "Roof_Insulation_Location"
                        documentation = """The location of the insulation in the roof e.g. between joists, in rafters etc."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'Rafters', '2': 'Joists', '3': 'No access.. This is retained for backwards compatibility only and should not be used. No access is covered by enum 5 of RoofTypeCode', '4': 'Unknown', '5': 'None; applicable only when Roof-Construction is 4, 5 or 6', '6': 'Flat roof insulation', '7': 'Sloping ceiling insulation', 'ND': 'Not Defined'}
                        map_values = {'Rafters': '1', 'Joists': '2', 'No access.. This is retained for backwards compatibility only and should not be used. No access is covered by enum 5 of RoofTypeCode': '3', 'Unknown': '4', 'None; applicable only when Roof-Construction is 4, 5 or 6': '5', 'Flat roof insulation': '6', 'Sloping ceiling insulation': '7', 'Not Defined': 'ND'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Roof_U_Value(_Base, etree.ElementBase):
                        ""
                        element_name = "Roof-U-Value"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:decimal"
                        class_name = "Roof_U_Value"
                        documentation = """Include one of Roof-U-Value, Roof-Insulation-Thickness, Rafter-Insulation-Thickness, Flat-Roof-Insulation-Thickness, Sloping-Ceiling-Insulation-Thickness"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Roof_Insulation_Thickness(_Base, etree.ElementBase):
                        ""
                        element_name = "Roof-Insulation-Thickness"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "RoofInsulationThicknessCode"
                        class_name = "Roof_Insulation_Thickness"
                        documentation = """See Roof-U-Value"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'NI': 'unknown', '0': 'None', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm+': '400mm or more', 'ND': 'Not Defined'}
                        map_values = {'unknown': 'NI', 'None': '0', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm or more': '400mm+', 'Not Defined': 'ND'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Rafter_Insulation_Thickness(_Base, etree.ElementBase):
                        ""
                        element_name = "Rafter-Insulation-Thickness"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "RafterInsulationThicknessCode"
                        class_name = "Rafter_Insulation_Thickness"
                        documentation = """See Roof-U-Value"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'NI': 'insulation thickness unknown', 'AB': 'as built', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400+mm': '400+mm'}
                        map_values = {'insulation thickness unknown': 'NI', 'as built': 'AB', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400+mm': '400+mm'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Flat_Roof_Insulation_Thickness(_Base, etree.ElementBase):
                        ""
                        element_name = "Flat-Roof-Insulation-Thickness"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "FlatRoofInsulationThicknessCode"
                        class_name = "Flat_Roof_Insulation_Thickness"
                        documentation = """See Roof-U-Value"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'NI': 'insulation thickness unknown', 'AB': 'as built', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400+mm': '400+mm'}
                        map_values = {'insulation thickness unknown': 'NI', 'as built': 'AB', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400+mm': '400+mm'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Sloping_Ceiling_Insulation_Thickness(_Base, etree.ElementBase):
                        ""
                        element_name = "Sloping-Ceiling-Insulation-Thickness"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SlopedCeilingInsulationThicknessCode"
                        class_name = "Sloping_Ceiling_Insulation_Thickness"
                        documentation = """See Roof-U-Value"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'NI': 'insulation thickness unknown', 'AB': 'as built', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400+mm': '400+mm'}
                        map_values = {'insulation thickness unknown': 'NI', 'as built': 'AB', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400+mm': '400+mm'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Wall_Construction(_Base, etree.ElementBase):
                        ""
                        element_name = "Wall-Construction"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "WallConstructionCode"
                        class_name = "Wall_Construction"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'stone (granite or whinstone)', '2': 'stone (sandstone or limestone)', '3': 'solid brick', '4': 'cavity', '5': 'timber frame', '6': 'basement wall', '7': 'curtain wall', '8': 'system built', '9': 'cob wall', '10': 'park home wall'}
                        map_values = {'stone (granite or whinstone)': '1', 'stone (sandstone or limestone)': '2', 'solid brick': '3', 'cavity': '4', 'timber frame': '5', 'basement wall': '6', 'curtain wall': '7', 'system built': '8', 'cob wall': '9', 'park home wall': '10'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Wall_Insulation_Type(_Base, etree.ElementBase):
                        ""
                        element_name = "Wall-Insulation-Type"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "WallInsulationCode"
                        class_name = "Wall_Insulation_Type"
                        documentation = """Describes the type of insulation present in the wall if any."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'external', '2': 'filled cavity', '3': 'internal', '4': 'as built', '5': 'unknown', '6': 'filled cavity + external', '7': 'filled cavity + internal'}
                        map_values = {'external': '1', 'filled cavity': '2', 'internal': '3', 'as built': '4', 'unknown': '5', 'filled cavity + external': '6', 'filled cavity + internal': '7'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Wall_Thickness_Measured(_Base, etree.ElementBase):
                        ""
                        element_name = "Wall-Thickness-Measured"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Flag"
                        class_name = "Wall_Thickness_Measured"
                        documentation = """Whether wall thickness was measured"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'Y': 'Yes', 'N': 'No'}
                        map_values = {'Yes': 'Y', 'No': 'N'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Wall_Thickness(_Base, etree.ElementBase):
                        ""
                        element_name = "Wall-Thickness"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:integer"
                        class_name = "Wall_Thickness"
                        documentation = """Wall thickness in mm. Omitted if Wall-Thickness-Measured is false"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = int
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Wall_Dry_Lined(_Base, etree.ElementBase):
                        ""
                        element_name = "Wall-Dry-Lined"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Flag"
                        class_name = "Wall_Dry_Lined"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'Y': 'Yes', 'N': 'No'}
                        map_values = {'Yes': 'Y', 'No': 'N'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Wall_U_Value(_Base, etree.ElementBase):
                        ""
                        element_name = "Wall-U-Value"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:decimal"
                        class_name = "Wall_U_Value"
                        documentation = """Only one of Wall-Insulation-Thickness and Wall-U-Value is included"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Wall_Insulation_Thickness(_Base, etree.ElementBase):
                        ""
                        element_name = "Wall-Insulation-Thickness"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "WallInsulationThicknessCode"
                        class_name = "Wall_Insulation_Thickness"
                        documentation = """Only one of Wall-Insulation-Thickness and Wall-U-Value is included"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'NI': 'unknown', '10mm': '10 mm', '25mm': '25 mm', '50mm': '50 mm', '75mm': '75 mm', '100mm': '100 mm', '125mm': '125 mm', '150mm': '150 mm', '175mm': '175 mm', '200mm': '200mm', 'measured': 'if wall insulation thickness is provided with precise measurement'}
                        map_values = {'unknown': 'NI', '10 mm': '10mm', '25 mm': '25mm', '50 mm': '50mm', '75 mm': '75mm', '100 mm': '100mm', '125 mm': '125mm', '150 mm': '150mm', '175 mm': '175mm', '200mm': '200mm', 'if wall insulation thickness is provided with precise measurement': 'measured'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Wall_Insulation_Thickness_Measured(_Base, etree.ElementBase):
                        ""
                        element_name = "Wall-Insulation-Thickness-Measured"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:decimal"
                        class_name = "Wall_Insulation_Thickness_Measured"
                        documentation = """Only one of Wall-Insulation-Thickness is measured and Wall-U-Value is included"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Wall_Insulation_Thermal_Conductivity(_Base, etree.ElementBase):
                        ""
                        element_name = "Wall-Insulation-Thermal-Conductivity"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-InsulationThermalConductivityCode"
                        class_name = "Wall_Insulation_Thermal_Conductivity"
                        documentation = """Only if documentary evidence is available"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': '0.04', '2': '0.03', '3': '0.025'}
                        map_values = {'0.04': '1', '0.03': '2', '0.025': '3'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class SAP_Room_In_Roof(_Base, etree.ElementBase):
                        ""
                        element_name = "SAP-Room-In-Roof"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-Room-In-Roof"
                        class_name = "SAP_Room_In_Roof"
                        documentation = None
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = ["Floor_Area", "Construction_Age_Band", "Room_In_Roof_Details", "Room_In_Roof_Type_1", "Room_In_Roof_Type_2"]
                        subclass_method_names = ["floor_area", "construction_age_band", "room_in_roof_details", "room_in_roof_type_1", "room_in_roof_type_2"]
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def floor_area(self): return self.find(f"{{{self.__class__.namespace}}}Floor-Area")
                    
                        def add_floor_area(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Floor-Area")
                    
                        @property
                        def construction_age_band(self): return self.find(f"{{{self.__class__.namespace}}}Construction-Age-Band")
                    
                        def add_construction_age_band(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Construction-Age-Band")
                    
                        @property
                        def room_in_roof_details(self): return self.find(f"{{{self.__class__.namespace}}}Room-In-Roof-Details")
                    
                        def add_room_in_roof_details(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Room-In-Roof-Details")
                    
                        @property
                        def room_in_roof_type_1(self): return self.find(f"{{{self.__class__.namespace}}}Room-In-Roof-Type-1")
                    
                        def add_room_in_roof_type_1(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Room-In-Roof-Type-1")
                    
                        @property
                        def room_in_roof_type_2(self): return self.find(f"{{{self.__class__.namespace}}}Room-In-Roof-Type-2")
                    
                        def add_room_in_roof_type_2(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Room-In-Roof-Type-2")
                    
                        class Floor_Area(_Base, etree.ElementBase):
                            ""
                            element_name = "Floor-Area"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "Floor_Area"
                            documentation = None
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Room_In_Roof"
                            parent_method_name ="sap_room_in_roof"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_room_in_roof(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Construction_Age_Band(_Base, etree.ElementBase):
                            ""
                            element_name = "Construction-Age-Band"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "ConstructionDateCode"
                            class_name = "Construction_Age_Band"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'A': 'England and Wales: before 1900; Scotland: before 1919; Northern Ireland: before 1919', 'B': 'England and Wales: 1900-1929; Scotland: 1919-1929; Northern Ireland: 1919-1929', 'C': 'England and Wales: 1930-1949; Scotland: 1930-1949; Northern Ireland: 1930-1949', 'D': 'England and Wales: 1950-1966; Scotland: 1950-1964; Northern Ireland: 1950-1973', 'E': 'England and Wales: 1967-1975; Scotland: 1965-1975; Northern Ireland: 1974-1977', 'F': 'England and Wales: 1976-1982; Scotland: 1976-1983; Northern Ireland: 1978-1985', 'G': 'England and Wales: 1983-1990; Scotland: 1984-1991; Northern Ireland: 1986-1991', 'H': 'England and Wales: 1991-1995; Scotland: 1992-1998; Northern Ireland: 1992-1999', 'I': 'England and Wales: 1996-2002; Scotland: 1999-2002; Northern Ireland: 2000-2006', 'J': 'England and Wales: 2003-2006; Scotland: 2003-2007; Northern Ireland: not applicable', 'K': 'England and Wales: 2007-2011; Scotland: 2008-2011; Northern Ireland: 2007-2013', 'L': 'England and Wales: 2012-2021; Scotland: 2012-2022; Northern Ireland: 2014 onwards', 'M': 'England and Wales: 2022 onwards; Scotland: 2023 onwards (TBA); Northern Ireland: 2014 onwards (TBA)', '0': 'Not applicable', 'NR': 'Not recorded'}
                            map_values = {'England and Wales: before 1900; Scotland: before 1919; Northern Ireland: before 1919': 'A', 'England and Wales: 1900-1929; Scotland: 1919-1929; Northern Ireland: 1919-1929': 'B', 'England and Wales: 1930-1949; Scotland: 1930-1949; Northern Ireland: 1930-1949': 'C', 'England and Wales: 1950-1966; Scotland: 1950-1964; Northern Ireland: 1950-1973': 'D', 'England and Wales: 1967-1975; Scotland: 1965-1975; Northern Ireland: 1974-1977': 'E', 'England and Wales: 1976-1982; Scotland: 1976-1983; Northern Ireland: 1978-1985': 'F', 'England and Wales: 1983-1990; Scotland: 1984-1991; Northern Ireland: 1986-1991': 'G', 'England and Wales: 1991-1995; Scotland: 1992-1998; Northern Ireland: 1992-1999': 'H', 'England and Wales: 1996-2002; Scotland: 1999-2002; Northern Ireland: 2000-2006': 'I', 'England and Wales: 2003-2006; Scotland: 2003-2007; Northern Ireland: not applicable': 'J', 'England and Wales: 2007-2011; Scotland: 2008-2011; Northern Ireland: 2007-2013': 'K', 'England and Wales: 2012-2021; Scotland: 2012-2022; Northern Ireland: 2014 onwards': 'L', 'England and Wales: 2022 onwards; Scotland: 2023 onwards (TBA); Northern Ireland: 2014 onwards (TBA)': 'M', 'Not applicable': '0', 'Not recorded': 'NR'}
                            parent_class_name = "SAP_Room_In_Roof"
                            parent_method_name ="sap_room_in_roof"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_room_in_roof(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Room_In_Roof_Details(_Base, etree.ElementBase):
                            ""
                            element_name = "Room-In-Roof-Details"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Room-In-Roof-Details"
                            class_name = "Room_In_Roof_Details"
                            documentation = """Omit when Room-In-Roof details not included"""
                            type_documentation = None
                            has_text_node = False
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = None
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Room_In_Roof"
                            parent_method_name ="sap_room_in_roof"
                            subclass_class_names = ["Flat_Ceiling_Length_1", "Flat_Ceiling_Height_1", "Flat_Ceiling_U_Value_1", "Flat_Ceiling_Insulation_Thickness_1", "Flat_Ceiling_Insulation_Type_1", "Flat_Ceiling_Insulation_Location_1", "Flat_Ceiling_Length_2", "Flat_Ceiling_Height_2", "Flat_Ceiling_U_Value_2", "Flat_Ceiling_Insulation_Thickness_2", "Flat_Ceiling_Insulation_Type_2", "Flat_Ceiling_Insulation_Location_2", "Stud_Wall_Length_1", "Stud_Wall_Height_1", "Stud_Wall_U_Value_1", "Stud_Wall_Insulation_Thickness_1", "Stud_Wall_Insulation_Type_1", "Stud_Wall_Length_2", "Stud_Wall_Height_2", "Stud_Wall_U_Value_2", "Stud_Wall_Insulation_Thickness_2", "Stud_Wall_Insulation_Type_2", "Slope_Length_1", "Slope_Height_1", "Slope_U_Value_1", "Slope_Insulation_Thickness_1", "Slope_Insulation_Type_1", "Slope_Length_2", "Slope_Height_2", "Slope_U_Value_2", "Slope_Insulation_Thickness_2", "Slope_Insulation_Type_2", "Gable_Wall_Length_1", "Gable_Wall_Height_1", "Gable_Wall_U_Value_1", "Gable_Wall_Type_1", "Gable_Wall_Length_2", "Gable_Wall_Height_2", "Gable_Wall_U_Value_2", "Gable_Wall_Type_2", "Common_Wall_Length_1", "Common_Wall_Height_1", "Common_Wall_U_Value_1", "Common_Wall_Length_2", "Common_Wall_Height_2", "Common_Wall_U_Value_2"]
                            subclass_method_names = ["flat_ceiling_length_1", "flat_ceiling_height_1", "flat_ceiling_u_value_1", "flat_ceiling_insulation_thickness_1", "flat_ceiling_insulation_type_1", "flat_ceiling_insulation_location_1", "flat_ceiling_length_2", "flat_ceiling_height_2", "flat_ceiling_u_value_2", "flat_ceiling_insulation_thickness_2", "flat_ceiling_insulation_type_2", "flat_ceiling_insulation_location_2", "stud_wall_length_1", "stud_wall_height_1", "stud_wall_u_value_1", "stud_wall_insulation_thickness_1", "stud_wall_insulation_type_1", "stud_wall_length_2", "stud_wall_height_2", "stud_wall_u_value_2", "stud_wall_insulation_thickness_2", "stud_wall_insulation_type_2", "slope_length_1", "slope_height_1", "slope_u_value_1", "slope_insulation_thickness_1", "slope_insulation_type_1", "slope_length_2", "slope_height_2", "slope_u_value_2", "slope_insulation_thickness_2", "slope_insulation_type_2", "gable_wall_length_1", "gable_wall_height_1", "gable_wall_u_value_1", "gable_wall_type_1", "gable_wall_length_2", "gable_wall_height_2", "gable_wall_u_value_2", "gable_wall_type_2", "common_wall_length_1", "common_wall_height_1", "common_wall_u_value_1", "common_wall_length_2", "common_wall_height_2", "common_wall_u_value_2"]
                        
                            @property
                            def sap_room_in_roof(self): return self.getparent()
                        
                            @property
                            def flat_ceiling_length_1(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-Length-1")
                        
                            def add_flat_ceiling_length_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-Length-1")
                        
                            @property
                            def flat_ceiling_height_1(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-Height-1")
                        
                            def add_flat_ceiling_height_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-Height-1")
                        
                            @property
                            def flat_ceiling_u_value_1(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-U-Value-1")
                        
                            def add_flat_ceiling_u_value_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-U-Value-1")
                        
                            @property
                            def flat_ceiling_insulation_thickness_1(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Thickness-1")
                        
                            def add_flat_ceiling_insulation_thickness_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Thickness-1")
                        
                            @property
                            def flat_ceiling_insulation_type_1(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Type-1")
                        
                            def add_flat_ceiling_insulation_type_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Type-1")
                        
                            @property
                            def flat_ceiling_insulation_location_1(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Location-1")
                        
                            def add_flat_ceiling_insulation_location_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Location-1")
                        
                            @property
                            def flat_ceiling_length_2(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-Length-2")
                        
                            def add_flat_ceiling_length_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-Length-2")
                        
                            @property
                            def flat_ceiling_height_2(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-Height-2")
                        
                            def add_flat_ceiling_height_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-Height-2")
                        
                            @property
                            def flat_ceiling_u_value_2(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-U-Value-2")
                        
                            def add_flat_ceiling_u_value_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-U-Value-2")
                        
                            @property
                            def flat_ceiling_insulation_thickness_2(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Thickness-2")
                        
                            def add_flat_ceiling_insulation_thickness_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Thickness-2")
                        
                            @property
                            def flat_ceiling_insulation_type_2(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Type-2")
                        
                            def add_flat_ceiling_insulation_type_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Type-2")
                        
                            @property
                            def flat_ceiling_insulation_location_2(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Location-2")
                        
                            def add_flat_ceiling_insulation_location_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Ceiling-Insulation-Location-2")
                        
                            @property
                            def stud_wall_length_1(self): return self.find(f"{{{self.__class__.namespace}}}Stud-Wall-Length-1")
                        
                            def add_stud_wall_length_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stud-Wall-Length-1")
                        
                            @property
                            def stud_wall_height_1(self): return self.find(f"{{{self.__class__.namespace}}}Stud-Wall-Height-1")
                        
                            def add_stud_wall_height_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stud-Wall-Height-1")
                        
                            @property
                            def stud_wall_u_value_1(self): return self.find(f"{{{self.__class__.namespace}}}Stud-Wall-U-Value-1")
                        
                            def add_stud_wall_u_value_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stud-Wall-U-Value-1")
                        
                            @property
                            def stud_wall_insulation_thickness_1(self): return self.find(f"{{{self.__class__.namespace}}}Stud-Wall-Insulation-Thickness-1")
                        
                            def add_stud_wall_insulation_thickness_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stud-Wall-Insulation-Thickness-1")
                        
                            @property
                            def stud_wall_insulation_type_1(self): return self.find(f"{{{self.__class__.namespace}}}Stud-Wall-Insulation-Type-1")
                        
                            def add_stud_wall_insulation_type_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stud-Wall-Insulation-Type-1")
                        
                            @property
                            def stud_wall_length_2(self): return self.find(f"{{{self.__class__.namespace}}}Stud-Wall-Length-2")
                        
                            def add_stud_wall_length_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stud-Wall-Length-2")
                        
                            @property
                            def stud_wall_height_2(self): return self.find(f"{{{self.__class__.namespace}}}Stud-Wall-Height-2")
                        
                            def add_stud_wall_height_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stud-Wall-Height-2")
                        
                            @property
                            def stud_wall_u_value_2(self): return self.find(f"{{{self.__class__.namespace}}}Stud-Wall-U-Value-2")
                        
                            def add_stud_wall_u_value_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stud-Wall-U-Value-2")
                        
                            @property
                            def stud_wall_insulation_thickness_2(self): return self.find(f"{{{self.__class__.namespace}}}Stud-Wall-Insulation-Thickness-2")
                        
                            def add_stud_wall_insulation_thickness_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stud-Wall-Insulation-Thickness-2")
                        
                            @property
                            def stud_wall_insulation_type_2(self): return self.find(f"{{{self.__class__.namespace}}}Stud-Wall-Insulation-Type-2")
                        
                            def add_stud_wall_insulation_type_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Stud-Wall-Insulation-Type-2")
                        
                            @property
                            def slope_length_1(self): return self.find(f"{{{self.__class__.namespace}}}Slope-Length-1")
                        
                            def add_slope_length_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Slope-Length-1")
                        
                            @property
                            def slope_height_1(self): return self.find(f"{{{self.__class__.namespace}}}Slope-Height-1")
                        
                            def add_slope_height_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Slope-Height-1")
                        
                            @property
                            def slope_u_value_1(self): return self.find(f"{{{self.__class__.namespace}}}Slope-U-Value-1")
                        
                            def add_slope_u_value_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Slope-U-Value-1")
                        
                            @property
                            def slope_insulation_thickness_1(self): return self.find(f"{{{self.__class__.namespace}}}Slope-Insulation-Thickness-1")
                        
                            def add_slope_insulation_thickness_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Slope-Insulation-Thickness-1")
                        
                            @property
                            def slope_insulation_type_1(self): return self.find(f"{{{self.__class__.namespace}}}Slope-Insulation-Type-1")
                        
                            def add_slope_insulation_type_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Slope-Insulation-Type-1")
                        
                            @property
                            def slope_length_2(self): return self.find(f"{{{self.__class__.namespace}}}Slope-Length-2")
                        
                            def add_slope_length_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Slope-Length-2")
                        
                            @property
                            def slope_height_2(self): return self.find(f"{{{self.__class__.namespace}}}Slope-Height-2")
                        
                            def add_slope_height_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Slope-Height-2")
                        
                            @property
                            def slope_u_value_2(self): return self.find(f"{{{self.__class__.namespace}}}Slope-U-Value-2")
                        
                            def add_slope_u_value_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Slope-U-Value-2")
                        
                            @property
                            def slope_insulation_thickness_2(self): return self.find(f"{{{self.__class__.namespace}}}Slope-Insulation-Thickness-2")
                        
                            def add_slope_insulation_thickness_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Slope-Insulation-Thickness-2")
                        
                            @property
                            def slope_insulation_type_2(self): return self.find(f"{{{self.__class__.namespace}}}Slope-Insulation-Type-2")
                        
                            def add_slope_insulation_type_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Slope-Insulation-Type-2")
                        
                            @property
                            def gable_wall_length_1(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Length-1")
                        
                            def add_gable_wall_length_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Length-1")
                        
                            @property
                            def gable_wall_height_1(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Height-1")
                        
                            def add_gable_wall_height_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Height-1")
                        
                            @property
                            def gable_wall_u_value_1(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-U-Value-1")
                        
                            def add_gable_wall_u_value_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-U-Value-1")
                        
                            @property
                            def gable_wall_type_1(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Type-1")
                        
                            def add_gable_wall_type_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Type-1")
                        
                            @property
                            def gable_wall_length_2(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Length-2")
                        
                            def add_gable_wall_length_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Length-2")
                        
                            @property
                            def gable_wall_height_2(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Height-2")
                        
                            def add_gable_wall_height_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Height-2")
                        
                            @property
                            def gable_wall_u_value_2(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-U-Value-2")
                        
                            def add_gable_wall_u_value_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-U-Value-2")
                        
                            @property
                            def gable_wall_type_2(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Type-2")
                        
                            def add_gable_wall_type_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Type-2")
                        
                            @property
                            def common_wall_length_1(self): return self.find(f"{{{self.__class__.namespace}}}Common-Wall-Length-1")
                        
                            def add_common_wall_length_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Common-Wall-Length-1")
                        
                            @property
                            def common_wall_height_1(self): return self.find(f"{{{self.__class__.namespace}}}Common-Wall-Height-1")
                        
                            def add_common_wall_height_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Common-Wall-Height-1")
                        
                            @property
                            def common_wall_u_value_1(self): return self.find(f"{{{self.__class__.namespace}}}Common-Wall-U-Value-1")
                        
                            def add_common_wall_u_value_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Common-Wall-U-Value-1")
                        
                            @property
                            def common_wall_length_2(self): return self.find(f"{{{self.__class__.namespace}}}Common-Wall-Length-2")
                        
                            def add_common_wall_length_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Common-Wall-Length-2")
                        
                            @property
                            def common_wall_height_2(self): return self.find(f"{{{self.__class__.namespace}}}Common-Wall-Height-2")
                        
                            def add_common_wall_height_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Common-Wall-Height-2")
                        
                            @property
                            def common_wall_u_value_2(self): return self.find(f"{{{self.__class__.namespace}}}Common-Wall-U-Value-2")
                        
                            def add_common_wall_u_value_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Common-Wall-U-Value-2")
                        
                            class Flat_Ceiling_Length_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-Length-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Flat_Ceiling_Length_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Flat_Ceiling_Height_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-Height-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Flat_Ceiling_Height_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Flat_Ceiling_U_Value_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-U-Value-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "xs:decimal"
                                class_name = "Flat_Ceiling_U_Value_1"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Flat_Ceiling_Insulation_Thickness_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-Insulation-Thickness-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RoofInsulationThicknessCode"
                                class_name = "Flat_Ceiling_Insulation_Thickness_1"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'NI': 'unknown', '0': 'None', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm+': '400mm or more', 'ND': 'Not Defined'}
                                map_values = {'unknown': 'NI', 'None': '0', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm or more': '400mm+', 'Not Defined': 'ND'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Flat_Ceiling_Insulation_Type_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-Insulation-Type-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RinRInsulationTypeCode"
                                class_name = "Flat_Ceiling_Insulation_Type_1"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'mineral wool or EPS slab', '1': 'PUR or PIR'}
                                map_values = {'mineral wool or EPS slab': '0', 'PUR or PIR': '1'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Flat_Ceiling_Insulation_Location_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-Insulation-Location-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RoofInsulationLocationCode"
                                class_name = "Flat_Ceiling_Insulation_Location_1"
                                documentation = """Mutually exclusive with U-value and insulation type. Either U-value provided, or insulation type or location. To enable using table 16."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'1': 'Rafters', '2': 'Joists', '3': 'No access.. This is retained for backwards compatibility only and should not be used. No access is covered by enum 5 of RoofTypeCode', '4': 'Unknown', '5': 'None; applicable only when Roof-Construction is 4, 5 or 6', '6': 'Flat roof insulation', '7': 'Sloping ceiling insulation', 'ND': 'Not Defined'}
                                map_values = {'Rafters': '1', 'Joists': '2', 'No access.. This is retained for backwards compatibility only and should not be used. No access is covered by enum 5 of RoofTypeCode': '3', 'Unknown': '4', 'None; applicable only when Roof-Construction is 4, 5 or 6': '5', 'Flat roof insulation': '6', 'Sloping ceiling insulation': '7', 'Not Defined': 'ND'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Flat_Ceiling_Length_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-Length-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Flat_Ceiling_Length_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Flat_Ceiling_Height_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-Height-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Flat_Ceiling_Height_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Flat_Ceiling_U_Value_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-U-Value-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "xs:decimal"
                                class_name = "Flat_Ceiling_U_Value_2"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Flat_Ceiling_Insulation_Thickness_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-Insulation-Thickness-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RoofInsulationThicknessCode"
                                class_name = "Flat_Ceiling_Insulation_Thickness_2"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'NI': 'unknown', '0': 'None', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm+': '400mm or more', 'ND': 'Not Defined'}
                                map_values = {'unknown': 'NI', 'None': '0', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm or more': '400mm+', 'Not Defined': 'ND'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Flat_Ceiling_Insulation_Type_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-Insulation-Type-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RinRInsulationTypeCode"
                                class_name = "Flat_Ceiling_Insulation_Type_2"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'mineral wool or EPS slab', '1': 'PUR or PIR'}
                                map_values = {'mineral wool or EPS slab': '0', 'PUR or PIR': '1'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Flat_Ceiling_Insulation_Location_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Flat-Ceiling-Insulation-Location-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RoofInsulationLocationCode"
                                class_name = "Flat_Ceiling_Insulation_Location_2"
                                documentation = """Mutually exclusive with U-value and insulation type. Either U-value provided, or insulation type or location. To enable using table 16."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'1': 'Rafters', '2': 'Joists', '3': 'No access.. This is retained for backwards compatibility only and should not be used. No access is covered by enum 5 of RoofTypeCode', '4': 'Unknown', '5': 'None; applicable only when Roof-Construction is 4, 5 or 6', '6': 'Flat roof insulation', '7': 'Sloping ceiling insulation', 'ND': 'Not Defined'}
                                map_values = {'Rafters': '1', 'Joists': '2', 'No access.. This is retained for backwards compatibility only and should not be used. No access is covered by enum 5 of RoofTypeCode': '3', 'Unknown': '4', 'None; applicable only when Roof-Construction is 4, 5 or 6': '5', 'Flat roof insulation': '6', 'Sloping ceiling insulation': '7', 'Not Defined': 'ND'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Stud_Wall_Length_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Stud-Wall-Length-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Stud_Wall_Length_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Stud_Wall_Height_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Stud-Wall-Height-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Stud_Wall_Height_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Stud_Wall_U_Value_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Stud-Wall-U-Value-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "xs:decimal"
                                class_name = "Stud_Wall_U_Value_1"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Stud_Wall_Insulation_Thickness_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Stud-Wall-Insulation-Thickness-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RoofInsulationThicknessCode"
                                class_name = "Stud_Wall_Insulation_Thickness_1"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'NI': 'unknown', '0': 'None', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm+': '400mm or more', 'ND': 'Not Defined'}
                                map_values = {'unknown': 'NI', 'None': '0', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm or more': '400mm+', 'Not Defined': 'ND'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Stud_Wall_Insulation_Type_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Stud-Wall-Insulation-Type-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RinRInsulationTypeCode"
                                class_name = "Stud_Wall_Insulation_Type_1"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'mineral wool or EPS slab', '1': 'PUR or PIR'}
                                map_values = {'mineral wool or EPS slab': '0', 'PUR or PIR': '1'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Stud_Wall_Length_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Stud-Wall-Length-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Stud_Wall_Length_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Stud_Wall_Height_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Stud-Wall-Height-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Stud_Wall_Height_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Stud_Wall_U_Value_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Stud-Wall-U-Value-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "xs:decimal"
                                class_name = "Stud_Wall_U_Value_2"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Stud_Wall_Insulation_Thickness_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Stud-Wall-Insulation-Thickness-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RoofInsulationThicknessCode"
                                class_name = "Stud_Wall_Insulation_Thickness_2"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'NI': 'unknown', '0': 'None', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm+': '400mm or more', 'ND': 'Not Defined'}
                                map_values = {'unknown': 'NI', 'None': '0', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm or more': '400mm+', 'Not Defined': 'ND'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Stud_Wall_Insulation_Type_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Stud-Wall-Insulation-Type-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RinRInsulationTypeCode"
                                class_name = "Stud_Wall_Insulation_Type_2"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'mineral wool or EPS slab', '1': 'PUR or PIR'}
                                map_values = {'mineral wool or EPS slab': '0', 'PUR or PIR': '1'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Slope_Length_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Slope-Length-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Slope_Length_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Slope_Height_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Slope-Height-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Slope_Height_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Slope_U_Value_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Slope-U-Value-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "xs:decimal"
                                class_name = "Slope_U_Value_1"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Slope_Insulation_Thickness_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Slope-Insulation-Thickness-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RoofInsulationThicknessCode"
                                class_name = "Slope_Insulation_Thickness_1"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'NI': 'unknown', '0': 'None', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm+': '400mm or more', 'ND': 'Not Defined'}
                                map_values = {'unknown': 'NI', 'None': '0', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm or more': '400mm+', 'Not Defined': 'ND'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Slope_Insulation_Type_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Slope-Insulation-Type-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RinRInsulationTypeCode"
                                class_name = "Slope_Insulation_Type_1"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'mineral wool or EPS slab', '1': 'PUR or PIR'}
                                map_values = {'mineral wool or EPS slab': '0', 'PUR or PIR': '1'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Slope_Length_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Slope-Length-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Slope_Length_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Slope_Height_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Slope-Height-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Slope_Height_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Slope_U_Value_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Slope-U-Value-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "xs:decimal"
                                class_name = "Slope_U_Value_2"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Slope_Insulation_Thickness_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Slope-Insulation-Thickness-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RoofInsulationThicknessCode"
                                class_name = "Slope_Insulation_Thickness_2"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'NI': 'unknown', '0': 'None', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm+': '400mm or more', 'ND': 'Not Defined'}
                                map_values = {'unknown': 'NI', 'None': '0', '12mm': '12mm', '25mm': '25mm', '50mm': '50mm', '75mm': '75mm', '100mm': '100mm', '125mm': '125mm', '150mm': '150mm', '175mm': '175mm', '200mm': '200mm', '225mm': '225mm', '250mm': '250mm', '270mm': '270mm', '300mm': '300mm', '350mm': '350mm', '400mm or more': '400mm+', 'Not Defined': 'ND'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Slope_Insulation_Type_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Slope-Insulation-Type-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "RinRInsulationTypeCode"
                                class_name = "Slope_Insulation_Type_2"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or thickness."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'mineral wool or EPS slab', '1': 'PUR or PIR'}
                                map_values = {'mineral wool or EPS slab': '0', 'PUR or PIR': '1'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Gable_Wall_Length_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Length-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Gable_Wall_Length_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_Height_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Height-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Gable_Wall_Height_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_U_Value_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-U-Value-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "xs:decimal"
                                class_name = "Gable_Wall_U_Value_1"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_Type_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Type-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "GableType"
                                class_name = "Gable_Wall_Type_1"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or gable type to use table 4."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'exposed', '1': 'party', '2': 'Sheltered', '3': 'connected or adjacent to heated space'}
                                map_values = {'exposed': '0', 'party': '1', 'Sheltered': '2', 'connected or adjacent to heated space': '3'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Gable_Wall_Length_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Length-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Gable_Wall_Length_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_Height_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Height-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Gable_Wall_Height_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_U_Value_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-U-Value-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "xs:decimal"
                                class_name = "Gable_Wall_U_Value_2"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_Type_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Type-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "GableType"
                                class_name = "Gable_Wall_Type_2"
                                documentation = """Mutually exclusive with U-value. Either U-value provided, or gable type to use table 4."""
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'exposed', '1': 'party', '2': 'Sheltered', '3': 'connected or adjacent to heated space'}
                                map_values = {'exposed': '0', 'party': '1', 'Sheltered': '2', 'connected or adjacent to heated space': '3'}
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Common_Wall_Length_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Common-Wall-Length-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Common_Wall_Length_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Common_Wall_Height_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Common-Wall-Height-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Common_Wall_Height_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Common_Wall_U_Value_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Common-Wall-U-Value-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "xs:decimal"
                                class_name = "Common_Wall_U_Value_1"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Common_Wall_Length_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Common-Wall-Length-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Common_Wall_Length_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Common_Wall_Height_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Common-Wall-Height-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Common_Wall_Height_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Common_Wall_U_Value_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Common-Wall-U-Value-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "xs:decimal"
                                class_name = "Common_Wall_U_Value_2"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 0
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Details"
                                parent_method_name ="room_in_roof_details"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_details(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                        class Room_In_Roof_Type_1(_Base, etree.ElementBase):
                            ""
                            element_name = "Room-In-Roof-Type-1"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Room-In-Roof-Type-1"
                            class_name = "Room_In_Roof_Type_1"
                            documentation = """Required if detailed input not provided, and RR type 1"""
                            type_documentation = None
                            has_text_node = False
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = None
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Room_In_Roof"
                            parent_method_name ="sap_room_in_roof"
                            subclass_class_names = ["Gable_Wall_Length_1", "Gable_Wall_Type_1", "Gable_Wall_Length_2", "Gable_Wall_Type_2"]
                            subclass_method_names = ["gable_wall_length_1", "gable_wall_type_1", "gable_wall_length_2", "gable_wall_type_2"]
                        
                            @property
                            def sap_room_in_roof(self): return self.getparent()
                        
                            @property
                            def gable_wall_length_1(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Length-1")
                        
                            def add_gable_wall_length_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Length-1")
                        
                            @property
                            def gable_wall_type_1(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Type-1")
                        
                            def add_gable_wall_type_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Type-1")
                        
                            @property
                            def gable_wall_length_2(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Length-2")
                        
                            def add_gable_wall_length_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Length-2")
                        
                            @property
                            def gable_wall_type_2(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Type-2")
                        
                            def add_gable_wall_type_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Type-2")
                        
                            class Gable_Wall_Length_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Length-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Gable_Wall_Length_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Type_1"
                                parent_method_name ="room_in_roof_type_1"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_1(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_Type_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Type-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "GableType"
                                class_name = "Gable_Wall_Type_1"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'exposed', '1': 'party', '2': 'Sheltered', '3': 'connected or adjacent to heated space'}
                                map_values = {'exposed': '0', 'party': '1', 'Sheltered': '2', 'connected or adjacent to heated space': '3'}
                                parent_class_name = "Room_In_Roof_Type_1"
                                parent_method_name ="room_in_roof_type_1"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_1(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Gable_Wall_Length_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Length-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Gable_Wall_Length_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Type_1"
                                parent_method_name ="room_in_roof_type_1"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_1(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_Type_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Type-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "GableType"
                                class_name = "Gable_Wall_Type_2"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'exposed', '1': 'party', '2': 'Sheltered', '3': 'connected or adjacent to heated space'}
                                map_values = {'exposed': '0', 'party': '1', 'Sheltered': '2', 'connected or adjacent to heated space': '3'}
                                parent_class_name = "Room_In_Roof_Type_1"
                                parent_method_name ="room_in_roof_type_1"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_1(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                        class Room_In_Roof_Type_2(_Base, etree.ElementBase):
                            ""
                            element_name = "Room-In-Roof-Type-2"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Room-In-Roof-Type-2"
                            class_name = "Room_In_Roof_Type_2"
                            documentation = """Required if detailed input not provided, and RR type 2"""
                            type_documentation = None
                            has_text_node = False
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = None
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Room_In_Roof"
                            parent_method_name ="sap_room_in_roof"
                            subclass_class_names = ["Gable_Wall_Length_1", "Gable_Wall_Height_1", "Gable_Wall_Type_1", "Gable_Wall_Length_2", "Gable_Wall_Height_2", "Gable_Wall_Type_2", "Common_Wall_Length_1", "Common_Wall_Height_1", "Common_Wall_Length_2", "Common_Wall_Height_2"]
                            subclass_method_names = ["gable_wall_length_1", "gable_wall_height_1", "gable_wall_type_1", "gable_wall_length_2", "gable_wall_height_2", "gable_wall_type_2", "common_wall_length_1", "common_wall_height_1", "common_wall_length_2", "common_wall_height_2"]
                        
                            @property
                            def sap_room_in_roof(self): return self.getparent()
                        
                            @property
                            def gable_wall_length_1(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Length-1")
                        
                            def add_gable_wall_length_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Length-1")
                        
                            @property
                            def gable_wall_height_1(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Height-1")
                        
                            def add_gable_wall_height_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Height-1")
                        
                            @property
                            def gable_wall_type_1(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Type-1")
                        
                            def add_gable_wall_type_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Type-1")
                        
                            @property
                            def gable_wall_length_2(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Length-2")
                        
                            def add_gable_wall_length_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Length-2")
                        
                            @property
                            def gable_wall_height_2(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Height-2")
                        
                            def add_gable_wall_height_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Height-2")
                        
                            @property
                            def gable_wall_type_2(self): return self.find(f"{{{self.__class__.namespace}}}Gable-Wall-Type-2")
                        
                            def add_gable_wall_type_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Gable-Wall-Type-2")
                        
                            @property
                            def common_wall_length_1(self): return self.find(f"{{{self.__class__.namespace}}}Common-Wall-Length-1")
                        
                            def add_common_wall_length_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Common-Wall-Length-1")
                        
                            @property
                            def common_wall_height_1(self): return self.find(f"{{{self.__class__.namespace}}}Common-Wall-Height-1")
                        
                            def add_common_wall_height_1(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Common-Wall-Height-1")
                        
                            @property
                            def common_wall_length_2(self): return self.find(f"{{{self.__class__.namespace}}}Common-Wall-Length-2")
                        
                            def add_common_wall_length_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Common-Wall-Length-2")
                        
                            @property
                            def common_wall_height_2(self): return self.find(f"{{{self.__class__.namespace}}}Common-Wall-Height-2")
                        
                            def add_common_wall_height_2(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Common-Wall-Height-2")
                        
                            class Gable_Wall_Length_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Length-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Gable_Wall_Length_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Type_2"
                                parent_method_name ="room_in_roof_type_2"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_2(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_Height_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Height-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Gable_Wall_Height_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Type_2"
                                parent_method_name ="room_in_roof_type_2"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_2(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_Type_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Type-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "GableType"
                                class_name = "Gable_Wall_Type_1"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'exposed', '1': 'party', '2': 'Sheltered', '3': 'connected or adjacent to heated space'}
                                map_values = {'exposed': '0', 'party': '1', 'Sheltered': '2', 'connected or adjacent to heated space': '3'}
                                parent_class_name = "Room_In_Roof_Type_2"
                                parent_method_name ="room_in_roof_type_2"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_2(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Gable_Wall_Length_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Length-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Gable_Wall_Length_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Type_2"
                                parent_method_name ="room_in_roof_type_2"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_2(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_Height_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Height-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Gable_Wall_Height_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Type_2"
                                parent_method_name ="room_in_roof_type_2"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_2(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Gable_Wall_Type_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Gable-Wall-Type-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "GableType"
                                class_name = "Gable_Wall_Type_2"
                                documentation = None
                                type_documentation = None
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = str
                                map_codes = {'0': 'exposed', '1': 'party', '2': 'Sheltered', '3': 'connected or adjacent to heated space'}
                                map_values = {'exposed': '0', 'party': '1', 'Sheltered': '2', 'connected or adjacent to heated space': '3'}
                                parent_class_name = "Room_In_Roof_Type_2"
                                parent_method_name ="room_in_roof_type_2"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_2(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.map_codes[self.text]
                            
                                @value.setter
                                def value(self, value):
                                    if value in self.__class__.map_values:
                                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                    else:
                                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code):
                                    if code in self.__class__.map_codes:
                                        self.text = str(code)
                                    else:
                                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                            
                            class Common_Wall_Length_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Common-Wall-Length-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Common_Wall_Length_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Type_2"
                                parent_method_name ="room_in_roof_type_2"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_2(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Common_Wall_Height_1(_Base, etree.ElementBase):
                                ""
                                element_name = "Common-Wall-Height-1"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Common_Wall_Height_1"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Type_2"
                                parent_method_name ="room_in_roof_type_2"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_2(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Common_Wall_Length_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Common-Wall-Length-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Common_Wall_Length_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Type_2"
                                parent_method_name ="room_in_roof_type_2"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_2(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                            class Common_Wall_Height_2(_Base, etree.ElementBase):
                                ""
                                element_name = "Common-Wall-Height-2"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Measurement"
                                class_name = "Common_Wall_Height_2"
                                documentation = None
                                type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                                has_text_node = True
                                min_occurs = 1
                                max_occurs = 1
                                python_type_convertor = float
                                map_codes = None
                                map_values = None
                                parent_class_name = "Room_In_Roof_Type_2"
                                parent_method_name ="room_in_roof_type_2"
                                subclass_class_names = []
                                subclass_method_names = []
                            
                                @property
                                def room_in_roof_type_2(self): return self.getparent()
                            
                                @property
                                def value(self): return self.__class__.python_type_convertor(self.text)
                            
                                @value.setter
                                def value(self, value): self.text = str(value)
                            
                                @property
                                def code(self): return self.text
                            
                                @code.setter
                                def code(self, code): self.text = str(code)
                            
                    class SAP_Alternative_Wall_1(_Base, etree.ElementBase):
                        ""
                        element_name = "SAP-Alternative-Wall-1"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-Alternative-Wall"
                        class_name = "SAP_Alternative_Wall_1"
                        documentation = """Included only for building parts that have an alternative wall"""
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = ["Wall_Construction", "Wall_Insulation_Type", "Wall_Area", "Wall_Thickness_Measured", "Wall_Thickness", "Wall_U_Value", "Wall_Insulation_Thickness", "Wall_Insulation_Thickness_Measured", "Wall_Insulation_Thermal_Conductivity", "Wall_Dry_Lined", "Sheltered_Wall"]
                        subclass_method_names = ["wall_construction", "wall_insulation_type", "wall_area", "wall_thickness_measured", "wall_thickness", "wall_u_value", "wall_insulation_thickness", "wall_insulation_thickness_measured", "wall_insulation_thermal_conductivity", "wall_dry_lined", "sheltered_wall"]
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def wall_construction(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Construction")
                    
                        def add_wall_construction(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Construction")
                    
                        @property
                        def wall_insulation_type(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Type")
                    
                        def add_wall_insulation_type(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Type")
                    
                        @property
                        def wall_area(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Area")
                    
                        def add_wall_area(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Area")
                    
                        @property
                        def wall_thickness_measured(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Thickness-Measured")
                    
                        def add_wall_thickness_measured(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Thickness-Measured")
                    
                        @property
                        def wall_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Thickness")
                    
                        def add_wall_thickness(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Thickness")
                    
                        @property
                        def wall_u_value(self): return self.find(f"{{{self.__class__.namespace}}}Wall-U-Value")
                    
                        def add_wall_u_value(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-U-Value")
                    
                        @property
                        def wall_insulation_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness")
                    
                        def add_wall_insulation_thickness(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness")
                    
                        @property
                        def wall_insulation_thickness_measured(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness-Measured")
                    
                        def add_wall_insulation_thickness_measured(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness-Measured")
                    
                        @property
                        def wall_insulation_thermal_conductivity(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Thermal-Conductivity")
                    
                        def add_wall_insulation_thermal_conductivity(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Thermal-Conductivity")
                    
                        @property
                        def wall_dry_lined(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Dry-Lined")
                    
                        def add_wall_dry_lined(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Dry-Lined")
                    
                        @property
                        def sheltered_wall(self): return self.find(f"{{{self.__class__.namespace}}}Sheltered-Wall")
                    
                        def add_sheltered_wall(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Sheltered-Wall")
                    
                        class Wall_Construction(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Construction"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "WallConstructionCode"
                            class_name = "Wall_Construction"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'stone (granite or whinstone)', '2': 'stone (sandstone or limestone)', '3': 'solid brick', '4': 'cavity', '5': 'timber frame', '6': 'basement wall', '7': 'curtain wall', '8': 'system built', '9': 'cob wall', '10': 'park home wall'}
                            map_values = {'stone (granite or whinstone)': '1', 'stone (sandstone or limestone)': '2', 'solid brick': '3', 'cavity': '4', 'timber frame': '5', 'basement wall': '6', 'curtain wall': '7', 'system built': '8', 'cob wall': '9', 'park home wall': '10'}
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Wall_Insulation_Type(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Insulation-Type"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "WallInsulationCode"
                            class_name = "Wall_Insulation_Type"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'external', '2': 'filled cavity', '3': 'internal', '4': 'as built', '5': 'unknown', '6': 'filled cavity + external', '7': 'filled cavity + internal'}
                            map_values = {'external': '1', 'filled cavity': '2', 'internal': '3', 'as built': '4', 'unknown': '5', 'filled cavity + external': '6', 'filled cavity + internal': '7'}
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Wall_Area(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Area"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "Wall_Area"
                            documentation = None
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Wall_Thickness_Measured(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Thickness-Measured"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Flag"
                            class_name = "Wall_Thickness_Measured"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'Y': 'Yes', 'N': 'No'}
                            map_values = {'Yes': 'Y', 'No': 'N'}
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Wall_Thickness(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Thickness"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:integer"
                            class_name = "Wall_Thickness"
                            documentation = """Wall thickness in mm"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = int
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Wall_U_Value(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-U-Value"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "Wall_U_Value"
                            documentation = """Only one of Wall-Insulation-Thickness and Wall-U-Value is included"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Wall_Insulation_Thickness(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Insulation-Thickness"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "WallInsulationThicknessCode"
                            class_name = "Wall_Insulation_Thickness"
                            documentation = """Only one of Wall-Insulation-Thickness and Wall-U-Value is included"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'NI': 'unknown', '10mm': '10 mm', '25mm': '25 mm', '50mm': '50 mm', '75mm': '75 mm', '100mm': '100 mm', '125mm': '125 mm', '150mm': '150 mm', '175mm': '175 mm', '200mm': '200mm', 'measured': 'if wall insulation thickness is provided with precise measurement'}
                            map_values = {'unknown': 'NI', '10 mm': '10mm', '25 mm': '25mm', '50 mm': '50mm', '75 mm': '75mm', '100 mm': '100mm', '125 mm': '125mm', '150 mm': '150mm', '175 mm': '175mm', '200mm': '200mm', 'if wall insulation thickness is provided with precise measurement': 'measured'}
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Wall_Insulation_Thickness_Measured(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Insulation-Thickness-Measured"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "Wall_Insulation_Thickness_Measured"
                            documentation = """Only one of Wall-Insulation-Thickness is measured and Wall-U-Value is included"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Wall_Insulation_Thermal_Conductivity(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Insulation-Thermal-Conductivity"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-InsulationThermalConductivityCode"
                            class_name = "Wall_Insulation_Thermal_Conductivity"
                            documentation = """Only if documentary evidence is available"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': '0.04', '2': '0.03', '3': '0.025'}
                            map_values = {'0.04': '1', '0.03': '2', '0.025': '3'}
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Wall_Dry_Lined(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Dry-Lined"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Flag"
                            class_name = "Wall_Dry_Lined"
                            documentation = """Value to be "N" for wall types where dry-lining is not applicable."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'Y': 'Yes', 'N': 'No'}
                            map_values = {'Yes': 'Y', 'No': 'N'}
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Sheltered_Wall(_Base, etree.ElementBase):
                            ""
                            element_name = "Sheltered-Wall"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Flag"
                            class_name = "Sheltered_Wall"
                            documentation = """Wall between dwelling and unheated corridor or stairwell"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'Y': 'Yes', 'N': 'No'}
                            map_values = {'Yes': 'Y', 'No': 'N'}
                            parent_class_name = "SAP_Alternative_Wall_1"
                            parent_method_name ="sap_alternative_wall_1"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_1(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                    class SAP_Alternative_Wall_2(_Base, etree.ElementBase):
                        ""
                        element_name = "SAP-Alternative-Wall-2"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-Alternative-Wall"
                        class_name = "SAP_Alternative_Wall_2"
                        documentation = """Included only for building parts that have an alternative wall"""
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = ["Wall_Construction", "Wall_Insulation_Type", "Wall_Area", "Wall_Thickness_Measured", "Wall_Thickness", "Wall_U_Value", "Wall_Insulation_Thickness", "Wall_Insulation_Thickness_Measured", "Wall_Insulation_Thermal_Conductivity", "Wall_Dry_Lined", "Sheltered_Wall"]
                        subclass_method_names = ["wall_construction", "wall_insulation_type", "wall_area", "wall_thickness_measured", "wall_thickness", "wall_u_value", "wall_insulation_thickness", "wall_insulation_thickness_measured", "wall_insulation_thermal_conductivity", "wall_dry_lined", "sheltered_wall"]
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def wall_construction(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Construction")
                    
                        def add_wall_construction(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Construction")
                    
                        @property
                        def wall_insulation_type(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Type")
                    
                        def add_wall_insulation_type(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Type")
                    
                        @property
                        def wall_area(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Area")
                    
                        def add_wall_area(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Area")
                    
                        @property
                        def wall_thickness_measured(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Thickness-Measured")
                    
                        def add_wall_thickness_measured(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Thickness-Measured")
                    
                        @property
                        def wall_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Thickness")
                    
                        def add_wall_thickness(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Thickness")
                    
                        @property
                        def wall_u_value(self): return self.find(f"{{{self.__class__.namespace}}}Wall-U-Value")
                    
                        def add_wall_u_value(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-U-Value")
                    
                        @property
                        def wall_insulation_thickness(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness")
                    
                        def add_wall_insulation_thickness(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness")
                    
                        @property
                        def wall_insulation_thickness_measured(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness-Measured")
                    
                        def add_wall_insulation_thickness_measured(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Thickness-Measured")
                    
                        @property
                        def wall_insulation_thermal_conductivity(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Insulation-Thermal-Conductivity")
                    
                        def add_wall_insulation_thermal_conductivity(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Insulation-Thermal-Conductivity")
                    
                        @property
                        def wall_dry_lined(self): return self.find(f"{{{self.__class__.namespace}}}Wall-Dry-Lined")
                    
                        def add_wall_dry_lined(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Wall-Dry-Lined")
                    
                        @property
                        def sheltered_wall(self): return self.find(f"{{{self.__class__.namespace}}}Sheltered-Wall")
                    
                        def add_sheltered_wall(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Sheltered-Wall")
                    
                        class Wall_Construction(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Construction"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "WallConstructionCode"
                            class_name = "Wall_Construction"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'stone (granite or whinstone)', '2': 'stone (sandstone or limestone)', '3': 'solid brick', '4': 'cavity', '5': 'timber frame', '6': 'basement wall', '7': 'curtain wall', '8': 'system built', '9': 'cob wall', '10': 'park home wall'}
                            map_values = {'stone (granite or whinstone)': '1', 'stone (sandstone or limestone)': '2', 'solid brick': '3', 'cavity': '4', 'timber frame': '5', 'basement wall': '6', 'curtain wall': '7', 'system built': '8', 'cob wall': '9', 'park home wall': '10'}
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Wall_Insulation_Type(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Insulation-Type"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "WallInsulationCode"
                            class_name = "Wall_Insulation_Type"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': 'external', '2': 'filled cavity', '3': 'internal', '4': 'as built', '5': 'unknown', '6': 'filled cavity + external', '7': 'filled cavity + internal'}
                            map_values = {'external': '1', 'filled cavity': '2', 'internal': '3', 'as built': '4', 'unknown': '5', 'filled cavity + external': '6', 'filled cavity + internal': '7'}
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Wall_Area(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Area"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "Wall_Area"
                            documentation = None
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Wall_Thickness_Measured(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Thickness-Measured"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Flag"
                            class_name = "Wall_Thickness_Measured"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'Y': 'Yes', 'N': 'No'}
                            map_values = {'Yes': 'Y', 'No': 'N'}
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Wall_Thickness(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Thickness"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:integer"
                            class_name = "Wall_Thickness"
                            documentation = """Wall thickness in mm"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = int
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Wall_U_Value(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-U-Value"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "Wall_U_Value"
                            documentation = """Only one of Wall-Insulation-Thickness and Wall-U-Value is included"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Wall_Insulation_Thickness(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Insulation-Thickness"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "WallInsulationThicknessCode"
                            class_name = "Wall_Insulation_Thickness"
                            documentation = """Only one of Wall-Insulation-Thickness and Wall-U-Value is included"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'NI': 'unknown', '10mm': '10 mm', '25mm': '25 mm', '50mm': '50 mm', '75mm': '75 mm', '100mm': '100 mm', '125mm': '125 mm', '150mm': '150 mm', '175mm': '175 mm', '200mm': '200mm', 'measured': 'if wall insulation thickness is provided with precise measurement'}
                            map_values = {'unknown': 'NI', '10 mm': '10mm', '25 mm': '25mm', '50 mm': '50mm', '75 mm': '75mm', '100 mm': '100mm', '125 mm': '125mm', '150 mm': '150mm', '175 mm': '175mm', '200mm': '200mm', 'if wall insulation thickness is provided with precise measurement': 'measured'}
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Wall_Insulation_Thickness_Measured(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Insulation-Thickness-Measured"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "Wall_Insulation_Thickness_Measured"
                            documentation = """Only one of Wall-Insulation-Thickness is measured and Wall-U-Value is included"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Wall_Insulation_Thermal_Conductivity(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Insulation-Thermal-Conductivity"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-InsulationThermalConductivityCode"
                            class_name = "Wall_Insulation_Thermal_Conductivity"
                            documentation = """Only if documentary evidence is available"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'1': '0.04', '2': '0.03', '3': '0.025'}
                            map_values = {'0.04': '1', '0.03': '2', '0.025': '3'}
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Wall_Dry_Lined(_Base, etree.ElementBase):
                            ""
                            element_name = "Wall-Dry-Lined"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Flag"
                            class_name = "Wall_Dry_Lined"
                            documentation = """Value to be "N" for wall types where dry-lining is not applicable."""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'Y': 'Yes', 'N': 'No'}
                            map_values = {'Yes': 'Y', 'No': 'N'}
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Sheltered_Wall(_Base, etree.ElementBase):
                            ""
                            element_name = "Sheltered-Wall"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Flag"
                            class_name = "Sheltered_Wall"
                            documentation = """Wall between dwelling and unheated corridor or stairwell"""
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'Y': 'Yes', 'N': 'No'}
                            map_values = {'Yes': 'Y', 'No': 'N'}
                            parent_class_name = "SAP_Alternative_Wall_2"
                            parent_method_name ="sap_alternative_wall_2"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def sap_alternative_wall_2(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                    class Party_Wall_Construction(_Base, etree.ElementBase):
                        ""
                        element_name = "Party-Wall-Construction"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "PartyWallConstructionCode"
                        class_name = "Party_Wall_Construction"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'0': 'unable to determine', '1': 'solid masonry, timber frame or system built', '2': 'cavity masonry, unfilled', '3': 'cavity masonry, filled', '4': 'cavity masonry, filled and sealed', 'NA': 'not applicable (detached property or no party wall in this building part)', 'NI': 'no information - pre-9.92 survey'}
                        map_values = {'unable to determine': '0', 'solid masonry, timber frame or system built': '1', 'cavity masonry, unfilled': '2', 'cavity masonry, filled': '3', 'cavity masonry, filled and sealed': '4', 'not applicable (detached property or no party wall in this building part)': 'NA', 'no information - pre-9.92 survey': 'NI'}
                        parent_class_name = "SAP_Building_Part"
                        parent_method_name ="sap_building_part"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_building_part(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
            class SAP_Flat_Details(_Base, etree.ElementBase):
                ""
                element_name = "SAP-Flat-Details"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-Flat-Details"
                class_name = "SAP_Flat_Details"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = ["Flat_Location", "Storey_Count", "Level", "Top_Storey", "Heat_Loss_Corridor", "Unheated_Corridor_Length"]
                subclass_method_names = ["flat_location", "storey_count", "level", "top_storey", "heat_loss_corridor", "unheated_corridor_length"]
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def flat_location(self): return self.find(f"{{{self.__class__.namespace}}}Flat-Location")
            
                def add_flat_location(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Flat-Location")
            
                @property
                def storey_count(self): return self.find(f"{{{self.__class__.namespace}}}Storey-Count")
            
                def add_storey_count(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Storey-Count")
            
                @property
                def level(self): return self.find(f"{{{self.__class__.namespace}}}Level")
            
                def add_level(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Level")
            
                @property
                def top_storey(self): return self.find(f"{{{self.__class__.namespace}}}Top-Storey")
            
                def add_top_storey(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Top-Storey")
            
                @property
                def heat_loss_corridor(self): return self.find(f"{{{self.__class__.namespace}}}Heat-Loss-Corridor")
            
                def add_heat_loss_corridor(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Heat-Loss-Corridor")
            
                @property
                def unheated_corridor_length(self): return self.find(f"{{{self.__class__.namespace}}}Unheated-Corridor-Length")
            
                def add_unheated_corridor_length(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Unheated-Corridor-Length")
            
                class Flat_Location(_Base, etree.ElementBase):
                    ""
                    element_name = "Flat-Location"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "BlockStoreyCode"
                    class_name = "Flat_Location"
                    documentation = """Identifies the storey within the block that the entrance to the flat is located on"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'-1': 'Basement', '00': 'Ground', '01': '1st', '02': '2nd', '03': '3rd', '04': '4th', '05': '5th', '06': '6th', '07': '7th', '08': '8th', '09': '9th', '10': '10th', '11': '11th', '12': '12th', '13': '13th', '14': '14th', '15': '15th', '16': '16th', '17': '17th', '18': '18th', '19': '19th', '20': '20th', '20+': '21st or above'}
                    map_values = {'Basement': '-1', 'Ground': '00', '1st': '01', '2nd': '02', '3rd': '03', '4th': '04', '5th': '05', '6th': '06', '7th': '07', '8th': '08', '9th': '09', '10th': '10', '11th': '11', '12th': '12', '13th': '13', '14th': '14', '15th': '15', '16th': '16', '17th': '17', '18th': '18', '19th': '19', '20th': '20', '21st or above': '20+'}
                    parent_class_name = "SAP_Flat_Details"
                    parent_method_name ="sap_flat_details"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_flat_details(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Storey_Count(_Base, etree.ElementBase):
                    ""
                    element_name = "Storey-Count"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Count"
                    class_name = "Storey_Count"
                    documentation = """The number of Storeys in the Apartment Block."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Flat_Details"
                    parent_method_name ="sap_flat_details"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_flat_details(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Level(_Base, etree.ElementBase):
                    ""
                    element_name = "Level"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "FlatLevelCode"
                    class_name = "Level"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'basement', '1': 'ground floor', '2': 'mid floor', '3': 'top floor', '99': 'for backward compatibility only, do not use.'}
                    map_values = {'basement': '0', 'ground floor': '1', 'mid floor': '2', 'top floor': '3', 'for backward compatibility only, do not use.': '99'}
                    parent_class_name = "SAP_Flat_Details"
                    parent_method_name ="sap_flat_details"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_flat_details(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Top_Storey(_Base, etree.ElementBase):
                    ""
                    element_name = "Top-Storey"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Flag"
                    class_name = "Top_Storey"
                    documentation = """Indicates that the Apartment is located on the Top Storey of the Apartment Block."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'Y': 'Yes', 'N': 'No'}
                    map_values = {'Yes': 'Y', 'No': 'N'}
                    parent_class_name = "SAP_Flat_Details"
                    parent_method_name ="sap_flat_details"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_flat_details(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Heat_Loss_Corridor(_Base, etree.ElementBase):
                    ""
                    element_name = "Heat-Loss-Corridor"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "HeatLossCorridorCode"
                    class_name = "Heat_Loss_Corridor"
                    documentation = """Indiocates that the flat contained a cossidor through which heat is lost."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = {'0': 'no corridor', '1': 'heated corridor', '2': 'unheated corridor', '3': 'stairwell'}
                    map_values = {'no corridor': '0', 'heated corridor': '1', 'unheated corridor': '2', 'stairwell': '3'}
                    parent_class_name = "SAP_Flat_Details"
                    parent_method_name ="sap_flat_details"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_flat_details(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class Unheated_Corridor_Length(_Base, etree.ElementBase):
                    ""
                    element_name = "Unheated-Corridor-Length"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "Measurement"
                    class_name = "Unheated_Corridor_Length"
                    documentation = """The tortal length of unheated corridor in the flat. Only popualted if Heat-Loss-Corridor = {Unheated Corridor}"""
                    type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = float
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Flat_Details"
                    parent_method_name ="sap_flat_details"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_flat_details(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
            class SAP_Windows(_Base, etree.ElementBase):
                ""
                element_name = "SAP-Windows"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-Windows"
                class_name = "SAP_Windows"
                documentation = """To be used when all windows are measured."""
                type_documentation = """Details of the windows in the building"""
                has_text_node = False
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = ["SAP_Window"]
                subclass_method_names = ["sap_window"]
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def sap_window(self): return self.findall(f"{{{self.__class__.namespace}}}SAP-Window")
            
                def add_sap_window(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Window")
            
                class SAP_Window(_Base, etree.ElementBase):
                    ""
                    element_name = "SAP-Window"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-Window"
                    class_name = "SAP_Window"
                    documentation = None
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 0
                    max_occurs = "unbounded"
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Windows"
                    parent_method_name ="sap_windows"
                    subclass_class_names = ["Window_Location", "Window_Height", "Window_Width", "Draught_Proofed", "Glazing_Type", "Window_Type", "Orientation", "Window_Transmission_Details", "PVC_Frame", "Glazing_Gap", "Frame_Factor", "Window_Wall_Type", "Permanent_Shutters_Present", "Permanent_Shutters_Insulated"]
                    subclass_method_names = ["window_location", "window_height", "window_width", "draught_proofed", "glazing_type", "window_type", "orientation", "window_transmission_details", "pvc_frame", "glazing_gap", "frame_factor", "window_wall_type", "permanent_shutters_present", "permanent_shutters_insulated"]
                
                    @property
                    def sap_windows(self): return self.getparent()
                
                    @property
                    def window_location(self): return self.find(f"{{{self.__class__.namespace}}}Window-Location")
                
                    def add_window_location(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Window-Location")
                
                    @property
                    def window_height(self): return self.find(f"{{{self.__class__.namespace}}}Window-Height")
                
                    def add_window_height(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Window-Height")
                
                    @property
                    def window_width(self): return self.find(f"{{{self.__class__.namespace}}}Window-Width")
                
                    def add_window_width(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Window-Width")
                
                    @property
                    def draught_proofed(self): return self.find(f"{{{self.__class__.namespace}}}Draught-Proofed")
                
                    def add_draught_proofed(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Draught-Proofed")
                
                    @property
                    def glazing_type(self): return self.find(f"{{{self.__class__.namespace}}}Glazing-Type")
                
                    def add_glazing_type(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Glazing-Type")
                
                    @property
                    def window_type(self): return self.find(f"{{{self.__class__.namespace}}}Window-Type")
                
                    def add_window_type(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Window-Type")
                
                    @property
                    def orientation(self): return self.find(f"{{{self.__class__.namespace}}}Orientation")
                
                    def add_orientation(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Orientation")
                
                    @property
                    def window_transmission_details(self): return self.find(f"{{{self.__class__.namespace}}}Window-Transmission-Details")
                
                    def add_window_transmission_details(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Window-Transmission-Details")
                
                    @property
                    def pvc_frame(self): return self.find(f"{{{self.__class__.namespace}}}PVC-Frame")
                
                    def add_pvc_frame(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}PVC-Frame")
                
                    @property
                    def glazing_gap(self): return self.find(f"{{{self.__class__.namespace}}}Glazing-Gap")
                
                    def add_glazing_gap(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Glazing-Gap")
                
                    @property
                    def frame_factor(self): return self.find(f"{{{self.__class__.namespace}}}Frame-Factor")
                
                    def add_frame_factor(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Frame-Factor")
                
                    @property
                    def window_wall_type(self): return self.find(f"{{{self.__class__.namespace}}}Window-Wall-Type")
                
                    def add_window_wall_type(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Window-Wall-Type")
                
                    @property
                    def permanent_shutters_present(self): return self.find(f"{{{self.__class__.namespace}}}Permanent-Shutters-Present")
                
                    def add_permanent_shutters_present(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Permanent-Shutters-Present")
                
                    @property
                    def permanent_shutters_insulated(self): return self.find(f"{{{self.__class__.namespace}}}Permanent-Shutters-Insulated")
                
                    def add_permanent_shutters_insulated(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Permanent-Shutters-Insulated")
                
                    class Window_Location(_Base, etree.ElementBase):
                        ""
                        element_name = "Window-Location"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "BuildingPartCode"
                        class_name = "Window_Location"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'0': 'Main Property', '1': '1st Extension', '2': '2nd Extension', '3': '3rd Extension', '4': '4th Extension'}
                        map_values = {'Main Property': '0', '1st Extension': '1', '2nd Extension': '2', '3rd Extension': '3', '4th Extension': '4'}
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Window_Height(_Base, etree.ElementBase):
                        ""
                        element_name = "Window-Height"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Measurement"
                        class_name = "Window_Height"
                        documentation = None
                        type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Window_Width(_Base, etree.ElementBase):
                        ""
                        element_name = "Window-Width"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Measurement"
                        class_name = "Window_Width"
                        documentation = None
                        type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Draught_Proofed(_Base, etree.ElementBase):
                        ""
                        element_name = "Draught-Proofed"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:boolean"
                        class_name = "Draught_Proofed"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = bool
                        map_codes = {'true': True, '1': True, 'false': False, '0': False}
                        map_values = {True: '1', False: '0'}
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Glazing_Type(_Base, etree.ElementBase):
                        ""
                        element_name = "Glazing-Type"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-GlazingTypeCode"
                        class_name = "Glazing_Type"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'double glazing installed before 2002 in EAW, 2003 in SCT, 2006 NI', '2': 'double glazing installed between 2002-2022 in EAW, 2003-2023 in SCT, 2006-2022 NI', '3': 'double glazing, unknown install date', '4': 'secondary glazing, unknown data', '5': 'single glazing', '6': 'triple glazing, unknown install date', '7': 'double, known data', '8': 'triple, known data', 'ND': 'not defined', '9': 'triple glazing, installed between 2002-2022 in EAW, 2003-2023 in SCT, 2006-2022 NI', '10': 'triple glazing, installed before 2002 in EAW, 2003 in SCT, 2006 NI', '11': 'secondary glazing, normal emissivity', '12': 'secondary glazing, low emissivity', '13': 'double glazing, installed during or after 2022 in EAW, 2023 in SCT, 2022 NI', '14': 'triple glazing, installed during or after 2022 in EAW, 2023 in SCT, 2022 NI'}
                        map_values = {'double glazing installed before 2002 in EAW, 2003 in SCT, 2006 NI': '1', 'double glazing installed between 2002-2022 in EAW, 2003-2023 in SCT, 2006-2022 NI': '2', 'double glazing, unknown install date': '3', 'secondary glazing, unknown data': '4', 'single glazing': '5', 'triple glazing, unknown install date': '6', 'double, known data': '7', 'triple, known data': '8', 'not defined': 'ND', 'triple glazing, installed between 2002-2022 in EAW, 2003-2023 in SCT, 2006-2022 NI': '9', 'triple glazing, installed before 2002 in EAW, 2003 in SCT, 2006 NI': '10', 'secondary glazing, normal emissivity': '11', 'secondary glazing, low emissivity': '12', 'double glazing, installed during or after 2022 in EAW, 2023 in SCT, 2022 NI': '13', 'triple glazing, installed during or after 2022 in EAW, 2023 in SCT, 2022 NI': '14'}
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Window_Type(_Base, etree.ElementBase):
                        ""
                        element_name = "Window-Type"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "WindowTypeCode"
                        class_name = "Window_Type"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'window', '2': 'roof-window'}
                        map_values = {'window': '1', 'roof-window': '2'}
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Orientation(_Base, etree.ElementBase):
                        ""
                        element_name = "Orientation"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-OrientationCode"
                        class_name = "Orientation"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'0': 'unknown or unspecified', '1': 'North', '2': 'North East', '3': 'East', '4': 'South East', '5': 'South', '6': 'South West', '7': 'West', '8': 'North West', '9': 'Horizontal (windows and roof windows only)'}
                        map_values = {'unknown or unspecified': '0', 'North': '1', 'North East': '2', 'East': '3', 'South East': '4', 'South': '5', 'South West': '6', 'West': '7', 'North West': '8', 'Horizontal (windows and roof windows only)': '9'}
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Window_Transmission_Details(_Base, etree.ElementBase):
                        ""
                        element_name = "Window-Transmission-Details"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Window-Transmission-Details"
                        class_name = "Window_Transmission_Details"
                        documentation = None
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = ["Data_Source", "U_Value", "Solar_Transmittance"]
                        subclass_method_names = ["data_source", "u_value", "solar_transmittance"]
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def data_source(self): return self.find(f"{{{self.__class__.namespace}}}Data-Source")
                    
                        def add_data_source(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Data-Source")
                    
                        @property
                        def u_value(self): return self.find(f"{{{self.__class__.namespace}}}U-Value")
                    
                        def add_u_value(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}U-Value")
                    
                        @property
                        def solar_transmittance(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Transmittance")
                    
                        def add_solar_transmittance(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Transmittance")
                    
                        class Data_Source(_Base, etree.ElementBase):
                            ""
                            element_name = "Data-Source"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "SAP-OpeningDataSourceCode"
                            class_name = "Data_Source"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = int
                            map_codes = {'2': 'manufacturer data', '4': 'BFRC data'}
                            map_values = {'manufacturer data': '2', 'BFRC data': '4'}
                            parent_class_name = "Window_Transmission_Details"
                            parent_method_name ="window_transmission_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def window_transmission_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class U_Value(_Base, etree.ElementBase):
                            ""
                            element_name = "U-Value"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "U_Value"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Window_Transmission_Details"
                            parent_method_name ="window_transmission_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def window_transmission_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Solar_Transmittance(_Base, etree.ElementBase):
                            ""
                            element_name = "Solar-Transmittance"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "xs:decimal"
                            class_name = "Solar_Transmittance"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Window_Transmission_Details"
                            parent_method_name ="window_transmission_details"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def window_transmission_details(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                    class PVC_Frame(_Base, etree.ElementBase):
                        ""
                        element_name = "PVC-Frame"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:boolean"
                        class_name = "PVC_Frame"
                        documentation = """include when Glazing-Type is 1 or 3. If true: wood or PVC, if false: metal."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = bool
                        map_codes = {'true': True, '1': True, 'false': False, '0': False}
                        map_values = {True: '1', False: '0'}
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Glazing_Gap(_Base, etree.ElementBase):
                        ""
                        element_name = "Glazing-Gap"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "SAP-GlazingGapTypeCode"
                        class_name = "Glazing_Gap"
                        documentation = """include when Glazing-Type is 1 or 3 and PVC-Frame is true."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'6': '6mm', '12': '12mm', '16+': '16mm or more'}
                        map_values = {'6mm': '6', '12mm': '12', '16mm or more': '16+'}
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Frame_Factor(_Base, etree.ElementBase):
                        ""
                        element_name = "Frame-Factor"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:decimal"
                        class_name = "Frame_Factor"
                        documentation = """include when frame factor is known."""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = float
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.python_type_convertor(self.text)
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Window_Wall_Type(_Base, etree.ElementBase):
                        ""
                        element_name = "Window-Wall-Type"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "WindowWallTypeCode"
                        class_name = "Window_Wall_Type"
                        documentation = """Identifies the type of wall the window is located"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 0
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'1': 'External wall type 1', '2': 'Alternative wall 1', '3': 'Alternative wall 2', '4': 'Roof of Room in Roof', '5': 'gable wall 1.', '6': 'gable wall 2.', '7': 'common wall 1 Only include for RR Type 2.', '8': 'common wall 2 Only include for RR Type 2.'}
                        map_values = {'External wall type 1': '1', 'Alternative wall 1': '2', 'Alternative wall 2': '3', 'Roof of Room in Roof': '4', 'gable wall 1.': '5', 'gable wall 2.': '6', 'common wall 1 Only include for RR Type 2.': '7', 'common wall 2 Only include for RR Type 2.': '8'}
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Permanent_Shutters_Present(_Base, etree.ElementBase):
                        ""
                        element_name = "Permanent-Shutters-Present"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Flag"
                        class_name = "Permanent_Shutters_Present"
                        documentation = """Identifies if permanent shutters are present"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'Y': 'Yes', 'N': 'No'}
                        map_values = {'Yes': 'Y', 'No': 'N'}
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
                    class Permanent_Shutters_Insulated(_Base, etree.ElementBase):
                        ""
                        element_name = "Permanent-Shutters-Insulated"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Flag"
                        class_name = "Permanent_Shutters_Insulated"
                        documentation = """Identifies if permanent shutters are insulated. Include when permanent shutters are present"""
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = {'Y': 'Yes', 'N': 'No'}
                        map_values = {'Yes': 'Y', 'No': 'N'}
                        parent_class_name = "SAP_Window"
                        parent_method_name ="sap_window"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_window(self): return self.getparent()
                    
                        @property
                        def value(self): return self.__class__.map_codes[self.text]
                    
                        @value.setter
                        def value(self, value):
                            if value in self.__class__.map_values:
                                self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                            else:
                                raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code):
                            if code in self.__class__.map_codes:
                                self.text = str(code)
                            else:
                                raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                    
            class Windows_Transmission_Details(_Base, etree.ElementBase):
                ""
                element_name = "Windows-Transmission-Details"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Window-Transmission-Details"
                class_name = "Windows_Transmission_Details"
                documentation = """To be used when windows are not measured."""
                type_documentation = None
                has_text_node = False
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = ["Data_Source", "U_Value", "Solar_Transmittance"]
                subclass_method_names = ["data_source", "u_value", "solar_transmittance"]
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def data_source(self): return self.find(f"{{{self.__class__.namespace}}}Data-Source")
            
                def add_data_source(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Data-Source")
            
                @property
                def u_value(self): return self.find(f"{{{self.__class__.namespace}}}U-Value")
            
                def add_u_value(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}U-Value")
            
                @property
                def solar_transmittance(self): return self.find(f"{{{self.__class__.namespace}}}Solar-Transmittance")
            
                def add_solar_transmittance(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Solar-Transmittance")
            
                class Data_Source(_Base, etree.ElementBase):
                    ""
                    element_name = "Data-Source"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-OpeningDataSourceCode"
                    class_name = "Data_Source"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = int
                    map_codes = {'2': 'manufacturer data', '4': 'BFRC data'}
                    map_values = {'manufacturer data': '2', 'BFRC data': '4'}
                    parent_class_name = "Windows_Transmission_Details"
                    parent_method_name ="windows_transmission_details"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def windows_transmission_details(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
                class U_Value(_Base, etree.ElementBase):
                    ""
                    element_name = "U-Value"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:decimal"
                    class_name = "U_Value"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = float
                    map_codes = None
                    map_values = None
                    parent_class_name = "Windows_Transmission_Details"
                    parent_method_name ="windows_transmission_details"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def windows_transmission_details(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Solar_Transmittance(_Base, etree.ElementBase):
                    ""
                    element_name = "Solar-Transmittance"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:decimal"
                    class_name = "Solar_Transmittance"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = float
                    map_codes = None
                    map_values = None
                    parent_class_name = "Windows_Transmission_Details"
                    parent_method_name ="windows_transmission_details"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def windows_transmission_details(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.python_type_convertor(self.text)
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
            class SAP_Deselected_Improvements(_Base, etree.ElementBase):
                ""
                element_name = "SAP-Deselected-Improvements"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-Deselected-Improvements"
                class_name = "SAP_Deselected_Improvements"
                documentation = """This must record any measures deselected by the DEA"""
                type_documentation = """There are 22 possible improvement measures, designated from A to V. This must record measures deselected by DEA (A to V is the full set, only E, N, U and V are considered at the moment for new build)."""
                has_text_node = False
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = ["Deselected_Improvement_Measure"]
                subclass_method_names = ["deselected_improvement_measure"]
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def deselected_improvement_measure(self): return self.findall(f"{{{self.__class__.namespace}}}Deselected-Improvement-Measure")
            
                def add_deselected_improvement_measure(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Deselected-Improvement-Measure")
            
                class Deselected_Improvement_Measure(_Base, etree.ElementBase):
                    ""
                    element_name = "Deselected-Improvement-Measure"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-ImprovementMeasureCode"
                    class_name = "Deselected_Improvement_Measure"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = "unbounded"
                    python_type_convertor = str
                    map_codes = {'A': 'Loft Insulation', 'A2': 'Flat roof insulation', 'A3': 'Room-in-roof insulation', 'B': 'Cavity wall insulation', 'B4': 'Party wall insulation', 'C': 'Hot water cylinder insulation', 'D': 'Draughtproofing', 'E': 'Low energy lights', 'F': 'Cylinder thermostat', 'G': 'Heating controls for wet central heating system', 'G2': 'Water heating controls', 'H': 'Heating controls for warm air system', 'I': 'Upgrade boiler, same fuel', 'J': 'Biomass boiler', 'J2': 'Biomass boiler as alternative improvement', 'K': 'Biomass room heater with boiler', 'L': 'New or replacement fan-assisted storage heaters', 'L2': 'New or replacement high heat retention storage heaters', 'M': 'Replacement warm-air unit', 'N': 'Solar water heating', 'O': 'Replacement double glazed windows', 'O3': 'Replacement double glazing units', 'P': 'Secondary glazing', 'Q': 'Solid wall insulation', 'Q2': 'External insulation with cavity wall insulation', 'R': 'Condensing oil boiler', 'S': 'Change heating to Band A gas condensing boiler (no fuel switch)', 'T': 'Change heating to Band A gas condensing boiler (fuel switch)', 'T2': 'Flue gas heat recovery', 'U': 'Photovoltaics', 'U1': 'PV Battery', 'U2': 'PV Diverter', 'V': 'Wind turbine (roof mounted)', 'V2': 'Wind turbine (on mast)', 'W': 'Floor insulation; for backwards compatibility only, do not use', 'W1': 'Insulation of suspended floor', 'W2': 'Insulation of solid ground floor', 'X': 'Insulated doors', 'Y': 'Instantaneous waste water heat recovery', 'Y2': 'Storage waste water heat recovery', 'Z1': 'Air or ground source heat pump', 'Z2': 'Air or ground source heat pump with underfloor heating', 'Z3': 'Micro-CHP', 'NR': 'Not recorded'}
                    map_values = {'Loft Insulation': 'A', 'Flat roof insulation': 'A2', 'Room-in-roof insulation': 'A3', 'Cavity wall insulation': 'B', 'Party wall insulation': 'B4', 'Hot water cylinder insulation': 'C', 'Draughtproofing': 'D', 'Low energy lights': 'E', 'Cylinder thermostat': 'F', 'Heating controls for wet central heating system': 'G', 'Water heating controls': 'G2', 'Heating controls for warm air system': 'H', 'Upgrade boiler, same fuel': 'I', 'Biomass boiler': 'J', 'Biomass boiler as alternative improvement': 'J2', 'Biomass room heater with boiler': 'K', 'New or replacement fan-assisted storage heaters': 'L', 'New or replacement high heat retention storage heaters': 'L2', 'Replacement warm-air unit': 'M', 'Solar water heating': 'N', 'Replacement double glazed windows': 'O', 'Replacement double glazing units': 'O3', 'Secondary glazing': 'P', 'Solid wall insulation': 'Q', 'External insulation with cavity wall insulation': 'Q2', 'Condensing oil boiler': 'R', 'Change heating to Band A gas condensing boiler (no fuel switch)': 'S', 'Change heating to Band A gas condensing boiler (fuel switch)': 'T', 'Flue gas heat recovery': 'T2', 'Photovoltaics': 'U', 'PV Battery': 'U1', 'PV Diverter': 'U2', 'Wind turbine (roof mounted)': 'V', 'Wind turbine (on mast)': 'V2', 'Floor insulation; for backwards compatibility only, do not use': 'W', 'Insulation of suspended floor': 'W1', 'Insulation of solid ground floor': 'W2', 'Insulated doors': 'X', 'Instantaneous waste water heat recovery': 'Y', 'Storage waste water heat recovery': 'Y2', 'Air or ground source heat pump': 'Z1', 'Air or ground source heat pump with underfloor heating': 'Z2', 'Micro-CHP': 'Z3', 'Not recorded': 'NR'}
                    parent_class_name = "SAP_Deselected_Improvements"
                    parent_method_name ="sap_deselected_improvements"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def sap_deselected_improvements(self): return self.getparent()
                
                    @property
                    def value(self): return self.__class__.map_codes[self.text]
                
                    @value.setter
                    def value(self, value):
                        if value in self.__class__.map_values:
                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                        else:
                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code):
                        if code in self.__class__.map_codes:
                            self.text = str(code)
                        else:
                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                
            class Door_Count(_Base, etree.ElementBase):
                ""
                element_name = "Door-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Door_Count"
                documentation = """Number of external doors"""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Insulated_Door_Count(_Base, etree.ElementBase):
                ""
                element_name = "Insulated-Door-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Insulated_Door_Count"
                documentation = """Number of insulated external doors"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Draughtproofed_Door_Count(_Base, etree.ElementBase):
                ""
                element_name = "Draughtproofed-Door-Count"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Count"
                class_name = "Draughtproofed_Door_Count"
                documentation = """Number of draught proofed external doors"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Insulated_Door_U_Value(_Base, etree.ElementBase):
                ""
                element_name = "Insulated-Door-U-Value"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:decimal"
                class_name = "Insulated_Door_U_Value"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = float
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Percent_Draughtproofed(_Base, etree.ElementBase):
                ""
                element_name = "Percent-Draughtproofed"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "None"
                class_name = "Percent_Draughtproofed"
                documentation = """Percentage of windows and doors with adequate draught proofing"""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = int
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.python_type_convertor(self.text)
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class SAP_Special_Features(_Base, etree.ElementBase):
                ""
                element_name = "SAP-Special-Features"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "SAP-Special-Features"
                class_name = "SAP_Special_Features"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "SAP_Property_Details"
                parent_method_name ="sap_property_details"
                subclass_class_names = ["SAP_Special_Feature"]
                subclass_method_names = ["sap_special_feature"]
            
                @property
                def sap_property_details(self): return self.getparent()
            
                @property
                def sap_special_feature(self): return self.findall(f"{{{self.__class__.namespace}}}SAP-Special-Feature")
            
                def add_sap_special_feature(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}SAP-Special-Feature")
            
                class SAP_Special_Feature(_Base, etree.ElementBase):
                    ""
                    element_name = "SAP-Special-Feature"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "SAP-Special-Feature"
                    class_name = "SAP_Special_Feature"
                    documentation = None
                    type_documentation = None
                    has_text_node = False
                    min_occurs = 1
                    max_occurs = "unbounded"
                    python_type_convertor = None
                    map_codes = None
                    map_values = None
                    parent_class_name = "SAP_Special_Features"
                    parent_method_name ="sap_special_features"
                    subclass_class_names = ["Description", "Energy_Feature", "Emissions_Feature"]
                    subclass_method_names = ["description", "energy_feature", "emissions_feature"]
                
                    @property
                    def sap_special_features(self): return self.getparent()
                
                    @property
                    def description(self): return self.find(f"{{{self.__class__.namespace}}}Description")
                
                    def add_description(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Description")
                
                    @property
                    def energy_feature(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Feature")
                
                    def add_energy_feature(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Feature")
                
                    @property
                    def emissions_feature(self): return self.find(f"{{{self.__class__.namespace}}}Emissions-Feature")
                
                    def add_emissions_feature(self):
                        return etree.SubElement(self,f"{{{self.__class__.namespace}}}Emissions-Feature")
                
                    class Description(_Base, etree.ElementBase):
                        ""
                        element_name = "Description"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "xs:string"
                        class_name = "Description"
                        documentation = None
                        type_documentation = None
                        has_text_node = True
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = str
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Special_Feature"
                        parent_method_name ="sap_special_feature"
                        subclass_class_names = []
                        subclass_method_names = []
                    
                        @property
                        def sap_special_feature(self): return self.getparent()
                    
                        @property
                        def value(self): return self.text
                    
                        @value.setter
                        def value(self, value): self.text = str(value)
                    
                        @property
                        def code(self): return self.text
                    
                        @code.setter
                        def code(self, code): self.text = str(code)
                    
                    class Energy_Feature(_Base, etree.ElementBase):
                        ""
                        element_name = "Energy-Feature"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Energy-Feature"
                        class_name = "Energy_Feature"
                        documentation = None
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Special_Feature"
                        parent_method_name ="sap_special_feature"
                        subclass_class_names = ["Energy_Saved_Or_Generated", "Saved_Or_Generated_Fuel", "Energy_Used", "Energy_Used_Fuel", "Air_Change_Rates"]
                        subclass_method_names = ["energy_saved_or_generated", "saved_or_generated_fuel", "energy_used", "energy_used_fuel", "air_change_rates"]
                    
                        @property
                        def sap_special_feature(self): return self.getparent()
                    
                        @property
                        def energy_saved_or_generated(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Saved-Or-Generated")
                    
                        def add_energy_saved_or_generated(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Saved-Or-Generated")
                    
                        @property
                        def saved_or_generated_fuel(self): return self.find(f"{{{self.__class__.namespace}}}Saved-Or-Generated-Fuel")
                    
                        def add_saved_or_generated_fuel(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Saved-Or-Generated-Fuel")
                    
                        @property
                        def energy_used(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Used")
                    
                        def add_energy_used(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Used")
                    
                        @property
                        def energy_used_fuel(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Used-Fuel")
                    
                        def add_energy_used_fuel(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Used-Fuel")
                    
                        @property
                        def air_change_rates(self): return self.find(f"{{{self.__class__.namespace}}}Air-Change-Rates")
                    
                        def add_air_change_rates(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Air-Change-Rates")
                    
                        class Energy_Saved_Or_Generated(_Base, etree.ElementBase):
                            ""
                            element_name = "Energy-Saved-Or-Generated"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "Energy_Saved_Or_Generated"
                            documentation = """Energy saved or generated in kWh/year."""
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Energy_Feature"
                            parent_method_name ="energy_feature"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def energy_feature(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Saved_Or_Generated_Fuel(_Base, etree.ElementBase):
                            ""
                            element_name = "Saved-Or-Generated-Fuel"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "HeatingFuelTypeCode"
                            class_name = "Saved_Or_Generated_Fuel"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'0': 'To be used only when there is no heating/hot-water system or data is from a community network', '1': 'mains gas - this is for backwards compatibility only and should not be used', '2': 'LPG - this is for backwards compatibility only and should not be used', '3': 'bottled LPG', '4': 'oil - this is for backwards compatibility only and should not be used', '5': 'anthracite', '6': 'wood logs', '7': 'bulk wood pellets', '8': 'wood chips', '9': 'dual fuel - mineral + wood', '10': 'electricity - this is for backwards compatibility only and should not be used', '11': 'waste combustion - this is for backwards compatibility only and should not be used', '12': 'biomass - this is for backwards compatibility only and should not be used', '13': 'biogas - landfill - this is for backwards compatibility only and should not be used', '14': 'house coal - this is for backwards compatibility only and should not be used', '15': 'smokeless coal', '16': 'wood pellets in bags for secondary heating', '17': 'LPG special condition', '18': 'B30K (not community)', '19': 'bioethanol', '20': 'mains gas (community)', '21': 'LPG (community)', '22': 'oil (community)', '23': 'B30D (community)', '24': 'coal (community)', '25': 'electricity (community)', '26': 'mains gas (not community)', '27': 'LPG (not community)', '28': 'oil (not community)', '29': 'electricity (not community)', '30': 'waste combustion (community)', '31': 'biomass (community)', '32': 'biogas (community)', '33': 'house coal (not community)', '34': 'biodiesel from any biomass source', '35': 'biodiesel from used cooking oil only', '36': 'biodiesel from vegetable oil only (not community)', '37': 'appliances able to use mineral oil or liquid biofuel', '51': 'biogas (not community)', '56': 'heat from boilers that can use mineral oil or biodiesel (community)', '57': 'heat from boilers using biodiesel from any biomass source (community)', '58': 'biodiesel from vegetable oil only (community)', '99': 'from heat network data (community)'}
                            map_values = {'To be used only when there is no heating/hot-water system or data is from a community network': '0', 'mains gas - this is for backwards compatibility only and should not be used': '1', 'LPG - this is for backwards compatibility only and should not be used': '2', 'bottled LPG': '3', 'oil - this is for backwards compatibility only and should not be used': '4', 'anthracite': '5', 'wood logs': '6', 'bulk wood pellets': '7', 'wood chips': '8', 'dual fuel - mineral + wood': '9', 'electricity - this is for backwards compatibility only and should not be used': '10', 'waste combustion - this is for backwards compatibility only and should not be used': '11', 'biomass - this is for backwards compatibility only and should not be used': '12', 'biogas - landfill - this is for backwards compatibility only and should not be used': '13', 'house coal - this is for backwards compatibility only and should not be used': '14', 'smokeless coal': '15', 'wood pellets in bags for secondary heating': '16', 'LPG special condition': '17', 'B30K (not community)': '18', 'bioethanol': '19', 'mains gas (community)': '20', 'LPG (community)': '21', 'oil (community)': '22', 'B30D (community)': '23', 'coal (community)': '24', 'electricity (community)': '25', 'mains gas (not community)': '26', 'LPG (not community)': '27', 'oil (not community)': '28', 'electricity (not community)': '29', 'waste combustion (community)': '30', 'biomass (community)': '31', 'biogas (community)': '32', 'house coal (not community)': '33', 'biodiesel from any biomass source': '34', 'biodiesel from used cooking oil only': '35', 'biodiesel from vegetable oil only (not community)': '36', 'appliances able to use mineral oil or liquid biofuel': '37', 'biogas (not community)': '51', 'heat from boilers that can use mineral oil or biodiesel (community)': '56', 'heat from boilers using biodiesel from any biomass source (community)': '57', 'biodiesel from vegetable oil only (community)': '58', 'from heat network data (community)': '99'}
                            parent_class_name = "Energy_Feature"
                            parent_method_name ="energy_feature"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def energy_feature(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Energy_Used(_Base, etree.ElementBase):
                            ""
                            element_name = "Energy-Used"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "Energy_Used"
                            documentation = """Energy used in kWh/year."""
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Energy_Feature"
                            parent_method_name ="energy_feature"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def energy_feature(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Energy_Used_Fuel(_Base, etree.ElementBase):
                            ""
                            element_name = "Energy-Used-Fuel"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "HeatingFuelTypeCode"
                            class_name = "Energy_Used_Fuel"
                            documentation = None
                            type_documentation = None
                            has_text_node = True
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = str
                            map_codes = {'0': 'To be used only when there is no heating/hot-water system or data is from a community network', '1': 'mains gas - this is for backwards compatibility only and should not be used', '2': 'LPG - this is for backwards compatibility only and should not be used', '3': 'bottled LPG', '4': 'oil - this is for backwards compatibility only and should not be used', '5': 'anthracite', '6': 'wood logs', '7': 'bulk wood pellets', '8': 'wood chips', '9': 'dual fuel - mineral + wood', '10': 'electricity - this is for backwards compatibility only and should not be used', '11': 'waste combustion - this is for backwards compatibility only and should not be used', '12': 'biomass - this is for backwards compatibility only and should not be used', '13': 'biogas - landfill - this is for backwards compatibility only and should not be used', '14': 'house coal - this is for backwards compatibility only and should not be used', '15': 'smokeless coal', '16': 'wood pellets in bags for secondary heating', '17': 'LPG special condition', '18': 'B30K (not community)', '19': 'bioethanol', '20': 'mains gas (community)', '21': 'LPG (community)', '22': 'oil (community)', '23': 'B30D (community)', '24': 'coal (community)', '25': 'electricity (community)', '26': 'mains gas (not community)', '27': 'LPG (not community)', '28': 'oil (not community)', '29': 'electricity (not community)', '30': 'waste combustion (community)', '31': 'biomass (community)', '32': 'biogas (community)', '33': 'house coal (not community)', '34': 'biodiesel from any biomass source', '35': 'biodiesel from used cooking oil only', '36': 'biodiesel from vegetable oil only (not community)', '37': 'appliances able to use mineral oil or liquid biofuel', '51': 'biogas (not community)', '56': 'heat from boilers that can use mineral oil or biodiesel (community)', '57': 'heat from boilers using biodiesel from any biomass source (community)', '58': 'biodiesel from vegetable oil only (community)', '99': 'from heat network data (community)'}
                            map_values = {'To be used only when there is no heating/hot-water system or data is from a community network': '0', 'mains gas - this is for backwards compatibility only and should not be used': '1', 'LPG - this is for backwards compatibility only and should not be used': '2', 'bottled LPG': '3', 'oil - this is for backwards compatibility only and should not be used': '4', 'anthracite': '5', 'wood logs': '6', 'bulk wood pellets': '7', 'wood chips': '8', 'dual fuel - mineral + wood': '9', 'electricity - this is for backwards compatibility only and should not be used': '10', 'waste combustion - this is for backwards compatibility only and should not be used': '11', 'biomass - this is for backwards compatibility only and should not be used': '12', 'biogas - landfill - this is for backwards compatibility only and should not be used': '13', 'house coal - this is for backwards compatibility only and should not be used': '14', 'smokeless coal': '15', 'wood pellets in bags for secondary heating': '16', 'LPG special condition': '17', 'B30K (not community)': '18', 'bioethanol': '19', 'mains gas (community)': '20', 'LPG (community)': '21', 'oil (community)': '22', 'B30D (community)': '23', 'coal (community)': '24', 'electricity (community)': '25', 'mains gas (not community)': '26', 'LPG (not community)': '27', 'oil (not community)': '28', 'electricity (not community)': '29', 'waste combustion (community)': '30', 'biomass (community)': '31', 'biogas (community)': '32', 'house coal (not community)': '33', 'biodiesel from any biomass source': '34', 'biodiesel from used cooking oil only': '35', 'biodiesel from vegetable oil only (not community)': '36', 'appliances able to use mineral oil or liquid biofuel': '37', 'biogas (not community)': '51', 'heat from boilers that can use mineral oil or biodiesel (community)': '56', 'heat from boilers using biodiesel from any biomass source (community)': '57', 'biodiesel from vegetable oil only (community)': '58', 'from heat network data (community)': '99'}
                            parent_class_name = "Energy_Feature"
                            parent_method_name ="energy_feature"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def energy_feature(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.map_codes[self.text]
                        
                            @value.setter
                            def value(self, value):
                                if value in self.__class__.map_values:
                                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                else:
                                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code):
                                if code in self.__class__.map_codes:
                                    self.text = str(code)
                                else:
                                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                        
                        class Air_Change_Rates(_Base, etree.ElementBase):
                            ""
                            element_name = "Air-Change-Rates"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Air-Change-Rates"
                            class_name = "Air_Change_Rates"
                            documentation = """For Appendix Q procedure that provides air change rates. Only one Special Feature can have data on air change rates."""
                            type_documentation = None
                            has_text_node = False
                            min_occurs = 0
                            max_occurs = 1
                            python_type_convertor = None
                            map_codes = None
                            map_values = None
                            parent_class_name = "Energy_Feature"
                            parent_method_name ="energy_feature"
                            subclass_class_names = ["Air_Change_Rate"]
                            subclass_method_names = ["air_change_rate"]
                        
                            @property
                            def energy_feature(self): return self.getparent()
                        
                            @property
                            def air_change_rate(self): return self.findall(f"{{{self.__class__.namespace}}}Air-Change-Rate")
                        
                            def add_air_change_rate(self):
                                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Air-Change-Rate")
                        
                            class Air_Change_Rate(_Base, etree.ElementBase):
                                ""
                                element_name = "Air-Change-Rate"
                                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                element_type = "Air-Change-Rate"
                                class_name = "Air_Change_Rate"
                                documentation = None
                                type_documentation = None
                                has_text_node = False
                                min_occurs = 12
                                max_occurs = 12
                                python_type_convertor = None
                                map_codes = None
                                map_values = None
                                parent_class_name = "Air_Change_Rates"
                                parent_method_name ="air_change_rates"
                                subclass_class_names = ["Air_Change_Rate_Month", "Air_Change_Rate_Value"]
                                subclass_method_names = ["air_change_rate_month", "air_change_rate_value"]
                            
                                @property
                                def air_change_rates(self): return self.getparent()
                            
                                @property
                                def air_change_rate_month(self): return self.find(f"{{{self.__class__.namespace}}}Air-Change-Rate-Month")
                            
                                def add_air_change_rate_month(self):
                                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Air-Change-Rate-Month")
                            
                                @property
                                def air_change_rate_value(self): return self.find(f"{{{self.__class__.namespace}}}Air-Change-Rate-Value")
                            
                                def add_air_change_rate_value(self):
                                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Air-Change-Rate-Value")
                            
                                class Air_Change_Rate_Month(_Base, etree.ElementBase):
                                    ""
                                    element_name = "Air-Change-Rate-Month"
                                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                    element_type = "AirChangeRateMonth"
                                    class_name = "Air_Change_Rate_Month"
                                    documentation = None
                                    type_documentation = None
                                    has_text_node = True
                                    min_occurs = 1
                                    max_occurs = 1
                                    python_type_convertor = str
                                    map_codes = {'Jan': '', 'Feb': '', 'Mar': '', 'Apr': '', 'May': '', 'Jun': '', 'Jul': '', 'Aug': '', 'Sep': '', 'Oct': '', 'Nov': '', 'Dec': ''}
                                    map_values = {'': 'Dec'}
                                    parent_class_name = "Air_Change_Rate"
                                    parent_method_name ="air_change_rate"
                                    subclass_class_names = []
                                    subclass_method_names = []
                                
                                    @property
                                    def air_change_rate(self): return self.getparent()
                                
                                    @property
                                    def value(self): return self.__class__.map_codes[self.text]
                                
                                    @value.setter
                                    def value(self, value):
                                        if value in self.__class__.map_values:
                                            self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                                        else:
                                            raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
                                
                                    @property
                                    def code(self): return self.text
                                
                                    @code.setter
                                    def code(self, code):
                                        if code in self.__class__.map_codes:
                                            self.text = str(code)
                                        else:
                                            raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
                                
                                class Air_Change_Rate_Value(_Base, etree.ElementBase):
                                    ""
                                    element_name = "Air-Change-Rate-Value"
                                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                                    element_type = "xs:decimal"
                                    class_name = "Air_Change_Rate_Value"
                                    documentation = """Air change rate in month."""
                                    type_documentation = None
                                    has_text_node = True
                                    min_occurs = 1
                                    max_occurs = 1
                                    python_type_convertor = float
                                    map_codes = None
                                    map_values = None
                                    parent_class_name = "Air_Change_Rate"
                                    parent_method_name ="air_change_rate"
                                    subclass_class_names = []
                                    subclass_method_names = []
                                
                                    @property
                                    def air_change_rate(self): return self.getparent()
                                
                                    @property
                                    def value(self): return self.__class__.python_type_convertor(self.text)
                                
                                    @value.setter
                                    def value(self, value): self.text = str(value)
                                
                                    @property
                                    def code(self): return self.text
                                
                                    @code.setter
                                    def code(self, code): self.text = str(code)
                                
                    class Emissions_Feature(_Base, etree.ElementBase):
                        ""
                        element_name = "Emissions-Feature"
                        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                        element_type = "Emission-Feature"
                        class_name = "Emissions_Feature"
                        documentation = None
                        type_documentation = None
                        has_text_node = False
                        min_occurs = 1
                        max_occurs = 1
                        python_type_convertor = None
                        map_codes = None
                        map_values = None
                        parent_class_name = "SAP_Special_Feature"
                        parent_method_name ="sap_special_feature"
                        subclass_class_names = ["Emissions_Saved", "Emissions_Created"]
                        subclass_method_names = ["emissions_saved", "emissions_created"]
                    
                        @property
                        def sap_special_feature(self): return self.getparent()
                    
                        @property
                        def emissions_saved(self): return self.find(f"{{{self.__class__.namespace}}}Emissions-Saved")
                    
                        def add_emissions_saved(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Emissions-Saved")
                    
                        @property
                        def emissions_created(self): return self.find(f"{{{self.__class__.namespace}}}Emissions-Created")
                    
                        def add_emissions_created(self):
                            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Emissions-Created")
                    
                        class Emissions_Saved(_Base, etree.ElementBase):
                            ""
                            element_name = "Emissions-Saved"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "Emissions_Saved"
                            documentation = """Emissions saved in kg/year."""
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Emissions_Feature"
                            parent_method_name ="emissions_feature"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def emissions_feature(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
                        class Emissions_Created(_Base, etree.ElementBase):
                            ""
                            element_name = "Emissions-Created"
                            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                            element_type = "Measurement"
                            class_name = "Emissions_Created"
                            documentation = """Additional emissions in kg/year."""
                            type_documentation = """A measurement of something such as a length or area. All measurements are to 2 decimal places and must be positive."""
                            has_text_node = True
                            min_occurs = 1
                            max_occurs = 1
                            python_type_convertor = float
                            map_codes = None
                            map_values = None
                            parent_class_name = "Emissions_Feature"
                            parent_method_name ="emissions_feature"
                            subclass_class_names = []
                            subclass_method_names = []
                        
                            @property
                            def emissions_feature(self): return self.getparent()
                        
                            @property
                            def value(self): return self.__class__.python_type_convertor(self.text)
                        
                            @value.setter
                            def value(self, value): self.text = str(value)
                        
                            @property
                            def code(self): return self.text
                        
                            @code.setter
                            def code(self, code): self.text = str(code)
                        
    class Report_Header(_Base, etree.ElementBase):
        ""
        element_name = "Report-Header"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "Report-Header"
        class_name = "Report_Header"
        documentation = None
        type_documentation = """Report Header contains all the identification and searchable details for the Report."""
        has_text_node = False
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = None
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = ["RRN", "Inspection_Date", "Report_Type", "Completion_Date", "Registration_Date", "Status", "Language_Code", "Property_Type", "Region_Code", "Country_Code", "Transaction_Type", "Tenure", "Energy_Assessor", "Property", "Related_Party_Disclosure"]
        subclass_method_names = ["rrn", "inspection_date", "report_type", "completion_date", "registration_date", "status", "language_code", "property_type", "region_code", "country_code", "transaction_type", "tenure", "energy_assessor", "property", "related_party_disclosure"]
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def rrn(self): return self.find(f"{{{self.__class__.namespace}}}RRN")
    
        def add_rrn(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}RRN")
    
        @property
        def inspection_date(self): return self.find(f"{{{self.__class__.namespace}}}Inspection-Date")
    
        def add_inspection_date(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Inspection-Date")
    
        @property
        def report_type(self): return self.find(f"{{{self.__class__.namespace}}}Report-Type")
    
        def add_report_type(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Report-Type")
    
        @property
        def completion_date(self): return self.find(f"{{{self.__class__.namespace}}}Completion-Date")
    
        def add_completion_date(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Completion-Date")
    
        @property
        def registration_date(self): return self.find(f"{{{self.__class__.namespace}}}Registration-Date")
    
        def add_registration_date(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Registration-Date")
    
        @property
        def status(self): return self.find(f"{{{self.__class__.namespace}}}Status")
    
        def add_status(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Status")
    
        @property
        def language_code(self): return self.find(f"{{{self.__class__.namespace}}}Language-Code")
    
        def add_language_code(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Language-Code")
    
        @property
        def property_type(self): return self.find(f"{{{self.__class__.namespace}}}Property-Type")
    
        def add_property_type(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Property-Type")
    
        @property
        def region_code(self): return self.find(f"{{{self.__class__.namespace}}}Region-Code")
    
        def add_region_code(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Region-Code")
    
        @property
        def country_code(self): return self.find(f"{{{self.__class__.namespace}}}Country-Code")
    
        def add_country_code(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Country-Code")
    
        @property
        def transaction_type(self): return self.find(f"{{{self.__class__.namespace}}}Transaction-Type")
    
        def add_transaction_type(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Transaction-Type")
    
        @property
        def tenure(self): return self.find(f"{{{self.__class__.namespace}}}Tenure")
    
        def add_tenure(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Tenure")
    
        @property
        def energy_assessor(self): return self.find(f"{{{self.__class__.namespace}}}Energy-Assessor")
    
        def add_energy_assessor(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Energy-Assessor")
    
        @property
        def property_(self): return self.find(f"{{{self.__class__.namespace}}}Property")
    
        def add_property_(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Property")
    
        @property
        def related_party_disclosure(self): return self.find(f"{{{self.__class__.namespace}}}Related-Party-Disclosure")
    
        def add_related_party_disclosure(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Related-Party-Disclosure")
    
        class RRN(_Base, etree.ElementBase):
            ""
            element_name = "RRN"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "RRNType"
            class_name = "RRN"
            documentation = """Report Reference Number is the unique report Identifier shown on the EPC."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = None
            map_values = None
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.text
        
            @value.setter
            def value(self, value): self.text = str(value)
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code): self.text = str(code)
        
        class Inspection_Date(_Base, etree.ElementBase):
            ""
            element_name = "Inspection-Date"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "xs:date"
            class_name = "Inspection_Date"
            documentation = """Date of site visit."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = datetime.date.fromisoformat
            map_codes = None
            map_values = None
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.python_type_convertor(self.text)
        
            @value.setter
            def value(self, value): self.text = str(value)
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code): self.text = str(code)
        
        class Report_Type(_Base, etree.ElementBase):
            ""
            element_name = "Report-Type"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "ReportTypeCode"
            class_name = "Report_Type"
            documentation = """The type of assessment that was carried out."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'2': 'RdSAP Energy Performance Certificate', '3': 'Full SAP Energy Performance Certificate', '4': 'Interim RdSAP Energy Performance Certificate (to be superseded by SAP EPC)'}
            map_values = {'RdSAP Energy Performance Certificate': '2', 'Full SAP Energy Performance Certificate': '3', 'Interim RdSAP Energy Performance Certificate (to be superseded by SAP EPC)': '4'}
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
        class Completion_Date(_Base, etree.ElementBase):
            ""
            element_name = "Completion-Date"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "xs:date"
            class_name = "Completion_Date"
            documentation = """Date of completion of report. Equal to or later than Inspection-Date and before or equal to Registration-Date."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = datetime.date.fromisoformat
            map_codes = None
            map_values = None
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.python_type_convertor(self.text)
        
            @value.setter
            def value(self, value): self.text = str(value)
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code): self.text = str(code)
        
        class Registration_Date(_Base, etree.ElementBase):
            ""
            element_name = "Registration-Date"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "xs:date"
            class_name = "Registration_Date"
            documentation = """Date when report submitted to register."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = datetime.date.fromisoformat
            map_codes = None
            map_values = None
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.python_type_convertor(self.text)
        
            @value.setter
            def value(self, value): self.text = str(value)
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code): self.text = str(code)
        
        class Status(_Base, etree.ElementBase):
            ""
            element_name = "Status"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "ReportStatusCode"
            class_name = "Status"
            documentation = None
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'cancelled': 'Cancelled', 'entered': 'entered on the register', 'appeal': 'under appeal', 'removed': 'removed', 'rejected': 'rejected', 'under investigation': 'under investigation', 'not for issue': 'not for issue'}
            map_values = {'Cancelled': 'cancelled', 'entered on the register': 'entered', 'under appeal': 'appeal', 'removed': 'removed', 'rejected': 'rejected', 'under investigation': 'under investigation', 'not for issue': 'not for issue'}
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
        class Language_Code(_Base, etree.ElementBase):
            ""
            element_name = "Language-Code"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "LanguageCode"
            class_name = "Language_Code"
            documentation = """The language that the report is written in."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'1': 'English', '2': 'Welsh'}
            map_values = {'English': '1', 'Welsh': '2'}
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
        class Property_Type(_Base, etree.ElementBase):
            ""
            element_name = "Property-Type"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "PropertyTypeCode"
            class_name = "Property_Type"
            documentation = """The type of property that is being assessed. This should be the same as the Property-Type recorded in the Property-Details section."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'0': 'House', '1': 'Bungalow', '2': 'Flat', '3': 'Maisonette', '4': 'Park home'}
            map_values = {'House': '0', 'Bungalow': '1', 'Flat': '2', 'Maisonette': '3', 'Park home': '4'}
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
        class Region_Code(_Base, etree.ElementBase):
            ""
            element_name = "Region-Code"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "UKRegionCode"
            class_name = "Region_Code"
            documentation = """Region within the UK."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'1': 'Borders', '2': 'East Anglia', '3': 'East Pennines', '4': 'East Scotland', '5': 'Highland', '6': 'Midlands', '7': 'North East England', '8': 'North East Scotland', '9': 'North West England / South West Scotland', '10': 'Northern Ireland', '11': 'Orkney', '12': 'Severn Valley', '13': 'Shetland', '14': 'South East England', '15': 'South West England', '16': 'Southern England', '17': 'Thames Valley', '18': 'Wales', '19': 'West Pennines', '20': 'West Scotland', '21': 'Western Isles', '22': 'Jersey', '23': 'Guernsey', '24': 'Isle of Man', 'NR': 'for backwards compatibility only - do not use'}
            map_values = {'Borders': '1', 'East Anglia': '2', 'East Pennines': '3', 'East Scotland': '4', 'Highland': '5', 'Midlands': '6', 'North East England': '7', 'North East Scotland': '8', 'North West England / South West Scotland': '9', 'Northern Ireland': '10', 'Orkney': '11', 'Severn Valley': '12', 'Shetland': '13', 'South East England': '14', 'South West England': '15', 'Southern England': '16', 'Thames Valley': '17', 'Wales': '18', 'West Pennines': '19', 'West Scotland': '20', 'Western Isles': '21', 'Jersey': '22', 'Guernsey': '23', 'Isle of Man': '24', 'for backwards compatibility only - do not use': 'NR'}
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
        class Country_Code(_Base, etree.ElementBase):
            ""
            element_name = "Country-Code"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "UKCountryCode"
            class_name = "Country_Code"
            documentation = """Country within the UK."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'ENG': 'England', 'WLS': 'Wales', 'SCT': 'Scotland', 'NIR': 'Northern Ireland', 'IOM': 'Isle of Man', 'NR': 'for backwards compatibility only - do not use'}
            map_values = {'England': 'ENG', 'Wales': 'WLS', 'Scotland': 'SCT', 'Northern Ireland': 'NIR', 'Isle of Man': 'IOM', 'for backwards compatibility only - do not use': 'NR'}
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
        class Transaction_Type(_Base, etree.ElementBase):
            ""
            element_name = "Transaction-Type"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "TransactionType"
            class_name = "Transaction_Type"
            documentation = None
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'1': 'marketed sale', '2': 'non marketed sale', '3': 'rental (social) - this is for backwards compatibility only and should not be used', '4': 'rental (private) - this is for backwards compatibility only and should not be used', '5': 'none of the above', '6': 'new dwelling', '7': 'not recorded - this is for backwards compatibility only and should not be used', '8': 'rental', '9': 'assessment for green deal - this is for backwards compatibility only and should not be used', '10': 'following green deal - this is for backwards compatibility only and should not be used', '11': 'FiT application - this is for backwards compatibility only and should not be used', '12': 'RHI application - this is for backwards compatibility only and should not be used', '13': 'ECO assessment - this is for backwards compatibility only and should not be used', '14': 'Stock condition survey', '15': 'Grant scheme (ECO, RHI, etc.)', '16': 'Non-grant scheme (e.g. MEES)', '17': 're-mortgaging'}
            map_values = {'marketed sale': '1', 'non marketed sale': '2', 'rental (social) - this is for backwards compatibility only and should not be used': '3', 'rental (private) - this is for backwards compatibility only and should not be used': '4', 'none of the above': '5', 'new dwelling': '6', 'not recorded - this is for backwards compatibility only and should not be used': '7', 'rental': '8', 'assessment for green deal - this is for backwards compatibility only and should not be used': '9', 'following green deal - this is for backwards compatibility only and should not be used': '10', 'FiT application - this is for backwards compatibility only and should not be used': '11', 'RHI application - this is for backwards compatibility only and should not be used': '12', 'ECO assessment - this is for backwards compatibility only and should not be used': '13', 'Stock condition survey': '14', 'Grant scheme (ECO, RHI, etc.)': '15', 'Non-grant scheme (e.g. MEES)': '16', 're-mortgaging': '17'}
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
        class Tenure(_Base, etree.ElementBase):
            ""
            element_name = "Tenure"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "TenureCode"
            class_name = "Tenure"
            documentation = None
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = {'1': 'owner-occupied', '2': 'rented (social)', '3': 'rented (private)', 'ND': 'unknown'}
            map_values = {'owner-occupied': '1', 'rented (social)': '2', 'rented (private)': '3', 'unknown': 'ND'}
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.map_codes[self.text]
        
            @value.setter
            def value(self, value):
                if value in self.__class__.map_values:
                    self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                else:
                    raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code):
                if code in self.__class__.map_codes:
                    self.text = str(code)
                else:
                    raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
        
        class Energy_Assessor(_Base, etree.ElementBase):
            ""
            element_name = "Energy-Assessor"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "Energy-Assessor"
            class_name = "Energy_Assessor"
            documentation = None
            type_documentation = """An Energy Assessor is certified by a Certification Scheme as being qualified to carry out a SAP assessment and/or an RdSAP assessment."""
            has_text_node = False
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = ["Name", "Notify_Lodgement", "Contact_Address", "Web_Site", "E_Mail", "Fax", "Telephone", "Company_Name", "Scheme_Name", "Scheme_Web_Site", "Identification_Number"]
            subclass_method_names = ["name", "notify_lodgement", "contact_address", "web_site", "e_mail", "fax", "telephone", "company_name", "scheme_name", "scheme_web_site", "identification_number"]
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def name(self): return self.find(f"{{{self.__class__.namespace}}}Name")
        
            def add_name(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Name")
        
            @property
            def notify_lodgement(self): return self.find(f"{{{self.__class__.namespace}}}Notify-Lodgement")
        
            def add_notify_lodgement(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Notify-Lodgement")
        
            @property
            def contact_address(self): return self.find(f"{{{self.__class__.namespace}}}Contact-Address")
        
            def add_contact_address(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Contact-Address")
        
            @property
            def web_site(self): return self.find(f"{{{self.__class__.namespace}}}Web-Site")
        
            def add_web_site(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Web-Site")
        
            @property
            def e_mail(self): return self.find(f"{{{self.__class__.namespace}}}E-Mail")
        
            def add_e_mail(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}E-Mail")
        
            @property
            def fax(self): return self.find(f"{{{self.__class__.namespace}}}Fax")
        
            def add_fax(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Fax")
        
            @property
            def telephone(self): return self.find(f"{{{self.__class__.namespace}}}Telephone")
        
            def add_telephone(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Telephone")
        
            @property
            def company_name(self): return self.find(f"{{{self.__class__.namespace}}}Company-Name")
        
            def add_company_name(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Company-Name")
        
            @property
            def scheme_name(self): return self.find(f"{{{self.__class__.namespace}}}Scheme-Name")
        
            def add_scheme_name(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Scheme-Name")
        
            @property
            def scheme_web_site(self): return self.find(f"{{{self.__class__.namespace}}}Scheme-Web-Site")
        
            def add_scheme_web_site(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Scheme-Web-Site")
        
            @property
            def identification_number(self): return self.find(f"{{{self.__class__.namespace}}}Identification-Number")
        
            def add_identification_number(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Identification-Number")
        
            class Name(_Base, etree.ElementBase):
                ""
                element_name = "Name"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:string"
                class_name = "Name"
                documentation = """The name by which the Home Inspector is registered. This is a structured name containing prefix, first name + surname."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Notify_Lodgement(_Base, etree.ElementBase):
                ""
                element_name = "Notify-Lodgement"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Flag"
                class_name = "Notify_Lodgement"
                documentation = """Indicates whether the assessor wants to be notified that a the report has been lodged in the register"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'Y': 'Yes', 'N': 'No'}
                map_values = {'Yes': 'Y', 'No': 'N'}
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Contact_Address(_Base, etree.ElementBase):
                ""
                element_name = "Contact-Address"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "AddressType"
                class_name = "Contact_Address"
                documentation = """The address that any written correspondence can be sent to. This is not the same as the Registered Address because it may, of course, be a Post Office Box."""
                type_documentation = """An address is composed of a number of structured elements such as Postcode, Post-Town, Street etc."""
                has_text_node = False
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = ["Address_Line_1", "Address_Line_2", "Address_Line_3", "Post_Town", "Postcode"]
                subclass_method_names = ["address_line_1", "address_line_2", "address_line_3", "post_town", "postcode"]
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def address_line_1(self): return self.find(f"{{{self.__class__.namespace}}}Address-Line-1")
            
                def add_address_line_1(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Address-Line-1")
            
                @property
                def address_line_2(self): return self.find(f"{{{self.__class__.namespace}}}Address-Line-2")
            
                def add_address_line_2(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Address-Line-2")
            
                @property
                def address_line_3(self): return self.find(f"{{{self.__class__.namespace}}}Address-Line-3")
            
                def add_address_line_3(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Address-Line-3")
            
                @property
                def post_town(self): return self.find(f"{{{self.__class__.namespace}}}Post-Town")
            
                def add_post_town(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Post-Town")
            
                @property
                def postcode(self): return self.find(f"{{{self.__class__.namespace}}}Postcode")
            
                def add_postcode(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Postcode")
            
                class Address_Line_1(_Base, etree.ElementBase):
                    ""
                    element_name = "Address-Line-1"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Address_Line_1"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Contact_Address"
                    parent_method_name ="contact_address"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def contact_address(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Address_Line_2(_Base, etree.ElementBase):
                    ""
                    element_name = "Address-Line-2"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Address_Line_2"
                    documentation = """The District part of the Address. A District is an optional sub-part of the Post Town e.g. "Kings Heath" in "Birmingham" or "Ellington" in London."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Contact_Address"
                    parent_method_name ="contact_address"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def contact_address(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Address_Line_3(_Base, etree.ElementBase):
                    ""
                    element_name = "Address-Line-3"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Address_Line_3"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Contact_Address"
                    parent_method_name ="contact_address"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def contact_address(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Post_Town(_Base, etree.ElementBase):
                    ""
                    element_name = "Post-Town"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Post_Town"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Contact_Address"
                    parent_method_name ="contact_address"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def contact_address(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Postcode(_Base, etree.ElementBase):
                    ""
                    element_name = "Postcode"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "PostcodeType"
                    class_name = "Postcode"
                    documentation = """The Postcode for the Address"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Contact_Address"
                    parent_method_name ="contact_address"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def contact_address(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
            class Web_Site(_Base, etree.ElementBase):
                ""
                element_name = "Web-Site"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:string"
                class_name = "Web_Site"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class E_Mail(_Base, etree.ElementBase):
                ""
                element_name = "E-Mail"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:string"
                class_name = "E_Mail"
                documentation = """the E-Mail address that the Authorised User can be contacted at."""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Fax(_Base, etree.ElementBase):
                ""
                element_name = "Fax"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PhoneNumberType"
                class_name = "Fax"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Telephone(_Base, etree.ElementBase):
                ""
                element_name = "Telephone"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "PhoneNumberType"
                class_name = "Telephone"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Company_Name(_Base, etree.ElementBase):
                ""
                element_name = "Company-Name"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:string"
                class_name = "Company_Name"
                documentation = """The Name of the Company that the assessor is employed by."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Scheme_Name(_Base, etree.ElementBase):
                ""
                element_name = "Scheme-Name"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:string"
                class_name = "Scheme_Name"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Scheme_Web_Site(_Base, etree.ElementBase):
                ""
                element_name = "Scheme-Web-Site"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "xs:string"
                class_name = "Scheme_Web_Site"
                documentation = None
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
            class Identification_Number(_Base, etree.ElementBase):
                ""
                element_name = "Identification-Number"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "None"
                class_name = "Identification_Number"
                documentation = None
                type_documentation = None
                has_text_node = False
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Energy_Assessor"
                parent_method_name ="energy_assessor"
                subclass_class_names = ["Certificate_Number", "Membership_Number"]
                subclass_method_names = ["certificate_number", "membership_number"]
            
                @property
                def energy_assessor(self): return self.getparent()
            
                @property
                def certificate_number(self): return self.find(f"{{{self.__class__.namespace}}}Certificate-Number")
            
                def add_certificate_number(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Certificate-Number")
            
                @property
                def membership_number(self): return self.find(f"{{{self.__class__.namespace}}}Membership-Number")
            
                def add_membership_number(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Membership-Number")
            
                class Certificate_Number(_Base, etree.ElementBase):
                    ""
                    element_name = "Certificate-Number"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "CertificateNumberType"
                    class_name = "Certificate_Number"
                    documentation = """The unique identifier assigned to the assessor by the scheme by which they can be identified throughout their membership of the scheme."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Identification_Number"
                    parent_method_name ="identification_number"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def identification_number(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Membership_Number(_Base, etree.ElementBase):
                    ""
                    element_name = "Membership-Number"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Membership_Number"
                    documentation = """For Scottish DEAs only"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Identification_Number"
                    parent_method_name ="identification_number"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def identification_number(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
        class Property(_Base, etree.ElementBase):
            ""
            element_name = "Property"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "Property"
            class_name = "Property"
            documentation = None
            type_documentation = """A discrete identifiable possession, such as a piece of real-estate, to which its owner has legal title. For the Home Information Pack legislation the types of property are restricted to residential properties. It should be observed that "a property is a property is a property" and all real-estate properties, whether residential or commercial or whether being sold for the first or the nth time will have a very similar conceptual structure and similar rules and constraints. As such the broad description of a Property can be regarded as a framework, containing a set of extension points, that can be expanded as necessary to cover additional detail."""
            has_text_node = False
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = ["Address", "UPRN"]
            subclass_method_names = ["address", "uprn"]
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def address(self): return self.find(f"{{{self.__class__.namespace}}}Address")
        
            def add_address(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Address")
        
            @property
            def uprn(self): return self.find(f"{{{self.__class__.namespace}}}UPRN")
        
            def add_uprn(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}UPRN")
        
            class Address(_Base, etree.ElementBase):
                ""
                element_name = "Address"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "AddressType"
                class_name = "Address"
                documentation = None
                type_documentation = """An address is composed of a number of structured elements such as Postcode, Post-Town, Street etc."""
                has_text_node = False
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = None
                map_codes = None
                map_values = None
                parent_class_name = "Property"
                parent_method_name ="property_"
                subclass_class_names = ["Address_Line_1", "Address_Line_2", "Address_Line_3", "Post_Town", "Postcode"]
                subclass_method_names = ["address_line_1", "address_line_2", "address_line_3", "post_town", "postcode"]
            
                @property
                def property_(self): return self.getparent()
            
                @property
                def address_line_1(self): return self.find(f"{{{self.__class__.namespace}}}Address-Line-1")
            
                def add_address_line_1(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Address-Line-1")
            
                @property
                def address_line_2(self): return self.find(f"{{{self.__class__.namespace}}}Address-Line-2")
            
                def add_address_line_2(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Address-Line-2")
            
                @property
                def address_line_3(self): return self.find(f"{{{self.__class__.namespace}}}Address-Line-3")
            
                def add_address_line_3(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Address-Line-3")
            
                @property
                def post_town(self): return self.find(f"{{{self.__class__.namespace}}}Post-Town")
            
                def add_post_town(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Post-Town")
            
                @property
                def postcode(self): return self.find(f"{{{self.__class__.namespace}}}Postcode")
            
                def add_postcode(self):
                    return etree.SubElement(self,f"{{{self.__class__.namespace}}}Postcode")
            
                class Address_Line_1(_Base, etree.ElementBase):
                    ""
                    element_name = "Address-Line-1"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Address_Line_1"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Address"
                    parent_method_name ="address"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def address(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Address_Line_2(_Base, etree.ElementBase):
                    ""
                    element_name = "Address-Line-2"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Address_Line_2"
                    documentation = """The District part of the Address. A District is an optional sub-part of the Post Town e.g. "Kings Heath" in "Birmingham" or "Ellington" in London."""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Address"
                    parent_method_name ="address"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def address(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Address_Line_3(_Base, etree.ElementBase):
                    ""
                    element_name = "Address-Line-3"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Address_Line_3"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 0
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Address"
                    parent_method_name ="address"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def address(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Post_Town(_Base, etree.ElementBase):
                    ""
                    element_name = "Post-Town"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "xs:string"
                    class_name = "Post_Town"
                    documentation = None
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Address"
                    parent_method_name ="address"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def address(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
                class Postcode(_Base, etree.ElementBase):
                    ""
                    element_name = "Postcode"
                    namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                    element_type = "PostcodeType"
                    class_name = "Postcode"
                    documentation = """The Postcode for the Address"""
                    type_documentation = None
                    has_text_node = True
                    min_occurs = 1
                    max_occurs = 1
                    python_type_convertor = str
                    map_codes = None
                    map_values = None
                    parent_class_name = "Address"
                    parent_method_name ="address"
                    subclass_class_names = []
                    subclass_method_names = []
                
                    @property
                    def address(self): return self.getparent()
                
                    @property
                    def value(self): return self.text
                
                    @value.setter
                    def value(self, value): self.text = str(value)
                
                    @property
                    def code(self): return self.text
                
                    @code.setter
                    def code(self, code): self.text = str(code)
                
            class UPRN(_Base, etree.ElementBase):
                ""
                element_name = "UPRN"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "UPRNType"
                class_name = "UPRN"
                documentation = """Unique Property Reference Number"""
                type_documentation = None
                has_text_node = True
                min_occurs = 0
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Property"
                parent_method_name ="property_"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def property_(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
        class Related_Party_Disclosure(_Base, etree.ElementBase):
            ""
            element_name = "Related-Party-Disclosure"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "None"
            class_name = "Related_Party_Disclosure"
            documentation = None
            type_documentation = None
            has_text_node = False
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = None
            map_codes = None
            map_values = None
            parent_class_name = "Report_Header"
            parent_method_name ="report_header"
            subclass_class_names = ["Related_Party_Disclosure_Number", "Related_Party_Disclosure_Text"]
            subclass_method_names = ["related_party_disclosure_number", "related_party_disclosure_text"]
        
            @property
            def report_header(self): return self.getparent()
        
            @property
            def related_party_disclosure_number(self): return self.find(f"{{{self.__class__.namespace}}}Related-Party-Disclosure-Number")
        
            def add_related_party_disclosure_number(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Related-Party-Disclosure-Number")
        
            @property
            def related_party_disclosure_text(self): return self.find(f"{{{self.__class__.namespace}}}Related-Party-Disclosure-Text")
        
            def add_related_party_disclosure_text(self):
                return etree.SubElement(self,f"{{{self.__class__.namespace}}}Related-Party-Disclosure-Text")
        
            class Related_Party_Disclosure_Number(_Base, etree.ElementBase):
                ""
                element_name = "Related-Party-Disclosure-Number"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "DisclosureCode"
                class_name = "Related_Party_Disclosure_Number"
                documentation = """Code indicating any potential conflicts of interest or commercial relationships with other parties."""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = {'1': 'No related party', '2': 'Relative of homeowner or of occupier of the property', '3': 'Residing at the property', '4': 'Financial interest in the property', '5': 'Owner or Director of the organisation dealing with the property transaction', '6': 'Employed by the professional dealing with the property transaction', '7': 'Relative of the professional dealing with the property transaction'}
                map_values = {'No related party': '1', 'Relative of homeowner or of occupier of the property': '2', 'Residing at the property': '3', 'Financial interest in the property': '4', 'Owner or Director of the organisation dealing with the property transaction': '5', 'Employed by the professional dealing with the property transaction': '6', 'Relative of the professional dealing with the property transaction': '7'}
                parent_class_name = "Related_Party_Disclosure"
                parent_method_name ="related_party_disclosure"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def related_party_disclosure(self): return self.getparent()
            
                @property
                def value(self): return self.__class__.map_codes[self.text]
            
                @value.setter
                def value(self, value):
                    if value in self.__class__.map_values:
                        self.text = self.__class__.map_values[value] if self.__class__.python_type_convertor == bool else self.__class__.map_values[str(value)]
                    else:
                        raise ValueError(f'value "{value}" is not in "{str(list(self.__class__.map_values))}")')
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code):
                    if code in self.__class__.map_codes:
                        self.text = str(code)
                    else:
                        raise ValueError(f'code "{code}" is not in "{str(list(self.__class__.map_codes))}")')
            
            class Related_Party_Disclosure_Text(_Base, etree.ElementBase):
                ""
                element_name = "Related-Party-Disclosure-Text"
                namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
                element_type = "Sentence"
                class_name = "Related_Party_Disclosure_Text"
                documentation = """For backward compatibility only"""
                type_documentation = None
                has_text_node = True
                min_occurs = 1
                max_occurs = 1
                python_type_convertor = str
                map_codes = None
                map_values = None
                parent_class_name = "Related_Party_Disclosure"
                parent_method_name ="related_party_disclosure"
                subclass_class_names = []
                subclass_method_names = []
            
                @property
                def related_party_disclosure(self): return self.getparent()
            
                @property
                def value(self): return self.text
            
                @value.setter
                def value(self, value): self.text = str(value)
            
                @property
                def code(self): return self.text
            
                @code.setter
                def code(self, code): self.text = str(code)
            
    class Insurance_Details(_Base, etree.ElementBase):
        ""
        element_name = "Insurance-Details"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "Insurance-Details"
        class_name = "Insurance_Details"
        documentation = None
        type_documentation = """Details of the Professional Indemnity Insurance policy used to provide cover against a compensation claim against any particular Home Condition Report. A particular Home Condition Report may be covered by an Professional Indemnity Insurance policy in one of three different ways: * The Home Inspector has personal Professional Indemnity Insurance and the Home Condition Report is covered by this. * The Home Condition Report is covered by an umbrella Professional Indemnity Insurance policy held by the Home Condition Report Supplier that assigned the inspection to the Home Inspector. * An individual insurance policy is taken out to cover the individual report such as the case where the property is unusual and falls outside the Home Inspectors normal Professional Indemnity Insurance policy. A Home Inspector may use any or all of these methods to providing Professional Indemnity Insurance for a Report on a case-by-case basis."""
        has_text_node = False
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = None
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = ["Insurer", "Policy_No", "Effective_Date", "Expiry_Date", "PI_Limit"]
        subclass_method_names = ["insurer", "policy_no", "effective_date", "expiry_date", "pi_limit"]
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def insurer(self): return self.find(f"{{{self.__class__.namespace}}}Insurer")
    
        def add_insurer(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Insurer")
    
        @property
        def policy_no(self): return self.find(f"{{{self.__class__.namespace}}}Policy-No")
    
        def add_policy_no(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Policy-No")
    
        @property
        def effective_date(self): return self.find(f"{{{self.__class__.namespace}}}Effective-Date")
    
        def add_effective_date(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Effective-Date")
    
        @property
        def expiry_date(self): return self.find(f"{{{self.__class__.namespace}}}Expiry-Date")
    
        def add_expiry_date(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}Expiry-Date")
    
        @property
        def pi_limit(self): return self.find(f"{{{self.__class__.namespace}}}PI-Limit")
    
        def add_pi_limit(self):
            return etree.SubElement(self,f"{{{self.__class__.namespace}}}PI-Limit")
    
        class Insurer(_Base, etree.ElementBase):
            ""
            element_name = "Insurer"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "xs:string"
            class_name = "Insurer"
            documentation = """The name of the insurance company that underwrites / issued the insurance policy"""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = None
            map_values = None
            parent_class_name = "Insurance_Details"
            parent_method_name ="insurance_details"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def insurance_details(self): return self.getparent()
        
            @property
            def value(self): return self.text
        
            @value.setter
            def value(self, value): self.text = str(value)
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code): self.text = str(code)
        
        class Policy_No(_Base, etree.ElementBase):
            ""
            element_name = "Policy-No"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "xs:string"
            class_name = "Policy_No"
            documentation = """The policy number of the insurance policy"""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = str
            map_codes = None
            map_values = None
            parent_class_name = "Insurance_Details"
            parent_method_name ="insurance_details"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def insurance_details(self): return self.getparent()
        
            @property
            def value(self): return self.text
        
            @value.setter
            def value(self, value): self.text = str(value)
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code): self.text = str(code)
        
        class Effective_Date(_Base, etree.ElementBase):
            ""
            element_name = "Effective-Date"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "xs:date"
            class_name = "Effective_Date"
            documentation = """The date that the insurance policy becomes effective (commences cover)"""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = datetime.date.fromisoformat
            map_codes = None
            map_values = None
            parent_class_name = "Insurance_Details"
            parent_method_name ="insurance_details"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def insurance_details(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.python_type_convertor(self.text)
        
            @value.setter
            def value(self, value): self.text = str(value)
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code): self.text = str(code)
        
        class Expiry_Date(_Base, etree.ElementBase):
            ""
            element_name = "Expiry-Date"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "xs:date"
            class_name = "Expiry_Date"
            documentation = """The date that the insurance policy is supposed to expire."""
            type_documentation = None
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = datetime.date.fromisoformat
            map_codes = None
            map_values = None
            parent_class_name = "Insurance_Details"
            parent_method_name ="insurance_details"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def insurance_details(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.python_type_convertor(self.text)
        
            @value.setter
            def value(self, value): self.text = str(value)
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code): self.text = str(code)
        
        class PI_Limit(_Base, etree.ElementBase):
            ""
            element_name = "PI-Limit"
            namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
            element_type = "Money"
            class_name = "PI_Limit"
            documentation = """The upper limit of the Professional Indemnity cover provided by the insurance policy."""
            type_documentation = """Extension of a Decimal value for use with monetary values where a currency code needs to be specified. The currency code is actually metadata about the value so, in line with good XML practice, the Currency Code is declared as an XML-Attribute of the Money datatype rather than as a separate XML-Element. The currency attribute should then include a list of valid currencies codes that are supported."""
            has_text_node = True
            min_occurs = 1
            max_occurs = 1
            python_type_convertor = float
            map_codes = None
            map_values = None
            parent_class_name = "Insurance_Details"
            parent_method_name ="insurance_details"
            subclass_class_names = []
            subclass_method_names = []
        
            @property
            def insurance_details(self): return self.getparent()
        
            @property
            def value(self): return self.__class__.python_type_convertor(self.text)
        
            @value.setter
            def value(self, value): self.text = str(value)
        
            @property
            def code(self): return self.text
        
            @code.setter
            def code(self, code): self.text = str(code)
        
    class ExternalDefinitions_Revision_Number(_Base, etree.ElementBase):
        ""
        element_name = "ExternalDefinitions-Revision-Number"
        namespace = "https://epbr.digital.communities.gov.uk/xsd/rdsap"
        element_type = "xs:string"
        class_name = "ExternalDefinitions_Revision_Number"
        documentation = """A number indicating the version of related ExternalDefinitions.xsd"""
        type_documentation = None
        has_text_node = True
        min_occurs = 1
        max_occurs = 1
        python_type_convertor = str
        map_codes = None
        map_values = None
        parent_class_name = "RdSAP_Report"
        parent_method_name ="rdsap_report"
        subclass_class_names = []
        subclass_method_names = []
    
        @property
        def rdsap_report(self): return self.getparent()
    
        @property
        def value(self): return self.text
    
        @value.setter
        def value(self, value): self.text = str(value)
    
        @property
        def code(self): return self.text
    
        @code.setter
        def code(self, code): self.text = str(code)
    
