openepd 3.0.0__py3-none-any.whl → 3.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. openepd/__version__.py +1 -1
  2. openepd/model/specs/__init__.py +71 -19
  3. openepd/model/specs/aluminium.py +1 -1
  4. openepd/model/specs/concrete.py +1 -167
  5. openepd/model/specs/generated/accessories.py +63 -0
  6. openepd/model/specs/generated/aggregates.py +71 -0
  7. openepd/model/specs/generated/aluminium.py +66 -0
  8. openepd/model/specs/generated/asphalt.py +86 -0
  9. openepd/model/specs/generated/bulk_materials.py +26 -0
  10. openepd/model/specs/generated/cast_decks_and_underlayment.py +26 -0
  11. openepd/model/specs/generated/cladding.py +214 -0
  12. openepd/model/specs/generated/cmu.py +46 -0
  13. openepd/model/specs/generated/common.py +27 -0
  14. openepd/model/specs/generated/concrete.py +151 -0
  15. openepd/model/specs/generated/conveying_equipment.py +57 -0
  16. openepd/model/specs/generated/electrical.py +297 -0
  17. openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py +63 -0
  18. openepd/model/specs/generated/electricity.py +26 -0
  19. openepd/model/specs/generated/enums.py +2420 -0
  20. openepd/model/specs/generated/finishes.py +519 -0
  21. openepd/model/specs/generated/fire_and_smoke_protection.py +79 -0
  22. openepd/model/specs/generated/furnishings.py +95 -0
  23. openepd/model/specs/generated/grouting.py +26 -0
  24. openepd/model/specs/generated/manufacturing_inputs.py +131 -0
  25. openepd/model/specs/generated/masonry.py +77 -0
  26. openepd/model/specs/generated/material_handling.py +35 -0
  27. openepd/model/specs/generated/mechanical.py +271 -0
  28. openepd/model/specs/generated/mechanical_insulation.py +41 -0
  29. openepd/model/specs/generated/network_infrastructure.py +181 -0
  30. openepd/model/specs/generated/openings.py +423 -0
  31. openepd/model/specs/generated/other_electrical_equipment.py +26 -0
  32. openepd/model/specs/generated/other_materials.py +123 -0
  33. openepd/model/specs/generated/plumbing.py +153 -0
  34. openepd/model/specs/generated/precast_concrete.py +68 -0
  35. openepd/model/specs/generated/sheathing.py +74 -0
  36. openepd/model/specs/generated/steel.py +224 -0
  37. openepd/model/specs/generated/thermal_moisture_protection.py +233 -0
  38. openepd/model/specs/generated/utility_piping.py +65 -0
  39. openepd/model/specs/generated/wood.py +167 -0
  40. openepd/model/specs/generated/wood_joists.py +38 -0
  41. openepd/model/specs/glass.py +1 -45
  42. openepd/model/specs/steel.py +1 -10
  43. openepd/model/validation/quantity.py +4 -3
  44. {openepd-3.0.0.dist-info → openepd-3.1.0.dist-info}/METADATA +1 -1
  45. openepd-3.1.0.dist-info/RECORD +95 -0
  46. openepd-3.0.0.dist-info/RECORD +0 -59
  47. {openepd-3.0.0.dist-info → openepd-3.1.0.dist-info}/LICENSE +0 -0
  48. {openepd-3.0.0.dist-info → openepd-3.1.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,95 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.compat.pydantic import pyd
21
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
22
+ from openepd.model.specs.generated.enums import CountertopMaterial
23
+ from openepd.model.validation.quantity import LengthMmStr, validate_unit_factory
24
+
25
+
26
+ class DemountablePartitionTrackV1(BaseOpenEpdHierarchicalSpec):
27
+ """Demountable partition track performance specification."""
28
+
29
+ _EXT_VERSION = "1.0"
30
+
31
+
32
+ class ChairsV1(BaseOpenEpdHierarchicalSpec):
33
+ """Chairs performance specification."""
34
+
35
+ _EXT_VERSION = "1.0"
36
+
37
+
38
+ class CountertopsV1(BaseOpenEpdHierarchicalSpec):
39
+ """Countertops performance specification."""
40
+
41
+ _EXT_VERSION = "1.0"
42
+
43
+ # Own fields:
44
+ thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="30 mm")
45
+ countertop_material: CountertopMaterial | None = pyd.Field(default=None, description="", example="Stone")
46
+
47
+ _thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
48
+
49
+
50
+ class DemountablePartitionsV1(BaseOpenEpdHierarchicalSpec):
51
+ """Demountable partitions performance specification."""
52
+
53
+ _EXT_VERSION = "1.0"
54
+
55
+ # Nested specs:
56
+ DemountablePartitionTrack: DemountablePartitionTrackV1 | None = None
57
+
58
+
59
+ class OtherFurnishingsV1(BaseOpenEpdHierarchicalSpec):
60
+ """Other furnishings performance specification."""
61
+
62
+ _EXT_VERSION = "1.0"
63
+
64
+
65
+ class StorageFurnitureV1(BaseOpenEpdHierarchicalSpec):
66
+ """Storage furniture performance specification."""
67
+
68
+ _EXT_VERSION = "1.0"
69
+
70
+
71
+ class TablesV1(BaseOpenEpdHierarchicalSpec):
72
+ """Tables performance specification."""
73
+
74
+ _EXT_VERSION = "1.0"
75
+
76
+
77
+ class WorkSurfacesV1(BaseOpenEpdHierarchicalSpec):
78
+ """Work surfaces performance specification."""
79
+
80
+ _EXT_VERSION = "1.0"
81
+
82
+
83
+ class FurnishingsV1(BaseOpenEpdHierarchicalSpec):
84
+ """Furnishings performance specification."""
85
+
86
+ _EXT_VERSION = "1.0"
87
+
88
+ # Nested specs:
89
+ Chairs: ChairsV1 | None = None
90
+ Countertops: CountertopsV1 | None = None
91
+ DemountablePartitions: DemountablePartitionsV1 | None = None
92
+ OtherFurnishings: OtherFurnishingsV1 | None = None
93
+ StorageFurniture: StorageFurnitureV1 | None = None
94
+ Tables: TablesV1 | None = None
95
+ WorkSurfaces: WorkSurfacesV1 | None = None
@@ -0,0 +1,26 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
21
+
22
+
23
+ class GroutingV1(BaseOpenEpdHierarchicalSpec):
24
+ """Grouting performance specification."""
25
+
26
+ _EXT_VERSION = "1.0"
@@ -0,0 +1,131 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.compat.pydantic import pyd
21
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
22
+ from openepd.model.specs.concrete import Cementitious
23
+ from openepd.model.specs.generated.enums import (
24
+ AdmixtureEffects,
25
+ CarpetYarnType,
26
+ CementAstmType,
27
+ CementC1157,
28
+ CementCsaA3001,
29
+ CementEn197_1,
30
+ CementScm,
31
+ MasonryCementAstmC91Type,
32
+ TextilesFabricType,
33
+ )
34
+
35
+
36
+ class CementV1(BaseOpenEpdHierarchicalSpec):
37
+ """Cement performance specification."""
38
+
39
+ _EXT_VERSION = "1.0"
40
+
41
+ # Own fields:
42
+ cementitious: Cementitious | None = pyd.Field(default=None, description="")
43
+ white_cement: bool | None = pyd.Field(default=None, description="", example=True)
44
+ astm_type: CementAstmType | None = pyd.Field(default=None, description="", example="C150 Type I")
45
+ c1157: list[CementC1157] | None = pyd.Field(default=None, description="", example=["GU"])
46
+ csa_a3001: list[CementCsaA3001] | None = pyd.Field(default=None, description="", example=["A3001 GU"])
47
+ en197_1: CementEn197_1 | None = pyd.Field(default=None, description="", example="CEM I")
48
+ oil_well_cement: bool | None = pyd.Field(default=None, description="", example=True)
49
+
50
+
51
+ class MasonryCementV1(BaseOpenEpdHierarchicalSpec):
52
+ """Masonry cement performance specification."""
53
+
54
+ _EXT_VERSION = "1.0"
55
+
56
+ # Own fields:
57
+ astm_c91_type: MasonryCementAstmC91Type | None = pyd.Field(default=None, description="", example="Type N")
58
+
59
+
60
+ class SupplementaryCementitiousMaterialsV1(BaseOpenEpdHierarchicalSpec):
61
+ """Supplementary cementitious materials performance specification."""
62
+
63
+ _EXT_VERSION = "1.0"
64
+
65
+ # Own fields:
66
+ cement_scm: list[CementScm] | None = pyd.Field(default=None, description="", example=["ggbs"])
67
+
68
+
69
+ class AccessFlooringPedestalsV1(BaseOpenEpdHierarchicalSpec):
70
+ """Access flooring pedestals performance specification."""
71
+
72
+ _EXT_VERSION = "1.0"
73
+
74
+
75
+ class CarpetBackingV1(BaseOpenEpdHierarchicalSpec):
76
+ """Fabric backing holding a carpet together."""
77
+
78
+ _EXT_VERSION = "1.0"
79
+
80
+
81
+ class CarpetFiberV1(BaseOpenEpdHierarchicalSpec):
82
+ """Fiber yarn used in the manufacture of carpet, typically nylon or wool."""
83
+
84
+ _EXT_VERSION = "1.0"
85
+
86
+ # Own fields:
87
+ yarn_material: CarpetYarnType | None = pyd.Field(default=None, description="", example="Nylon 6,6")
88
+ yarn_recycled_content: float | None = pyd.Field(default=None, description="", example=2.3)
89
+
90
+
91
+ class CementitiousMaterialsV1(BaseOpenEpdHierarchicalSpec):
92
+ """Cementitious materials performance specification."""
93
+
94
+ _EXT_VERSION = "1.0"
95
+
96
+ # Nested specs:
97
+ Cement: CementV1 | None = None
98
+ MasonryCement: MasonryCementV1 | None = None
99
+ SupplementaryCementitiousMaterials: SupplementaryCementitiousMaterialsV1 | None = None
100
+
101
+
102
+ class ConcreteAdmixturesV1(BaseOpenEpdHierarchicalSpec):
103
+ """Concrete admixtures performance specification."""
104
+
105
+ _EXT_VERSION = "1.0"
106
+
107
+ # Own fields:
108
+ effects: list[AdmixtureEffects] | None = pyd.Field(default=None, description="", example=["Air Entrainer"])
109
+
110
+
111
+ class TextilesV1(BaseOpenEpdHierarchicalSpec):
112
+ """Textiles performance specification."""
113
+
114
+ _EXT_VERSION = "1.0"
115
+
116
+ # Own fields:
117
+ fabric_type: list[TextilesFabricType] | None = pyd.Field(default=None, description="", example=["Leather"])
118
+
119
+
120
+ class ManufacturingInputsV1(BaseOpenEpdHierarchicalSpec):
121
+ """Manufacturing inputs performance specification."""
122
+
123
+ _EXT_VERSION = "1.0"
124
+
125
+ # Nested specs:
126
+ AccessFlooringPedestals: AccessFlooringPedestalsV1 | None = None
127
+ CarpetBacking: CarpetBackingV1 | None = None
128
+ CarpetFiber: CarpetFiberV1 | None = None
129
+ CementitiousMaterials: CementitiousMaterialsV1 | None = None
130
+ ConcreteAdmixtures: ConcreteAdmixturesV1 | None = None
131
+ Textiles: TextilesV1 | None = None
@@ -0,0 +1,77 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.compat.pydantic import pyd
21
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
22
+ from openepd.model.validation.quantity import PressureMPaStr, validate_unit_factory
23
+
24
+
25
+ class GMUV1(BaseOpenEpdHierarchicalSpec):
26
+ """Glass Masonry Unit performance specification."""
27
+
28
+ _EXT_VERSION = "1.0"
29
+
30
+
31
+ class AutoclavedAeratedConcreteV1(BaseOpenEpdHierarchicalSpec):
32
+ """Autoclaved aerated concrete performance specification."""
33
+
34
+ _EXT_VERSION = "1.0"
35
+
36
+ # Own fields:
37
+ strength_28d: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
38
+ thermal_conductivity: str | None = pyd.Field(default=None, description="", example="1 W / (m * K)")
39
+ white: bool | None = pyd.Field(default=None, description="", example=True)
40
+
41
+ _concrete_compressive_strength_28d_is_quantity_validator = pyd.validator("strength_28d", allow_reuse=True)(
42
+ validate_unit_factory("MPa")
43
+ )
44
+ _aac_thermal_conductivity_is_quantity_validator = pyd.validator("thermal_conductivity", allow_reuse=True)(
45
+ validate_unit_factory("W / (m * K)")
46
+ )
47
+
48
+
49
+ class BrickV1(BaseOpenEpdHierarchicalSpec):
50
+ """Brick performance specification."""
51
+
52
+ _EXT_VERSION = "1.0"
53
+
54
+ # Own fields:
55
+ building: bool | None = pyd.Field(default=None, description="", example=True)
56
+ facing: bool | None = pyd.Field(default=None, description="", example=True)
57
+ floor: bool | None = pyd.Field(default=None, description="", example=True)
58
+ pedestrian: bool | None = pyd.Field(default=None, description="", example=True)
59
+ paving: bool | None = pyd.Field(default=None, description="", example=True)
60
+ other: bool | None = pyd.Field(default=None, description="", example=True)
61
+ chemical_resistant: bool | None = pyd.Field(default=None, description="", example=True)
62
+ glazed: bool | None = pyd.Field(default=None, description="", example=True)
63
+ tiles: bool | None = pyd.Field(default=None, description="", example=True)
64
+
65
+
66
+ class MasonryV1(BaseOpenEpdHierarchicalSpec):
67
+ """Masonry performance specification."""
68
+
69
+ _EXT_VERSION = "1.0"
70
+
71
+ # Own fields:
72
+ white_cement: bool | None = pyd.Field(default=None, description="", example=True)
73
+
74
+ # Nested specs:
75
+ GMU: GMUV1 | None = None
76
+ AutoclavedAeratedConcrete: AutoclavedAeratedConcreteV1 | None = None
77
+ Brick: BrickV1 | None = None
@@ -0,0 +1,35 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
21
+
22
+
23
+ class ConveyorsV1(BaseOpenEpdHierarchicalSpec):
24
+ """Conveyors performance specification."""
25
+
26
+ _EXT_VERSION = "1.0"
27
+
28
+
29
+ class MaterialHandlingV1(BaseOpenEpdHierarchicalSpec):
30
+ """Material handling performance specification."""
31
+
32
+ _EXT_VERSION = "1.0"
33
+
34
+ # Nested specs:
35
+ Conveyors: ConveyorsV1 | None = None
@@ -0,0 +1,271 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.compat.pydantic import pyd
21
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
22
+ from openepd.model.specs.generated.enums import (
23
+ AhuAirflowControl,
24
+ AhuZoneControl,
25
+ AirFiltersMediaType,
26
+ AirFiltersMervRating,
27
+ BoilerConfiguration,
28
+ BoilerEquipmentFuelType,
29
+ HeatPumpType,
30
+ HvacHeatExchangersType,
31
+ MechanicalInstallation,
32
+ MechanicalRefrigerants,
33
+ )
34
+ from openepd.model.validation.quantity import PressureMPaStr, validate_unit_factory
35
+
36
+
37
+ class HvacVrfControlV1(BaseOpenEpdHierarchicalSpec):
38
+ """Hvac vrf control performance specification."""
39
+
40
+ _EXT_VERSION = "1.0"
41
+
42
+
43
+ class HvacVrfIndoorV1(BaseOpenEpdHierarchicalSpec):
44
+ """Hvac vrf indoor performance specification."""
45
+
46
+ _EXT_VERSION = "1.0"
47
+
48
+ # Own fields:
49
+ refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
50
+ heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
51
+ cooling_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
52
+ airflow_rate: str | None = pyd.Field(default=None, description="", example="1 m3 / s")
53
+ air_volume: str | None = pyd.Field(default=None, description="", example="1 m3")
54
+
55
+ _heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
56
+ validate_unit_factory("W")
57
+ )
58
+ _cooling_capacity_is_quantity_validator = pyd.validator("cooling_capacity", allow_reuse=True)(
59
+ validate_unit_factory("W")
60
+ )
61
+ _airflow_rate_is_quantity_validator = pyd.validator("airflow_rate", allow_reuse=True)(
62
+ validate_unit_factory("m3 / s")
63
+ )
64
+ _air_volume_is_quantity_validator = pyd.validator("air_volume", allow_reuse=True)(validate_unit_factory("m3"))
65
+
66
+
67
+ class HvacVrfOutdoorV1(BaseOpenEpdHierarchicalSpec):
68
+ """Hvac vrf outdoor performance specification."""
69
+
70
+ _EXT_VERSION = "1.0"
71
+
72
+ # Own fields:
73
+ refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
74
+ heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
75
+ cooling_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
76
+ airflow_rate: str | None = pyd.Field(default=None, description="", example="1 m3 / s")
77
+ air_volume: str | None = pyd.Field(default=None, description="", example="1 m3")
78
+
79
+ _heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
80
+ validate_unit_factory("W")
81
+ )
82
+ _cooling_capacity_is_quantity_validator = pyd.validator("cooling_capacity", allow_reuse=True)(
83
+ validate_unit_factory("W")
84
+ )
85
+ _airflow_rate_is_quantity_validator = pyd.validator("airflow_rate", allow_reuse=True)(
86
+ validate_unit_factory("m3 / s")
87
+ )
88
+ _air_volume_is_quantity_validator = pyd.validator("air_volume", allow_reuse=True)(validate_unit_factory("m3"))
89
+
90
+
91
+ class HvacAirDiffusersV1(BaseOpenEpdHierarchicalSpec):
92
+ """Hvac air diffusers performance specification."""
93
+
94
+ _EXT_VERSION = "1.0"
95
+
96
+
97
+ class HvacAirFiltersV1(BaseOpenEpdHierarchicalSpec):
98
+ """Hvac air filters performance specification."""
99
+
100
+ _EXT_VERSION = "1.0"
101
+
102
+ # Own fields:
103
+ merv_rating: AirFiltersMervRating | None = pyd.Field(default=None, description="", example="MERV 1")
104
+ media_type: AirFiltersMediaType | None = pyd.Field(default=None, description="", example="Acrylic")
105
+
106
+
107
+ class HvacAHUsV1(BaseOpenEpdHierarchicalSpec):
108
+ """Hvac a h us performance specification."""
109
+
110
+ _EXT_VERSION = "1.0"
111
+
112
+ # Own fields:
113
+ refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
114
+ installation: MechanicalInstallation | None = pyd.Field(default=None, description="", example="Indoor")
115
+ airflow_rate: str | None = pyd.Field(default=None, description="", example="1 m3 / s")
116
+ air_volume: str | None = pyd.Field(default=None, description="", example="1 m3")
117
+ cooling_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
118
+ heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
119
+ airflow_control: AhuAirflowControl | None = pyd.Field(default=None, description="", example="CAV")
120
+ zone_control: AhuZoneControl | None = pyd.Field(default=None, description="", example="Single Zone")
121
+
122
+ _airflow_rate_is_quantity_validator = pyd.validator("airflow_rate", allow_reuse=True)(
123
+ validate_unit_factory("m3 / s")
124
+ )
125
+ _air_volume_is_quantity_validator = pyd.validator("air_volume", allow_reuse=True)(validate_unit_factory("m3"))
126
+ _cooling_capacity_is_quantity_validator = pyd.validator("cooling_capacity", allow_reuse=True)(
127
+ validate_unit_factory("W")
128
+ )
129
+ _heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
130
+ validate_unit_factory("W")
131
+ )
132
+
133
+
134
+ class HvacBoilersV1(BaseOpenEpdHierarchicalSpec):
135
+ """Hvac boilers performance specification."""
136
+
137
+ _EXT_VERSION = "1.0"
138
+
139
+ # Own fields:
140
+ flow_rate: str | None = pyd.Field(default=None, description="", example="1 l / min")
141
+ heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
142
+ configuration: BoilerConfiguration | None = pyd.Field(default=None, description="", example="Hot water")
143
+ fuel_type: BoilerEquipmentFuelType | None = pyd.Field(default=None, description="", example="Coal")
144
+
145
+ _flow_rate_is_quantity_validator = pyd.validator("flow_rate", allow_reuse=True)(validate_unit_factory("l / min"))
146
+ _heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
147
+ validate_unit_factory("W")
148
+ )
149
+
150
+
151
+ class HvacChillersV1(BaseOpenEpdHierarchicalSpec):
152
+ """Hvac chillers performance specification."""
153
+
154
+ _EXT_VERSION = "1.0"
155
+
156
+ # Own fields:
157
+ refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
158
+ installation: MechanicalInstallation | None = pyd.Field(default=None, description="", example="Indoor")
159
+ heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
160
+ cooling_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
161
+ air_volume: str | None = pyd.Field(default=None, description="", example="1 m3")
162
+ airflow_rate: str | None = pyd.Field(default=None, description="", example="1 m3 / s")
163
+
164
+ _heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
165
+ validate_unit_factory("W")
166
+ )
167
+ _cooling_capacity_is_quantity_validator = pyd.validator("cooling_capacity", allow_reuse=True)(
168
+ validate_unit_factory("W")
169
+ )
170
+ _air_volume_is_quantity_validator = pyd.validator("air_volume", allow_reuse=True)(validate_unit_factory("m3"))
171
+ _airflow_rate_is_quantity_validator = pyd.validator("airflow_rate", allow_reuse=True)(
172
+ validate_unit_factory("m3 / s")
173
+ )
174
+
175
+
176
+ class HvacFansV1(BaseOpenEpdHierarchicalSpec):
177
+ """Hvac fans performance specification."""
178
+
179
+ _EXT_VERSION = "1.0"
180
+
181
+
182
+ class HvacHeatPumpsV1(BaseOpenEpdHierarchicalSpec):
183
+ """Hvac heat pumps performance specification."""
184
+
185
+ _EXT_VERSION = "1.0"
186
+
187
+ # Own fields:
188
+ refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
189
+ cooling_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
190
+ heating_capacity: str | None = pyd.Field(default=None, description="", example="1000.0 W")
191
+ air_volume: str | None = pyd.Field(default=None, description="", example="1 m3")
192
+ airflow_rate: str | None = pyd.Field(default=None, description="", example="1 m3 / s")
193
+ heat_pumps_type: HeatPumpType | None = pyd.Field(default=None, description="", example="Air-to-Water")
194
+
195
+ _cooling_capacity_is_quantity_validator = pyd.validator("cooling_capacity", allow_reuse=True)(
196
+ validate_unit_factory("W")
197
+ )
198
+ _heating_capacity_is_quantity_validator = pyd.validator("heating_capacity", allow_reuse=True)(
199
+ validate_unit_factory("W")
200
+ )
201
+ _air_volume_is_quantity_validator = pyd.validator("air_volume", allow_reuse=True)(validate_unit_factory("m3"))
202
+ _airflow_rate_is_quantity_validator = pyd.validator("airflow_rate", allow_reuse=True)(
203
+ validate_unit_factory("m3 / s")
204
+ )
205
+
206
+
207
+ class HvacHeatExV1(BaseOpenEpdHierarchicalSpec):
208
+ """Hvac heat exchangers performance specification."""
209
+
210
+ _EXT_VERSION = "1.0"
211
+
212
+ # Own fields:
213
+ refrigerants: list[MechanicalRefrigerants] | None = pyd.Field(default=None, description="", example=["R11"])
214
+ heat_exchangers_type: HvacHeatExchangersType | None = pyd.Field(
215
+ default=None, description="", example="Shell and Tube"
216
+ )
217
+
218
+
219
+ class HvacPumpsV1(BaseOpenEpdHierarchicalSpec):
220
+ """Hvac pumps performance specification."""
221
+
222
+ _EXT_VERSION = "1.0"
223
+
224
+ # Own fields:
225
+ flow_rate: str | None = pyd.Field(default=None, description="", example="1 l / min")
226
+ pump_discharge_pressure: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
227
+ pump_horsepower: str | None = pyd.Field(default=None, description="", example="1000.0 W")
228
+
229
+ _flow_rate_is_quantity_validator = pyd.validator("flow_rate", allow_reuse=True)(validate_unit_factory("l / min"))
230
+ _pump_discharge_pressure_is_quantity_validator = pyd.validator("pump_discharge_pressure", allow_reuse=True)(
231
+ validate_unit_factory("MPa")
232
+ )
233
+ _pump_horsepower_is_quantity_validator = pyd.validator("pump_horsepower", allow_reuse=True)(
234
+ validate_unit_factory("W")
235
+ )
236
+
237
+
238
+ class HvacRTUsV1(BaseOpenEpdHierarchicalSpec):
239
+ """Hvac r t us performance specification."""
240
+
241
+ _EXT_VERSION = "1.0"
242
+
243
+
244
+ class HvacVrfSystemsV1(BaseOpenEpdHierarchicalSpec):
245
+ """Hvac vrf systems performance specification."""
246
+
247
+ _EXT_VERSION = "1.0"
248
+
249
+ # Nested specs:
250
+ HvacVrfControl: HvacVrfControlV1 | None = None
251
+ HvacVrfIndoor: HvacVrfIndoorV1 | None = None
252
+ HvacVrfOutdoor: HvacVrfOutdoorV1 | None = None
253
+
254
+
255
+ class MechanicalV1(BaseOpenEpdHierarchicalSpec):
256
+ """Mechanical performance specification."""
257
+
258
+ _EXT_VERSION = "1.0"
259
+
260
+ # Nested specs:
261
+ HvacAirDiffusers: HvacAirDiffusersV1 | None = None
262
+ HvacAirFilters: HvacAirFiltersV1 | None = None
263
+ HvacAHUs: HvacAHUsV1 | None = None
264
+ HvacBoilers: HvacBoilersV1 | None = None
265
+ HvacChillers: HvacChillersV1 | None = None
266
+ HvacFans: HvacFansV1 | None = None
267
+ HvacHeatPumps: HvacHeatPumpsV1 | None = None
268
+ HvacHeatEx: HvacHeatExV1 | None = None
269
+ HvacPumps: HvacPumpsV1 | None = None
270
+ HvacRTUs: HvacRTUsV1 | None = None
271
+ HvacVrfSystems: HvacVrfSystemsV1 | None = None
@@ -0,0 +1,41 @@
1
+ #
2
+ # Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ # This software was developed with support from the Skanska USA,
17
+ # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
+ # Find out more at www.BuildingTransparency.org
19
+ #
20
+ from openepd.compat.pydantic import pyd
21
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
22
+ from openepd.model.specs.generated.enums import InsulatingMaterial, InsulationIntendedApplication
23
+ from openepd.model.validation.quantity import LengthMmStr, validate_unit_factory
24
+
25
+
26
+ class MechanicalInsulationV1(BaseOpenEpdHierarchicalSpec):
27
+ """Mechanical insulation performance specification."""
28
+
29
+ _EXT_VERSION = "1.0"
30
+
31
+ # Own fields:
32
+ r_value: float | None = pyd.Field(default=None, description="", example=2.3)
33
+ material: InsulatingMaterial | None = pyd.Field(default=None, description="", example="Mineral Wool")
34
+ intended_application: list[InsulationIntendedApplication] | None = pyd.Field(
35
+ default=None, description="", example=["Wall & General"]
36
+ )
37
+ thickness_per_declared_unit: LengthMmStr | None = pyd.Field(default=None, description="", example="20 mm")
38
+
39
+ _thickness_per_declared_unit_is_quantity_validator = pyd.validator("thickness_per_declared_unit", allow_reuse=True)(
40
+ validate_unit_factory("m")
41
+ )