{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schadstofffreier.de/hersteller/einsendepaket-schema.json",
  "title": "Einsendepaket schadstofffreier.de",
  "description": "Maschinenlesbare Alternative zur Tabelle einsendepaket-vorlage.xlsx. Gleiche Felder wie das Blatt „Produkte“. Kontaktangaben einmal unter „absender“. Dateien (Etikettfoto, SDB, Zertifikate, Produktfotos) werden als Anhang mitgeschickt und hier per Dateiname genannt.",
  "type": "object",
  "required": [
    "version",
    "absender",
    "produkte"
  ],
  "additionalProperties": false,
  "properties": {
    "version": {
      "const": "1.0"
    },
    "absender": {
      "type": "object",
      "required": [
        "hersteller",
        "ansprechpartner",
        "email"
      ],
      "additionalProperties": false,
      "properties": {
        "hersteller": {
          "type": "string",
          "title": "Firma, Ort",
          "description": "Firma, die die Angaben macht (Hersteller, Händler oder Agentur), mit Ort.",
          "examples": [
            "Beispiel-Manufaktur GbR, Musterstadt"
          ]
        },
        "ansprechpartner": {
          "type": "string",
          "title": "Ansprechpartner (Name)",
          "description": "Für Rückfragen. In der ersten Zeile genügt.",
          "examples": [
            "Erika Beispiel"
          ]
        },
        "email": {
          "type": "string",
          "title": "E-Mail",
          "description": "Für Rückfragen. In der ersten Zeile genügt.",
          "examples": [
            "kontakt@example.org"
          ],
          "format": "email"
        },
        "telefon": {
          "type": "string",
          "title": "Telefon (optional)",
          "description": ""
        },
        "rolle": {
          "type": "string",
          "title": "Sie senden als",
          "description": "Hersteller oder Markeninhaber, Händler, Agentur oder Dienstleister im Auftrag. Bei Händlern und Agenturen klären wir Bildrechte im Zweifel mit dem Hersteller.",
          "enum": [
            "Hersteller oder Markeninhaber",
            "Händler",
            "Agentur oder Dienstleister im Auftrag"
          ]
        },
        "datenquellen": {
          "type": "string",
          "title": "Produktfeed, Bilddatenbank oder Pressebereich (Links)",
          "description": "Ein Link je Zeile. Steht dort alles, genügen in den Produkten die Pflichtangaben."
        }
      }
    },
    "produkte": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "groesse",
          "gtin",
          "marke",
          "produktart",
          "produktname",
          "zutaten"
        ],
        "properties": {
          "produktart": {
            "type": "string",
            "title": "Produktart",
            "description": "Was ist das Produkt? Zum Beispiel Seife, Zahnpasta, Spülmittel, Sonnencreme.",
            "examples": [
              "Seife"
            ]
          },
          "marke": {
            "type": "string",
            "title": "Marke",
            "description": "Markenname wie auf der Packung.",
            "examples": [
              "Beispiel-Manufaktur"
            ]
          },
          "hersteller": {
            "type": "string",
            "title": "Hersteller (Firma, Ort)",
            "description": "Firma, die das Produkt in Verkehr bringt, mit Ort.",
            "examples": [
              "Beispiel-Manufaktur GbR, Musterstadt"
            ]
          },
          "produktname": {
            "type": "string",
            "title": "Produktname mit Sorte",
            "description": "Vollständiger Name inklusive Sorte oder Duft, wie auf der Packung.",
            "examples": [
              "Olivenölseife Lavendel"
            ]
          },
          "groesse": {
            "type": "string",
            "title": "Größe / Inhalt",
            "description": "Füllmenge mit Einheit, z. B. 100 g, 300 ml, 30 Tabs.",
            "examples": [
              "100 g"
            ]
          },
          "gtin": {
            "type": "string",
            "title": "GTIN / EAN",
            "description": "8 bis 14 Ziffern vom Barcode. Ohne Barcode bitte \"keine\" eintragen.",
            "examples": [
              "2001234567893"
            ],
            "pattern": "^(\\d{8}|\\d{12,14}|keine)$"
          },
          "darreichung": {
            "type": "string",
            "title": "Darreichungsform",
            "description": "z. B. fest, flüssig, Gel, Pulver, Spray, Tabs, Creme.",
            "examples": [
              "fest"
            ]
          },
          "zielgruppe": {
            "type": "string",
            "title": "Zielgruppe",
            "description": "Erwachsene, Kinder oder Babys (nur wenn auf der Packung so ausgelobt).",
            "examples": [
              "Erwachsene"
            ],
            "enum": [
              "Erwachsene",
              "Kinder",
              "Babys"
            ]
          },
          "zutaten": {
            "type": "string",
            "title": "Zutatenliste vollständig (INCI bzw. Zutaten)",
            "description": "Vollständig, wörtlich und in der Reihenfolge der Packung. Kosmetik: INCI. Haushalt: Inhaltsstoffe laut Etikett bzw. Detergenzien-Datenblatt. Nichts kürzen, kein \"u. a.\".",
            "examples": [
              "Sodium Olivate, Aqua, Sodium Cocoate, Glycerin, Lavandula Angustifolia Oil, Sodium Chloride, Linalool, Limonene"
            ]
          },
          "zutaten_url": {
            "type": "string",
            "title": "Zutatenliste online (Link)",
            "description": "Link zu Ihrer Produktseite, auf der die Zutatenliste öffentlich steht.",
            "format": "uri"
          },
          "zutaten_stand": {
            "type": "string",
            "title": "Stand der Rezeptur (Datum)",
            "description": "Seit wann gilt diese Zutatenliste? JJJJ-MM-TT.",
            "examples": [
              "2026-09-01"
            ],
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$"
          },
          "etikett_foto": {
            "type": "string",
            "title": "Foto Etikett mit Zutatenliste (Dateiname)",
            "description": "Dateiname des Fotos im Paket. Die Zutatenliste muss lesbar sein.",
            "examples": [
              "beispiel-lavendel-etikett.jpg"
            ]
          },
          "siegel_name": {
            "title": "Siegel (Name)",
            "description": "Nur Siegel, die auf genau diesem Produkt stehen. Mehrere mit Semikolon trennen. Im JSON auch als Liste möglich.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "siegel_nummer": {
            "title": "Lizenz- / Registriernummer je Siegel",
            "description": "In derselben Reihenfolge wie die Siegel, mit Semikolon getrennt. Im JSON auch als Liste möglich.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "siegel_nachweis": {
            "title": "Nachweis je Siegel (Link oder Dateiname)",
            "description": "Am besten der Link zum Eintrag in der Datenbank des Siegelgebers, sonst Dateiname des Zertifikats. Im JSON auch als Liste möglich.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "sdb_datei": {
            "type": "string",
            "title": "Sicherheitsdatenblatt (Dateiname)",
            "description": "Pflicht bei Haushalt, Reinigung, Garten, Bioziden und allen Produkten mit Gefahrenkennzeichnung."
          },
          "sdb_url": {
            "type": "string",
            "title": "Sicherheitsdatenblatt online (Link)",
            "description": "Falls öffentlich abrufbar.",
            "format": "uri"
          },
          "sdb_datum": {
            "type": "string",
            "title": "Sicherheitsdatenblatt Datum / Version",
            "description": "Überarbeitungsdatum JJJJ-MM-TT.",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$"
          },
          "h_saetze": {
            "title": "H-Sätze",
            "description": "Laut Etikett bzw. SDB Abschnitt 2.2, mit Semikolon getrennt. Nicht eingestuft: \"keine\". Im JSON auch als Liste möglich.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "euh_saetze": {
            "title": "EUH-Sätze",
            "description": "z. B. EUH208, mit Semikolon getrennt. Im JSON auch als Liste möglich.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "signalwort": {
            "type": "string",
            "title": "Signalwort",
            "description": "Achtung, Gefahr oder keins.",
            "enum": [
              "keins",
              "Achtung",
              "Gefahr"
            ]
          },
          "shop_url": {
            "type": "string",
            "title": "Bezugsquelle (Shop-Link)",
            "description": "Wo man das Produkt kaufen kann. Wir verlinken nur, wenn es passt; ein Anspruch auf Verlinkung besteht nicht.",
            "examples": [
              "https://example.org/shop/lavendel"
            ],
            "format": "uri"
          },
          "produktfoto": {
            "type": "string",
            "title": "Produktfoto (Dateiname, optional)",
            "description": "Freigestelltes Packshot-Foto, mindestens 1200 px.",
            "examples": [
              "beispiel-lavendel-packshot.jpg"
            ]
          },
          "foto_rechteinhaber": {
            "type": "string",
            "title": "Foto: Urheber / Rechteinhaber",
            "description": "Wer hat das Foto gemacht bzw. hält die Rechte?",
            "examples": [
              "Beispiel-Manufaktur GbR"
            ]
          },
          "foto_lizenz": {
            "type": "string",
            "title": "Foto: Nutzungsrecht",
            "description": "Auswahl aus der Liste.",
            "examples": [
              "Website und Social Media"
            ],
            "enum": [
              "Website und Social Media",
              "nur Website",
              "kein Foto"
            ]
          },
          "foto_bestaetigung": {
            "type": "string",
            "title": "Bildrechte-Erklärung bestätigt",
            "description": "\"ja\" = Sie bestätigen die Bildrechte-Erklärung aus dem Einsendepaket.",
            "examples": [
              "ja"
            ],
            "enum": [
              "ja",
              "nein"
            ]
          },
          "herstellerangaben": {
            "title": "Werbeaussagen (wörtlich, optional)",
            "description": "Aussagen von der Packung, mit Semikolon getrennt. Wir zeigen sie nur als Herstellerangabe. Im JSON auch als Liste möglich.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            ]
          },
          "probe": {
            "type": "string",
            "title": "Produktprobe für Erfahrungsbericht",
            "description": "\"ja\", wenn Sie eine Probe schicken möchten. Freiwillig, ohne Einfluss auf den Score.",
            "examples": [
              "ja"
            ],
            "enum": [
              "ja",
              "nein"
            ]
          },
          "hinweise": {
            "type": "string",
            "title": "Anmerkungen",
            "description": "Alles, was wir wissen sollten."
          }
        }
      }
    }
  }
}
