diff --git a/docs/source/translation/zone_roof.rst b/docs/source/translation/zone_roof.rst
index b4f1e7df..4e1ed757 100644
--- a/docs/source/translation/zone_roof.rst
+++ b/docs/source/translation/zone_roof.rst
@@ -30,16 +30,19 @@ type according to the following mapping.
    unvented attic         vented_attic
    vented attic           vented_attic
    venting unknown attic  vented_attic
-   other                  *not translated*
+   other                  *see note below*
    =====================  ================
 
-.. warning:: 
+.. note::
    
-   There is no way to get a HEScore ``cond_attic``.
+   Currently, there's no existing HPXML element capturing a conditioned attic.
+   The only way to model a HEScore ``cond_attic`` is to specify HPXML Attic Type
+   to be ``other`` with an extra element ``Attic/extension/Conditioned`` to be
+   ``true``.
+
+   Otherwise, HPXML Attic Type ``other`` will not be translated and will
+   result in a translation error.
 
-.. note::   
-   
-   Items that are *not translated* will result in a translation error.
    
 HEScore can accept up to two attic/roof constructions. If there are more than
 two specified in HPXML, the properties of the ``Attic`` elements with
diff --git a/hescorehpxml/__init__.py b/hescorehpxml/__init__.py
index 056928d6..306fcba0 100644
--- a/hescorehpxml/__init__.py
+++ b/hescorehpxml/__init__.py
@@ -923,9 +923,13 @@ class HPXMLtoHEScoreTranslator(object):
             hpxml_attic_type = xpath(attic, 'h:AtticType/text()')
             atticd['rooftype'] = rooftypemap[hpxml_attic_type]
             if atticd['rooftype'] is None:
-                raise TranslationError(
-                    'Attic {}: Cannot translate HPXML AtticType {} to HEScore rooftype.'.format(atticid,
-                                                                                                hpxml_attic_type))
+                attc_is_cond = xpath(attic, 'h:extension/h:Conditioned/text()')
+                if attc_is_cond == 'true':
+                    atticd['rooftype'] = 'cond_attic'
+                else:
+                    raise TranslationError(
+                        'Attic {}: Cannot translate HPXML AtticType {} to HEScore rooftype.'.format(atticid,
+                                                                                                    hpxml_attic_type))
 
             # Roof color
             solar_absorptance = convert_to_type(float, xpath(roof, 'h:SolarAbsorptance/text()'))

