openepd 3.1.1__py3-none-any.whl → 3.1.2__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.
openepd/__version__.py CHANGED
@@ -17,4 +17,4 @@
17
17
  # Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
18
18
  # Find out more at www.BuildingTransparency.org
19
19
  #
20
- VERSION = "3.1.1"
20
+ VERSION = "3.1.2"
@@ -34,19 +34,26 @@ from openepd.model.validation.quantity import (
34
34
 
35
35
 
36
36
  class CementGroutV1(BaseOpenEpdHierarchicalSpec):
37
- """Cement grout performance specification."""
37
+ """
38
+ Cement grout performance specification.
39
+
40
+ Cement grouting is a slurry that is placed as a flowable liquid. It is an effective material
41
+ for filling and strengthening granular soils, voids in rocks, foundation underpinnings, and
42
+ other underground voids. Also called structural grout, these materials typically impart
43
+ significant compressive strength to the system.
44
+ """
38
45
 
39
46
  _EXT_VERSION = "1.0"
40
47
 
41
48
 
42
49
  class ConcretePavingV1(BaseOpenEpdHierarchicalSpec):
43
- """Concrete paving performance specification."""
50
+ """Concrete paving."""
44
51
 
45
52
  _EXT_VERSION = "1.0"
46
53
 
47
54
  # Own fields:
48
55
  flexion_strength: PressureMPaStr | None = pyd.Field(
49
- default=None, description="Paving flexion strength", example="30 MPa"
56
+ default=None, description="Concrete flexural strength.", example="30 MPa"
50
57
  )
51
58
 
52
59
  _concrete_flexion_strength_is_quantity_validator = pyd.validator("flexion_strength", allow_reuse=True)(
@@ -55,36 +62,58 @@ class ConcretePavingV1(BaseOpenEpdHierarchicalSpec):
55
62
 
56
63
 
57
64
  class FlowableFillV1(BaseOpenEpdHierarchicalSpec):
58
- """Flowable fill performance specification."""
65
+ """
66
+ Flowable fill performance specification.
67
+
68
+ Flowable fill is a slurry that is placed as a flowable liquid (high slump) and sets with no
69
+ compaction. It is often used in tight or restricted access areas where placing and compacting
70
+ fill is difficult. Applications include filling large voids such as abandoned underground storage
71
+ tanks, basements, tunnels, mines, and sewers. It can also be used as paving sub-base, bridge
72
+ abutment, and retaining wall backfill.
73
+
74
+ Also called Controlled Density Fill (CDF) or Controlled Low Strength Materials (CLSMs). These materials typically
75
+ have compressive strengths under 1200 psi.
76
+ """
59
77
 
60
78
  _EXT_VERSION = "1.0"
61
79
 
62
80
 
63
81
  class OilPatchV1(BaseOpenEpdHierarchicalSpec):
64
- """Oil patch performance specification."""
82
+ """
83
+ Petroleum Industry Cement Slurry.
84
+
85
+ Concretes for use in creation, maintenance, and decommissioning of petroleum extraction wells and similar
86
+ applications. Includes foamed cement; often called cement in the drilling industry. Differs from
87
+ flowable fill and grout in that it contains no sand or other aggregates.
88
+ """
65
89
 
66
90
  _EXT_VERSION = "1.0"
67
91
 
68
92
 
69
93
  class ReadyMixV1(BaseOpenEpdHierarchicalSpec):
70
- """Concretes that are mixed just before use, and then poured on-site into forms."""
94
+ """Concretes to be mixed and then poured on-site."""
71
95
 
72
96
  _EXT_VERSION = "1.0"
73
97
 
74
98
 
75
99
  class ShotcreteV1(BaseOpenEpdHierarchicalSpec):
76
- """Shotcrete performance specification."""
100
+ """Concretes sprayed on a target."""
77
101
 
78
102
  _EXT_VERSION = "1.0"
79
103
 
80
104
 
81
105
  class ConcreteV1(BaseOpenEpdHierarchicalSpec):
82
- """Concrete performance specification."""
106
+ """
107
+ Concrete.
108
+
109
+ A composite material composed of fine and coarse aggregate bonded together with a fluid cement (cement paste) that
110
+ hardens over time.
111
+ """
83
112
 
84
113
  _EXT_VERSION = "1.0"
85
114
 
86
115
  # Own fields:
87
- lightweight: bool | None = pyd.Field(default=None, description="Lightweight", example=True)
116
+ lightweight: bool | None = pyd.Field(default=None, description="Product is lightweight", example=True)
88
117
 
89
118
  strength_28d: PressureMPaStr | None = pyd.Field(
90
119
  default=None, description="Concrete strength after 28 days", example="1 MPa"
@@ -95,14 +124,16 @@ class ConcreteV1(BaseOpenEpdHierarchicalSpec):
95
124
  example="30 MPa",
96
125
  )
97
126
  strength_other_d: Literal[3, 7, 14, 42, 56, 72, 96, 120] | None = pyd.Field(
98
- default=None, description="Test Day for the Late Strength", example=42
127
+ default=None, description="Test Day for strength_other", example=42
99
128
  )
100
129
 
101
130
  slump: LengthInchStr | None = pyd.Field(default=None, description="", example="2 in")
102
131
  min_slump: LengthInchStr | None = pyd.Field(default=None, description="Minimum test slump", example="2 in")
103
132
  max_slump: LengthInchStr | None = pyd.Field(default=None, description="", example="2 in")
104
133
 
105
- min_pipeline_size: LengthMmStr | None = pyd.Field(default=None, description="", example="200 mm")
134
+ min_pipeline_size: LengthMmStr | None = pyd.Field(
135
+ default=None, description="Minimum pipeline size", example="200 mm"
136
+ )
106
137
  w_c_ratio: RatioFloat | None = pyd.Field(
107
138
  default=None, description="Ratio of water to cement", example=0.5, ge=0, le=1
108
139
  )
@@ -114,13 +145,27 @@ class ConcreteV1(BaseOpenEpdHierarchicalSpec):
114
145
  finishable: bool | None = pyd.Field(default=None, description="Finishable", example=True)
115
146
  fiber_reinforced: bool | None = pyd.Field(default=None, description="fiber_reinforced", example=True)
116
147
 
117
- cementitious: Cementitious | None = pyd.Field(default=None, description="")
148
+ cementitious: Cementitious | None = pyd.Field(
149
+ default=None, description="List of cementitious materials, and proportion by mass"
150
+ )
118
151
 
119
- aggregate_size_max: LengthMmStr | None = pyd.Field(default=None, description="", example="0.0254 m")
120
- cement_content: MassKgStr | None = pyd.Field(default=None, description="", example="1 kg")
121
- aci_exposure_classes: list[AciExposureClass] | None = pyd.Field(default=None, description="", example=["aci.F0"])
122
- csa_exposure_classes: list[CsaExposureClass] | None = pyd.Field(default=None, description="", example=["csa.C-2"])
123
- en_exposure_classes: list[EnExposureClass] | None = pyd.Field(default=None, description="", example=["en206.X0"])
152
+ aggregate_size_max: LengthMmStr | None = pyd.Field(
153
+ default=None,
154
+ description="The smallest sieve size for which the entire amount of aggregate is able to pass. "
155
+ "Parameter describes diameter of aggregate",
156
+ example="8 mm",
157
+ )
158
+ cement_content: MassKgStr | None = pyd.Field(default=None, example="1 kg")
159
+
160
+ aci_exposure_classes: list[AciExposureClass] | None = pyd.Field(
161
+ default=None, description="List of ACI exposure classes", example=["aci.F0"]
162
+ )
163
+ csa_exposure_classes: list[CsaExposureClass] | None = pyd.Field(
164
+ default=None, description="List of CSA exposure classes", example=["csa.C-2"]
165
+ )
166
+ en_exposure_classes: list[EnExposureClass] | None = pyd.Field(
167
+ default=None, description="List of EN exposure classes", example=["en206.X0"]
168
+ )
124
169
  typical_application: ConcreteTypicalApplication | None = pyd.Field(default=None, description="Typical Application")
125
170
 
126
171
  _concrete_compressive_strength_28d_is_quantity_validator = pyd.validator("strength_28d", allow_reuse=True)(
@@ -372,14 +372,14 @@ class FrameMaterial(StrEnum):
372
372
  """
373
373
  Frame material.
374
374
 
375
- - Vinyl: Vinyl
376
- - Aluminium: Aluminium
377
- - Steel: Steel
378
- - Wood: Wood
379
- - Fiberglass: Fiberglass
380
- - Composite: Composite
381
- - None: None
382
- - Other: Other
375
+ - Vinyl: PVC and similar polymer frames
376
+ - Aluminium: Aluminium, with optional thermal improvement. Does not include aluminium clad.
377
+ - Steel: Steel, with optional thermal improvement
378
+ - Wood: Wood with optional cladding
379
+ - Fiberglass: Fiber reinforced plastic
380
+ - Composite: Plastic and Wood Fiber composite.
381
+ - None: This EPD does not cover the frame.
382
+ - Other: Other framing material not listed
383
383
 
384
384
  """
385
385
 
@@ -1793,12 +1793,12 @@ class HardwareFunction(StrEnum):
1793
1793
  """
1794
1794
  Hardware function.
1795
1795
 
1796
- - Lock: Lock
1797
- - Hinge: Hinge
1798
- - Handle: Handle
1799
- - Operator: Operator
1800
- - Balance: Balance
1801
- - Other: Other
1796
+ - Lock: Locks, Keepers, and similar items that resist opening.
1797
+ - Hinge: Hinges, Pivots, and similar items that secure glazing to the frame while it moves.
1798
+ - Handle: Handles, knobs, and similar items for directly manipulating a window.
1799
+ - Operator: Arms, Cranks, and other hardware that moves a window.
1800
+ - Balance: Springs, Sash Balances, and other items that counter the weight of an operable sash.
1801
+ - Other: Other hardware not described above.
1802
1802
 
1803
1803
  """
1804
1804
 
@@ -1975,11 +1975,17 @@ class ThermalSeparation(StrEnum):
1975
1975
  """
1976
1976
  Thermal separation.
1977
1977
 
1978
- - Aluminium: Aluminium
1979
- - Steel: Steel
1980
- - Thermally Improved Metal: Thermally Improved Metal
1981
- - Thermally Broken Metal: Thermally Broken Metal
1982
- - Nonmetal: Nonmetal
1978
+ - Aluminium: Aluminium System members with less than 1.6 mm (0.062 in) or no separation between metal or system
1979
+ members to provide a resistance heat transfer path from exterior to interior.
1980
+ - Steel: Steel System members with less than 1.6 mm (0.062 in) or no separation between metal or system members to
1981
+ provide a resistance heat transfer path from exterior to interior.
1982
+ - Thermally Improved Metal: Metal System members with a separation ≥ 1.60 mm (0.062 in) provided by either a
1983
+ thermal break or open air space that may be interrupted by short thermal bridges between the interior and
1984
+ exterior surfaces.
1985
+ - Thermally Broken Metal: Aluminium System members with a minimum of 5.30 mm (0.210 in) separation provided by
1986
+ a thermal break.
1987
+ - Nonmetal: Nonmetal material where the path from inside to outside inherently has low thermal conductivity,
1988
+ such as wood, vinyl, and fiberglass. Aluminium-clad or split windows fall in this category.
1983
1989
 
1984
1990
  """
1985
1991
 
@@ -2376,7 +2382,7 @@ class FlatGlassPanesThickness(StrEnum):
2376
2382
 
2377
2383
 
2378
2384
  class NAFSPerformanceGrade(StrEnum):
2379
- """NAFS Performance Grade enum."""
2385
+ """NAFS Performance Grade."""
2380
2386
 
2381
2387
  GRADE_15_PSF = "15 psf"
2382
2388
  GRADE_20_PSF = "20 psf"
@@ -68,6 +68,63 @@ class GlazingIntendedApplication(BaseOpenEpdSchema):
68
68
  )
69
69
 
70
70
 
71
+ class GlazingOptionsMixin(BaseOpenEpdSchema):
72
+ """Common glazing options."""
73
+
74
+ low_emissivity: bool | None = pyd.Field(default=None, description="Low Emissivity coatings", example=True)
75
+ electrochromic: bool | None = pyd.Field(
76
+ default=None,
77
+ description="Glazing with an electrically controllable solar heat gain and/or other properties.",
78
+ example=True,
79
+ )
80
+ acid_etched: bool | None = pyd.Field(
81
+ default=None, description="Flat glass that has undergone a chemical etching process.", example=True
82
+ )
83
+ tempered: bool | None = pyd.Field(
84
+ default=None,
85
+ description="Consists of a single pane that has been heat-treated to give the glass increased impact "
86
+ "resistance. Standard typically used in North America.",
87
+ example=True,
88
+ )
89
+ toughened: bool | None = pyd.Field(
90
+ default=None,
91
+ description="Consists of a single pane that has been specially heat-treated to give the glass increased impact "
92
+ "resistance. Standard typically used in Europe.",
93
+ example=True,
94
+ )
95
+ laminated: bool | None = pyd.Field(
96
+ default=None,
97
+ description="Consists of at least two glass panes lying one on top of the other, with one or several layers of "
98
+ "a tear-resistant, viscoelastic film positioned between the panes, which consist of polyvinyl "
99
+ "butyral (PVB)",
100
+ example=True,
101
+ )
102
+ fire_resistant: bool | None = pyd.Field(default=None, example=True)
103
+ fire_protection: bool | None = pyd.Field(
104
+ default=None,
105
+ description="Specifically tested for its ability to block flames and smoke, but not radiant heat. Ranges from"
106
+ " specialty tempered products rated for ~20 minutes to glass ceramics rated up to 3 hours.",
107
+ example=True,
108
+ )
109
+ pyrolytic_coated: bool | None = pyd.Field(
110
+ default=None,
111
+ description="At least one coating is applied in a pyrolytic process, typically during float glass production.",
112
+ example=True,
113
+ )
114
+ sputter_coat: bool | None = pyd.Field(
115
+ default=None,
116
+ description="At least one coating is applied using sputter (vacuum deposition) coating.",
117
+ example=True,
118
+ )
119
+ solar_heat_gain: RatioFloat | None = pyd.Field(
120
+ default=None,
121
+ description="Solar heat gain, measured at a certain level of Differential Pressure. Range is 0 to 1.",
122
+ example=0.5,
123
+ ge=0,
124
+ le=1,
125
+ )
126
+
127
+
71
128
  class PanelDoorsV1(BaseOpenEpdHierarchicalSpec):
72
129
  """Panel doors performance specification."""
73
130
 
@@ -75,13 +132,18 @@ class PanelDoorsV1(BaseOpenEpdHierarchicalSpec):
75
132
 
76
133
 
77
134
  class PressureResistantDoorsV1(BaseOpenEpdHierarchicalSpec):
78
- """Pressure resistant doors performance specification."""
135
+ """Pressure-Resistant Doors."""
79
136
 
80
137
  _EXT_VERSION = "1.0"
81
138
 
82
139
 
83
140
  class SpecialFunctionDoorsV1(BaseOpenEpdHierarchicalSpec):
84
- """Special function doors performance specification."""
141
+ """
142
+ Special function doors.
143
+
144
+ Includes doors for e.g., cold storage, hangars, lightproof applications,
145
+ security, sound control, vaults, etc.
146
+ """
85
147
 
86
148
  _EXT_VERSION = "1.0"
87
149
 
@@ -97,23 +159,32 @@ class SlidingGlassDoorsV1(BaseOpenEpdHierarchicalSpec):
97
159
 
98
160
 
99
161
  class FenestrationAccessoriesV1(BaseOpenEpdHierarchicalSpec):
100
- """Fenestration accessories performance specification."""
162
+ """
163
+ Fenestration accessories.
164
+
165
+ Gaskets, seals, fasteners, and other low-mass items which may be useful in calculating the impact of a
166
+ fenestration system.
167
+ """
101
168
 
102
169
  _EXT_VERSION = "1.0"
103
170
 
104
171
 
105
172
  class FenestrationFramingV1(BaseOpenEpdHierarchicalSpec):
106
- """Fenestration framing performance specification."""
173
+ """
174
+ Fenestration Framing.
175
+
176
+ Lineal elements ("sticks") for use in fenestration, including frames, sashes, and mullions.
177
+ """
107
178
 
108
179
  _EXT_VERSION = "1.0"
109
180
 
110
181
  # Own fields:
111
- thermal_separation: ThermalSeparation | None = pyd.Field(default=None, description="", example="Aluminium")
112
- material: FrameMaterial | None = pyd.Field(default=None, description="", example="Vinyl")
182
+ thermal_separation: ThermalSeparation | None = pyd.Field(default=None, example="Aluminium")
183
+ material: FrameMaterial | None = pyd.Field(default=None, example="Vinyl")
113
184
 
114
185
 
115
186
  class FenestrationHardwareV1(BaseOpenEpdHierarchicalSpec):
116
- """Fenestration hardware performance specification."""
187
+ """Locks, operation hardware, and other substantial items declared on a per-piece basis."""
117
188
 
118
189
  _EXT_VERSION = "1.0"
119
190
 
@@ -122,69 +193,81 @@ class FenestrationHardwareV1(BaseOpenEpdHierarchicalSpec):
122
193
 
123
194
 
124
195
  class FlatGlassPanesV1(BaseOpenEpdHierarchicalSpec):
125
- """Flat glass panes performance specification."""
196
+ """Monolithic, uncoated flat glass panes that are not substantially processed."""
126
197
 
127
198
  _EXT_VERSION = "1.0"
128
199
 
129
200
  # Own fields:
130
- thickness: FlatGlassPanesThickness | None = pyd.Field(default=None, description="", example="12 mm")
201
+ thickness: FlatGlassPanesThickness | None = pyd.Field(default=None, example="12 mm")
131
202
 
132
203
  _flat_glass_panes_thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(
133
204
  validate_unit_factory("m")
134
205
  )
135
206
 
136
207
 
137
- class ProcessedNonInsulatingGlassPanesV1(BaseOpenEpdHierarchicalSpec):
138
- """Processed non insulating glass panes performance specification."""
208
+ class ProcessedNonInsulatingGlassPanesV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin):
209
+ """
210
+ Solid glass panes without internal gaps which have been heat-treated or otherwise substantially processed.
139
211
 
140
- _EXT_VERSION = "1.0"
212
+ Includes:
213
+ 1. Coatings including low-e and other coatings (see PCR)
214
+ 2. laminating (fire-rated, glass clad polycarbonate, interlayers
215
+ 3. Heat treated (heat strengthened, tempered, fire-rated)
216
+ 4. Mechanically or chemically processed or fabricated
217
+ (edging, bending, etching, drilling, notching, cutting, polishing, etc)
218
+ 5. combined products of processing in 1-5.
219
+ """
141
220
 
142
- # Own fields:
143
- low_emissivity: bool | None = pyd.Field(default=None, description="", example=True)
144
- electrochromic: bool | None = pyd.Field(default=None, description="", example=True)
145
- acid_etched: bool | None = pyd.Field(default=None, description="", example=True)
146
- tempered: bool | None = pyd.Field(default=None, description="", example=True)
147
- toughened: bool | None = pyd.Field(default=None, description="", example=True)
148
- laminated: bool | None = pyd.Field(default=None, description="", example=True)
149
- fire_resistant: bool | None = pyd.Field(default=None, description="", example=True)
150
- fire_protection: bool | None = pyd.Field(default=None, description="", example=True)
151
- pyrolytic_coated: bool | None = pyd.Field(default=None, description="", example=True)
152
- sputter_coat: bool | None = pyd.Field(default=None, description="", example=True)
153
- solar_heat_gain: RatioFloat | None = pyd.Field(default=None, description="", example=0.5, ge=0, le=1)
221
+ _EXT_VERSION = "1.0"
154
222
 
155
223
 
156
224
  class GlazedDoorsV1(BaseOpenEpdHierarchicalSpec):
157
- """Glazed doors performance specification."""
225
+ """
226
+ Factory assembled door which is at least 50% glass by area.
227
+
228
+ Includes sliding patio doors and hinged doors.
229
+ """
158
230
 
159
231
  _EXT_VERSION = "1.0"
160
232
 
161
233
 
162
234
  class UnitSkylightsV1(BaseOpenEpdHierarchicalSpec):
163
- """Unit skylights performance specification."""
235
+ """
236
+ Unit skylights performance specification.
237
+
238
+ A factory assembled fenestration unit for installation on the roof of a structure to provide interior
239
+ building spaces with natural daylight, warmth, and ventilation; generally not operable
240
+ by hand (cf. roof window). Includes frame(s) and possibly operating hardware.
241
+ """
164
242
 
165
243
  _EXT_VERSION = "1.0"
166
244
 
167
245
 
168
246
  class WindowsV1(BaseOpenEpdHierarchicalSpec):
169
- """Windows performance specification."""
247
+ """Windows including glazing and frame material."""
170
248
 
171
249
  _EXT_VERSION = "1.0"
172
250
 
173
251
 
174
252
  class IntegratedDoorsOpeningAssembliesV1(BaseOpenEpdHierarchicalSpec):
175
- """Integrated doors opening assemblies performance specification."""
253
+ """Pre-installed unit that includes door, frame, and hardware."""
176
254
 
177
255
  _EXT_VERSION = "1.0"
178
256
 
179
257
 
180
258
  class MetalDoorAndFramesV1(BaseOpenEpdHierarchicalSpec):
181
- """Metal door and frames performance specification."""
259
+ """Metal doors and frames."""
182
260
 
183
261
  _EXT_VERSION = "1.0"
184
262
 
185
263
 
186
264
  class SpecialtyDoorsAndFramesV1(BaseOpenEpdHierarchicalSpec):
187
- """Specialty doors and frames performance specification."""
265
+ """
266
+ Specialty doors and frames.
267
+
268
+ Includes e.g., access doors and panels, sliding glass doors, coiling doors, special function doors,
269
+ folding doors, etc.
270
+ """
188
271
 
189
272
  _EXT_VERSION = "1.0"
190
273
 
@@ -200,7 +283,12 @@ class WoodDoorsV1(BaseOpenEpdHierarchicalSpec):
200
283
 
201
284
 
202
285
  class FenestrationPartsV1(BaseOpenEpdHierarchicalSpec):
203
- """Fenestration parts performance specification."""
286
+ """
287
+ Fenestration Parts.
288
+
289
+ Parts and assemblies for integration into building fenestration such as windows, curtain walls,
290
+ and storefronts.
291
+ """
204
292
 
205
293
  _EXT_VERSION = "1.0"
206
294
 
@@ -216,7 +304,7 @@ class FenestrationPartsV1(BaseOpenEpdHierarchicalSpec):
216
304
 
217
305
 
218
306
  class GlassPanesV1(BaseOpenEpdHierarchicalSpec):
219
- """Glass panes performance specification."""
307
+ """Flat glass panes."""
220
308
 
221
309
  _EXT_VERSION = "1.0"
222
310
 
@@ -252,29 +340,34 @@ class NAFSPerformanceClass(BaseOpenEpdSchema):
252
340
  )
