====== Produkte und Leistungen ======
**B2Base · 1.0.0-draft.1 · Projektentwurf**
Katalogeinträge mit mehrsprachigen Bezeichnungen, Kennungen, Mengen und optionalem Preis.
[[schemes:scheme|Bibliothek]] · [[schemes:products|Produkte und Leistungen]] · [[schemes:principles|Internationale Grundregeln]]
===== Direkt verwenden =====
[[b2schema>1.0.0-draft.1/products/product.schema.json|Austauschschema (JSON)]] · [[b2schema>1.0.0-draft.1/products/product.editor.schema.json|Schema für den Designer]] · [[b2schema>1.0.0-draft.1/products/product.examples.json|Beispieldaten]]
**Austauschschema:** vollständige Strukturprüfung mit JSON Schema 2020-12. **Designer-Fassung:** gleiche Datenfelder mit reduzierten Strukturregeln zur Feldübernahme. [[:guidelines#im_workflowdesigner_verwenden|Anleitung und Grenzen]]
===== Felder im Überblick =====
^ Feld ^ Typ ^ Pflicht im Modul ^ Bedeutung ^
| ''id'' | string | Ja | Katalogkennung. |
| ''kind'' | string | Ja | Art des Angebots. |
| ''names'' | array | Ja | Bezeichnungen mit Sprache. |
| ''identifiers'' | array | Nein | Optionale Kennungen einschließlich System. |
| ''quantity'' | object | Nein | Menge einer Verkaufseinheit. |
| ''price'' | object | Nein | Optionaler Preis; Steuer- und Preisbedingungen im Geschäftsprofil festlegen. |
| ''manufacturer'' | object | Nein | Verweis auf eine separat gespeicherte Person oder juristische Person; kein JSON-Schema-Verweis. |
| ''extensions'' | object | Nein | Vereinbarte Erweiterungen; Schlüssel als absolute URI des Herausgebers. Keine stillschweigende Änderung von Kernfeldern. |
Pflichtangaben gelten für das jeweilige Objekt, wenn dieses Modul verwendet wird. Zusätzliche Alternativen und Statusregeln stehen im Austauschschema. Optionale Felder weglassen, wenn sie unbekannt oder nicht anwendbar sind; ein leeres Pflichtfeld ist kein gültiger Ersatz.
===== International richtig einsetzen =====
* Produktkennung, Lagerbestand und einzelne Bestellung sind verschiedene Datensätze. Dieses Modul beschreibt den Katalogeintrag.
* quantity ist die Menge einer Verkaufseinheit, nicht der Lagerbestand. Preis, Währung und Steuerbehandlung nicht implizit vermischen.
* Globale Produktnummern nur mit dem tatsächlich verwendeten Kennungssystem führen; keine Prüfziffernprüfung durch das allgemeine Identifier-Modul.
===== Gültige Beispiele =====
Alle Beispiele sind synthetisch. Sie werden mit dem mitgelieferten Schema geprüft; daraus folgt keine fachliche Echtheit oder externe Erreichbarkeit.
==== Beispiel 1 ====
{
"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"
}
}
===== Umstellung aus dem bisherigen Wiki =====
Die bisher nur angekündigte Kategorie erhält einen ersten konkreten Standard.
[[schemes:migration|Änderungsübersicht und Migrationsregeln]]
===== Vollständiges Schema =====
Die Datei ist eigenständig: verwendete Bausteine sind unter ''$defs'' eingebettet, Referenzen bleiben lokal. ''$id'' ist die kanonische Kennung. Die Downloads oben verwenden den aktuellen Server; eine Veröffentlichung unter der kanonischen Domain ist damit nicht behauptet.
{
"$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"
}
}
]
}
===== Quellen und Abgrenzung =====
* [[https://www.rfc-editor.org/rfc/rfc5646.html|IETF RFC 5646: BCP-47-Sprachtags]]
* [[https://unece.org/code-list-recommendations|UN/CEFACT: Code-Listen und Recommendation 20]]
* [[https://www.six-group.com/en/products-services/financial-information/market-reference-data/data-standards.html|SIX: ISO-4217-Währungen und Nachkommastellen]]
Quellen geprüft am 8. September 2026. Die B2Base-Felder und ihre Kombination sind ein eigener Entwurf. Code-Register, nationale Regeln, Echtheit, Zeitfolgen und Referenzziele benötigen die im jeweiligen Verfahren vereinbarten Zusatzprüfungen.
[[schemes:scheme|Zur Bibliothek]] · [[:guidelines|Integration]] · [[:faq|Häufige Fragen]]