openepd 4.13.1__py3-none-any.whl → 5.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 (60) hide show
  1. openepd/__version__.py +1 -1
  2. openepd/model/common.py +40 -1
  3. openepd/model/declaration.py +7 -2
  4. openepd/model/geography.py +1 -1
  5. openepd/model/lcia.py +191 -19
  6. openepd/model/pcr.py +2 -2
  7. openepd/model/specs/README.md +34 -8
  8. openepd/model/specs/asphalt.py +2 -2
  9. openepd/model/specs/base.py +15 -5
  10. openepd/model/specs/generated/__init__.py +80 -0
  11. openepd/model/specs/generated/cladding.py +4 -4
  12. openepd/model/specs/generated/concrete.py +8 -7
  13. openepd/model/specs/generated/electrical.py +2 -2
  14. openepd/model/specs/generated/finishes.py +10 -6
  15. openepd/model/specs/generated/masonry.py +6 -2
  16. openepd/model/specs/generated/network_infrastructure.py +7 -2
  17. openepd/model/specs/generated/openings.py +10 -6
  18. openepd/model/specs/generated/sheathing.py +8 -4
  19. openepd/model/specs/generated/steel.py +10 -5
  20. openepd/model/specs/range/__init__.py +101 -0
  21. openepd/model/specs/range/accessories.py +97 -0
  22. openepd/model/specs/range/aggregates.py +57 -0
  23. openepd/model/specs/range/aluminium.py +92 -0
  24. openepd/model/specs/range/asphalt.py +61 -0
  25. openepd/model/specs/range/bulk_materials.py +31 -0
  26. openepd/model/specs/range/cast_decks_and_underlayment.py +34 -0
  27. openepd/model/specs/range/cladding.py +275 -0
  28. openepd/model/specs/range/cmu.py +44 -0
  29. openepd/model/specs/range/concrete.py +179 -0
  30. openepd/model/specs/range/conveying_equipment.py +86 -0
  31. openepd/model/specs/range/electrical.py +422 -0
  32. openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py +96 -0
  33. openepd/model/specs/range/electricity.py +31 -0
  34. openepd/model/specs/range/finishes.py +585 -0
  35. openepd/model/specs/range/fire_and_smoke_protection.py +108 -0
  36. openepd/model/specs/range/furnishings.py +137 -0
  37. openepd/model/specs/range/grouting.py +34 -0
  38. openepd/model/specs/range/manufacturing_inputs.py +190 -0
  39. openepd/model/specs/range/masonry.py +87 -0
  40. openepd/model/specs/range/material_handling.py +50 -0
  41. openepd/model/specs/range/mechanical.py +307 -0
  42. openepd/model/specs/range/mechanical_insulation.py +42 -0
  43. openepd/model/specs/range/network_infrastructure.py +208 -0
  44. openepd/model/specs/range/openings.py +512 -0
  45. openepd/model/specs/range/other_electrical_equipment.py +31 -0
  46. openepd/model/specs/range/other_materials.py +194 -0
  47. openepd/model/specs/range/plumbing.py +200 -0
  48. openepd/model/specs/range/precast_concrete.py +115 -0
  49. openepd/model/specs/range/sheathing.py +86 -0
  50. openepd/model/specs/range/steel.py +332 -0
  51. openepd/model/specs/range/thermal_moisture_protection.py +336 -0
  52. openepd/model/specs/range/utility_piping.py +75 -0
  53. openepd/model/specs/range/wood.py +228 -0
  54. openepd/model/specs/range/wood_joists.py +44 -0
  55. openepd/model/validation/numbers.py +11 -5
  56. openepd/model/validation/quantity.py +469 -58
  57. {openepd-4.13.1.dist-info → openepd-5.1.0.dist-info}/METADATA +6 -1
  58. {openepd-4.13.1.dist-info → openepd-5.1.0.dist-info}/RECORD +60 -25
  59. {openepd-4.13.1.dist-info → openepd-5.1.0.dist-info}/LICENSE +0 -0
  60. {openepd-4.13.1.dist-info → openepd-5.1.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,585 @@
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
+ __all__ = (
17
+ "AccessFlooringRangeV1",
18
+ "CarpetRangeV1",
19
+ "LaminateRangeV1",
20
+ "OtherFlooringRangeV1",
21
+ "ResilientFlooringRangeV1",
22
+ "WallBaseRangeV1",
23
+ "WoodFlooringRangeV1",
24
+ "AcousticalCeilingsRangeV1",
25
+ "CeramicTileRangeV1",
26
+ "GaugedTileRangeV1",
27
+ "GlassTileRangeV1",
28
+ "GypsumSupportsRangeV1",
29
+ "FlooringRangeV1",
30
+ "CeilingPanelRangeV1",
31
+ "BackingAndUnderlayRangeV1",
32
+ "CementBoardRangeV1",
33
+ "TilingRangeV1",
34
+ "DeckingBoardsRangeV1",
35
+ "GlassFiberReinforcedGypsumFabricationsRangeV1",
36
+ "GypsumRangeV1",
37
+ "MirrorsRangeV1",
38
+ "PaintByMassRangeV1",
39
+ "PaintByVolumeRangeV1",
40
+ "PaintByAreaRangeV1",
41
+ "PaintingAndCoatingRangeV1",
42
+ "WallFinishesRangeV1",
43
+ "PlasterRangeV1",
44
+ "FinishesRangeV1",
45
+ )
46
+
47
+ # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
48
+
49
+
50
+ from openepd.compat.pydantic import pyd
51
+ from openepd.model.common import RangeAmount, RangeFloat, RangeInt, RangeRatioFloat
52
+ from openepd.model.org import OrgRef
53
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
54
+ from openepd.model.specs.generated.enums import (
55
+ AccessFlooringCoreMaterial,
56
+ AccessFlooringFinishMaterial,
57
+ AccessFlooringSeismicRating,
58
+ AccessFlooringStringers,
59
+ AllFabrication,
60
+ CarpetFormFactor,
61
+ CarpetIntendedApplication,
62
+ CarpetManufactureType,
63
+ CarpetYarnType,
64
+ CeilingPanelCoreMaterial,
65
+ CeilingPanelFireRating,
66
+ CementBoardThickness,
67
+ DeckingBoardMaterial,
68
+ GypsumFacing,
69
+ GypsumFireRating,
70
+ GypsumThickness,
71
+ PlasterComposition,
72
+ ResilientFlooringFormFactor,
73
+ ResilientFlooringMaterial,
74
+ ResilientFlooringThickness,
75
+ SawnTimberSpecies,
76
+ VinylSheetConstruction,
77
+ WallBaseMaterial,
78
+ WoodFlooringFabrication,
79
+ WoodFlooringTimberSpecies,
80
+ )
81
+ from openepd.model.validation.quantity import AmountRangeGWP, AmountRangeLengthMm, AmountRangePressureMpa
82
+
83
+
84
+ class AccessFlooringRangeV1(BaseOpenEpdHierarchicalSpec):
85
+ """
86
+ Elevated floor system built on top of concrete slab surface.
87
+
88
+ It thereby creates a hidden void between the two floors that is used for the passage of mechanical and electrical
89
+ services. The system consists of panels, stringers, and pedestals.
90
+
91
+ Range version.
92
+ """
93
+
94
+ _EXT_VERSION = "1.0"
95
+
96
+ core_material: list[AccessFlooringCoreMaterial] | None = pyd.Field(default=None, description="")
97
+ finish_material: list[AccessFlooringFinishMaterial] | None = pyd.Field(default=None, description="")
98
+ stringers: list[AccessFlooringStringers] | None = pyd.Field(default=None, description="")
99
+ seismic_rating: list[AccessFlooringSeismicRating] | None = pyd.Field(default=None, description="")
100
+ magnetically_attached_finish: bool | None = pyd.Field(default=None, description="")
101
+ permanent_finish: bool | None = pyd.Field(default=None, description="")
102
+ drylay: bool | None = pyd.Field(default=None, description="")
103
+ adjustable_height: bool | None = pyd.Field(default=None, description="")
104
+ fixed_height: bool | None = pyd.Field(default=None, description="")
105
+ finished_floor_height: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
106
+ panel_thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
107
+ concentrated_load: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
108
+ uniform_load: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
109
+ rolling_load_10_pass: str | None = pyd.Field(default=None, description="")
110
+ rolling_load_10000_pass: str | None = pyd.Field(default=None, description="")
111
+
112
+
113
+ class CarpetRangeV1(BaseOpenEpdHierarchicalSpec):
114
+ """
115
+ Textile Floor Coverings.
116
+
117
+ Range version.
118
+ """
119
+
120
+ _EXT_VERSION = "1.0"
121
+
122
+ length: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
123
+ width: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
124
+ intended_application: list[CarpetIntendedApplication] | None = pyd.Field(default=None, description="")
125
+ manufacture_type: list[CarpetManufactureType] | None = pyd.Field(default=None, description="")
126
+ form_factor: list[CarpetFormFactor] | None = pyd.Field(default=None, description="")
127
+ yarn_weight: str | None = pyd.Field(default=None, description="")
128
+ yarn_type: list[CarpetYarnType] | None = pyd.Field(default=None, description="")
129
+ fire_radiant_panel_rating_astme648: str | None = pyd.Field(default=None, description="")
130
+ fire_smoke_density_rating_astme648: str | None = pyd.Field(default=None, description="")
131
+ voc_emissions: str | None = pyd.Field(default=None, description="")
132
+ cushioned: bool | None = pyd.Field(default=None, description="")
133
+ bleachable: bool | None = pyd.Field(default=None, description="")
134
+ gwp_factor_base: AmountRangeGWP | None = pyd.Field(default=None, description="")
135
+ gwp_factor_yarn: AmountRangeGWP | None = pyd.Field(default=None, description="")
136
+
137
+
138
+ class LaminateRangeV1(BaseOpenEpdHierarchicalSpec):
139
+ """
140
+ Laminate flooring.
141
+
142
+ Range version.
143
+ """
144
+
145
+ _EXT_VERSION = "1.0"
146
+
147
+
148
+ class OtherFlooringRangeV1(BaseOpenEpdHierarchicalSpec):
149
+ """
150
+ Other not yet classified kinds of flooring.
151
+
152
+ Range version.
153
+ """
154
+
155
+ _EXT_VERSION = "1.0"
156
+
157
+
158
+ class ResilientFlooringRangeV1(BaseOpenEpdHierarchicalSpec):
159
+ """
160
+ Resilient floor products.
161
+
162
+ Includes vinyl, rubber, linoleum, composition cork, etc. in modular square or rectangle shapes.
163
+
164
+ Range version.
165
+ """
166
+
167
+ _EXT_VERSION = "1.0"
168
+
169
+ length: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
170
+ width: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
171
+ form_factor: list[ResilientFlooringFormFactor] | None = pyd.Field(default=None, description="")
172
+ material: list[ResilientFlooringMaterial] | None = pyd.Field(default=None, description="")
173
+ sheet_construction: list[VinylSheetConstruction] | None = pyd.Field(default=None, description="")
174
+ wear_layer: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
175
+ delta_iic: RangeFloat | None = pyd.Field(default=None, description="")
176
+ thickness: list[ResilientFlooringThickness] | None = pyd.Field(default=None, description="")
177
+ sport_flooring: bool | None = pyd.Field(default=None, description="")
178
+ conductive_flooring: bool | None = pyd.Field(default=None, description="")
179
+ zwtl: bool | None = pyd.Field(default=None, description="")
180
+ floor_score: bool | None = pyd.Field(default=None, description="")
181
+ nsf332: bool | None = pyd.Field(default=None, description="")
182
+
183
+
184
+ class WallBaseRangeV1(BaseOpenEpdHierarchicalSpec):
185
+ """
186
+ Wall base made to help cover gaps between wall and vinyl, rubber, wood, or tile flooring.
187
+
188
+ Range version.
189
+ """
190
+
191
+ _EXT_VERSION = "1.0"
192
+
193
+ wall_base_material: list[WallBaseMaterial] | None = pyd.Field(default=None, description="")
194
+
195
+
196
+ class WoodFlooringRangeV1(BaseOpenEpdHierarchicalSpec):
197
+ """
198
+ Wood flooring for interior applications.
199
+
200
+ Includes hardwood strip and plank flooring, engineered hardwood flooring, wood parquet flooring, coordinated
201
+ transitions, and molding pieces.
202
+
203
+ Range version.
204
+ """
205
+
206
+ _EXT_VERSION = "1.0"
207
+
208
+ forest_practices_certifiers: list[OrgRef] | None = None
209
+ thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
210
+ timber_species: list[WoodFlooringTimberSpecies] | None = pyd.Field(default=None, description="")
211
+ fabrication: list[WoodFlooringFabrication] | None = pyd.Field(default=None, description="")
212
+
213
+
214
+ class AcousticalCeilingsRangeV1(BaseOpenEpdHierarchicalSpec):
215
+ """
216
+ Acoustical ceiling panels.
217
+
218
+ Range version.
219
+ """
220
+
221
+ _EXT_VERSION = "1.0"
222
+
223
+ thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
224
+
225
+
226
+ class CeramicTileRangeV1(BaseOpenEpdHierarchicalSpec):
227
+ """
228
+ Ceramic tiles, including porcelain, quarry, pressed floor tile, wall tile, mosaic tile, etc.
229
+
230
+ Range version.
231
+ """
232
+
233
+ _EXT_VERSION = "1.0"
234
+
235
+ porcelain: bool | None = pyd.Field(
236
+ default=None, description="A dense and durable ceramic tile made from fine porcelain clay."
237
+ )
238
+ quarry: bool | None = pyd.Field(
239
+ default=None,
240
+ description="A type of unglazed ceramic tile made from natural clay with a slightly rough texture.",
241
+ )
242
+ pressed_floor_tile: bool | None = pyd.Field(
243
+ default=None,
244
+ description="A durable and low-maintenance type of tile made by compressing clay or other materials at high pressure.",
245
+ )
246
+ wall_tile: bool | None = pyd.Field(
247
+ default=None,
248
+ description="A decorative tile designed for use on vertical surfaces such as walls or backsplashes.",
249
+ )
250
+ mosaic_tile: bool | None = pyd.Field(
251
+ default=None,
252
+ description="A small decorative tile made of glass, stone, or ceramic, arranged in a pattern to create a design.",
253
+ )
254
+ specialty: bool | None = pyd.Field(
255
+ default=None,
256
+ description="A unique and customized type of tile, often made from unconventional materials or with specialized designs or finishes.",
257
+ )
258
+
259
+
260
+ class GaugedTileRangeV1(BaseOpenEpdHierarchicalSpec):
261
+ """
262
+ Specially manufactured porcelain tile with extra-large panels/slabs.
263
+
264
+ Manufactured to a specific thickness ranging from 2-20 mm.
265
+
266
+ Range version.
267
+ """
268
+
269
+ _EXT_VERSION = "1.0"
270
+
271
+ tile_panels: bool | None = pyd.Field(
272
+ default=None,
273
+ description="Large-format porcelain or natural stone tiles that are typically over 3 feet in length and width, designed for use in floor and wall installations to create a seamless and uninterrupted appearance.",
274
+ )
275
+ tile_pavers: bool | None = pyd.Field(
276
+ default=None,
277
+ description="Thick and durable porcelain or natural stone tiles that are commonly used in outdoor applications, such as patios, walkways, and driveways, due to their high resistance to weather and wear.",
278
+ )
279
+
280
+
281
+ class GlassTileRangeV1(BaseOpenEpdHierarchicalSpec):
282
+ """
283
+ Glass Tiles.
284
+
285
+ Range version.
286
+ """
287
+
288
+ _EXT_VERSION = "1.0"
289
+
290
+ regular: bool | None = pyd.Field(
291
+ default=None,
292
+ description="Glass tile that is typically square or rectangular in shape, and used for a variety of decorative applications, such as kitchen backsplashes, shower walls, and accent borders.",
293
+ )
294
+ glass_mosaic: bool | None = pyd.Field(
295
+ default=None,
296
+ description="A small, decorative glass tile made in a variety of shapes and colors, used for intricate designs and patterns on walls, floors, and other surfaces.",
297
+ )
298
+ miniature_mosaic: bool | None = pyd.Field(
299
+ default=None,
300
+ description="Glass mosaic tile that is smaller in size than regular glass mosaic tile, often used for intricate details and designs in backsplashes, shower walls, and decorative accents.",
301
+ )
302
+ large_format: bool | None = pyd.Field(
303
+ default=None,
304
+ description="Glass tile that is larger in size than regular glass tile, often used to create a dramatic and modern effect in commercial and residential spaces.",
305
+ )
306
+
307
+
308
+ class GypsumSupportsRangeV1(BaseOpenEpdHierarchicalSpec):
309
+ """
310
+ Supports for suspended and furred gypsum wall and ceiling assemblies.
311
+
312
+ Range version.
313
+ """
314
+
315
+ _EXT_VERSION = "1.0"
316
+
317
+
318
+ class FlooringRangeV1(BaseOpenEpdHierarchicalSpec):
319
+ """
320
+ General category - finishes for floors.
321
+
322
+ Range version.
323
+ """
324
+
325
+ _EXT_VERSION = "1.0"
326
+
327
+ AccessFlooring: AccessFlooringRangeV1 | None = None
328
+ Carpet: CarpetRangeV1 | None = None
329
+ Laminate: LaminateRangeV1 | None = None
330
+ OtherFlooring: OtherFlooringRangeV1 | None = None
331
+ ResilientFlooring: ResilientFlooringRangeV1 | None = None
332
+ WallBase: WallBaseRangeV1 | None = None
333
+ WoodFlooring: WoodFlooringRangeV1 | None = None
334
+
335
+
336
+ class CeilingPanelRangeV1(BaseOpenEpdHierarchicalSpec):
337
+ """
338
+ Acoustical and other specialty ceiling panels.
339
+
340
+ Range version.
341
+ """
342
+
343
+ _EXT_VERSION = "1.0"
344
+
345
+ fire_rating: list[CeilingPanelFireRating] | None = pyd.Field(default=None, description="")
346
+ core_material: list[CeilingPanelCoreMaterial] | None = pyd.Field(default=None, description="")
347
+ nrc: RangeRatioFloat | None = pyd.Field(
348
+ default=None, description="Noise Reduction Coefficient (NRC) or Sound Absorbtion Average (SAA) per ASTM C423"
349
+ )
350
+ cac: RangeInt | None = pyd.Field(default=None, description="Ceiling Attenuation Class (CAC) per ASTM E1414")
351
+ AcousticalCeilings: AcousticalCeilingsRangeV1 | None = None
352
+
353
+
354
+ class BackingAndUnderlayRangeV1(BaseOpenEpdHierarchicalSpec):
355
+ """
356
+ Cementitious, glass-mat faced gypsum, and fibered gypsum backing boards to support finish materials.
357
+
358
+ Range version.
359
+ """
360
+
361
+ _EXT_VERSION = "1.0"
362
+
363
+
364
+ class CementBoardRangeV1(BaseOpenEpdHierarchicalSpec):
365
+ """
366
+ Hard cementitious boards, typically used as a tile backer.
367
+
368
+ Range version.
369
+ """
370
+
371
+ _EXT_VERSION = "1.0"
372
+
373
+ thickness: list[CementBoardThickness] | None = pyd.Field(default=None, description="")
374
+
375
+
376
+ class TilingRangeV1(BaseOpenEpdHierarchicalSpec):
377
+ """
378
+ Decorative building materials that includes a variety of ceramic, porcelain, and glass tiles.
379
+
380
+ Used for covering and enhancing surfaces such as floors, walls, and countertops.
381
+
382
+ Range version.
383
+ """
384
+
385
+ _EXT_VERSION = "1.0"
386
+
387
+ thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
388
+ flooring: bool | None = pyd.Field(default=None, description="Tiling intended for walking.")
389
+ wall_finish: bool | None = pyd.Field(
390
+ default=None,
391
+ description="A decorative tile designed for use on vertical surfaces such as walls or backsplashes.",
392
+ )
393
+ cladding: bool | None = pyd.Field(
394
+ default=None,
395
+ description="Tiling for exterior use, primarily used for the walls of buildings and structures, providing a protective and decorative layer that enhances the aesthetic appearance and weather resistance of the underlying structure.",
396
+ )
397
+ other: bool | None = pyd.Field(
398
+ default=None, description="Tiling used as countertops, ceilings, furnishings, hardscapes etc."
399
+ )
400
+ residential_only: bool | None = pyd.Field(
401
+ default=None,
402
+ description="All commercial tile can also be used in residential applications, but the opposite may not be true. This selection allows to filter out tiling that is not intended for commercial applications.",
403
+ )
404
+ reinforced: bool | None = pyd.Field(
405
+ default=None, description="Steel-reinforced ceramic tiles or tiles with other special reinforcing technology."
406
+ )
407
+ total_recycled_content: RangeRatioFloat | None = pyd.Field(
408
+ default=None,
409
+ description="Proportion of this product that is sourced from recycled content. Pre-consumer recycling is given a 50% weighting, 100% for post-consumer, by mass.",
410
+ )
411
+ post_consumer_recycled_content: RangeRatioFloat | None = pyd.Field(
412
+ default=None,
413
+ description="Proportion of this product that is sourced from post-consumer recycled content, by mass.",
414
+ )
415
+ CeramicTile: CeramicTileRangeV1 | None = None
416
+ GaugedTile: GaugedTileRangeV1 | None = None
417
+ GlassTile: GlassTileRangeV1 | None = None
418
+
419
+
420
+ class DeckingBoardsRangeV1(BaseOpenEpdHierarchicalSpec):
421
+ """
422
+ Decking boards provide the finished surface of a deck and support the weight of people and furniture.
423
+
424
+ Range version.
425
+ """
426
+
427
+ _EXT_VERSION = "1.0"
428
+
429
+ forest_practices_certifiers: list[OrgRef] | None = None
430
+ timber_species: list[SawnTimberSpecies] | None = pyd.Field(default=None, description="")
431
+ fabrication: list[AllFabrication] | None = pyd.Field(default=None, description="")
432
+ weather_exposed: bool | None = pyd.Field(default=None, description="")
433
+ fire_retardant: bool | None = pyd.Field(default=None, description="")
434
+ decay_resistant: bool | None = pyd.Field(default=None, description="")
435
+ material: list[DeckingBoardMaterial] | None = pyd.Field(default=None, description="")
436
+
437
+
438
+ class GlassFiberReinforcedGypsumFabricationsRangeV1(BaseOpenEpdHierarchicalSpec):
439
+ """
440
+ Gypsum with integrated glass fiber reinforcement, which may be fabricated in complex shapes or as a board.
441
+
442
+ Range version.
443
+ """
444
+
445
+ _EXT_VERSION = "1.0"
446
+
447
+
448
+ class GypsumRangeV1(BaseOpenEpdHierarchicalSpec):
449
+ """
450
+ Gypsum board used for interior walls, ceilings, and similar applications.
451
+
452
+ Range version.
453
+ """
454
+
455
+ _EXT_VERSION = "1.1"
456
+
457
+ fire_rating: list[GypsumFireRating] | None = pyd.Field(default=None, description="")
458
+ thickness: list[GypsumThickness] | None = pyd.Field(default=None, description="")
459
+ facing: list[GypsumFacing] | None = pyd.Field(default=None, description="")
460
+ r_factor: str | None = pyd.Field(default=None, description="")
461
+ flame_spread_astm_e84: RangeInt | None = pyd.Field(default=None, description="")
462
+ smoke_production_astm_e84: RangeInt | None = pyd.Field(default=None, description="")
463
+ surface_abrasion_d4977: RangeInt | None = pyd.Field(default=None, description="")
464
+ indentation_d5420: RangeInt | None = pyd.Field(default=None, description="")
465
+ soft_body_impact_e695: RangeInt | None = pyd.Field(default=None, description="")
466
+ hard_body_impact_c1929: RangeInt | None = pyd.Field(default=None, description="")
467
+ mold_resistant: bool | None = pyd.Field(default=None, description="")
468
+ foil_backing: bool | None = pyd.Field(default=None, description="")
469
+ moisture_resistant: bool | None = pyd.Field(default=None, description="")
470
+ abuse_resistant: bool | None = pyd.Field(default=None, description="")
471
+ GypsumSupports: GypsumSupportsRangeV1 | None = None
472
+
473
+
474
+ class MirrorsRangeV1(BaseOpenEpdHierarchicalSpec):
475
+ """
476
+ Mirrors.
477
+
478
+ Range version.
479
+ """
480
+
481
+ _EXT_VERSION = "1.0"
482
+
483
+
484
+ class PaintByMassRangeV1(BaseOpenEpdHierarchicalSpec):
485
+ """
486
+ Paintings and coatings by mass.
487
+
488
+ Expected declared unit for products is mass of ready to use product.
489
+
490
+ Range version.
491
+ """
492
+
493
+ _EXT_VERSION = "1.0"
494
+
495
+
496
+ class PaintByVolumeRangeV1(BaseOpenEpdHierarchicalSpec):
497
+ """
498
+ Paintings and coatings by volume.
499
+
500
+ Expecting declared unit for products is volume of ready to use product.
501
+
502
+ Range version.
503
+ """
504
+
505
+ _EXT_VERSION = "1.0"
506
+
507
+
508
+ class PaintByAreaRangeV1(BaseOpenEpdHierarchicalSpec):
509
+ """
510
+ Paintings and coatings by area.
511
+
512
+ Expected declared unit is area of host surface covered by the product.
513
+
514
+ Range version.
515
+ """
516
+
517
+ _EXT_VERSION = "1.0"
518
+
519
+
520
+ class PaintingAndCoatingRangeV1(BaseOpenEpdHierarchicalSpec):
521
+ """
522
+ Paintings and coatings.
523
+
524
+ Range version.
525
+ """
526
+
527
+ _EXT_VERSION = "1.1"
528
+
529
+ PaintByMass: PaintByMassRangeV1 | None = None
530
+ PaintByVolume: PaintByVolumeRangeV1 | None = None
531
+ PaintByArea: PaintByAreaRangeV1 | None = None
532
+
533
+
534
+ class WallFinishesRangeV1(BaseOpenEpdHierarchicalSpec):
535
+ """
536
+ Interior wall coverings including fabric, textile, wood, stone, and metal products.
537
+
538
+ Range version.
539
+ """
540
+
541
+ _EXT_VERSION = "1.0"
542
+
543
+ thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
544
+
545
+
546
+ class PlasterRangeV1(BaseOpenEpdHierarchicalSpec):
547
+ """
548
+ Plaster, Stucco, & Render.
549
+
550
+ Used for the protective or decorative coating of walls and ceilings and for
551
+ moulding and casting decorative elements. These are typically gypsum-, lime-,
552
+ or cement-based. Products in this category refer to dry mix.
553
+
554
+ Range version.
555
+ """
556
+
557
+ _EXT_VERSION = "1.0"
558
+
559
+ composition: list[PlasterComposition] | None = pyd.Field(default=None, description="")
560
+ application_rate: RangeAmount | None = pyd.Field(
561
+ default=None, description="Typical or reference amount of material covering a unit of a host surface."
562
+ )
563
+
564
+
565
+ class FinishesRangeV1(BaseOpenEpdHierarchicalSpec):
566
+ """
567
+ General category - finishes for interior ceilings, floors, walls.
568
+
569
+ Range version.
570
+ """
571
+
572
+ _EXT_VERSION = "1.1"
573
+
574
+ Flooring: FlooringRangeV1 | None = None
575
+ CeilingPanel: CeilingPanelRangeV1 | None = None
576
+ BackingAndUnderlay: BackingAndUnderlayRangeV1 | None = None
577
+ CementBoard: CementBoardRangeV1 | None = None
578
+ Tiling: TilingRangeV1 | None = None
579
+ DeckingBoards: DeckingBoardsRangeV1 | None = None
580
+ GlassFiberReinforcedGypsumFabrications: GlassFiberReinforcedGypsumFabricationsRangeV1 | None = None
581
+ Gypsum: GypsumRangeV1 | None = None
582
+ Mirrors: MirrorsRangeV1 | None = None
583
+ PaintingAndCoating: PaintingAndCoatingRangeV1 | None = None
584
+ WallFinishes: WallFinishesRangeV1 | None = None
585
+ Plaster: PlasterRangeV1 | None = None
@@ -0,0 +1,108 @@
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
+ __all__ = (
17
+ "IntumescentFireproofingRangeV1",
18
+ "SprayFireproofingRangeV1",
19
+ "AppliedFireproofingRangeV1",
20
+ "FirestoppingRangeV1",
21
+ "FireAndSmokeProtectionRangeV1",
22
+ )
23
+
24
+ # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
25
+
26
+
27
+ from openepd.compat.pydantic import pyd
28
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
29
+ from openepd.model.specs.generated.enums import (
30
+ IntumescentFireproofingMaterialType,
31
+ SprayFireproofingDensity,
32
+ SprayFireproofingMaterialType,
33
+ )
34
+ from openepd.model.validation.quantity import AmountRangeLengthMm
35
+
36
+
37
+ class IntumescentFireproofingRangeV1(BaseOpenEpdHierarchicalSpec):
38
+ """
39
+ Fireproofing material applied to structural materials, which swells as a result of heat exposure.
40
+
41
+ As a result it increases in volume and decreasing in density.
42
+
43
+ Range version.
44
+ """
45
+
46
+ _EXT_VERSION = "1.0"
47
+
48
+ material_type: list[IntumescentFireproofingMaterialType] | None = pyd.Field(default=None, description="")
49
+
50
+
51
+ class SprayFireproofingRangeV1(BaseOpenEpdHierarchicalSpec):
52
+ """
53
+ Spray fireproofing.
54
+
55
+ A passive fire protection system that reduces the rate of temperature increase in concrete or steel during a fire.
56
+
57
+ Range version.
58
+ """
59
+
60
+ _EXT_VERSION = "1.0"
61
+
62
+ material_type: list[SprayFireproofingMaterialType] | None = pyd.Field(default=None, description="")
63
+ density: list[SprayFireproofingDensity] | None = pyd.Field(default=None, description="")
64
+
65
+
66
+ class AppliedFireproofingRangeV1(BaseOpenEpdHierarchicalSpec):
67
+ """
68
+ Fireproofing material applied to structural materials.
69
+
70
+ Materials include: cement aggregate, cementitious, magnesium-oxychloride, intumescent, magnesium cement, mineral
71
+ fiber, and mineral fiber fireproofing products.
72
+
73
+ Range version.
74
+ """
75
+
76
+ _EXT_VERSION = "1.0"
77
+
78
+ thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
79
+ IntumescentFireproofing: IntumescentFireproofingRangeV1 | None = None
80
+ SprayFireproofing: SprayFireproofingRangeV1 | None = None
81
+
82
+
83
+ class FirestoppingRangeV1(BaseOpenEpdHierarchicalSpec):
84
+ """
85
+ Seals and protects openings and joints in fire rate assemblies.
86
+
87
+ Typically sealants, sprays, and caulks.
88
+
89
+ Range version.
90
+ """
91
+
92
+ _EXT_VERSION = "1.0"
93
+
94
+
95
+ class FireAndSmokeProtectionRangeV1(BaseOpenEpdHierarchicalSpec):
96
+ """
97
+ Fire and smoke protection.
98
+
99
+ General category of materials whose function is to provide protection of materials, spaces, and occupants from
100
+ fire and smoke damage.
101
+
102
+ Range version.
103
+ """
104
+
105
+ _EXT_VERSION = "1.0"
106
+
107
+ AppliedFireproofing: AppliedFireproofingRangeV1 | None = None
108
+ Firestopping: FirestoppingRangeV1 | None = None