{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://b2base.eu/schemas/1.0.0-draft.1/products/product.schema.json", "title": "Produkte und Leistungen", "$comment": "B2Base 1.0.0-draft.1. Projektentwurf, kein durch ISO oder andere Normungsgremien verabschiedeter Standard.", "type": "object", "description": "Ein Produkt oder eine Leistung.", "properties": { "id": { "type": "string", "minLength": 1, "description": "Katalogkennung.", "format": "uri" }, "kind": { "type": "string", "minLength": 1, "description": "Art des Angebots.", "enum": [ "product", "service" ] }, "names": { "type": "array", "description": "Bezeichnungen mit Sprache.", "items": { "$ref": "#/$defs/LocalizedText" }, "minItems": 1 }, "identifiers": { "type": "array", "description": "Optionale Kennungen einschließlich System.", "items": { "$ref": "#/$defs/Identifier" } }, "quantity": { "$ref": "#/$defs/Quantity", "description": "Menge einer Verkaufseinheit." }, "price": { "$ref": "#/$defs/Money", "description": "Optionaler Preis; Steuer- und Preisbedingungen im Geschäftsprofil festlegen." }, "manufacturer": { "$ref": "#/$defs/PartyRef" }, "extensions": { "type": "object", "description": "Vereinbarte Erweiterungen; Schlüssel als absolute URI des Herausgebers. Keine stillschweigende Änderung von Kernfeldern.", "properties": {}, "additionalProperties": true, "propertyNames": { "format": "uri" } } }, "required": [ "id", "kind", "names" ], "additionalProperties": false, "$defs": { "LocalizedText": { "type": "object", "description": "Text mit expliziter Sprache; Originalschreibweise erhalten.", "properties": { "text": { "type": "string", "minLength": 1, "description": "Inhalt in Unicode." }, "language": { "$ref": "#/$defs/LanguageTag" } }, "required": [ "text", "language" ], "additionalProperties": false }, "LanguageTag": { "type": "string", "minLength": 1, "description": "BCP-47-Sprachtag, etwa de, zh-Hant-TW, sr-Latn oder x-internal. Das Muster prüft nur die Grundform, nicht Registrierung oder alle BCP-47-Regeln.", "pattern": "^[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*$" }, "Identifier": { "type": "object", "description": "Kennung zusammen mit ihrem Namensraum. Führende Nullen, Trennzeichen und Groß-/Kleinschreibung erhalten.", "properties": { "value": { "type": "string", "minLength": 1, "description": "Kennung als Text." }, "scheme": { "type": "string", "minLength": 1, "description": "URI des Kennungssystems; kein allgemeines weltweites Nummernformat.", "format": "uri" }, "type": { "type": "string", "minLength": 1, "description": "Optionale fachliche Bezeichnung." }, "issuer": { "$ref": "#/$defs/Issuer" }, "country": { "$ref": "#/$defs/CountryCode" }, "validFrom": { "type": "string", "minLength": 1, "description": "Beginn der angegebenen Gültigkeit.", "format": "date" }, "validUntil": { "type": "string", "minLength": 1, "description": "Letzter Gültigkeitstag, falls bekannt.", "format": "date" } }, "required": [ "value", "scheme" ], "additionalProperties": false }, "Issuer": { "type": "object", "description": "Aussteller einschließlich internationaler Organisationen.", "properties": { "authority": { "type": "string", "minLength": 1, "description": "Originalname der Behörde oder Organisation." }, "id": { "type": "string", "minLength": 1, "description": "Stabile Kennung des Ausstellers.", "format": "uri" }, "country": { "$ref": "#/$defs/CountryCode", "description": "Optional: Land des Ausstellers; keine erfundene Länderkennung für internationale Organisationen." }, "region": { "type": "string", "minLength": 1, "description": "Optionale Verwaltungseinheit oder Zuständigkeitsbezeichnung." } }, "required": [ "authority" ], "additionalProperties": false }, "CountryCode": { "type": "string", "minLength": 1, "description": "ISO 3166-1 Alpha-2, Großbuchstaben. Das Muster prüft nur die Schreibweise; zugewiesenen Code und Gültigkeitszeitpunkt gesondert prüfen.", "pattern": "^[A-Z]{2}$" }, "Quantity": { "type": "object", "description": "Dezimalwert mit maschinenlesbarer Einheit; die Einheit muss zum Messgegenstand passen.", "properties": { "value": { "type": "string", "minLength": 1, "description": "Dezimaltext ohne Gruppierung oder Exponent.", "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" }, "unitCode": { "type": "string", "minLength": 1, "description": "Code aus dem angegebenen Einheitensystem, etwa MTR, KGM oder MTK nach UN/CEFACT Recommendation 20." }, "unitScheme": { "type": "string", "minLength": 1, "description": "URI des Einheitensystems; Empfänger muss das System unterstützen.", "format": "uri" } }, "required": [ "value", "unitCode", "unitScheme" ], "additionalProperties": false }, "Money": { "type": "object", "description": "Exakter Geldbetrag mit expliziter Währung; Dezimaltext verhindert binäre Rundung beim Transport.", "properties": { "amount": { "type": "string", "minLength": 1, "description": "Vorzeichen erlaubt; Dezimalpunkt, keine Tausendertrennzeichen und kein Exponent.", "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?$" }, "currency": { "$ref": "#/$defs/CurrencyCode" } }, "required": [ "amount", "currency" ], "additionalProperties": false }, "CurrencyCode": { "type": "string", "minLength": 1, "description": "ISO-4217-Währungscode; Schreibweise allein belegt weder Zuweisung noch historische Gültigkeit.", "pattern": "^[A-Z]{3}$" }, "PartyRef": { "type": "object", "description": "Verweis auf eine separat gespeicherte Person oder juristische Person; kein JSON-Schema-Verweis.", "properties": { "entityType": { "type": "string", "minLength": 1, "description": "Art der referenzierten Einheit.", "enum": [ "person", "legalEntity" ] }, "id": { "type": "string", "minLength": 1, "description": "Stabile absolute URI oder URN des Datensatzes, nicht dessen Name.", "format": "uri" }, "name": { "type": "string", "minLength": 1, "description": "Optionale Anzeige; nicht als Identitätsschlüssel verwenden." } }, "required": [ "entityType", "id" ], "additionalProperties": false } }, "examples": [ { "id": "urn:example:product:42", "kind": "product", "names": [ { "text": "Grüner Tee", "language": "de" }, { "text": "緑茶", "language": "ja" } ], "quantity": { "value": "0.1", "unitCode": "KGM", "unitScheme": "https://unece.org/code-list-recommendations" }, "price": { "amount": "8.50", "currency": "EUR" } } ] }