253
341
 
254
342
 
255
- class NAFSFenestrationV1(BaseOpenEpdHierarchicalSpec):
256
- """NAFS fenestration performance specification."""
343
+ class NAFSFenestrationV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin):
344
+ """Factory assembled fenestration units compliant to the North American Fenestration Standard."""
257
345
 
258
346
  _EXT_VERSION = "1.0"
259
347
 
260
348
  # Own fields:
261
- hurricane_resistant: bool | None = pyd.Field(default=None, description="", example=True)
262
- low_emissivity: bool | None = pyd.Field(default=None, description="", example=True)
263
- electrochromic: bool | None = pyd.Field(default=None, description="", example=True)
264
- acid_etched: bool | None = pyd.Field(default=None, description="", example=True)
265
- tempered: bool | None = pyd.Field(default=None, description="", example=True)
266
- toughened: bool | None = pyd.Field(default=None, description="", example=True)
267
- laminated: bool | None = pyd.Field(default=None, description="", example=True)
268
- fire_resistant: bool | None = pyd.Field(default=None, description="", example=True)
269
- fire_protection: bool | None = pyd.Field(default=None, description="", example=True)
270
- pyrolytic_coated: bool | None = pyd.Field(default=None, description="", example=True)
271
- sputter_coat: bool | None = pyd.Field(default=None, description="", example=True)
272
- thermal_separation: ThermalSeparation | None = pyd.Field(default=None, description="", example="Aluminium")
273
- assembly_u_factor: str | None = pyd.Field(default=None, description="", example="1 USI")
274
- solar_heat_gain: RatioFloat | None = pyd.Field(default=None, description="", example=0.5, ge=0, le=1)
275
- air_infiltration: str | None = pyd.Field(default=None, description="", example="1 m / s")
349
+ hurricane_resistant: bool | None = pyd.Field(
350
+ default=None, description="The product has been designed to resist windborne debris.", example=True
351
+ )
352
+
353
+ assembly_u_factor: str | None = pyd.Field(
354
+ default=None,
355
+ description="Weighted average conductance of heat across assembly (including frame).",
356
+ example="1 USI",
357
+ )
358
+ air_infiltration: str | None = pyd.Field(
359
+ default=None,
360
+ description="Air infiltration, measured at a certain level of Differential Pressure.",
361
+ example="1 m / s",
362
+ )
363
+
364
+ thermal_separation: ThermalSeparation | None = pyd.Field(default=None, example="Aluminium")
276
365
  dp_rating: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