Workaround for conditioned attics in HPXML 2.3
There is [no way to translate a conditioned attic](https://hescore-hpxml.readthedocs.io/en/latest/translation/zone_roof.html#id1) from HPXML 2.3. It [will be possible](https://hpxml.nrel.gov/datadictionary/3/Building/BuildingDetails/Enclosure/Attics/Attic/AtticType/Attic/Conditioned) when we move to HPXML 3. We should include an extension to allow people to get that in v2.3. 

Let's do this as follows: To get a conditioned attic in HEScore, you set `Attic/AtticType` to "other" and then `Attic/extension/Conditioned` to "true". If it meets those two criteria, then translate as `cond_attic` in HEScore. If not that act as it normally does (i.e. "other" will cause the translation to fail.).

To Do:

- [ ] Update translation
- [ ] Write test of new capability
- [ ] Update docs to reflect change in behavior
diff --git a/tests/tests.py b/tests/tests.py
index 13fff2ac..ccc81832 100644
--- a/tests/tests.py
+++ b/tests/tests.py
@@ -1970,6 +1970,33 @@ class TestHEScore2019Updates(unittest.TestCase, ComparatorBase):
         self.assertEqual(system['type'], 'tankless')
         self.assertAlmostEqual(system['energy_factor'], 0.7)
 
+    def test_conditioned_attic(self):
+        tr = self._load_xmlfile('house4')
+        attic = self.xpath('//h:Attic[h:SystemIdentifier/@id="attic1"]')
+        attic_type = self.xpath('//h:Attic[h:SystemIdentifier/@id="attic1"]/h:AtticType')
+        attic_type.text = 'other'
+        self.assertRaisesRegexp(
+            TranslationError,
+            r'Attic attic1: Cannot translate HPXML AtticType other to HEScore rooftype.',
+            tr.hpxml_to_hescore_dict
+        )
+        is_attic_cond = etree.SubElement(etree.SubElement(attic, tr.addns('h:extension')), tr.addns('h:Conditioned'))
+        is_attic_cond.text = 'true'
+        d = tr.hpxml_to_hescore_dict()
+        roof_type = d['building']['zone']['zone_roof'][0]['roof_type']
+        self.assertEqual(roof_type, 'cond_attic')
+        is_attic_cond.text = 'false'
+        self.assertRaisesRegexp(
+            TranslationError,
+            r'Attic \w+: Cannot translate HPXML AtticType other to HEScore rooftype.',
+            tr.hpxml_to_hescore_dict
+        )
+        attic_type.text = 'vented attic'
+        is_attic_cond.text = 'true'
+        d = tr.hpxml_to_hescore_dict()
+        roof_type = d['building']['zone']['zone_roof'][0]['roof_type']
+        self.assertEqual(roof_type, 'vented_attic')
+
 
 if __name__ == "__main__":
     unittest.main()

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
3.9
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.16
anyio==4.9.0
babel==2.17.0
certifi==2025.1.31
charset-normalizer==3.4.1
click==8.1.8
colorama==0.4.6
coverage==7.8.0
docutils==0.21.2
exceptiongroup==1.2.2
flake8==7.2.0
future==1.0.0
h11==0.14.0
-e git+https://github.com/NREL/hescore-hpxml.git@cb48cf3a4bdcdbc0951186dd59b0e5e64c2c3d67#egg=hescore_hpxml
idna==3.10
imagesize==1.4.1
importlib_metadata==8.6.1
iniconfig==2.1.0
Jinja2==3.1.6
lxml==5.3.1
MarkupSafe==3.0.2
mccabe==0.7.0
packaging==24.2
pluggy==1.5.0
pycodestyle==2.13.0
pyflakes==3.3.2
Pygments==2.19.1
pytest==8.3.5
requests==2.32.3
sniffio==1.3.1
snowballstemmer==2.2.0
Sphinx==7.4.7
sphinx-autobuild==2024.10.3
sphinx-rtd-theme==3.0.2
sphinxcontrib-applehelp==2.0.0
sphinxcontrib-devhelp==2.0.0
sphinxcontrib-htmlhelp==2.1.0
sphinxcontrib-jquery==4.1
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==2.0.0
sphinxcontrib-serializinghtml==2.0.0
starlette==0.46.1
tomli==2.2.1
typing_extensions==4.13.0
urllib3==2.3.0
uvicorn==0.34.0
watchfiles==1.0.4
websockets==15.0.1
zipp==3.21.0

name: hescore-hpxml
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.16
      - anyio==4.9.0
      - babel==2.17.0
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - click==8.1.8
      - colorama==0.4.6
      - coverage==7.8.0
      - docutils==0.21.2
      - exceptiongroup==1.2.2
      - flake8==7.2.0
      - future==1.0.0
      - h11==0.14.0
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==8.6.1
      - iniconfig==2.1.0
      - jinja2==3.1.6
      - lxml==5.3.1
      - markupsafe==3.0.2
      - mccabe==0.7.0
      - packaging==24.2
      - pluggy==1.5.0
      - pycodestyle==2.13.0
      - pyflakes==3.3.2
      - pygments==2.19.1
      - pytest==8.3.5
      - requests==2.32.3
      - sniffio==1.3.1
      - snowballstemmer==2.2.0
      - sphinx==7.4.7
      - sphinx-autobuild==2024.10.3
      - sphinx-rtd-theme==3.0.2
      - sphinxcontrib-applehelp==2.0.0
      - sphinxcontrib-devhelp==2.0.0
      - sphinxcontrib-htmlhelp==2.1.0
      - sphinxcontrib-jquery==4.1
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==2.0.0
      - sphinxcontrib-serializinghtml==2.0.0
      - starlette==0.46.1
      - tomli==2.2.1
      - typing-extensions==4.13.0
      - urllib3==2.3.0
      - uvicorn==0.34.0
      - watchfiles==1.0.4
      - websockets==15.0.1
      - zipp==3.21.0
prefix: /opt/conda/envs/hescore-hpxml

tests/tests.py::TestHEScore2019Updates::test_conditioned_attic
tests/tests.py::TestAPIHouses::test_house1 tests/tests.py::TestAPIHouses::test_house1_v1_1 tests/tests.py::TestAPIHouses::test_house1_v2 tests/tests.py::TestAPIHouses::test_house1_v2_1 tests/tests.py::TestAPIHouses::test_house2 tests/tests.py::TestAPIHouses::test_house3 tests/tests.py::TestAPIHouses::test_house4 tests/tests.py::TestAPIHouses::test_house5 tests/tests.py::TestAPIHouses::test_house6 tests/tests.py::TestAPIHouses::test_house7 tests/tests.py::TestAPIHouses::test_house8 tests/tests.py::TestOtherHouses::test_air_source_heat_pump_has_no_ducts tests/tests.py::TestOtherHouses::test_attic_knee_wall tests/tests.py::TestOtherHouses::test_attic_roof_assoc tests/tests.py::TestOtherHouses::test_bad_duct_location tests/tests.py::TestOtherHouses::test_bldgid_not_found tests/tests.py::TestOtherHouses::test_clg_sys_has_air_dist tests/tests.py::TestOtherHouses::test_cooling_system_wrong_efficiency_type tests/tests.py::TestOtherHouses::test_dist_sys_idref tests/tests.py::TestOtherHouses::test_evap_cooling_system_type tests/tests.py::TestOtherHouses::test_external_id_extension_passthru tests/tests.py::TestOtherHouses::test_external_id_passthru tests/tests.py::TestOtherHouses::test_extra_roof_sheathing_insulation tests/tests.py::TestOtherHouses::test_extra_wall_sheathing_insulation tests/tests.py::TestOtherHouses::test_floor_no_area tests/tests.py::TestOtherHouses::test_foundation_walls_on_slab tests/tests.py::TestOtherHouses::test_heating_system_no_efficiency tests/tests.py::TestOtherHouses::test_heating_system_wrong_efficiency_type tests/tests.py::TestOtherHouses::test_heatpump_no_cooling tests/tests.py::TestOtherHouses::test_heatpump_no_heating tests/tests.py::TestOtherHouses::test_hescore_min tests/tests.py::TestOtherHouses::test_htg_sys_has_air_dist tests/tests.py::TestOtherHouses::test_hvac_fractions_sum_to_one tests/tests.py::TestOtherHouses::test_impossible_cooling_system_type tests/tests.py::TestOtherHouses::test_impossible_heating_system_type tests/tests.py::TestOtherHouses::test_impossible_triple_pane_window tests/tests.py::TestOtherHouses::test_impossible_window tests/tests.py::TestOtherHouses::test_indirect_dhw_error tests/tests.py::TestOtherHouses::test_invalid_attic_type tests/tests.py::TestOtherHouses::test_invalid_residential_faciliy_type tests/tests.py::TestOtherHouses::test_invalid_roof_type tests/tests.py::TestOtherHouses::test_invalid_surroundings tests/tests.py::TestOtherHouses::test_log_wall_fail tests/tests.py::TestOtherHouses::test_mentor_extension tests/tests.py::TestOtherHouses::test_missing_attached_to_roof tests/tests.py::TestOtherHouses::test_missing_cooling_system tests/tests.py::TestOtherHouses::test_missing_cooling_weighting_factor tests/tests.py::TestOtherHouses::test_missing_heating_system tests/tests.py::TestOtherHouses::test_missing_heating_weighting_factor tests/tests.py::TestOtherHouses::test_missing_residential_facility_type tests/tests.py::TestOtherHouses::test_missing_roof_color tests/tests.py::TestOtherHouses::test_missing_roof_type tests/tests.py::TestOtherHouses::test_missing_siding tests/tests.py::TestOtherHouses::test_missing_skylight_area tests/tests.py::TestOtherHouses::test_missing_surroundings tests/tests.py::TestOtherHouses::test_missing_water_heater tests/tests.py::TestOtherHouses::test_missing_window_area tests/tests.py::TestOtherHouses::test_missing_window_orientation tests/tests.py::TestOtherHouses::test_only_duct_system_per_heating_sys tests/tests.py::TestOtherHouses::test_ove_low_r tests/tests.py::TestOtherHouses::test_preconstruction_event_type tests/tests.py::TestOtherHouses::test_siding_cmu_fail tests/tests.py::TestOtherHouses::test_siding_fail2 tests/tests.py::TestOtherHouses::test_tankless_coil_dhw_error tests/tests.py::TestOtherHouses::test_too_many_duct_systems tests/tests.py::TestOtherHouses::test_townhouse_walls tests/tests.py::TestOtherHouses::test_townhouse_walls_all_same tests/tests.py::TestOtherHouses::test_townhouse_walls_conflict tests/tests.py::TestOtherHouses::test_townhouse_window_fail tests/tests.py::TestOtherHouses::test_townhouse_window_wall_all_same_fail tests/tests.py::TestOtherHouses::test_townhouse_windows_area_wrong tests/tests.py::TestOtherHouses::test_wall_construction_ps_low_r tests/tests.py::TestOtherHouses::test_wall_insulation_layer_missing_rvalue tests/tests.py::TestOtherHouses::test_wall_same_area_same_side_different_construction tests/tests.py::TestOtherHouses::test_window_area_sum_on_angled_front_door tests/tests.py::TestOtherHouses::test_window_attached_to_wall tests/tests.py::TestOtherHouses::test_wood_stove tests/tests.py::TestOtherHouses::test_wood_stove_invalid_fuel_type tests/tests.py::TestOtherHouses::test_zipcode_missing tests/tests.py::TestInputOutOfBounds::test_assessment_date1 tests/tests.py::TestInputOutOfBounds::test_assessment_date2 tests/tests.py::TestInputOutOfBounds::test_conditioned_floor_area1 tests/tests.py::TestInputOutOfBounds::test_conditioned_floor_area2 tests/tests.py::TestInputOutOfBounds::test_cooling_efficiency tests/tests.py::TestInputOutOfBounds::test_cooling_year tests/tests.py::TestInputOutOfBounds::test_dhw_heat_pump_efficiency tests/tests.py::TestInputOutOfBounds::test_dhw_storage_efficiency tests/tests.py::TestInputOutOfBounds::test_dhw_year tests/tests.py::TestInputOutOfBounds::test_envelope_leakage tests/tests.py::TestInputOutOfBounds::test_evap_cooler_missing_efficiency tests/tests.py::TestInputOutOfBounds::test_floor_to_ceiling_height1 tests/tests.py::TestInputOutOfBounds::test_floor_to_ceiling_height2 tests/tests.py::TestInputOutOfBounds::test_heating_efficiency_furnace tests/tests.py::TestInputOutOfBounds::test_heating_efficiency_gchp tests/tests.py::TestInputOutOfBounds::test_heating_efficiency_heat_pump tests/tests.py::TestInputOutOfBounds::test_heating_year tests/tests.py::TestInputOutOfBounds::test_num_floor_above_grade tests/tests.py::TestInputOutOfBounds::test_skylight_area tests/tests.py::TestInputOutOfBounds::test_skylight_u_value tests/tests.py::TestInputOutOfBounds::test_window_area tests/tests.py::TestInputOutOfBounds::test_window_u_value tests/tests.py::TestInputOutOfBounds::test_year_built1 tests/tests.py::TestInputOutOfBounds::test_year_built2 tests/tests.py::TestHVACFractions::test_allow_5pct_diff tests/tests.py::TestHVACFractions::test_boiler_roomac tests/tests.py::TestHVACFractions::test_furnace_baseboard_centralac tests/tests.py::TestHVACFractions::test_furnace_heat_pump tests/tests.py::TestHVACFractions::test_wall_furnace_baseboard_centralac tests/tests.py::TestPhotovoltaics::test_azimuth_orientation_missing tests/tests.py::TestPhotovoltaics::test_capacity_missing tests/tests.py::TestPhotovoltaics::test_collector_area tests/tests.py::TestPhotovoltaics::test_orientation tests/tests.py::TestPhotovoltaics::test_pv tests/tests.py::TestPhotovoltaics::test_two_sys_avg tests/tests.py::TestPhotovoltaics::test_two_sys_different_capacity_error tests/tests.py::TestPhotovoltaics::test_years_missing tests/tests.py::TesHPXMLVersion2Point3::test_floor_furnace tests/tests.py::TesHPXMLVersion2Point3::test_medium_dark_roof_color tests/tests.py::TesHPXMLVersion2Point3::test_roof_absorptance tests/tests.py::TestHEScore2019Updates::test_bldg_about_comment tests/tests.py::TestHEScore2019Updates::test_duct_location_validation tests/tests.py::TestHEScore2019Updates::test_hvac_combinations tests/tests.py::TestHEScore2019Updates::test_skylight_solar_screens_exteriorshading tests/tests.py::TestHEScore2019Updates::test_skylight_solar_screens_treatments tests/tests.py::TestHEScore2019Updates::test_tankless tests/tests.py::TestHEScore2019Updates::test_tankless_energyfactorerror tests/tests.py::TestHEScore2019Updates::test_uef_over_ef tests/tests.py::TestHEScore2019Updates::test_uef_with_tankless tests/tests.py::TestHEScore2019Updates::test_window_solar_screens
docs/source/translation/zone_roof.rst hescorehpxml/__init__.py
docs/source/translation/zone_roof.rst hescorehpxml/__init__.py