{
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "$id": "https://id.beispiel-werkzeuge.de/schema/produktpass-1.0.json",
 "title": "Digitaler Produktpass - Beispielmodell Akku-Werkzeug 1.0",
 "description": "Eigenes, dokumentiertes Beispielmodell fuer einen digitalen Produktpass je Einzelgeraet. NICHT der verbindliche Feldsatz eines EU-Rechtsakts (ESPR, Batterieverordnung) - vor Einsatz abgleichen. Jede Hauptgruppe traegt 'x-zugriffsstufe': oeffentlich (jeder), recycler (zusaetzlich Materialdetails und Demontage), behoerde (alles, auch Lieferkette und Rueckverfolgung). Massen in kg, Anteile in % des Produktgewichts, Summe der Materialanteile 100 % (im Code geprueft, da in JSON Schema nicht ausdrueckbar), GTIN-Pruefziffer ebenso.",
 "type": "object",
 "additionalProperties": false,
 "required": [
  "passId",
  "passUrl",
  "schemaVersion",
  "ausgestellt",
  "produkt",
  "hersteller",
  "materialUebersicht",
  "co2",
  "reparatur",
  "entsorgung",
  "materialien",
  "demontage",
  "lieferkette",
  "rueckverfolgung"
 ],
 "properties": {
  "passId": {
   "type": "string",
   "format": "uuid",
   "x-zugriffsstufe": "oeffentlich",
   "description": "Eindeutige Pass-ID: UUIDv5 (Namensraum URL) der Pass-URL - stabil und reproduzierbar"
  },
  "passUrl": {
   "type": "string",
   "pattern": "^https://id\\.beispiel-werkzeuge\\.de/01/[0-9]{14}/21/[A-Z0-9-]{1,20}$",
   "x-zugriffsstufe": "oeffentlich",
   "description": "Aufruf-URL im Aufbau eines GS1 Digital Link: /01/<GTIN-14>/21/<Seriennummer>; Inhalt des QR-Codes"
  },
  "schemaVersion": {
   "const": "1.0",
   "x-zugriffsstufe": "oeffentlich"
  },
  "ausgestellt": {
   "type": "string",
   "format": "date",
   "x-zugriffsstufe": "oeffentlich",
   "description": "Ausstellungsdatum des Passes (ISO 8601)"
  },
  "produkt": {
   "type": "object",
   "additionalProperties": false,
   "required": [
    "gtin",
    "seriennummer",
    "artikelnummer",
    "bezeichnung",
    "gewichtKg"
   ],
   "properties": {
    "gtin": {
     "type": "string",
     "minLength": 1,
     "description": "GTIN-14 des Modells (13-stellige EAN mit fuehrender 0), Pruefziffer gueltig",
     "pattern": "^[0-9]{14}$"
    },
    "seriennummer": {
     "type": "string",
     "minLength": 1,
     "description": "Seriennummer des Geraets (GS1 AI 21)",
     "pattern": "^[A-Z0-9-]{1,20}$"
    },
    "artikelnummer": {
     "type": "string",
     "minLength": 1,
     "description": "Interne Artikelnummer des Herstellers"
    },
    "bezeichnung": {
     "type": "string",
     "minLength": 1,
     "description": "Handelsbezeichnung"
    },
    "gewichtKg": {
     "type": "number",
     "exclusiveMinimum": 0,
     "description": "Geraetegewicht ohne Akku in kg"
    }
   },
   "description": "Identifikation des Einzelgeraets",
   "x-zugriffsstufe": "oeffentlich"
  },
  "hersteller": {
   "type": "object",
   "additionalProperties": false,
   "required": [
    "name",
    "anschrift",
    "land"
   ],
   "properties": {
    "name": {
     "type": "string",
     "minLength": 1,
     "description": "Firmenname"
    },
    "anschrift": {
     "type": "string",
     "minLength": 1,
     "description": "Postanschrift"
    },
    "land": {
     "type": "string",
     "pattern": "^[A-Z]{2}$",
     "description": "ISO 3166-1 alpha-2"
    }
   },
   "description": "Hersteller (Inverkehrbringer)",
   "x-zugriffsstufe": "oeffentlich"
  },
  "materialUebersicht": {
   "type": "array",
   "minItems": 1,
   "x-zugriffsstufe": "oeffentlich",
   "description": "Materialien zusammengefasst, absteigend nach Anteil",
   "items": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "material",
     "anteilProzent"
    ],
    "properties": {
     "material": {
      "type": "string",
      "minLength": 1,
      "description": "Werkstoff"
     },
     "anteilProzent": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Anteil am Produktgewicht in %"
     }
    },
    "description": "Material mit Gesamtanteil"
   }
  },
  "co2": {
   "type": "object",
   "additionalProperties": false,
   "required": [
    "wertKgCO2e",
    "methode",
    "quelle"
   ],
   "properties": {
    "wertKgCO2e": {
     "type": "number",
     "minimum": 0,
     "description": "kg CO2-Aequivalent je Geraet"
    },
    "methode": {
     "type": "string",
     "minLength": 3,
     "description": "Berechnungsmethode und Systemgrenze (Pflicht-Begleitfeld)"
    },
    "quelle": {
     "type": "string",
     "minLength": 3,
     "description": "Herkunft des Werts, z. B. Oekobilanzbericht (Pflicht-Begleitfeld)"
    }
   },
   "description": "CO2-Fussabdruck - nur zusammen mit Methode und Quelle zulaessig",
   "x-zugriffsstufe": "oeffentlich"
  },
  "reparatur": {
   "type": "object",
   "additionalProperties": false,
   "required": [
    "ersatzteile",
    "ersatzteilVerfuegbarJahre",
    "anleitungUrl"
   ],
   "properties": {
    "ersatzteile": {
     "type": "array",
     "items": {
      "type": "object",
      "additionalProperties": false,
      "required": [
       "bezeichnung",
       "teilenummer"
      ],
      "properties": {
       "bezeichnung": {
        "type": "string",
        "minLength": 1,
        "description": "Bezeichnung"
       },
       "teilenummer": {
        "type": "string",
        "minLength": 1,
        "description": "Bestellnummer"
       }
      },
      "description": "Ersatzteil"
     }
    },
    "ersatzteilVerfuegbarJahre": {
     "type": "integer",
     "minimum": 0,
     "description": "Zugesagte Verfuegbarkeit der Ersatzteile ab Kauf in Jahren"
    },
    "anleitungUrl": {
     "type": "string",
     "minLength": 1,
     "description": "Reparaturanleitung",
     "pattern": "^https://"
    }
   },
   "description": "Reparatur und Ersatzteile",
   "x-zugriffsstufe": "oeffentlich"
  },
  "entsorgung": {
   "type": "object",
   "additionalProperties": false,
   "required": [
    "hinweis",
    "akkuEntnehmbar"
   ],
   "properties": {
    "hinweis": {
     "type": "string",
     "minLength": 1,
     "description": "Entsorgungshinweis"
    },
    "akkuEntnehmbar": {
     "type": "boolean",
     "description": "Akku ohne Werkzeug entnehmbar"
    }
   },
   "description": "Hinweise fuer Endnutzer zur Entsorgung",
   "x-zugriffsstufe": "oeffentlich"
  },
  "materialien": {
   "type": "array",
   "minItems": 1,
   "x-zugriffsstufe": "recycler",
   "description": "Materialzusammensetzung je Bauteil; Summe anteilProzent = 100",
   "items": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "bauteil",
     "material",
     "masseKg",
     "anteilProzent",
     "rezyklatProzent"
    ],
    "properties": {
     "bauteil": {
      "type": "string",
      "minLength": 1,
      "description": "Bauteil"
     },
     "material": {
      "type": "string",
      "minLength": 1,
      "description": "Werkstoff"
     },
     "masseKg": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Masse in kg"
     },
     "anteilProzent": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Anteil am Produktgewicht in %"
     },
     "rezyklatProzent": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "description": "Rezyklatanteil des Werkstoffs in %"
     }
    },
    "description": "Bauteil"
   }
  },
  "demontage": {
   "type": "object",
   "additionalProperties": false,
   "required": [
    "hinweis"
   ],
   "properties": {
    "hinweis": {
     "type": "string",
     "minLength": 1,
     "description": "Demontageschritte"
    }
   },
   "description": "Demontagehinweise fuer Recycler",
   "x-zugriffsstufe": "recycler"
  },
  "lieferkette": {
   "type": "array",
   "minItems": 1,
   "x-zugriffsstufe": "behoerde",
   "description": "Herkunft der Vorprodukte je Bauteil",
   "items": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "bauteil",
     "lieferant",
     "herkunftsland"
    ],
    "properties": {
     "bauteil": {
      "type": "string",
      "minLength": 1,
      "description": "Bauteil"
     },
     "lieferant": {
      "type": "string",
      "minLength": 1,
      "description": "Lieferant"
     },
     "herkunftsland": {
      "type": "string",
      "pattern": "^[A-Z]{2}$",
      "description": "ISO 3166-1 alpha-2"
     }
    },
    "description": "Vorprodukt"
   }
  },
  "rueckverfolgung": {
   "type": "object",
   "additionalProperties": false,
   "required": [
    "charge",
    "herstelldatum"
   ],
   "properties": {
    "charge": {
     "type": "string",
     "minLength": 1,
     "description": "Fertigungscharge (Los)"
    },
    "herstelldatum": {
     "type": "string",
     "format": "date",
     "description": "Herstelldatum ISO 8601"
    }
   },
   "description": "Fertigungscharge und -datum",
   "x-zugriffsstufe": "behoerde"
  }
 }
}