277
- glass_panes: int | None = pyd.Field(default=None, description="", example=3)
366
+ glass_panes: int | None = pyd.Field(
367
+ default=None,
368
+ description="Number of panes, each separated by a cavity. A 3 pane unit has 2 cavities. example: 3",
369
+ example=3,
370
+ )
278
371
 
279
372
  performance_class: NAFSPerformanceClass | None = pyd.Field(
280
373
  default=None, description="Performance class according to NAFS."
@@ -307,7 +400,7 @@ class NAFSFenestrationV1(BaseOpenEpdHierarchicalSpec):
307
400
  Windows: WindowsV1 | None = None
308
401
 
309
402
 
310
- class InsulatingGlazingUnitsV1(BaseOpenEpdHierarchicalSpec):
403
+ class InsulatingGlazingUnitsV1(BaseOpenEpdHierarchicalSpec, GlazingOptionsMixin):
311
404
  """Insulating glazing units performance specification."""
312
405
 
313
406
  _EXT_VERSION = "1.0"
@@ -317,23 +410,27 @@ class InsulatingGlazingUnitsV1(BaseOpenEpdHierarchicalSpec):
317
410
  default=None, description="Intended application for IGUs."
318
411
  )
319
412
 
320
- hurricane_resistant: bool | None = pyd.Field(default=None, description="", example=True)
321
- low_emissivity: bool | None = pyd.Field(default=None, description="", example=True)
322
- electrochromic: bool | None = pyd.Field(default=None, description="", example=True)
323
- acid_etched: bool | None = pyd.Field(default=None, description="", example=True)
324
- tempered: bool | None = pyd.Field(default=None, description="", example=True)
325
- toughened: bool | None = pyd.Field(default=None, description="", example=True)
326
- laminated: bool | None = pyd.Field(default=None, description="", example=True)
327
- fire_resistant: bool | None = pyd.Field(default=None, description="", example=True)
328
- fire_protection: bool | None = pyd.Field(default=None, description="", example=True)
329
- pyrolytic_coated: bool | None = pyd.Field(default=None, description="", example=True)
330
- sputter_coat: bool | None = pyd.Field(default=None, description="", example=True)
331
- solar_heat_gain: RatioFloat | None = pyd.Field(default=None, description="", example=0.5, ge=0, le=1)
332
- air_infiltration: str | None = pyd.Field(default=None, description="", example="1 m / s")
333
- dp_rating: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
334
- glass_panes: int | None = pyd.Field(default=None, description="", example=3)
335
- cog_u_factor: str | None = pyd.Field(default=None, description="", example="1 USI")
336
- spacer: Spacer | None = pyd.Field(default=None, description="", example="Aluminium")
413
+ hurricane_resistant: bool | None = pyd.Field(default=None, example=True)
414
+
415
+ dp_rating: PressureMPaStr | None = pyd.Field(
416
+ default=None, description="Maximum Differential Pressure, a measure of wind tolerance.", example="1 MPa"
417
+ )
418
+ air_infiltration: str | None = pyd.Field(
419
+ default=None,
420
+ description="Air infiltration, measured at a certain level of Differential Pressure.",
421
+ example="1 m / s",
422
+ )
423
+ glass_panes: int | None = pyd.Field(
424
+ default=None,
425
+ description="Number of panes, each separated by a cavity. A 3 pane unit has 2 cavities. example: 3",
426
+ example=3,
427
+ )
428
+ cog_u_factor: str | None = pyd.Field(
429
+ default=None, description="Conductance of heat at center of glass.", example="1 USI"
430
+ )
431
+ spacer: Spacer | None = pyd.Field(
432
+ default=None, description="Spacer material for Integrated Glass Unit.", example="Aluminium"
433
+ )
337
434
 
