openepd 7.1.0__py3-none-any.whl → 7.2.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 (77) hide show
  1. openepd/__version__.py +1 -1
  2. openepd/api/average_dataset/generic_estimate_sync_api.py +2 -1
  3. openepd/api/average_dataset/industry_epd_sync_api.py +2 -1
  4. openepd/api/base_sync_client.py +10 -8
  5. openepd/api/common.py +17 -11
  6. openepd/api/dto/common.py +1 -1
  7. openepd/api/epd/sync_api.py +2 -1
  8. openepd/api/org/__init__.py +15 -0
  9. openepd/api/org/sync_api.py +79 -0
  10. openepd/api/pcr/sync_api.py +35 -0
  11. openepd/api/plant/__init__.py +15 -0
  12. openepd/api/plant/sync_api.py +79 -0
  13. openepd/api/standard/__init__.py +15 -0
  14. openepd/api/standard/sync_api.py +79 -0
  15. openepd/api/sync_client.py +27 -0
  16. openepd/bundle/base.py +5 -4
  17. openepd/bundle/reader.py +13 -7
  18. openepd/bundle/writer.py +11 -6
  19. openepd/m49/__init__.py +2 -0
  20. openepd/m49/const.py +1 -1
  21. openepd/m49/utils.py +16 -10
  22. openepd/model/base.py +20 -15
  23. openepd/model/common.py +10 -5
  24. openepd/model/declaration.py +2 -2
  25. openepd/model/epd.py +2 -1
  26. openepd/model/factory.py +5 -3
  27. openepd/model/generic_estimate.py +4 -0
  28. openepd/model/lcia.py +10 -10
  29. openepd/model/org.py +14 -7
  30. openepd/model/pcr.py +2 -2
  31. openepd/model/specs/__init__.py +37 -0
  32. openepd/model/specs/asphalt.py +3 -3
  33. openepd/model/specs/base.py +2 -1
  34. openepd/model/specs/enums.py +9 -1
  35. openepd/model/specs/range/__init__.py +5 -3
  36. openepd/model/specs/range/accessories.py +1 -1
  37. openepd/model/specs/range/aluminium.py +1 -1
  38. openepd/model/specs/range/cladding.py +10 -10
  39. openepd/model/specs/range/cmu.py +0 -2
  40. openepd/model/specs/range/concrete.py +25 -2
  41. openepd/model/specs/range/conveying_equipment.py +2 -2
  42. openepd/model/specs/range/electrical.py +18 -18
  43. openepd/model/specs/range/electrical_transmission_and_distribution_equipment.py +1 -1
  44. openepd/model/specs/range/exterior_improvements.py +47 -0
  45. openepd/model/specs/range/finishes.py +19 -40
  46. openepd/model/specs/range/fire_and_smoke_protection.py +3 -3
  47. openepd/model/specs/range/furnishings.py +7 -7
  48. openepd/model/specs/range/manufacturing_inputs.py +17 -5
  49. openepd/model/specs/range/masonry.py +1 -1
  50. openepd/model/specs/range/mechanical.py +6 -6
  51. openepd/model/specs/range/mixins/__init__.py +15 -0
  52. openepd/model/specs/range/mixins/access_flooring_mixin.py +43 -0
  53. openepd/model/specs/range/network_infrastructure.py +3 -3
  54. openepd/model/specs/range/openings.py +17 -17
  55. openepd/model/specs/range/other_materials.py +4 -4
  56. openepd/model/specs/range/plumbing.py +5 -5
  57. openepd/model/specs/range/precast_concrete.py +2 -2
  58. openepd/model/specs/range/steel.py +18 -9
  59. openepd/model/specs/range/thermal_moisture_protection.py +12 -12
  60. openepd/model/specs/range/wood.py +4 -6
  61. openepd/model/specs/singular/__init__.py +119 -2
  62. openepd/model/specs/singular/aluminium.py +2 -1
  63. openepd/model/specs/singular/concrete.py +25 -1
  64. openepd/model/specs/singular/deprecated/__init__.py +1 -1
  65. openepd/model/specs/singular/exterior_improvements.py +47 -0
  66. openepd/model/specs/singular/finishes.py +3 -59
  67. openepd/model/specs/singular/manufacturing_inputs.py +13 -1
  68. openepd/model/specs/singular/mixins/access_flooring_mixin.py +55 -0
  69. openepd/model/specs/singular/steel.py +10 -2
  70. openepd/model/validation/common.py +10 -6
  71. openepd/model/validation/enum.py +4 -2
  72. openepd/model/validation/quantity.py +13 -6
  73. openepd/model/versioning.py +8 -6
  74. {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/METADATA +3 -4
  75. {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/RECORD +77 -66
  76. {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/WHEEL +1 -1
  77. {openepd-7.1.0.dist-info → openepd-7.2.0.dist-info}/LICENSE +0 -0
@@ -15,24 +15,24 @@
15
15
  #
16
16
  __all__ = (
17
17
  "AluminiumSidingRangeV1",
18
- "SteelSidingRangeV1",
19
- "ZincSidingRangeV1",
20
- "ShingleAndShakeSidingRangeV1",
21
- "MetalSidingRangeV1",
18
+ "CladdingRangeV1",
22
19
  "CompositionSidingRangeV1",
23
20
  "FiberCementSidingRangeV1",
21
+ "InsulatedRoofPanelsRangeV1",
24
22
  "InsulatedVinylSidingRangeV1",
23
+ "InsulatedWallPanelsRangeV1",
24
+ "MetalSidingRangeV1",
25
25
  "PlywoodSidingRangeV1",
26
26
  "PolypropyleneSidingRangeV1",
27
- "SolidWoodSidingRangeV1",
28
- "VinylSidingRangeV1",
29
- "SidingRangeV1",
30
- "InsulatedRoofPanelsRangeV1",
31
- "InsulatedWallPanelsRangeV1",
32
27
  "RoofPanelsRangeV1",
28
+ "ShingleAndShakeSidingRangeV1",
29
+ "SidingRangeV1",
30
+ "SolidWoodSidingRangeV1",
31
+ "SteelSidingRangeV1",
33
32
  "StoneCladdingRangeV1",
33
+ "VinylSidingRangeV1",
34
34
  "WallPanelsRangeV1",
35
- "CladdingRangeV1",
35
+ "ZincSidingRangeV1",
36
36
  )
37
37
 
38
38
  import pydantic
@@ -18,8 +18,6 @@ __all__ = ("CMURangeV1",)
18
18
  # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
19
19
 
20
20
 
21
- from builtins import float
22
-
23
21
  import pydantic
24
22
 
25
23
  from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
@@ -16,11 +16,11 @@
16
16
  __all__ = (
17
17
  "CementGroutRangeV1",
18
18
  "ConcretePavingRangeV1",
19
+ "ConcreteRangeV1",
19
20
  "FlowableFillRangeV1",
20
21
  "OilPatchRangeV1",
21
22
  "ReadyMixRangeV1",
22
23
  "ShotcreteRangeV1",
23
- "ConcreteRangeV1",
24
24
  )
25
25
 
26
26
  # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
@@ -124,6 +124,27 @@ class ShotcreteRangeV1(BaseOpenEpdHierarchicalSpec):
124
124
  _EXT_VERSION = "1.0"
125
125
 
126
126
 
127
+ class OtherConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
128
+ """
129
+ Other Concrete.
130
+
131
+ Range version.
132
+ """
133
+
134
+ _EXT_VERSION = "1.0"
135
+
136
+
137
+ class CellularConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
138
+ """
139
+ Cellular concrete is typically composed of cementitious material, water, and pre-formed foam with air entrainment.
140
+
141
+ Such a product is a homogeneous void or cell structure.
142
+ It is self-compacting and can be pumped over extensive heights and distances.
143
+ """
144
+
145
+ _EXT_VERSION = "1.0"
146
+
147
+
127
148
  class ConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
128
149
  """
129
150
  Concrete.
@@ -134,7 +155,7 @@ class ConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
134
155
  Range version.
135
156
  """
136
157
 
137
- _EXT_VERSION = "1.0"
158
+ _EXT_VERSION = "1.1"
138
159
 
139
160
  lightweight: bool | None = pydantic.Field(default=None, description="Product is lightweight")
140
161
  strength_28d: AmountRangePressureMpa | None = pydantic.Field(
@@ -186,3 +207,5 @@ class ConcreteRangeV1(BaseOpenEpdHierarchicalSpec):
186
207
  OilPatch: OilPatchRangeV1 | None = None
187
208
  ReadyMix: ReadyMixRangeV1 | None = None
188
209
  Shotcrete: ShotcreteRangeV1 | None = None
210
+ OtherConcrete: OtherConcreteRangeV1 | None = None
211
+ CellularConcrete: CellularConcreteRangeV1 | None = None
@@ -14,9 +14,9 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  __all__ = (
17
- "EscalatorsRangeV1",
18
- "ElevatorsRangeV1",
19
17
  "ConveyingEquipmentRangeV1",
18
+ "ElevatorsRangeV1",
19
+ "EscalatorsRangeV1",
20
20
  )
21
21
 
22
22
  import pydantic
@@ -14,35 +14,35 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  __all__ = (
17
- "LowVoltBusesRangeV1",
18
- "MedVoltBusesRangeV1",
19
17
  "BatteriesRangeV1",
20
- "OtherElectricalPowerStorageRangeV1",
21
18
  "CableTraysRangeV1",
19
+ "ElectricPowerRangeV1",
22
20
  "ElectricalBusesRangeV1",
23
- "FloorEquipmentBoxesRangeV1",
24
- "PowerDistributionUnitsRangeV1",
25
- "RacewaysRangeV1",
26
- "FueledElectricalGeneratorsRangeV1",
27
- "OtherGenerationRangeV1",
28
- "PhotovoltaicsRangeV1",
29
- "WindTurbinesRangeV1",
21
+ "ElectricalConduitRangeV1",
22
+ "ElectricalGenerationEquipmentRangeV1",
23
+ "ElectricalPowerStorageRangeV1",
24
+ "ElectricalRangeV1",
30
25
  "ElectricityFromPowerGridRangeV1",
31
26
  "ElectricityFromSpecificGeneratorRangeV1",
32
- "PowerPurchaseAgreementsRangeV1",
27
+ "FloorEquipmentBoxesRangeV1",
28
+ "FueledElectricalGeneratorsRangeV1",
33
29
  "LightbulbsRangeV1",
34
30
  "LightingControlsRangeV1",
35
31
  "LightingFixturesRangeV1",
32
+ "LightingRangeV1",
33
+ "LowVoltBusesRangeV1",
34
+ "LowVoltageElectricalDistributionRangeV1",
35
+ "MedVoltBusesRangeV1",
36
+ "OtherElectricalPowerStorageRangeV1",
37
+ "OtherGenerationRangeV1",
36
38
  "OutdoorLightingRangeV1",
39
+ "PhotovoltaicsRangeV1",
40
+ "PowerDistributionUnitsRangeV1",
41
+ "PowerPurchaseAgreementsRangeV1",
42
+ "RacewaysRangeV1",
37
43
  "SpecialtyLightingRangeV1",
38
44
  "TaskLightingRangeV1",
39
- "ElectricalPowerStorageRangeV1",
40
- "LowVoltageElectricalDistributionRangeV1",
41
- "ElectricalGenerationEquipmentRangeV1",
42
- "ElectricPowerRangeV1",
43
- "LightingRangeV1",
44
- "ElectricalConduitRangeV1",
45
- "ElectricalRangeV1",
45
+ "WindTurbinesRangeV1",
46
46
  )
47
47
 
48
48
  import pydantic
@@ -18,8 +18,8 @@ __all__ = (
18
18
  "ElectricalInsulatorsRangeV1",
19
19
  "ElectricalSubstationsRangeV1",
20
20
  "ElectricalSwitchgearRangeV1",
21
- "PowerCablingRangeV1",
22
21
  "ElectricalTransmissionAndDistributionEquipmentRangeV1",
22
+ "PowerCablingRangeV1",
23
23
  )
24
24
 
25
25
  # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
@@ -0,0 +1,47 @@
1
+ #
2
+ # Copyright 2025 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
+ import pydantic as pyd
17
+
18
+ from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
19
+ from openepd.model.validation.quantity import AmountRangePressureMpa
20
+
21
+
22
+ class ConcretePaversRangeV1(BaseOpenEpdHierarchicalSpec):
23
+ """
24
+ Segmental units of concrete of standardized sizes and shapes for use in paving applications.
25
+
26
+ Includes pavers and paving slabs.
27
+ """
28
+
29
+ _EXT_VERSION = "1.0"
30
+
31
+ compressive_strength: AmountRangePressureMpa | None = pyd.Field(
32
+ default=None,
33
+ description=(
34
+ "Unit strength in MPa, ksi, or psi. "
35
+ "This is the net compressive strength, also known as unit strength, as opposed to f′ₘ (f prime m) which is "
36
+ "the strength of the completed wall module."
37
+ ),
38
+ )
39
+ white_cement: bool | None = pyd.Field(default=None, description="CMU using some portion of white cement")
40
+
41
+
42
+ class ExteriorImprovementsRangeV1(BaseOpenEpdHierarchicalSpec):
43
+ """Products that alter the exterior appearance of a lot or its structures."""
44
+
45
+ _EXT_VERSION = "1.0"
46
+
47
+ ConcretePavers: ConcretePaversRangeV1 | None = None
@@ -15,33 +15,33 @@
15
15
  #
16
16
  __all__ = (
17
17
  "AccessFlooringRangeV1",
18
- "CarpetRangeV1",
19
- "LaminateRangeV1",
20
- "OtherFlooringRangeV1",
21
- "ResilientFlooringRangeV1",
22
- "WallBaseRangeV1",
23
- "WoodFlooringRangeV1",
24
18
  "AcousticalCeilingsRangeV1",
25
- "CeramicTileRangeV1",
26
- "GaugedTileRangeV1",
27
- "GlassTileRangeV1",
28
- "GypsumSupportsRangeV1",
29
- "FlooringRangeV1",
30
- "CeilingPanelRangeV1",
31
19
  "BackingAndUnderlayRangeV1",
20
+ "CarpetRangeV1",
21
+ "CeilingPanelRangeV1",
32
22
  "CementBoardRangeV1",
33
- "TilingRangeV1",
23
+ "CeramicTileRangeV1",
34
24
  "DeckingBoardsRangeV1",
25
+ "FinishesRangeV1",
26
+ "FlooringRangeV1",
27
+ "GaugedTileRangeV1",
35
28
  "GlassFiberReinforcedGypsumFabricationsRangeV1",
29
+ "GlassTileRangeV1",
36
30
  "GypsumRangeV1",
31
+ "GypsumSupportsRangeV1",
32
+ "LaminateRangeV1",
37
33
  "MirrorsRangeV1",
34
+ "OtherFlooringRangeV1",
35
+ "PaintByAreaRangeV1",
38
36
  "PaintByMassRangeV1",
39
37
  "PaintByVolumeRangeV1",
40
- "PaintByAreaRangeV1",
41
38
  "PaintingAndCoatingRangeV1",
42
- "WallFinishesRangeV1",
43
39
  "PlasterRangeV1",
44
- "FinishesRangeV1",
40
+ "ResilientFlooringRangeV1",
41
+ "TilingRangeV1",
42
+ "WallBaseRangeV1",
43
+ "WallFinishesRangeV1",
44
+ "WoodFlooringRangeV1",
45
45
  )
46
46
 
47
47
  import pydantic
@@ -50,10 +50,6 @@ from openepd.model.common import RangeAmount, RangeFloat, RangeInt, RangeRatioFl
50
50
  from openepd.model.org import OrgRef
51
51
  from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
52
52
  from openepd.model.specs.enums import (
53
- AccessFlooringCoreMaterial,
54
- AccessFlooringFinishMaterial,
55
- AccessFlooringSeismicRating,
56
- AccessFlooringStringers,
57
53
  AllFabrication,
58
54
  CarpetFormFactor,
59
55
  CarpetIntendedApplication,
@@ -76,11 +72,10 @@ from openepd.model.specs.enums import (
76
72
  WoodFlooringFabrication,
77
73
  WoodFlooringTimberSpecies,
78
74
  )
75
+ from openepd.model.specs.range.mixins.access_flooring_mixin import AccessFlooringRangeMixin
79
76
  from openepd.model.validation.quantity import (
80
- AmountRangeForce,
81
77
  AmountRangeGWP,
82
78
  AmountRangeLengthMm,
83
- AmountRangePressureMpa,
84
79
  AmountRangeRFactor,
85
80
  AmountRangeYarnWeight,
86
81
  )
@@ -88,7 +83,7 @@ from openepd.model.validation.quantity import (
88
83
  # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
89
84
 
90
85
 
91
- class AccessFlooringRangeV1(BaseOpenEpdHierarchicalSpec):
86
+ class AccessFlooringRangeV1(BaseOpenEpdHierarchicalSpec, AccessFlooringRangeMixin):
92
87
  """
93
88
  Elevated floor system built on top of concrete slab surface.
94
89
 
@@ -100,22 +95,6 @@ class AccessFlooringRangeV1(BaseOpenEpdHierarchicalSpec):
100
95
 
101
96
  _EXT_VERSION = "1.0"
102
97
 
103
- core_material: list[AccessFlooringCoreMaterial] | None = pydantic.Field(default=None, description="")
104
- finish_material: list[AccessFlooringFinishMaterial] | None = pydantic.Field(default=None, description="")
105
- stringers: list[AccessFlooringStringers] | None = pydantic.Field(default=None, description="")
106
- seismic_rating: list[AccessFlooringSeismicRating] | None = pydantic.Field(default=None, description="")
107
- magnetically_attached_finish: bool | None = pydantic.Field(default=None, description="")
108
- permanent_finish: bool | None = pydantic.Field(default=None, description="")
109
- drylay: bool | None = pydantic.Field(default=None, description="")
110
- adjustable_height: bool | None = pydantic.Field(default=None, description="")
111
- fixed_height: bool | None = pydantic.Field(default=None, description="")
112
- finished_floor_height: AmountRangeLengthMm | None = pydantic.Field(default=None, description="")
113
- panel_thickness: AmountRangeLengthMm | None = pydantic.Field(default=None, description="")
114
- concentrated_load: AmountRangePressureMpa | None = pydantic.Field(default=None, description="")
115
- uniform_load: AmountRangePressureMpa | None = pydantic.Field(default=None, description="")
116
- rolling_load_10_pass: AmountRangeForce | None = pydantic.Field(default=None, description="")
117
- rolling_load_10000_pass: AmountRangeForce | None = pydantic.Field(default=None, description="")
118
-
119
98
 
120
99
  class CarpetRangeV1(BaseOpenEpdHierarchicalSpec):
121
100
  """
@@ -377,7 +356,7 @@ class CementBoardRangeV1(BaseOpenEpdHierarchicalSpec):
377
356
  Range version.
378
357
  """
379
358
 
380
- _EXT_VERSION = "1.0"
359
+ _EXT_VERSION = "1.1"
381
360
 
382
361
  thickness: list[CementBoardThickness] | None = pydantic.Field(default=None, description="")
383
362
 
@@ -14,11 +14,11 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  __all__ = (
17
- "IntumescentFireproofingRangeV1",
18
- "SprayFireproofingRangeV1",
19
17
  "AppliedFireproofingRangeV1",
20
- "FirestoppingRangeV1",
21
18
  "FireAndSmokeProtectionRangeV1",
19
+ "FirestoppingRangeV1",
20
+ "IntumescentFireproofingRangeV1",
21
+ "SprayFireproofingRangeV1",
22
22
  )
23
23
 
24
24
  import pydantic
@@ -14,22 +14,22 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  __all__ = (
17
- "DemountablePartitionTrackRangeV1",
18
17
  "ChairsRangeV1",
18
+ "ClosedStorageFurnitureRangeV1",
19
19
  "CountertopsRangeV1",
20
+ "DemountablePartitionTrackRangeV1",
20
21
  "DemountablePartitionsRangeV1",
21
- "OtherFurnishingsRangeV1",
22
- "OpenStorageFurnitureRangeV1",
23
- "ClosedStorageFurnitureRangeV1",
24
- "RetractableStorageFurnitureRangeV1",
22
+ "FurnishingsRangeV1",
25
23
  "MobileStorageFurnitureRangeV1",
26
- "WallMountedStorageShelvingRangeV1",
24
+ "OpenStorageFurnitureRangeV1",
25
+ "OtherFurnishingsRangeV1",
27
26
  "OtherStorageFurnitureRangeV1",
27
+ "RetractableStorageFurnitureRangeV1",
28
28
  "StorageFurnitureRangeV1",
29
29
  "TablesRangeV1",
30
+ "WallMountedStorageShelvingRangeV1",
30
31
  "WorkSurfacesRangeV1",
31
32
  "WorkspacesRangeV1",
32
- "FurnishingsRangeV1",
33
33
  )
34
34
 
35
35
  import pydantic
@@ -14,16 +14,16 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  __all__ = (
17
- "CementRangeV1",
18
- "MasonryCementRangeV1",
19
- "SupplementaryCementitiousMaterialsRangeV1",
20
17
  "AccessFlooringPedestalsRangeV1",
21
18
  "CarpetBackingRangeV1",
22
19
  "CarpetFiberRangeV1",
20
+ "CementRangeV1",
23
21
  "CementitiousMaterialsRangeV1",
24
22
  "ConcreteAdmixturesRangeV1",
25
- "TextilesRangeV1",
26
23
  "ManufacturingInputsRangeV1",
24
+ "MasonryCementRangeV1",
25
+ "SupplementaryCementitiousMaterialsRangeV1",
26
+ "TextilesRangeV1",
27
27
  )
28
28
 
29
29
  import pydantic
@@ -42,6 +42,7 @@ from openepd.model.specs.enums import (
42
42
  MasonryCementAstmC91Type,
43
43
  TextilesFabricType,
44
44
  )
45
+ from openepd.model.specs.range.mixins.access_flooring_mixin import AccessFlooringRangeMixin
45
46
 
46
47
  # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
47
48
 
@@ -170,6 +171,16 @@ class TextilesRangeV1(BaseOpenEpdHierarchicalSpec):
170
171
  fabric_type: list[TextilesFabricType] | None = pydantic.Field(default=None, description="")
171
172
 
172
173
 
174
+ class AccessFlooringPanelsRangeV1(BaseOpenEpdHierarchicalSpec, AccessFlooringRangeMixin):
175
+ """
176
+ Part of an access floor system.
177
+
178
+ Panels are laid on top of an access floor pedestal, creating a finish floor.
179
+ """
180
+
181
+ _EXT_VERSION = "1.0"
182
+
183
+
173
184
  class ManufacturingInputsRangeV1(BaseOpenEpdHierarchicalSpec):
174
185
  """
175
186
  Manufacturing inputs.
@@ -180,7 +191,7 @@ class ManufacturingInputsRangeV1(BaseOpenEpdHierarchicalSpec):
180
191
  Range version.
181
192
  """
182
193
 
183
- _EXT_VERSION = "1.0"
194
+ _EXT_VERSION = "1.1"
184
195
 
185
196
  AccessFlooringPedestals: AccessFlooringPedestalsRangeV1 | None = None
186
197
  CarpetBacking: CarpetBackingRangeV1 | None = None
@@ -188,3 +199,4 @@ class ManufacturingInputsRangeV1(BaseOpenEpdHierarchicalSpec):
188
199
  CementitiousMaterials: CementitiousMaterialsRangeV1 | None = None
189
200
  ConcreteAdmixtures: ConcreteAdmixturesRangeV1 | None = None
190
201
  Textiles: TextilesRangeV1 | None = None
202
+ AccessFlooringPanels: AccessFlooringPanelsRangeV1 | None = None
@@ -14,9 +14,9 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  __all__ = (
17
- "GMURangeV1",
18
17
  "AutoclavedAeratedConcreteRangeV1",
19
18
  "BrickRangeV1",
19
+ "GMURangeV1",
20
20
  "MasonryRangeV1",
21
21
  )
22
22
 
@@ -14,21 +14,21 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  __all__ = (
17
- "HvacVrfControlRangeV1",
18
- "HvacVrfIndoorRangeV1",
19
- "HvacVrfOutdoorRangeV1",
17
+ "HvacAHUsRangeV1",
20
18
  "HvacAirDiffusersRangeV1",
21
19
  "HvacAirFiltersRangeV1",
22
- "HvacAHUsRangeV1",
23
20
  "HvacBoilersRangeV1",
24
21
  "HvacChillersRangeV1",
22
+ "HvacDuctsRangeV1",
25
23
  "HvacFansRangeV1",
26
- "HvacHeatPumpsRangeV1",
27
24
  "HvacHeatExRangeV1",
25
+ "HvacHeatPumpsRangeV1",
28
26
  "HvacPumpsRangeV1",
29
27
  "HvacRTUsRangeV1",
28
+ "HvacVrfControlRangeV1",
29
+ "HvacVrfIndoorRangeV1",
30
+ "HvacVrfOutdoorRangeV1",
30
31
  "HvacVrfSystemsRangeV1",
31
- "HvacDuctsRangeV1",
32
32
  "MechanicalRangeV1",
33
33
  )
34
34
 
@@ -0,0 +1,15 @@
1
+ #
2
+ # Copyright 2025 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
+ #
@@ -0,0 +1,43 @@
1
+ #
2
+ # Copyright 2025 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
+ import pydantic as pyd
17
+
18
+ from openepd.model.specs.base import BaseOpenEpdSpec
19
+ from openepd.model.specs.enums import (
20
+ AccessFlooringCoreMaterial,
21
+ AccessFlooringFinishMaterial,
22
+ AccessFlooringSeismicRating,
23
+ AccessFlooringStringers,
24
+ )
25
+ from openepd.model.validation.quantity import AmountRangeForce, AmountRangeLengthMm, AmountRangePressureMpa
26
+
27
+
28
+ class AccessFlooringRangeMixin(BaseOpenEpdSpec):
29
+ core_material: list[AccessFlooringCoreMaterial] | None = pyd.Field(default=None, description="")
30
+ finish_material: list[AccessFlooringFinishMaterial] | None = pyd.Field(default=None, description="")
31
+ stringers: list[AccessFlooringStringers] | None = pyd.Field(default=None, description="")
32
+ seismic_rating: list[AccessFlooringSeismicRating] | None = pyd.Field(default=None, description="")
33
+ magnetically_attached_finish: bool | None = pyd.Field(default=None, description="")
34
+ permanent_finish: bool | None = pyd.Field(default=None, description="")
35
+ drylay: bool | None = pyd.Field(default=None, description="")
36
+ adjustable_height: bool | None = pyd.Field(default=None, description="")
37
+ fixed_height: bool | None = pyd.Field(default=None, description="")
38
+ finished_floor_height: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
39
+ panel_thickness: AmountRangeLengthMm | None = pyd.Field(default=None, description="")
40
+ concentrated_load: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
41
+ uniform_load: AmountRangePressureMpa | None = pyd.Field(default=None, description="")
42
+ rolling_load_10_pass: AmountRangeForce | None = pyd.Field(default=None, description="")
43
+ rolling_load_10000_pass: AmountRangeForce | None = pyd.Field(default=None, description="")
@@ -14,14 +14,14 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  __all__ = (
17
- "PDURangeV1",
18
17
  "CabinetsRacksAndEnclosuresRangeV1",
18
+ "CommunicationsConduitRangeV1",
19
19
  "DataCablingRangeV1",
20
20
  "FloorBoxesAndAccessoriesRangeV1",
21
+ "NetworkInfrastructureRangeV1",
21
22
  "NetworkingCableTraysRangeV1",
22
23
  "NetworkingRacewaysRangeV1",
23
- "CommunicationsConduitRangeV1",
24
- "NetworkInfrastructureRangeV1",
24
+ "PDURangeV1",
25
25
  )
26
26
 
27
27
  import pydantic
@@ -14,34 +14,34 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  __all__ = (
17
- "PanelDoorsRangeV1",
18
- "PressureResistantDoorsRangeV1",
19
- "SpecialFunctionDoorsRangeV1",
20
- "SlidingGlassDoorsRangeV1",
17
+ "CurtainWallsRangeV1",
18
+ "DoorsAndFramesRangeV1",
19
+ "EntrancesRangeV1",
21
20
  "FenestrationAccessoriesRangeV1",
22
21
  "FenestrationFramingRangeV1",
23
22
  "FenestrationHardwareRangeV1",
23
+ "FenestrationPartsRangeV1",
24
24
  "FlatGlassPanesRangeV1",
25
- "ProcessedNonInsulatingGlassPanesRangeV1",
25
+ "GlassPanesRangeV1",
26
26
  "GlazedDoorsRangeV1",
27
- "UnitSkylightsRangeV1",
28
- "WindowsRangeV1",
27
+ "GlazingRangeV1",
28
+ "InsulatingGlazingUnitsRangeV1",
29
29
  "IntegratedDoorsOpeningAssembliesRangeV1",
30
30
  "MetalDoorAndFramesRangeV1",
31
- "SpecialtyDoorsAndFramesRangeV1",
32
- "WoodDoorsRangeV1",
33
- "FenestrationPartsRangeV1",
34
- "GlassPanesRangeV1",
35
31
  "NAFSFenestrationRangeV1",
36
- "InsulatingGlazingUnitsRangeV1",
37
- "CurtainWallsRangeV1",
38
- "DoorsAndFramesRangeV1",
39
- "EntrancesRangeV1",
40
- "GlazingRangeV1",
32
+ "OpeningsRangeV1",
33
+ "PanelDoorsRangeV1",
34
+ "PressureResistantDoorsRangeV1",
35
+ "ProcessedNonInsulatingGlassPanesRangeV1",
36
+ "SlidingGlassDoorsRangeV1",
37
+ "SpecialFunctionDoorsRangeV1",
38
+ "SpecialtyDoorsAndFramesRangeV1",
41
39
  "StorefrontsRangeV1",
42
40
  "TranslucentWallAndRoofAssembliesRangeV1",
41
+ "UnitSkylightsRangeV1",
43
42
  "WindowWallAssembliesRangeV1",
44
- "OpeningsRangeV1",
43
+ "WindowsRangeV1",
44
+ "WoodDoorsRangeV1",
45
45
  )
46
46
 
47
47
  import pydantic
@@ -17,17 +17,17 @@ __all__ = (
17
17
  "AuxiliariesRangeV1",
18
18
  "CleaningProductsRangeV1",
19
19
  "ClothingRangeV1",
20
- "FoodBeverageRangeV1",
21
- "TransportationInfrastructureRangeV1",
22
- "UnsupportedRangeV1",
23
20
  "CopperRangeV1",
24
21
  "EarthworkRangeV1",
25
22
  "ExteriorSunControlDevicesRangeV1",
23
+ "FoodBeverageRangeV1",
26
24
  "GypsumFinishingCompoundsRangeV1",
25
+ "OtherMaterialsRangeV1",
27
26
  "ProfilesRangeV1",
27
+ "TransportationInfrastructureRangeV1",
28
28
  "UnknownRangeV1",
29
+ "UnsupportedRangeV1",
29
30
  "ZincRangeV1",
30
- "OtherMaterialsRangeV1",
31
31
  )
32
32
 
33
33
  # NB! This is a generated code. Do not edit it manually. Please see src/openepd/model/specs/README.md
@@ -16,17 +16,17 @@
16
16
  __all__ = (
17
17
  "BathtubsRangeV1",
18
18
  "FaucetsRangeV1",
19
- "OtherPlumbingFixturesRangeV1",
20
- "WaterClosetsRangeV1",
21
19
  "FireProtectionPipingRangeV1",
22
20
  "FireSprinklersRangeV1",
23
- "StorageTanksRangeV1",
24
- "WaterHeatersRangeV1",
25
- "PlumbingFixturesRangeV1",
26
21
  "FireSuppressionRangeV1",
22
+ "OtherPlumbingFixturesRangeV1",
27
23
  "PipingRangeV1",
28
24
  "PlumbingEquipmentRangeV1",
25
+ "PlumbingFixturesRangeV1",
29
26
  "PlumbingRangeV1",
27
+ "StorageTanksRangeV1",
28
+ "WaterClosetsRangeV1",
29
+ "WaterHeatersRangeV1",
30
30
  )
31
31
 
32
32
  import pydantic