openepd 3.0.0__tar.gz → 3.1.1__tar.gz
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-3.0.0 → openepd-3.1.1}/PKG-INFO +1 -1
- {openepd-3.0.0 → openepd-3.1.1}/pyproject.toml +1 -1
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/__version__.py +1 -1
- openepd-3.1.1/src/openepd/model/specs/__init__.py +97 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/specs/aluminium.py +1 -1
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/specs/concrete.py +19 -177
- openepd-3.1.1/src/openepd/model/specs/generated/accessories.py +63 -0
- openepd-3.1.1/src/openepd/model/specs/generated/aggregates.py +71 -0
- openepd-3.1.1/src/openepd/model/specs/generated/aluminium.py +66 -0
- openepd-3.1.1/src/openepd/model/specs/generated/asphalt.py +86 -0
- openepd-3.1.1/src/openepd/model/specs/generated/bulk_materials.py +26 -0
- openepd-3.1.1/src/openepd/model/specs/generated/cast_decks_and_underlayment.py +26 -0
- openepd-3.1.1/src/openepd/model/specs/generated/cladding.py +214 -0
- openepd-3.1.1/src/openepd/model/specs/generated/cmu.py +46 -0
- openepd-3.1.1/src/openepd/model/specs/generated/common.py +27 -0
- openepd-3.1.1/src/openepd/model/specs/generated/concrete.py +151 -0
- openepd-3.1.1/src/openepd/model/specs/generated/conveying_equipment.py +57 -0
- openepd-3.1.1/src/openepd/model/specs/generated/electrical.py +297 -0
- openepd-3.1.1/src/openepd/model/specs/generated/electrical_transmission_and_distribution_equipment.py +63 -0
- openepd-3.1.1/src/openepd/model/specs/generated/electricity.py +26 -0
- openepd-3.1.1/src/openepd/model/specs/generated/enums.py +2420 -0
- openepd-3.1.1/src/openepd/model/specs/generated/finishes.py +519 -0
- openepd-3.1.1/src/openepd/model/specs/generated/fire_and_smoke_protection.py +79 -0
- openepd-3.1.1/src/openepd/model/specs/generated/furnishings.py +95 -0
- openepd-3.1.1/src/openepd/model/specs/generated/grouting.py +26 -0
- openepd-3.1.1/src/openepd/model/specs/generated/manufacturing_inputs.py +131 -0
- openepd-3.1.1/src/openepd/model/specs/generated/masonry.py +77 -0
- openepd-3.1.1/src/openepd/model/specs/generated/material_handling.py +35 -0
- openepd-3.1.1/src/openepd/model/specs/generated/mechanical.py +271 -0
- openepd-3.1.1/src/openepd/model/specs/generated/mechanical_insulation.py +41 -0
- openepd-3.1.1/src/openepd/model/specs/generated/network_infrastructure.py +181 -0
- openepd-3.1.1/src/openepd/model/specs/generated/openings.py +423 -0
- openepd-3.1.1/src/openepd/model/specs/generated/other_electrical_equipment.py +26 -0
- openepd-3.1.1/src/openepd/model/specs/generated/other_materials.py +123 -0
- openepd-3.1.1/src/openepd/model/specs/generated/plumbing.py +153 -0
- openepd-3.1.1/src/openepd/model/specs/generated/precast_concrete.py +68 -0
- openepd-3.1.1/src/openepd/model/specs/generated/sheathing.py +74 -0
- openepd-3.1.1/src/openepd/model/specs/generated/steel.py +224 -0
- openepd-3.1.1/src/openepd/model/specs/generated/thermal_moisture_protection.py +233 -0
- openepd-3.1.1/src/openepd/model/specs/generated/utility_piping.py +65 -0
- openepd-3.1.1/src/openepd/model/specs/generated/wood.py +167 -0
- openepd-3.1.1/src/openepd/model/specs/generated/wood_joists.py +38 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/specs/glass.py +1 -45
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/specs/steel.py +1 -10
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/validation/quantity.py +4 -3
- openepd-3.0.0/src/openepd/model/specs/__init__.py +0 -45
- {openepd-3.0.0 → openepd-3.1.1}/LICENSE +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/README.md +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/base_sync_client.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/category/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/category/dto.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/category/sync_api.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/common.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/dto/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/dto/base.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/dto/common.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/dto/meta.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/dto/mf.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/dto/params.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/epd/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/epd/dto.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/epd/sync_api.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/errors.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/pcr/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/pcr/dto.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/pcr/sync_api.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/sync_client.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/api/test/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/bundle/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/bundle/base.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/bundle/model.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/bundle/reader.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/bundle/writer.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/compat/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/compat/pydantic.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/base.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/category.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/common.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/epd.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/factory.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/lcia.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/org.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/pcr.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/specs/README.md +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/specs/asphalt.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/specs/base.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/specs/wood.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/standard.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/validation/__init__.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/validation/common.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/validation/numbers.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/model/versioning.py +0 -0
- {openepd-3.0.0 → openepd-3.1.1}/src/openepd/py.typed +0 -0
@@ -0,0 +1,97 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
# This software was developed with support from the Skanska USA,
|
17
|
+
# Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
|
18
|
+
# Find out more at www.BuildingTransparency.org
|
19
|
+
#
|
20
|
+
|
21
|
+
from openepd.model.base import BaseOpenEpdSchema
|
22
|
+
from openepd.model.specs.generated.accessories import AccessoriesV1
|
23
|
+
from openepd.model.specs.generated.aggregates import AggregatesV1
|
24
|
+
from openepd.model.specs.generated.aluminium import AluminiumV1
|
25
|
+
from openepd.model.specs.generated.asphalt import AsphaltV1
|
26
|
+
from openepd.model.specs.generated.bulk_materials import BulkMaterialsV1
|
27
|
+
from openepd.model.specs.generated.cast_decks_and_underlayment import CastDecksAndUnderlaymentV1
|
28
|
+
from openepd.model.specs.generated.cladding import CladdingV1
|
29
|
+
from openepd.model.specs.generated.cmu import CMUV1
|
30
|
+
from openepd.model.specs.generated.concrete import ConcreteV1
|
31
|
+
from openepd.model.specs.generated.conveying_equipment import ConveyingEquipmentV1
|
32
|
+
from openepd.model.specs.generated.electrical import ElectricalV1
|
33
|
+
from openepd.model.specs.generated.electrical_transmission_and_distribution_equipment import (
|
34
|
+
ElectricalTransmissionAndDistributionEquipmentV1,
|
35
|
+
)
|
36
|
+
from openepd.model.specs.generated.electricity import ElectricityV1
|
37
|
+
from openepd.model.specs.generated.finishes import FinishesV1
|
38
|
+
from openepd.model.specs.generated.fire_and_smoke_protection import FireAndSmokeProtectionV1
|
39
|
+
from openepd.model.specs.generated.furnishings import FurnishingsV1
|
40
|
+
from openepd.model.specs.generated.grouting import GroutingV1
|
41
|
+
from openepd.model.specs.generated.manufacturing_inputs import ManufacturingInputsV1
|
42
|
+
from openepd.model.specs.generated.masonry import MasonryV1
|
43
|
+
from openepd.model.specs.generated.material_handling import MaterialHandlingV1
|
44
|
+
from openepd.model.specs.generated.mechanical import MechanicalV1
|
45
|
+
from openepd.model.specs.generated.mechanical_insulation import MechanicalInsulationV1
|
46
|
+
from openepd.model.specs.generated.network_infrastructure import NetworkInfrastructureV1
|
47
|
+
from openepd.model.specs.generated.openings import OpeningsV1
|
48
|
+
from openepd.model.specs.generated.other_electrical_equipment import OtherElectricalEquipmentV1
|
49
|
+
from openepd.model.specs.generated.other_materials import OtherMaterialsV1
|
50
|
+
from openepd.model.specs.generated.plumbing import PlumbingV1
|
51
|
+
from openepd.model.specs.generated.precast_concrete import PrecastConcreteV1
|
52
|
+
from openepd.model.specs.generated.sheathing import SheathingV1
|
53
|
+
from openepd.model.specs.generated.steel import SteelV1
|
54
|
+
from openepd.model.specs.generated.thermal_moisture_protection import ThermalMoistureProtectionV1
|
55
|
+
from openepd.model.specs.generated.utility_piping import UtilityPipingV1
|
56
|
+
from openepd.model.specs.generated.wood import WoodV1
|
57
|
+
from openepd.model.specs.generated.wood_joists import WoodJoistsV1
|
58
|
+
|
59
|
+
|
60
|
+
class Specs(BaseOpenEpdSchema):
|
61
|
+
"""Material specific specs."""
|
62
|
+
|
63
|
+
# Nested specs:
|
64
|
+
CMU: CMUV1 | None = None
|
65
|
+
Masonry: MasonryV1 | None = None
|
66
|
+
Steel: SteelV1 | None = None
|
67
|
+
NetworkInfrastructure: NetworkInfrastructureV1 | None = None
|
68
|
+
Finishes: FinishesV1 | None = None
|
69
|
+
ManufacturingInputs: ManufacturingInputsV1 | None = None
|
70
|
+
Accessories: AccessoriesV1 | None = None
|
71
|
+
ElectricalTransmissionAndDistributionEquipment: ElectricalTransmissionAndDistributionEquipmentV1 | None = None
|
72
|
+
Aggregates: AggregatesV1 | None = None
|
73
|
+
ThermalMoistureProtection: ThermalMoistureProtectionV1 | None = None
|
74
|
+
Mechanical: MechanicalV1 | None = None
|
75
|
+
Aluminium: AluminiumV1 | None = None
|
76
|
+
Cladding: CladdingV1 | None = None
|
77
|
+
FireAndSmokeProtection: FireAndSmokeProtectionV1 | None = None
|
78
|
+
PrecastConcrete: PrecastConcreteV1 | None = None
|
79
|
+
Asphalt: AsphaltV1 | None = None
|
80
|
+
OtherMaterials: OtherMaterialsV1 | None = None
|
81
|
+
Plumbing: PlumbingV1 | None = None
|
82
|
+
Electrical: ElectricalV1 | None = None
|
83
|
+
UtilityPiping: UtilityPipingV1 | None = None
|
84
|
+
BulkMaterials: BulkMaterialsV1 | None = None
|
85
|
+
CastDecksAndUnderlayment: CastDecksAndUnderlaymentV1 | None = None
|
86
|
+
Concrete: ConcreteV1 | None = None
|
87
|
+
Sheathing: SheathingV1 | None = None
|
88
|
+
Furnishings: FurnishingsV1 | None = None
|
89
|
+
Wood: WoodV1 | None = None
|
90
|
+
ConveyingEquipment: ConveyingEquipmentV1 | None = None
|
91
|
+
MaterialHandling: MaterialHandlingV1 | None = None
|
92
|
+
Openings: OpeningsV1 | None = None
|
93
|
+
Electricity: ElectricityV1 | None = None
|
94
|
+
Grouting: GroutingV1 | None = None
|
95
|
+
MechanicalInsulation: MechanicalInsulationV1 | None = None
|
96
|
+
OtherElectricalEquipment: OtherElectricalEquipmentV1 | None = None
|
97
|
+
WoodJoists: WoodJoistsV1 | None = None
|
@@ -60,7 +60,7 @@ class AluminiumV1(BaseOpenEpdHierarchicalSpec):
|
|
60
60
|
_EXT_VERSION = "1.0"
|
61
61
|
recycled_content: RatioFloat | None = pyd.Field(default=None, description="Recycled content")
|
62
62
|
|
63
|
-
alloy: AluminiumAlloy | None = pyd.Field(default=None, description="
|
63
|
+
alloy: AluminiumAlloy | None = pyd.Field(default=None, description="AluminiumAlloy")
|
64
64
|
anodized: bool | None = None
|
65
65
|
painted: bool | None = None
|
66
66
|
|
@@ -24,178 +24,12 @@ from openepd.compat.pydantic import pyd
|
|
24
24
|
from openepd.model.base import BaseOpenEpdSchema
|
25
25
|
from openepd.model.common import OpenEPDUnit
|
26
26
|
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec, BaseOpenEpdSpec
|
27
|
+
from openepd.model.specs.generated.enums import AciExposureClass, CsaExposureClass, EnExposureClass
|
27
28
|
from openepd.model.validation.common import together_validator
|
28
29
|
from openepd.model.validation.numbers import RatioFloat
|
29
30
|
from openepd.model.validation.quantity import LengthMmStr, PressureMPaStr, validate_unit_factory
|
30
31
|
|
31
32
|
|
32
|
-
class AciExposureClass(StrEnum):
|
33
|
-
"""
|
34
|
-
American Concrete Institute concrete exposure classes.
|
35
|
-
|
36
|
-
* `aci.F0` - Concrete not subjected to freezing-and-thawing cycles
|
37
|
-
* `aci.F1` - Concrete experiences freezing-and-thawing cycles with limited exposure to water
|
38
|
-
* `aci.F2` - Concrete exposed to freezing-and-thawing cycles with frequent exposure to water
|
39
|
-
* `aci.F3` - Concrete exposed to freezing-and-thawing cycles with continual exposure to water
|
40
|
-
and exposure to deicing chemicals
|
41
|
-
* `aci.S0` - Exposed to <150 ppm of SO4 in water and <0.1% SO4 in soil
|
42
|
-
* `aci.S1` - Exposed to <1500 ppm of SO4 in water and <0.2% SO4 in soil
|
43
|
-
* `aci.S2` - Exposed to <10000 ppm of SO4 in water and <2% SO4 in soil
|
44
|
-
* `aci.S3` - Exposed to >10000 ppm of SO4 in water or >2% SO4 in soil
|
45
|
-
|
46
|
-
* `aci.C1` - Concrete in contact with moisture, but the external source of chloride does not reach it.
|
47
|
-
* `aci.C2` - Concrete subjected to moisture and an external source of chlorides such as deicing chemicals,
|
48
|
-
salt, brackish water, seawater, or spray from these sources.
|
49
|
-
* `aci.W0` - Concrete dry in service
|
50
|
-
* `aci.W1` - Concrete in contact with water, no requirement for low permeability
|
51
|
-
* `aci.W2` - Concrete in contact with water where low permeability is required
|
52
|
-
"""
|
53
|
-
|
54
|
-
F0 = "aci.F0"
|
55
|
-
F1 = "aci.F1"
|
56
|
-
F2 = "aci.F2"
|
57
|
-
F3 = "aci.F3"
|
58
|
-
S0 = "aci.S0"
|
59
|
-
S1 = "aci.S1"
|
60
|
-
S2 = "aci.S2"
|
61
|
-
S3 = "aci.S3"
|
62
|
-
C1 = "aci.C1"
|
63
|
-
C2 = "aci.C2"
|
64
|
-
W0 = "aci.W0"
|
65
|
-
W1 = "aci.W1"
|
66
|
-
W2 = "aci.W2"
|
67
|
-
|
68
|
-
|
69
|
-
class CsaExposureClass(StrEnum):
|
70
|
-
"""
|
71
|
-
Canadian Standard Association concrete exposure classes.
|
72
|
-
|
73
|
-
* `csa.C-XL` - Structurally reinforced concrete exposed to chlorides or other severe environment with or without
|
74
|
-
freezing and thawing conditions, with higher durability performance expectations than the C-1, A-1
|
75
|
-
or S-1 classes.
|
76
|
-
|
77
|
-
* `csa.C-1` - Structurally reinforced concrete exposed to chlorides with or without freezing and thawing conditions.
|
78
|
-
Examples: bridge decks, parking decks and ramps, portions of marine structures located within the tidal
|
79
|
-
and splash zones, concrete exposed to seawater spray, and salt water pools.
|
80
|
-
* `csa.C-2` - Non-structurally reinforced (i.e. plain) concrete exposed to chlorides and freezing and thawing.
|
81
|
-
Examples: garage floors, porches, steps, pavements, sidewalks curbs and gutters.
|
82
|
-
* `csa.C-3` - Continuously submerged concrete exposed to chlorides but not to freezing and thawing.
|
83
|
-
Example: underwater portions of marine structures.
|
84
|
-
* `csa.C-4` - Non-structurally reinforced concrete exposed to chlorides but not to freezing and thawing.
|
85
|
-
Examples: underground parking slabs on grade.
|
86
|
-
|
87
|
-
* `csa.F-1` - Concrete exposed to freezing and thawing in a saturated condition but not to chlorides.
|
88
|
-
Examples: pool decks, patios, tennis courts, freshwater pools and fresh water control structures.
|
89
|
-
* `csa.F-2` - Concrete in an unsaturated condition exposed to freezing and thawing but not to chlorides.
|
90
|
-
Examples: exterior walls and columns.
|
91
|
-
|
92
|
-
* `csa.N` - Concrete not exposed to chlorides nor to freezing and thawing.
|
93
|
-
Examples: footings and interior slabs, walls and columns.
|
94
|
-
|
95
|
-
* `csa.A-1` - Structurally reinforced concrete exposed to severe manure and/or silage gases, with or without
|
96
|
-
freeze-thaw exposure. Concrete exposed to the vapour above municipal sewage or industrial effluent,
|
97
|
-
where hydrogen sulphide gas may be generated.
|
98
|
-
Examples: reinforced beams, slabs, and columns over manure pits and silos, canals, and pig slats;
|
99
|
-
and access holes, enclosed chambers and pipes that are partially filled with effluents.
|
100
|
-
* `csa.A-2` - Structurally reinforced concrete exposed to moderate to severe manure and/or silage gases and liquids,
|
101
|
-
with or without freeze-thaw exposure.
|
102
|
-
Examples: reinforced walls in exterior manure tanks, silos and feed bunkers, and exterior slabs.
|
103
|
-
* `csa.A-3` - Structurally reinforced concrete exposed to moderate to severe manure and/or silage gases and liquids,
|
104
|
-
with or without freeze-thaw exposure in a continuously submerged condition. Concrete continuously
|
105
|
-
submerged in municipal or industrial effluents.
|
106
|
-
Examples: interior gutter walls, beams, slabs and columns; sewage pipes that are continuously full
|
107
|
-
(e.g. force mains); and submerged portions of sewage treatment structures.
|
108
|
-
* `csa.A-4` - Non-structurally reinforced concrete exposed to moderate manure and/or silage gases and liquids, without
|
109
|
-
freeze-thaw exposure.
|
110
|
-
Examples: interior slabs on grade.
|
111
|
-
|
112
|
-
* `csa.S-1` - Concrete subjected to very severe sulphate exposures.
|
113
|
-
Exposed to >10000 ppm of SO4 in water or >2% SO4 in soil
|
114
|
-
* `csa.S-2` - Concrete subjected to severe sulphate exposure.
|
115
|
-
Exposed to <10000 ppm of SO4 in water and <2% SO4 in soil
|
116
|
-
* `csa.S-3` - Concrete subjected to moderate sulphate exposure.
|
117
|
-
Exposed to <1500 ppm of SO4 in water and <0.2% SO4 in soil
|
118
|
-
"""
|
119
|
-
|
120
|
-
C_XL = "csa.C-XL"
|
121
|
-
C_1 = "csa.C-1"
|
122
|
-
C_2 = "csa.C-2"
|
123
|
-
C_3 = "csa.C-3"
|
124
|
-
C_4 = "csa.C-4"
|
125
|
-
F_1 = "csa.F-1"
|
126
|
-
F2 = "csa.F-2"
|
127
|
-
N = "csa.N"
|
128
|
-
S_1 = "csa.S-1"
|
129
|
-
S_2 = "csa.S-2"
|
130
|
-
S_3 = "csa.S-3"
|
131
|
-
A_1 = "csa.A-1"
|
132
|
-
A_2 = "csa.A-2"
|
133
|
-
A_3 = "csa.A-3"
|
134
|
-
A_4 = "csa.A-4"
|
135
|
-
|
136
|
-
|
137
|
-
class EnExposureClass(StrEnum):
|
138
|
-
"""
|
139
|
-
EN 206 Class (Europe).
|
140
|
-
|
141
|
-
European Standard concrete exposure classes.
|
142
|
-
|
143
|
-
* `en206.X0` - No risk of corrosion or attack.
|
144
|
-
|
145
|
-
Corrosion induced by carbonation.
|
146
|
-
|
147
|
-
* `en206.XC1` - Dry or permanently wet.
|
148
|
-
* `en206.XC2` - Wet, rarely dry.
|
149
|
-
* `en206.XC3` - Moderate humidity.
|
150
|
-
* `en206.XC4` - Cyclic wet and dry.
|
151
|
-
|
152
|
-
Corrosion induced by chlorides from sea water.
|
153
|
-
|
154
|
-
* `en206.XS1` - Exposed to airborne salt but not in direct contact with sea water.
|
155
|
-
* `en206.XS2` - Permanently submerged.
|
156
|
-
* `en206.XS3` - Tidal, splash and spray zones.
|
157
|
-
|
158
|
-
Corrosion induced by chlorides other than from sea water.
|
159
|
-
|
160
|
-
* `en206.XD1` - Moderate humidity.
|
161
|
-
* `en206.XD2` - Wet, rarely dry.
|
162
|
-
* `en206.XD3` - Cyclic wet and dry.
|
163
|
-
|
164
|
-
Freeze/thaw attack with or without de-icing agents.
|
165
|
-
|
166
|
-
* `en206.XF1` - Moderate water saturation, without deicing agent.
|
167
|
-
* `en206.XF2` - Moderate water saturation, with deicing agent.
|
168
|
-
* `en206.XF3` - High water saturation, without de-icing agent.
|
169
|
-
* `en206.XF4` - High water saturation, with de-icing agent or sea water.
|
170
|
-
|
171
|
-
Chemical attack.
|
172
|
-
|
173
|
-
* `en206.XA1` - Slightly aggressive chemical environment.
|
174
|
-
* `en206.XA2` - Moderately aggressive chemical environment.
|
175
|
-
* `en206.XA3` - Highly aggressive chemical environment.
|
176
|
-
|
177
|
-
"""
|
178
|
-
|
179
|
-
en206_X0 = "en206.X0"
|
180
|
-
en206_XC1 = "en206.XC1"
|
181
|
-
en206_XC2 = "en206.XC2"
|
182
|
-
en206_XC3 = "en206.XC3"
|
183
|
-
en206_XC4 = "en206.XC4"
|
184
|
-
en206_XS1 = "en206.XS1"
|
185
|
-
en206_XS2 = "en206.XS2"
|
186
|
-
en206_XS3 = "en206.XS3"
|
187
|
-
en206_XD1 = "en206.XD1"
|
188
|
-
en206_XD2 = "en206.XD2"
|
189
|
-
en206_XD3 = "en206.XD3"
|
190
|
-
en206_XF1 = "en206.XF1"
|
191
|
-
en206_XF2 = "en206.XF2"
|
192
|
-
en206_XF3 = "en206.XF3"
|
193
|
-
en206_XF4 = "en206.XF4"
|
194
|
-
en206_XA1 = "en206.XA1"
|
195
|
-
en206_XA2 = "en206.XA2"
|
196
|
-
en206_XA3 = "en206.XA3"
|
197
|
-
|
198
|
-
|
199
33
|
class CmuWeightClassification(StrEnum):
|
200
34
|
"""Concrete Masonry Unit weight classification."""
|
201
35
|
|
@@ -325,16 +159,24 @@ class CmuSpec(BaseOpenEpdSpec):
|
|
325
159
|
class Cementitious(BaseOpenEpdSchema):
|
326
160
|
"""List of cementitious materials, and proportion by mass."""
|
327
161
|
|
328
|
-
opc: RatioFloat | None = pyd.Field(
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
162
|
+
opc: RatioFloat | None = pyd.Field(
|
163
|
+
default=None, description="Ordinary Gray Portland Cement", example=0.5, ge=0, le=1
|
164
|
+
)
|
165
|
+
wht: RatioFloat | None = pyd.Field(default=None, description="White Portland Cement", example=0.5, ge=0, le=1)
|
166
|
+
ggbs: RatioFloat | None = pyd.Field(
|
167
|
+
default=None, description="Ground Granulated Blast Furnace Slag", example=0.5, ge=0, le=1
|
168
|
+
)
|
169
|
+
flyAsh: RatioFloat | None = pyd.Field(
|
170
|
+
default=None, description="Fly Ash, including types F, CL, and CH", example=0.5, ge=0, le=1
|
171
|
+
)
|
172
|
+
siFume: RatioFloat | None = pyd.Field(default=None, description="Silica Fume", example=0.5, ge=0, le=1)
|
173
|
+
gg45: RatioFloat | None = pyd.Field(
|
174
|
+
default=None, description="Ground Glass, 45um or smaller", example=0.5, ge=0, le=1
|
175
|
+
)
|
176
|
+
natPoz: RatioFloat | None = pyd.Field(default=None, description="Natural pozzolan", example=0.5, ge=0, le=1)
|
177
|
+
mk: RatioFloat | None = pyd.Field(default=None, description="Metakaolin", example=0.5, ge=0, le=1)
|
178
|
+
CaCO3: RatioFloat | None = pyd.Field(default=None, description="Limestone", example=0.5, ge=0, le=1)
|
179
|
+
other: RatioFloat | None = pyd.Field(default=None, description="Other SCMs", example=0.5, ge=0, le=1)
|
338
180
|
|
339
181
|
|
340
182
|
class TypicalApplication(BaseOpenEpdSchema):
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
# This software was developed with support from the Skanska USA,
|
17
|
+
# Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
|
18
|
+
# Find out more at www.BuildingTransparency.org
|
19
|
+
#
|
20
|
+
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
21
|
+
|
22
|
+
|
23
|
+
class BlanketFacingV1(BaseOpenEpdHierarchicalSpec):
|
24
|
+
"""Blanket facing performance specification."""
|
25
|
+
|
26
|
+
_EXT_VERSION = "1.0"
|
27
|
+
|
28
|
+
|
29
|
+
class DoorsHardwareV1(BaseOpenEpdHierarchicalSpec):
|
30
|
+
"""Doors hardware performance specification."""
|
31
|
+
|
32
|
+
_EXT_VERSION = "1.0"
|
33
|
+
|
34
|
+
|
35
|
+
class FlooringAccessoriesV1(BaseOpenEpdHierarchicalSpec):
|
36
|
+
"""Flooring accessories performance specification."""
|
37
|
+
|
38
|
+
_EXT_VERSION = "1.0"
|
39
|
+
|
40
|
+
|
41
|
+
class MortarV1(BaseOpenEpdHierarchicalSpec):
|
42
|
+
"""Mortar performance specification."""
|
43
|
+
|
44
|
+
_EXT_VERSION = "1.0"
|
45
|
+
|
46
|
+
|
47
|
+
class TileGroutV1(BaseOpenEpdHierarchicalSpec):
|
48
|
+
"""Tile grout performance specification."""
|
49
|
+
|
50
|
+
_EXT_VERSION = "1.0"
|
51
|
+
|
52
|
+
|
53
|
+
class AccessoriesV1(BaseOpenEpdHierarchicalSpec):
|
54
|
+
"""Accessories performance specification."""
|
55
|
+
|
56
|
+
_EXT_VERSION = "1.0"
|
57
|
+
|
58
|
+
# Nested specs:
|
59
|
+
BlanketFacing: BlanketFacingV1 | None = None
|
60
|
+
DoorsHardware: DoorsHardwareV1 | None = None
|
61
|
+
FlooringAccessories: FlooringAccessoriesV1 | None = None
|
62
|
+
Mortar: MortarV1 | None = None
|
63
|
+
TileGrout: TileGroutV1 | None = None
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
# This software was developed with support from the Skanska USA,
|
17
|
+
# Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
|
18
|
+
# Find out more at www.BuildingTransparency.org
|
19
|
+
#
|
20
|
+
from openepd.compat.pydantic import pyd
|
21
|
+
from openepd.model.base import BaseOpenEpdSchema
|
22
|
+
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
23
|
+
from openepd.model.specs.generated.enums import AggregateGradation, AggregateWeightClassification
|
24
|
+
from openepd.model.validation.numbers import RatioFloat
|
25
|
+
from openepd.model.validation.quantity import LengthMmStr
|
26
|
+
|
27
|
+
|
28
|
+
class AggregateApplication(BaseOpenEpdSchema):
|
29
|
+
"""Application for aggregates."""
|
30
|
+
|
31
|
+
concrete: bool | None = pyd.Field(default=None, description="Aggregates used in concrete and masonry applications")
|
32
|
+
asphalt: bool | None = pyd.Field(
|
33
|
+
default=None, description="Aggregates used in bituminous paving and surface applications"
|
34
|
+
)
|
35
|
+
unbound: bool | None = pyd.Field(default=None)
|
36
|
+
|
37
|
+
|
38
|
+
class AggregatesV1(BaseOpenEpdHierarchicalSpec):
|
39
|
+
"""
|
40
|
+
Construction Aggregates.
|
41
|
+
|
42
|
+
Includes sand, gravel, crushed stone, etc. for use as bases, ballasts, or as a component in concrete or asphalt.
|
43
|
+
"""
|
44
|
+
|
45
|
+
_EXT_VERSION = "1.0"
|
46
|
+
|
47
|
+
# Own fields:
|
48
|
+
recycled_content: RatioFloat | None = pyd.Field(
|
49
|
+
example=0.3, default=None, description="Percent of total mass that is recycled aggregate"
|
50
|
+
)
|
51
|
+
nominal_max_size: LengthMmStr | None = pyd.Field(
|
52
|
+
default=None,
|
53
|
+
example="10 mm",
|
54
|
+
description="Nominal maximum aggregate size is defined as one sieve size smaller than the maximum "
|
55
|
+
"aggregate size. "
|
56
|
+
"The maximum aggregate size is defined as the smallest sieve size that requires 100% passing.",
|
57
|
+
)
|
58
|
+
weight_classification: AggregateWeightClassification | None = pyd.Field(
|
59
|
+
example=str(AggregateWeightClassification.HEAVY_WEIGHT), default=None
|
60
|
+
)
|
61
|
+
gradation: AggregateGradation | None = pyd.Field(example=str(AggregateGradation.GAP), default=None)
|
62
|
+
manufactured: bool | None = pyd.Field(
|
63
|
+
default=None,
|
64
|
+
description="Aggregate produced via expansion or sintering at high temperatures of the following materials: "
|
65
|
+
"clay, shale, slate, perlite, vermiculite, or slag. Typically used to produce lightweight aggregate",
|
66
|
+
)
|
67
|
+
slag: bool | None = pyd.Field(
|
68
|
+
default=None,
|
69
|
+
description="Pelletized, foamed, and granulated blast furnace slag can be used as construction aggregate.",
|
70
|
+
)
|
71
|
+
application: AggregateApplication | None = None
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
# This software was developed with support from the Skanska USA,
|
17
|
+
# Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
|
18
|
+
# Find out more at www.BuildingTransparency.org
|
19
|
+
#
|
20
|
+
from openepd.compat.pydantic import pyd
|
21
|
+
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
22
|
+
from openepd.model.specs.generated.enums import AluminiumAlloy
|
23
|
+
|
24
|
+
|
25
|
+
class AluminiumBilletsV1(BaseOpenEpdHierarchicalSpec):
|
26
|
+
"""Aluminium billets performance specification."""
|
27
|
+
|
28
|
+
_EXT_VERSION = "1.0"
|
29
|
+
|
30
|
+
|
31
|
+
class AluminiumExtrusionsV1(BaseOpenEpdHierarchicalSpec):
|
32
|
+
"""Aluminium extrusions performance specification."""
|
33
|
+
|
34
|
+
_EXT_VERSION = "1.0"
|
35
|
+
|
36
|
+
# Own fields:
|
37
|
+
thermally_improved: bool | None = pyd.Field(default=None, description="", example=True)
|
38
|
+
|
39
|
+
|
40
|
+
class AluminiumSheetGoodsV1(BaseOpenEpdHierarchicalSpec):
|
41
|
+
"""Aluminium sheet goods performance specification."""
|
42
|
+
|
43
|
+
_EXT_VERSION = "1.0"
|
44
|
+
|
45
|
+
|
46
|
+
class AluminiumSuspensionAssemblyV1(BaseOpenEpdHierarchicalSpec):
|
47
|
+
"""Aluminium suspension assembly performance specification."""
|
48
|
+
|
49
|
+
_EXT_VERSION = "1.0"
|
50
|
+
|
51
|
+
|
52
|
+
class AluminiumV1(BaseOpenEpdHierarchicalSpec):
|
53
|
+
"""Material definition for objects made primarily from Aluminium and its alloys."""
|
54
|
+
|
55
|
+
_EXT_VERSION = "1.0"
|
56
|
+
|
57
|
+
# Own fields:
|
58
|
+
alloy: AluminiumAlloy | None = pyd.Field(default=None, description="", example=str(AluminiumAlloy.ALLOY_1XXX))
|
59
|
+
anodized: bool | None = pyd.Field(default=None, description="", example=True)
|
60
|
+
painted: bool | None = pyd.Field(default=None, description="", example=True)
|
61
|
+
|
62
|
+
# Nested specs:
|
63
|
+
AluminiumBillets: AluminiumBilletsV1 | None = None
|
64
|
+
AluminiumExtrusions: AluminiumExtrusionsV1 | None = None
|
65
|
+
AluminiumSheetGoods: AluminiumSheetGoodsV1 | None = None
|
66
|
+
AluminiumSuspensionAssembly: AluminiumSuspensionAssemblyV1 | None = None
|
@@ -0,0 +1,86 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
# This software was developed with support from the Skanska USA,
|
17
|
+
# Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
|
18
|
+
# Find out more at www.BuildingTransparency.org
|
19
|
+
#
|
20
|
+
from openepd.compat.pydantic import pyd
|
21
|
+
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
22
|
+
from openepd.model.specs.generated.enums import AsphaltGradation, AsphaltMixType
|
23
|
+
from openepd.model.validation.numbers import RatioFloat
|
24
|
+
from openepd.model.validation.quantity import LengthMmStr, TemperatureCStr, validate_unit_factory
|
25
|
+
|
26
|
+
|
27
|
+
class AsphaltV1(BaseOpenEpdHierarchicalSpec):
|
28
|
+
"""Asphalt performance specification."""
|
29
|
+
|
30
|
+
_EXT_VERSION = "1.0"
|
31
|
+
|
32
|
+
# Own fields:
|
33
|
+
aggregate_size_max: LengthMmStr | None = pyd.Field(default=None, description="Max aggregate size", example="20 mm")
|
34
|
+
rap: RatioFloat | None = pyd.Field(
|
35
|
+
default=None,
|
36
|
+
description="Percent of mixture that has been replaced by recycled asphalt pavement (RAP).",
|
37
|
+
example=0.5,
|
38
|
+
ge=0,
|
39
|
+
le=1,
|
40
|
+
)
|
41
|
+
ras: RatioFloat | None = pyd.Field(
|
42
|
+
default=None,
|
43
|
+
description="Percent of mixture that has been replaced by recycled asphalt shingles (RAS).",
|
44
|
+
example=0.5,
|
45
|
+
ge=0,
|
46
|
+
le=1,
|
47
|
+
)
|
48
|
+
ground_tire_rubber: RatioFloat | None = pyd.Field(
|
49
|
+
default=None,
|
50
|
+
description="Percent of mixture that has been replaced by ground tire rubber (GTR).",
|
51
|
+
example=0.5,
|
52
|
+
ge=0,
|
53
|
+
le=1,
|
54
|
+
)
|
55
|
+
max_temperature: TemperatureCStr | None = pyd.Field(
|
56
|
+
default=None,
|
57
|
+
description="The upper threshold temperature to which an asphalt "
|
58
|
+
"binder can be heated preventing the asphalt mixture "
|
59
|
+
"from rutting",
|
60
|
+
example="90 °C",
|
61
|
+
)
|
62
|
+
min_temperature: TemperatureCStr | None = pyd.Field(
|
63
|
+
default=None,
|
64
|
+
description="The lower threshold temperature for an asphalt "
|
65
|
+
"binder to prevent thermal cracking of the asphalt"
|
66
|
+
" mixture.",
|
67
|
+
example="-20 °C",
|
68
|
+
)
|
69
|
+
mix_type: AsphaltMixType | None = pyd.Field(default=None, description="Asphalt mix type", example="WMA")
|
70
|
+
gradation: AsphaltGradation | None = pyd.Field(default=None, description="Asphalt gradation", example="Gap-graded")
|
71
|
+
|
72
|
+
sbr: bool | None = pyd.Field(default=None, description="Styrene-butadiene rubber (SBR)", example=True)
|
73
|
+
sbs: bool | None = pyd.Field(default=None, description="Styrene-butadiene-styrene (SBS)", example=True)
|
74
|
+
ppa: bool | None = pyd.Field(default=None, description="Polyphosphoric acid (PPA)", example=True)
|
75
|
+
gtr: bool | None = pyd.Field(default=None, description="Ground tire rubber (GTR)", example=True)
|
76
|
+
pmb: bool | None = pyd.Field(default=None, description="Polymer modified bitumen (PMB)", example=True)
|
77
|
+
|
78
|
+
_asphalt_aggregate_size_max_is_quantity_validator = pyd.validator("aggregate_size_max", allow_reuse=True)(
|
79
|
+
validate_unit_factory("m")
|
80
|
+
)
|
81
|
+
_asphalt_max_temperature_is_quantity_validator = pyd.validator("max_temperature", allow_reuse=True)(
|
82
|
+
validate_unit_factory("°C")
|
83
|
+
)
|
84
|
+
_asphalt_min_temperature_is_quantity_validator = pyd.validator("min_temperature", allow_reuse=True)(
|
85
|
+
validate_unit_factory("°C")
|
86
|
+
)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2024 by C Change Labs Inc. www.c-change-labs.com
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
# This software was developed with support from the Skanska USA,
|
17
|
+
# Charles Pankow Foundation, Microsoft Sustainability Fund, Interface, MKA Foundation, and others.
|
18
|
+
# Find out more at www.BuildingTransparency.org
|
19
|
+
#
|
20
|
+
from openepd.model.specs.base import BaseOpenEpdHierarchicalSpec
|
21
|
+
|
22
|
+
|
23
|
+
class BulkMaterialsV1(BaseOpenEpdHierarchicalSpec):
|
24
|
+
"""Bulk materials performance specification."""
|
25
|
+
|
26
|
+
_EXT_VERSION = "1.0"
|