338
435
  _air_infiltration_is_quantity_validator = pyd.validator("air_infiltration", allow_reuse=True)(
339
436
  validate_unit_factory("m / s")
@@ -343,19 +440,27 @@ class InsulatingGlazingUnitsV1(BaseOpenEpdHierarchicalSpec):
343
440
 
344
441
 
345
442
  class CurtainWallsV1(BaseOpenEpdHierarchicalSpec):
346
- """Curtain walls performance specification."""
443
+ """
444
+ Curtain Walls.
445
+
446
+ Exterior skin of building where walls are non-structural and are outboard of the floor slabs,
447
+ often as system of aluminum framing with vision glass and opaque panels of glass, metal, or other
448
+ materials.
449
+
450
+ Can be 'unitized' (prefabricated off-site) or 'stick' (fabricated on site).
451
+ """
347
452
 
348
453
  _EXT_VERSION = "1.0"
349
454
 
350
455
 
351
456
  class DoorsAndFramesV1(BaseOpenEpdHierarchicalSpec):
352
- """Doors and frames performance specification."""
457
+ """Doors (the operable part) and frames (what holds the door proper)."""
353
458
 
354
459
  _EXT_VERSION = "1.0"
355
460
 
356
461
  # Own fields:
357
- height: LengthMmStr | None = pyd.Field(default=None, description="", example="1200 mm")
358
- width: LengthMmStr | None = pyd.Field(default=None, description="", example="600 mm")
462
+ height: LengthMmStr | None = pyd.Field(default=None, example="1200 mm")
463
+ width: LengthMmStr | None = pyd.Field(default=None, example="600 mm")
359
464
 
360
465
  _height_is_quantity_validator = pyd.validator("height", allow_reuse=True)(validate_unit_factory("m"))
361
466
  _width_is_quantity_validator = pyd.validator("width", allow_reuse=True)(validate_unit_factory("m"))
@@ -368,13 +473,18 @@ class DoorsAndFramesV1(BaseOpenEpdHierarchicalSpec):
368
473
 
369
474
 
370
475
  class EntrancesV1(BaseOpenEpdHierarchicalSpec):
371
- """Entrances performance specification."""
476
+ """Building entrances (distinct from the door proper)."""
372
477
 
373
478
  _EXT_VERSION = "1.0"
374
479
 
375
480
 
376
481
  class GlazingV1(BaseOpenEpdHierarchicalSpec):
377
- """Glazing performance specification."""
482
+ """
483
+ Glazing performance specification.
484
+
485
+ Broad category of glass-based products, accessories, and assemblies ranging from
486
+ glass panes and framing to curtain walls.
487
+ """
378
488
 
379
489
  _EXT_VERSION = "1.0"
380
490
 
@@ -386,30 +496,50 @@ class GlazingV1(BaseOpenEpdHierarchicalSpec):
386
496
 
387
497
 
388
498
  class StorefrontsV1(BaseOpenEpdHierarchicalSpec):
389
- """Storefronts performance specification."""
499
+ """
500
+ Storefronts.
501
+
502
+ Fabricated building facades commonly used in retail applications, typically one or two stories
503
+ tall and using metal framing and glass.
504
+ """
390
505
 
391
506
  _EXT_VERSION = "1.0"
392
507
 
393
508
 
394
509
  class TranslucentWallAndRoofAssembliesV1(BaseOpenEpdHierarchicalSpec):
395
- """Translucent wall and roof assemblies performance specification."""
510
+ """
511
+ Translucent wall and roof assemblies.
512
+
513
+ Includes structured polycarbonate panel and fiberglass sandwich panel assemblies.
514
+ """
396
515
 
397
516
  _EXT_VERSION = "1.0"
398
517
 
399
518
 
400
519
  class WindowWallAssembliesV1(BaseOpenEpdHierarchicalSpec):
401
- """Window wall assemblies performance specification."""
520
+ """
521
+ Window Wall Assemblies.
522
+
523
+ Exterior skin of building where walls are non-structural and sit between floor slabs, often as
524
+ system of aluminum framing with vision glass and opaque panels of glass, metal,
525
+ or other materials.
526
+ """
402
527
 
403
528
  _EXT_VERSION = "1.0"
404
529
 
405
530
 
406
531
  class OpeningsV1(BaseOpenEpdHierarchicalSpec):
407
- """Openings performance specification."""
532
+ """
533
+ Openings performance specification.
534
+
535
+ General category that includes windows, storefronts, window walls, curtain walls,
536
+ doors, entrances, etc.
537
+ """
408
538
 
409
539
  _EXT_VERSION = "1.0"
410
540
 
411
541
  # Own fields:
412
- thickness: LengthMmStr | None = pyd.Field(default=None, description="", example="80 mm")
542
+ thickness: LengthMmStr | None = pyd.Field(default=None, example="80 mm")
413
543
 
414
544
  _thickness_is_quantity_validator = pyd.validator("thickness", allow_reuse=True)(validate_unit_factory("m"))
415
545
 
@@ -33,41 +33,51 @@ class SteelFabricatedMixin(BaseOpenEpdSpec):
33
33
 
34
34
 
35
35
  class ColdFormedFramingV1(BaseOpenEpdHierarchicalSpec):
36
- """Cold formed framing performance specification."""
36
+ """
37
+ Cold Formed Framing performance specification.
38
+
39
+ Cold formed steel elements such as studs and framing, typically made from coil or sheet steel and used
40
+ within walls and ceilings.
41
+ """
37
42
 
38
43
  _EXT_VERSION = "1.0"
39
44
 
40
45
 
41
46
  class DeckingSteelV1(BaseOpenEpdHierarchicalSpec):
42
- """Cold Formed Steel Decking."""
47
+ """Corrugated Decking made from cold-formed sheet steel. Often filled with concrete."""
43
48
 
44
49
  _EXT_VERSION = "1.0"
45
50
 
46
51
 
47
52
  class SteelSuspensionAssemblyV1(BaseOpenEpdHierarchicalSpec):
48
- """Steel suspension assembly performance specification."""
53
+ """Steel suspension assemblies for suspended (e.g. acoustical) ceiling systems."""
49
54
 
50
55
  _EXT_VERSION = "1.0"
51
56
 
52
57
 
53
58
  class HollowSectionsV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
54
- """Hollow sections performance specification."""
59
+ """Hollow cross section steel shape, typically referred to as hollow structural section (HSS)."""
55
60
 
56
61
  _EXT_VERSION = "1.0"
57
62
 
58
- # Own fields:
59
-
60
63
 
61
64
  class HotRolledSectionsV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
62
- """Hot rolled sections performance specification."""
65
+ """
66
+ Hot rolled sections performance specification.
63
67
 
64
- _EXT_VERSION = "1.0"
68
+ Steel shapes, such as angles, wide flange beams and I-beams, produced using a high temperature
69
+ mill process.
70
+ """
65
71
 
66
- # Own fields:
72
+ _EXT_VERSION = "1.0"
67
73
 
68
74
 
69
75
  class PlateSteelV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
70
- """Plate Steels."""
76
+ """Plate Steels.
77
+
78
+ Flat hot-rolled steel, typically thicker than 'sheet', made by compressing multiple steel
79
+ layers together into one.
80
+ """
71
81
 
72
82
  _EXT_VERSION = "1.0"
73
83
 
@@ -75,43 +85,66 @@ class PlateSteelV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
75
85
 
76
86
 
77
87
  class MetalRailingsV1(BaseOpenEpdHierarchicalSpec):
78
- """Metal railings performance specification."""
88
+ """Metal Railings including pipe and tube railings."""
79
89
 
80
90
  _EXT_VERSION = "1.0"
81
91
 
82
92
 
83
93
  class MetalStairsV1(BaseOpenEpdHierarchicalSpec):
84
- """Metal stairs performance specification."""
94
+ """
95
+ Metal stairs.
96
+
97
+ Includes: metal pan stairs, metal floor plate stairs, grating stairs, fire escapes,
98
+ ladders, and walkways/catwalks/ramps/platforms.
99
+ """
85
100
 
86
101
  _EXT_VERSION = "1.0"
87
102
 
88
103
 
89
104
  class MiscMetalFabricationV1(BaseOpenEpdHierarchicalSpec):
90
- """Misc metal fabrication performance specification."""
105
+ """Prefabricated steel assemblies not included in another category."""
91
106
 
92
107
  _EXT_VERSION = "1.0"
93
108
 
94
109
 
95
110
  class OpenWebMembranesV1(BaseOpenEpdHierarchicalSpec):
96
- """Open web membranes performance specification."""
111
+ """
112
+ Open web membranes performance specification.
113
+
114
+ Lightweight steel truss, typically made of parallel chords and a triangulated web system,
115
+ "proportioned to span between bearing points.
116
+ """
97
117
 
98
118
  _EXT_VERSION = "1.0"
99
119
 
100
120
 
101
121
  class MBQSteelV1(BaseOpenEpdHierarchicalSpec):
102
- """M b q steel performance specification."""
122
+ """
123
+ Merchant Bar Quality (MBQ) steel.
124
+
125
+ Used as feedstock to steel construction products, but also includes rounds, angles, and light structural shapes.
126
+ """
103
127
 
104
128
  _EXT_VERSION = "1.0"
105
129
 
106
130
 
107
131
  class CoilSteelV1(BaseOpenEpdHierarchicalSpec):
108
- """Coil steel performance specification."""
132
+ """
133
+ Sheet or strip steel, sold in rolls.
134
+
135
+ Typically, coil steel is cold-formed into light gauge products.
136
+ """
109
137
 
110
138
  _EXT_VERSION = "1.0"
111
139
 
112
140
 
113
141
  class ColdFormedSteelV1(BaseOpenEpdHierarchicalSpec):
114
- """Cold Formed Structural Steel."""
142
+ """
143
+ Cold Formed Steel Products.
144
+
145
+ All types of cold formed steel products. These products are made from hot-rolled steel coils and
146
+ sheets and are cold formed into products such as studs, decking, panels, and other accessories.
147
+ """
115
148
 
116
149
  _EXT_VERSION = "1.0"
117
150
 
@@ -122,14 +155,30 @@ class ColdFormedSteelV1(BaseOpenEpdHierarchicalSpec):
122
155
 
123
156
 
124
157
  class StructuralSteelV1(BaseOpenEpdHierarchicalSpec):
125
- """Structural Steel."""
158
+ """
159
+ Structural Steel.
160
+
161
+ Hot rolled steel shapes, Hollow Sections, pipes, and similar hot-worked structural steels.
162
+ """
126
163
 
127
164
  _EXT_VERSION = "1.0"
128
165
 
129
166
  # Own fields:
130
- modulus_of_elasticity: PressureMPaStr | None = pyd.Field(default=None, description="", example="1.0 MPa")
131
- thermal_expansion: str | None = pyd.Field(default=None, description="", example="1 / K")
132
- thermal_conductivity: str | None = pyd.Field(default=None, description="", example="1 W / (m * K)")
167
+ modulus_of_elasticity: PressureMPaStr | None = pyd.Field(
168
+ default=None,
169
+ description="Modulus of Elasticity, https://en.wikipedia.org/wiki/Elastic_modulus ",
170
+ example="193 GPa",
171
+ )
172
+ thermal_expansion: str | None = pyd.Field(
173
+ default=None,
174
+ description="Thermal Expansion, https://en.wikipedia.org/wiki/Thermal_expansion",
175
+ example="1.11E-5 / K",
176
+ )
177
+ thermal_conductivity: str | None = pyd.Field(
178
+ default=None,
179
+ description="Thermal Conductivity, https://en.wikipedia.org/wiki/Thermal_conductivity_and_resistivity",
180
+ example="1.45E-5 W / (m * K)",
181
+ )
133
182
 
134
183
  _steel_modulus_of_elasticity_is_quantity_validator = pyd.validator("modulus_of_elasticity", allow_reuse=True)(
135
184
  validate_unit_factory("MPa")
@@ -148,7 +197,7 @@ class StructuralSteelV1(BaseOpenEpdHierarchicalSpec):
148
197
 
149
198
 
150
199
  class PrefabricatedSteelAssembliesV1(BaseOpenEpdHierarchicalSpec):
151
- """Prefabricated steel assemblies performance specification."""
200
+ """Prefabricated assemblies made primarily of steel."""
152
201
 
153
202
  _EXT_VERSION = "1.0"
154
203
 
@@ -160,22 +209,24 @@ class PrefabricatedSteelAssembliesV1(BaseOpenEpdHierarchicalSpec):
160
209
 
161
210
 
162
211
  class PostTensioningSteelV1(BaseOpenEpdHierarchicalSpec):
163
- """Post-Tensioning Steels, per https://www.concretenetwork.com/post-tension/industry.html."""
212
+ """Steel tensioning cables or tendons for compression of prestressed concrete."""
164
213
 
165
214
  _EXT_VERSION = "1.0"
166
215
 
167
216
 
168
217
  class RebarSteelV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
169
- """Bar steels, such as rebar for concrete reinforcement."""
218
+ """Reinforcing bar used together with concrete."""
170
219
 
171
220
  _EXT_VERSION = "1.0"
172
221
 
173
222
  # Own fields:
174
- grade: SteelRebarGrade | None = pyd.Field(default=None, description="", example="60 ksi")
175
- diameter_min: LengthMmStr | None = pyd.Field(default=None, description="", example="8 mm")
176
- bending_pin_max: float | None = pyd.Field(default=None, description="", example=2.3)
177
- ts_ys_ratio_max: float | None = pyd.Field(default=None, description="", example=2.3)
178
- epoxy_coated: bool | None = pyd.Field(default=None, description="", example=True)
223
+ grade: SteelRebarGrade | None = pyd.Field(default=None, example="60 ksi")
224
+ diameter_min: LengthMmStr | None = pyd.Field(default=None, description="Minimal diameter", example="8 mm")
225
+ bending_pin_max: float | None = pyd.Field(default=None, example=2.3)
226
+ ts_ys_ratio_max: float | None = pyd.Field(
227
+ default=None, description="Max ratio of ultimate tensile to yield tensile strength", example=2.3
228
+ )
229
+ epoxy_coated: bool | None = pyd.Field(default=None, example=True)
179
230
 
180
231
  _steel_rebar_diameter_min_is_quantity_validator = pyd.validator("diameter_min", allow_reuse=True)(
181
232
  validate_unit_factory("m")
@@ -189,25 +240,41 @@ class WireMeshSteelV1(BaseOpenEpdHierarchicalSpec, SteelFabricatedMixin):
189
240
 
190
241
 
191
242
  class SteelV1(BaseOpenEpdHierarchicalSpec):
192
- """Steel performance specification."""
243
+ """Broad category for construction materials made from steel and its alloys."""
193
244
 
194
245
  _EXT_VERSION = "1.0"
195
246
 
196
247
  # Own fields:
197
- yield_tensile_str: PressureMPaStr | None = pyd.Field(default=None, description="", example="1 MPa")
198
- bar_elongation: float | None = pyd.Field(default=None, description="", example=2.3)
248
+ yield_tensile_str: PressureMPaStr | None = pyd.Field(
249
+ default=None, description="Yield Tensile strength (Mpa) per unit area", example="100 MPa"
250
+ )
251
+ bar_elongation: float | None = pyd.Field(
252
+ default=None, description="Increase in length at break, in percent. Typically 10%-20%", example=0.2
253
+ )
199
254
  recycled_content: RatioFloat | None = pyd.Field(default=None, description="", example=0.5, ge=0, le=1)
200
- post_consumer_recycled_content: RatioFloat | None = pyd.Field(default=None, description="", example=0.5, ge=0, le=1)
201
- astm_marking: str | None = pyd.Field(default=None, description="")
202
- euro_marking: str | None = pyd.Field(default=None, description="")
203
- composition: SteelComposition | None = pyd.Field(default=None, description="", example="Carbon")
204
- cold_finished: bool | None = pyd.Field(default=None, description="", example=True)
205
- galvanized: bool | None = pyd.Field(default=None, description="", example=True)
206
- stainless: bool | None = pyd.Field(default=None, description="", example=True)
255
+ post_consumer_recycled_content: RatioFloat | None = pyd.Field(
256
+ default=None,
257
+ description="Should be a number between zero and the Recycled Content (steel_recycled_content)",
258
+ example=0.5,
259
+ ge=0,
260
+ le=1,
261
+ )
262
+ astm_marking: str | None = pyd.Field(
263
+ default=None, description="The marking to be expected on the product.", example="S4S60"
264
+ )
265
+ euro_marking: str | None = pyd.Field(
266
+ default=None, description="The marking to be expected on the product.", examples="S4S60"
267
+ )
268
+ composition: SteelComposition | None = pyd.Field(
269
+ default=None, description="Basic chemical composition", example="Carbon"
270
+ )
271
+ cold_finished: bool | None = pyd.Field(default=None, example=True)
272
+ galvanized: bool | None = pyd.Field(default=None, example=True)
273
+ stainless: bool | None = pyd.Field(default=None, example=True)
207
274
  making_route: SteelMakingRoute | None = pyd.Field(default=None)
208
- astm_standards: list[Standard] | None = pyd.Field(default=None, description="")
209
- sae_standards: list[Standard] | None = pyd.Field(default=None, description="")
210
- en_standards: list[Standard] | None = pyd.Field(default=None, description="")
275
+ astm_standards: list[Standard] | None = pyd.Field(default=None, description="List of ASTM standards")
276
+ sae_standards: list[Standard] | None = pyd.Field(default=None, description="List of SAE standards")
277
+ en_standards: list[Standard] | None = pyd.Field(default=None, description="List of EN standards")
211
278
 
212
279
  _steel_yield_tensile_str_is_quantity_validator = pyd.validator("yield_tensile_str", allow_reuse=True)(
213
280
  validate_unit_factory("MPa")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: openepd
3
- Version: 3.1.1
3
+ Version: 3.1.2
4
4
  Summary: Python library to work with OpenEPD format
5
5
  Home-page: https://github.com/cchangelabs/openepd
6
6
  License: Apache-2.0
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
19
  Provides-Extra: api-client
20
20
  Requires-Dist: email-validator (>=1.3.1)
21
+ Requires-Dist: idna (>=3.7)
21
22
  Requires-Dist: pydantic (>=1.10,<3.0)
22
23
  Requires-Dist: requests (>=2.0) ; extra == "api-client"
23
24
  Project-URL: Repository, https://github.com/cchangelabs/openepd
@@ -1,5 +1,5 @@
1
1
  openepd/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
2
- openepd/__version__.py,sha256=rwS4v5JkA3cxID1usXh3VK1DMKIZ60kBre3pvGgaobQ,855
2
+ openepd/__version__.py,sha256=GaGWDv9_2nYUszRosW58lmsPGqgtPMKx9e0eVNN9v40,855
3
3
  openepd/api/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
4
4
  openepd/api/base_sync_client.py,sha256=JcNpWsGoIK_1Eg27CAQd7nIjbcfD56jQ1nS6B48Q0cI,21142
5
5
  openepd/api/category/__init__.py,sha256=rqQJWF5jpYAgRbbAycUfWMGsr5kGtfjmwzsTeqbElJw,837
@@ -52,12 +52,12 @@ openepd/model/specs/generated/cast_decks_and_underlayment.py,sha256=2VwwCgVRb3Su
52
52
  openepd/model/specs/generated/cladding.py,sha256=RHq6irHwXJNnKuBOsA3h2g1jedMDOJPmV4WNjkdesgs,6939
53
53
  openepd/model/specs/generated/cmu.py,sha256=mSRYG67m2c01C1dmYNyQjXQmYCcM4frpLQ3wKurTa50,2324
54
54
  openepd/model/specs/generated/common.py,sha256=n_wuE-VtNFytpE-uLZrSXeeIIoNl2lSutPodiGKH94E,1117
55
- openepd/model/specs/generated/concrete.py,sha256=cbTwYGxw0ttPYcg8zrkQEehNqtI3wakI7XgTEec0W24,6617
55
+ openepd/model/specs/generated/concrete.py,sha256=CrHhIA-FR8zgvbCL_9oNVnRSaXhGMwCmEs4ep4XUZ4Y,8324
56
56
  openepd/model/specs/generated/conveying_equipment.py,sha256=HcMSuyng9OlRKvUVYSstJx0XtaD8_cQ9ka8l4vG76AY,2422
57
57
  openepd/model/specs/generated/electrical.py,sha256=oEhWkm4Au9N0xtTLUNTUVMxQUuJuvoLgOKccnAI0oGQ,10457
58
58
  openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py,sha256=CiI6wcfo_tf6QoGkpAjUskCUKNJQvz0_N0RD7tF1oiA,2117
59
59
  openepd/model/specs/generated/electricity.py,sha256=8W_vkCn_MDoB5rqGbPp2g04VMEG0ULMexD4OImgAt9U,1029
60
- openepd/model/specs/generated/enums.py,sha256=_7eYhDClgRPrtt06o9N11enoKIIEUaHTBu9QGW3CABw,57079
60
+ openepd/model/specs/generated/enums.py,sha256=fCX13A-xCZoIBb_CR-_XSBBWemLSCg5QhqCoE2IxlW4,58482
61
61
  openepd/model/specs/generated/finishes.py,sha256=xGjhNfpecOT7H4zElK34VSJuy8mfJ8gFF85PurKatao,22337
62
62
  openepd/model/specs/generated/fire_and_smoke_protection.py,sha256=sbyEIMHB8zkIREqvUW6SSYZO9Tlx_zEoJrHWhqIjboI,2801
63
63
  openepd/model/specs/generated/furnishings.py,sha256=NkS59ulTVqzSWFveM4Qd0Wv6bh0E-sx45fLrTH3Ixs4,3076
@@ -68,13 +68,13 @@ openepd/model/specs/generated/material_handling.py,sha256=qiyo_nH4nXmvTZxebqhOMX
68
68
  openepd/model/specs/generated/mechanical.py,sha256=fELaoqPbNhgOQ_6oB8NIRfgz7Nff_nB6rqb0um1MGKY,11561
69
69
  openepd/model/specs/generated/mechanical_insulation.py,sha256=CAtiQCPZUnRnfnKS8upqxQGuWoizCk4Hq8hgxg_0ZoA,1900
70
70
  openepd/model/specs/generated/network_infrastructure.py,sha256=rejSwn6i0Ns4K2tFbv212wroM-zT4B2vTeIr3g8MVeg,8644
71
- openepd/model/specs/generated/openings.py,sha256=n-SSgG-xHNwHGnKK5JN1PxLkxspTtSf8rgizXf3KtJs,17100
71
+ openepd/model/specs/generated/openings.py,sha256=llb7UvXe93qZ94MAhCNVWDFWdALSi_xhjJcQ5JFNIws,19729
72
72
  openepd/model/specs/generated/other_electrical_equipment.py,sha256=06HI_DEoHlywStzhj8rQtkfnXyWc-4Q4O3iE2rv4h2I,1057
73
73
  openepd/model/specs/generated/other_materials.py,sha256=DCVKE_C0aVdotwayPuMATTlEmDjfTUm3-cQ8gzdxGMw,3453
74
74
  openepd/model/specs/generated/plumbing.py,sha256=MOtI9aRGHtW64hui2x9ayHgkhtXtem0Aa6GTHJMpHw8,5439
75
75
  openepd/model/specs/generated/precast_concrete.py,sha256=0aMCCXnCCgt7GGvjAppFAe-Hidjn-rokpvhOL1YgK0A,2690
76
76
  openepd/model/specs/generated/sheathing.py,sha256=pV_j6R8mZ7Kyr8WYxP6UzsP3qSAqwxbVfe9V7jjSYb0,3516
77
- openepd/model/specs/generated/steel.py,sha256=F3YzUb7jxUISn04Ye1NtMKORiYaqFfqfixTMfQWUJQY,8102
77
+ openepd/model/specs/generated/steel.py,sha256=yKRhe4scCbMPvps6pk7cuA-TSe_HuynyeuQu1VceJfE,10255
78
78
  openepd/model/specs/generated/thermal_moisture_protection.py,sha256=3rqYO7_ljDMF_SLy0SsMjuiciOyL2qgVCyYz3b9ouTM,7963
79
79
  openepd/model/specs/generated/utility_piping.py,sha256=qUJEFUWMav-TTB4UcJhRW2E_xftBwr0NwL_oTZmLuLQ,2768
80
80
  openepd/model/specs/generated/wood.py,sha256=w_z9b2bIBjNyLEsn8MvFxVo0sVSuK75Mmuh9fQbOqgo,6199
@@ -89,7 +89,7 @@ openepd/model/validation/numbers.py,sha256=4gkMS35zKnGyfdFyLTgHncNmKpg8-WOYX9qaU
89
89
  openepd/model/validation/quantity.py,sha256=GIPPtzOVwMYgKpx1XbDmoLQERlcoQ-VSK6k_EyMNQoQ,5287
90
90
  openepd/model/versioning.py,sha256=1gqeeAhc2lVonq9ErOD3Ws7XZ0CgZnmlFpKHKrc9IwI,4690
91
91
  openepd/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
- openepd-3.1.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
93
- openepd-3.1.1.dist-info/METADATA,sha256=awCzyeqGXZZ5nITI6LOUXyHWwP4mS-CYhWrc_FzbaAE,7762
94
- openepd-3.1.1.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
95
- openepd-3.1.1.dist-info/RECORD,,
92
+ openepd-3.1.2.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
93
+ openepd-3.1.2.dist-info/METADATA,sha256=ih0zcoUzRm83KjbY5uSwBPTdbjdb2vBlWPA1G4G3VQs,7790
94
+ openepd-3.1.2.dist-info/WHEEL,sha256=Zb28QaM1gQi8f4VCBhsUklF61CTlNYfs9YAZn-TOGFk,88
95
+ openepd-3.1.2.dist-info/RECORD,,