{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://schema.odal-node.io/dpp/construction-v1.0.0.json",
  "title": "Odal Node — Construction Products Sector Data (v1.0.0)",
  "description": "Construction products fields per EU CPR 2024/3110. Mandate is phased by product family (~2028-2032). This schema is provisional pending final delegated acts.",
  "type": "object",
  "required": [
    "gtin",
    "productFamily",
    "countryOfManufacture",
    "co2ePerFunctionalUnitKg",
    "functionalUnit"
  ],
  "properties": {
    "gtin": {
      "type": "string",
      "pattern": "^[0-9]{14}$",
      "description": "14-digit Global Trade Item Number."
    },
    "productFamily": {
      "type": "string",
      "enum": [
        "cement",
        "concrete",
        "structural-steel",
        "glass",
        "insulation",
        "brick",
        "timber",
        "other"
      ],
      "description": "EU CPR product family classification."
    },
    "countryOfManufacture": {
      "type": "string",
      "pattern": "^[A-Z]{2}$",
      "description": "ISO 3166-1 alpha-2 country of manufacture."
    },
    "co2ePerFunctionalUnitKg": {
      "type": "number",
      "minimum": 0,
      "description": "Carbon footprint in kg CO2e per functional unit."
    },
    "functionalUnit": {
      "type": "string",
      "minLength": 1,
      "description": "Description of the functional unit, e.g. 'per tonne', 'per m2', 'per m3'."
    },
    "recycledContentPct": {
      "type": ["number", "null"],
      "minimum": 0,
      "maximum": 100,
      "description": "Recycled content as a percentage of total input material."
    },
    "epdUrl": {
      "type": ["string", "null"],
      "description": "URL to the Environmental Product Declaration (EPD)."
    },
    "ceMarking": {
      "type": ["boolean", "null"],
      "description": "Whether the product carries CE marking under EU CPR."
    }
  },
  "additionalProperties": false
}
