Preisreferenz
Das Verzeichnis Lieferbarer Bücher (VLB) ist die allgemein gültige Referenzdatenbank für die gebundenen Ladenpreise aller lieferbaren deutschen Bücher. Das ist seit Juni 2011 in der Verkehrsordnung für den Buchhandel des Börsenvereins des Deutschen Buchhandels geregelt, die um eine entsprechende Bestimmung erweitert wurde.
Mit der Änderung der Verkehrsordnung sind die von den Verlagen im VLB angegebenen Preise die allgemein gültigen.
Mit dem Preisreferenzexport stellen wir Ihnen somit immer die Preise zur Verfügung, die nach den Regeln der Buchpreisbindung verbindlich sind.
Inhalt und Format
Preisangaben
Folgende Inhalte finden sich in der VLB-Preisreferenz.
Enthaltene Datensätze
Titel die neu im VLB sind (INSERT)
lieferbare und vergriffene Titel mit einer Preiskorrektur am EUR-DE, EUR-AT oder CHF (UPDATE)
aus dem VLB gelöschte Titel (DELETE)
Enthaltene Länder / Währungen
Deutschland (EUR-DE)
Österreich (EUR-AT)
Schweiz (CHF)
Enthaltene Preisarten (jeweils gebunden und ungebunden) sind:
Subskriptionspreise
Ladenpreise, bei denen es sich nicht um Subskriptionspreise handelt
Sonderpreise, wie z.B. reduzierte Preise mit zusätzlicher Abnahmeverpflichtung
Die konkreten Preistypen finden Sie in der Spezifikation der Felder.
Dateiaufbau
Die VLB-Preisreferenz wird im XML-Format im UTF-8 Zeichensatz bereitgestellt.
Die VLB-Preisreferenz teilt sich aufgrund unterschiedlicher Nachnutzungsszenarien, aber auch aufgrund seines Umfangs in die zwei nachfolgenden Teilbereiche auf:
- aktive Titel: Vorankündigungen, lieferbare Produkte etc.
- archivierte Titel: Vergriffen-Meldungen, vom Kauf zurückgezogen etc.
Da Händler teilweise nur Interesse an lieferbaren Produkten haben, stellt das VLB den Gesamtabzug sowie die Tagesupdates der VLB-Preisreferenz getrennt nach aktiven und archivierten Titeln zur Verfügung.
Preisreferenz-Feed für aktive Titel
Action=INSERT
- Erstmeldungen an das VLB: umfasst ausschließlich Vorankündigungen (noch nicht lieferbar) oder lieferbare Titel, da die Erstmeldung von archivierten Titeln an das VLB unzulässig ist
- ein Titel, der mit Action DELETE gekennzeichnet war und anschließend erneut an das VLB gemeldet wird, entspricht einer Erstmeldung und wird somit erneut mit Action INSERT gekennzeichnet
Action=UPDATE (Preisänderung)
- Aktualisierungen aktiver Titel
- Archivierungsmeldung: Änderung der Lieferbarkeit von aktiv zu archiviert (Titel ist nicht mehr verfügbar, vgl. betreffende ONIX-Codes)
- Reaktivierung: Änderung der Lieferbarkeit von archiviert zu aktiv (Titel ist wieder verfügbar)
Action=DELETE (Produktlöschung)
- enthält alle Löschungen für aktive und inaktive Produkte
- umfasst Titel, die aus dem VLB und der Plattform des Datenempfängers gelöscht werden müssen
Preisreferenz-Feed für archivierte Titel
Action=UPDATE (Preisänderung)
- Aktualisierungen archivierter Titel
- Archivierungsmeldung: Änderung der Lieferbarkeit von aktiv zu archiviert (Titel ist nicht mehr verfügbar, vgl. betreffende ONIX-Codes)
- Reaktivierung. Änderung der Lieferbarkeit von archiviert zu aktiv (Titel ist wieder verfügbar)
Bitte beachten Sie:
- Seit Januar 2018 werden Produkte mit dem Lieferbarkeitsstatus Cancelled (j396=01) mit der Action UPDATE gekennzeichnet.
- Die Action DELETE kennzeichnet ausschließlich Produkte, die aus außerordentlichen Gründen (z.B. rechtlicher Natur) aus dem VLB entfernt werden müssen. Diese Titel dürfen anschließend auch nicht mehr in Plattformen von VLB-Datenabnehmern zur Anzeige gebracht werden.
- Archivierungen und Reaktivierungen werden immer redundant im aktiven und archivierten Bestand gemeldet, damit Händler, die nur einen der beiden Bestände verarbeiten über die Zustandsänderung in Kenntnis gesetzt werden.
Spezifikation der Felder
Informationen zu einzelnen Produkten bzw. Datensätzen sind jeweils in product-Elementen abgelegt. Sämtliche Datensätze sind im Root-Knoten (products) gekapselt.
<products> <product>...</product> <product>...</product> ... </products>
Der einzelne Datensatz (product) ist in drei Bereiche unterteilt. Diese finden sich direkt auf der Elementebene unter dem product-Element.
- Elemente zu allgemeinen Titelinformationen, wie ausgeführte Aktion, ISBN-13, VLB Record ID, Datum der letzten Preiskorrektur
- Informationen zur Preisbindung EUR-DE und EUR-AT
- Preisangabe für D-A-CH-Preise eines Produktes
Titelinformationen
Element | WH | Beschreibung |
---|---|---|
action | 1 | auf dem Produkt ausgeführte Aktion
|
isbn | 0..1 | ISBN-13
|
ean | 0..1 | GTIN-13
|
vlb_record_id |
1 |
VLB-Record-ID
|
receiving_updates | 1 | Gibt an, ob ein Produkt im VLB noch Updates erhält
|
is_digital | 1 | Produkt ist digital (abhängig von Produktform)
|
productform | 1 | kodierte Produktform
|
title | 1 | Produkttitel ohne Untertitel |
Nachfolgend wird gezeigt, wie generelle Titelinformationen in einem Datensatz der Preisreferenz eingebettet sind.
XML
-
<product>
<action>UPDATE</action>
<isbn>9783958433915</isbn>
<vlb_record_id>4cb283803f534041841ea7a740d36039</vlb_record_id>
<receiving_updates>TRUE</receiving_updates>
<is_digital>FALSE</is_digital>
<productform>BB</productform>
<title>IncrediBuilds: Dobby der Hauself</title>
...
</product>
Preisbindung
Element | WH | Beschreibung |
---|---|---|
fixed_retailprice | 1 | Composite, das Informationen zur Preisbindung für EUR-DE und EUR-AT beinhaltet |
fixedprice_de | 0..1 | Produkt besitzt gebundenen Ladenpreis für EUR-DE
|
price_de_effective_until | 0..1 | Datum der Ladenpreisaufhebung EUR-DE
|
fixedprice_at | 0..1 | Produkt besitzt gebundenen Ladenpreis für EUR-AT
|
last_price_mod | 1 | Datum der letzten Preiskorrektur an mindestestens einem der DACH-Preise |
Das nachfolgende Beispiel zeigt, woran erkannt wird, dass EUR-DE und EUR-AT der Ladenpreisbindung unterliegen. Zusätzlich wird für EUR-DE das Datum der Ladenpreisaufhebung bekannt gemacht.
XML
-
<product>
...
<fixed_retailprice>
<fixedprice_de>TRUE</fixedprice_de>
<price_de_effective_until>20231224</price_de_effective_until>
<fixedprice_at>TRUE</fixedprice_at>
</fixed_retailprice>
<last_price_mod>20220505</last_price_mod>
...
</product>
Preisangabe
Element | WH | Beschreibung |
---|---|---|
price | 1..n | Composite, das alle Angaben zu einer Preisangabe kapselt
|
market | 1 | Länderkennzeichen (nur für die D-A-CH Währungen)
|
pricetype | 1 | Preistyp
|
no_of_pieces | 0..1 | Mindestbestellmenge
|
pricetext | 0..1 | Preistext
|
price_effective_from | 0..1 | gültig-ab-Datum
|
price_effective_until | 0..1 | gültig-bis-Datum
|
is_calculated | 1 | Preis wurde vom VLB errechnet
|
is_provisional | 1 | vorläufige ungefähre Preisangabe (ca.-Preis)
|
amount | 1 | Betrag
|
currency | 1 | Währung
|
Das nachfolgende Beispiel zeigt für EUR-DE einen gebundenen Ladenpreis, auf den ein unverbindlicher Ladenpreis folgt (Ladenpreisaufhebung). Der Betrag bleibt im Beispiel unverändert, kann aber auch geändert werden.
XML
-
<product>
...
<price>
<market>DE</market>
<pricetype>10</pricetype>
<no_of_pieces>1</no_of_pieces>
<price_effective_until>20190306</price_effective_until>
<is_calculated>FALSE</is_calculated>
<is_provisional>FALSE</is_provisional>
<amount>9.99</amount>
<currency>EUR</currency>
<tax_component>
...
</tax_component>
</price>
<price>
<market>DE</market>
<pricetype>20</pricetype>
<no_of_pieces>1</no_of_pieces>
<price_effective_from>20190307</price_effective_from>
<is_calculated>FALSE</is_calculated>
<is_provisional>FALSE</is_provisional>
<amount>9.99</amount>
<currency>EUR</currency>
<tax_component>
...
</tax_component>
</price>
</product>
Mehrwertsteuer
Die Mehrwertsteuerangabe wird für jeden Preis im tax_component-Composite angegeben. Sprich in einer Preisangabe gibt es genau ein tax_component.
Für Produkte mit Mehrwertsteuer-Splitting (Bundle) wird das tax_component pro Bestandteil angegeben. Folglich enthält eine Preisangabe in diesen Produkten mehrere tax_component-Composites.
Element | WH | Beschreibung |
---|---|---|
tax_component | 1..n | Composite, das alle Steuerinformationen des Produktes kapselt
|
component_id_gtin | 0..1 |
|
component_id_prop | 0..1 |
|
component_title | 1 |
|
component_productform | 1 |
|
percent | 1 | MwSt.-Satz in Prozent |
.type | 1 | Produkttyp
|
share | 1 |
|
taxable_amount | 0..1 |
|
tax_amount | 0..1 |
|
Für Produkte ohne Mehrwertsteuer-Splitting (Nicht-Bundle) wird die Mehrwertsteuer wie folgt angegeben.
XML
-
<product>
...
<price>
...
<tax_component>
<percent>7.00</percent>
<type>1</type>
</tax_component>
</price>
</product>
Für mehrteilige Produkte mit Mehrwertsteuer-Splitting (Bundle) finden Sie ausführliche Beispiele in den nachfolgenden Anwendungsfällen.
XML
-
<product>
...
<price>
...
<tax_component>
<component_id_gtin>9783958433915</component_id_gtin>
<component_productform>BB</component_productform>
<component_title>IncrediBuilds: Dobby der Hauself</component_title>
<percent>7.00</percent>
<type>1</type>
<share>9.99</share>
</tax_component>
</price>
</product>
Rückruf
Wenn bei einem Titel ein Rückruf vorhanden ist, wird dies als <recall> ausgegeben.
Element | WH | Beschreibung |
recall_date | 0..1 | Das vom Verlag angegebene Datum |
recall_type | 0..n | Die Bedingungen für die Rücksendung:
|
recall_text | 0..1 | Freitext für den Verlag. Hier können weitere Details, Bedingungen oder Hinweise stehen. |
Hier ein Beispiel, wie ein recall-composite im Preisreferenz-Feed aufgebaut ist:
XML
-
<recall>
<recall_date>20240101</recall_date>
<recall_type>03</recall_type>
<recall_text>Lorem Ipsum</recall_text>
</recall>
Typische Anwendungsfälle
Zukünftige Preise
Wenn für ein Land ein Preis angegeben wurde, der erst zu einem gewissen Datum in Kraft tritt, ist für dieses Land der aktuelle sowie der zukünftige Preis im Preisreferenz-Datensatz zum Zeitpunkt der Preisbekanntmachung zu finden. Die Gültigkeitsdauer der Preise wird mittels price_effective_from und price_effective_until definiert.
XML
-
...
<price>
<market>DE</market>
<pricetype>10</pricetype>
<!-- gültig bis Datum - bisheriger Preis -->
<price_effective_until>20201015</price_effective_until>
<is_calculated>FALSE</is_calculated><is_provisional>FALSE</is_provisional>
<amount>9.80</amount>
<currency>EUR</currency>
<tax_component>
...
</tax_component>
</price>
<price>
<market>DE</market>
<pricetype>10</pricetype>
<!-- gültig ab Datum - zukünftiger Preis -->
<price_effective_from>20201016</price_effective_from>
<is_calculated>FALSE</is_calculated><is_provisional>FALSE</is_provisional>
<amount>10.80</amount>
<currency>EUR</currency>
<tax_component>
...
</tax_component>
</price
...
Bitte beachten Sie: An dem Tag, an dem der zukünftige Preis gültig wird, wird das Produkt erneut in der Preisreferenz sein. Zu diesem Zeitpunkt wird nur der gültige Preis darin zu finden sein, insofern keine weiteren zukünftigen Preise bekannt gemacht wurden.
Änderung am aktuellen Preis
Dieser Fall tritt ein, wenn wie im letzten Absatz beschrieben, ein zuvor gemeldeter zukünftiger Preis sein gültig-ab-Datum erreicht.
Des Weiteren kann es sich um Korrekturen fälschlich eingetragener Preise handeln. Dies ist kein Regelfall, da er gegen die Empfehlungen zu Vorlaufzeiten für Preisänderungen verstößt.
In diesen Fällen wird lediglich der Preis ohne die Angabe zukünftiger Preise im Datensatz ausgegeben, insofern keine weiteren zukünftigen Preise bekannt gemacht wurden.
XML
-
...
<price>
<market>DE</market>
<pricetype>20</pricetype>
<is_calculated>FALSE</is_calculated>
<is_provisional>FALSE</is_provisional>
<amount>9.80</amount>
<currency>EUR</currency>
<tax_component>
...
</tax_component>
</price>
...
Ladenpreisaufhebung
In jedem Datensatz ist festgehalten, ob für das Produkt in Deutschland (fixedprice_de) bzw. in Österreich (fixedprice_at) aktuell eine Ladenpreisbindung besteht.
Des Weiteren wird ausgewiesen, wenn das Produkt zu einem feststehendem Termin von der deutschen Ladenpreisbindung befreit werden soll (price_de_effective_until). Die Aufhebung der Ladenpreisbindung ist immer mit der Umstellung von einem gebundenem zu einem ungebundenem Ladenpreis (UVP-Preis) verbunden.
XML
-
...
<fixed_retailprice>
<fixedprice_de>TRUE</fixedprice_de>
<price_de_effective_until>20201016</price_de_effective_until>
</fixed_retailprice>
...
<price>
<market>DE</market>
<pricetype>10</pricetype>
<!-- gültig bis Datum – bisheriger Preis -->
<price_effective_until>20201015</price_effective_until>
...</price>
<price>
<market>DE</market>
<pricetype>20</pricetype>
<!-- gültig ab Datum zukünftiger Preis -->
<price_effective_from>20201016</price_effective_from>
...</price>
...
Bundle mit MwSt-Splitting
Für mehrteilige Produkte wird neben der Angabe zum Paketpreis immer Auskunft zu den enthaltenen Teilprodukten gegeben. Hierfür wird im price das Element tax_component für jedes enthaltene Teilprodukt angegeben. Zu beachten ist, dass für zweiteilige Bundles proprietäre IDs als Identifier der Teilprodukte component_id_prop angegeben werden können. Dies ist in mehrteiligen Bundles nicht möglich, da hier immer eine GTIN component_id_gtin angegeben sein muss
Beispiel: zweiteiliges Bundle mit proprietären IIDs
XML
-
...
<price>
<market>DE</market>
<pricetype>10</pricetype>
<no_of_pieces>1</no_of_pieces>
<is_calculated>FALSE</is_calculated>
<is_provisional>FALSE</is_provisional>
<!-- Summe von <share> der Teilprodukte -->
<amount>22.99</amount>
<!-- 1. Bestandteil des Bundles --><currency>EUR</currency>
<tax_component>
<component_id_prop>9783765781322-1</component_id_prop><component_productform>BC</component_productform>
<component_title>gedrucktes Buch im zweiteiligem Bundle</component_title>
<percent>7.00</percent>
<type>1</type>
<share>18.39</share>
<taxable_amount>17.19</taxable_amount>
<tax_amount>1.2</tax_amount>
</tax_component>
<!-- 2. Bestandteil des Bundles -->
<tax_component>
<component_id_prop>9783765781322-2</component_id_prop><component_productform>DG</component_productform>
<component_title>E-Book im zweiteiligem Bundle</component_title>
<percent>19.00</percent>
<type>2</type>
<share>4.60</share>
<taxable_amount>3.87</taxable_amount>
<tax_amount>0.73</tax_amount>
</tax_component>
</price>
...
Beispiel: mehrteiliges Bundle
XML
-
...
<price>
<market>DE</market>
<pricetype>10</pricetype>
<no_of_pieces>1</no_of_pieces>
<is_calculated>FALSE</is_calculated>
<is_provisional>FALSE</is_provisional>
<!-- Summe von <share> der Teilprodukte -->
<amount>32.99</amount>
<currency>EUR</currency><!-- 1. Bestandteil des Bundles -->
<tax_component>
<component_id_gtin>9783765781322</component_id_gtin><component_productform>BC</component_productform>
<component_title>gedrucktes Buch</component_title>
<percent>7.00</percent>
<type>1</type>
<share>18.39</share>
<taxable_amount>17.19</taxable_amount>
<tax_amount>1.2</tax_amount>
</tax_component>
<!-- 2. Bestandteil des Bundles -->
<tax_component>
<component_id_gtin>9783765780998<component_id_gtin><component_productform>DG</component_productform>
<component_title>E-Book</component_title>
<percent>19.00</percent>
<type>2</type>
<share>4.60</share>
<taxable_amount>3.87</taxable_amount>
<tax_amount>0.73</tax_amount>
</tax_component>
<!-- 3. Bestandteil des Bundles -->
<tax_component>
<component_id_gtin>9783765782015<component_id_gtin><component_productform>DH</component_productform>
<component_title>Online-Zugang</component_title>
<percent>19.00</percent>
<type>2</type>
<share>10.00</share>
<taxable_amount>8.40</taxable_amount>
<tax_amount>1.60</tax_amount>
</tax_component>
</price>
...
Produkte ohne Preisangabe
Produkte ohne Preisangabe erhalten im price-Knoten nur die Angabe des Marktes und ein sogenannten unpriced_item_type.
Element | WH | Beschreibung |
---|---|---|
market | 1 | Länderkennzeichen (nur für die D-A-CH-Region) |
unpriced_item_type | 1 | Grund für die nicht vorhandene Preisangabe
|
Das folgende Beispiel zeigt ein kostenloses Produkt in allen drei DACH-Märkten
XML
-
<product>
...
<price>
<market>AT</market>
<unpriced_item_type>01</unpriced_item_type>
</price>
<price>
<market>DE</market>
<unpriced_item_type>01</unpriced_item_type>
<price>
<market>CH</market>
<unpriced_item_type>01</unpriced_item_type>
</price>
...
</product>
Bereitstellung auf FTP-Server
Das VLB stellt einmal im Vierteljahr einen Preisrefenz-Export aller im VLB vorhandenen Produkte bereit. Dieser steht jeweils zu Beginn der Monate Februar, Mai, August und November eines Jahres bereit. Ein Gesamtabzug dient der Erstbefüllung Ihrer Datenbank. Auch kann der Gesamtabzug genutzt werden, um ein Recovery in Ihrer Anwendung zu ermöglichen.
Täglich von Montag bis Sonntag (inkl. Feiertage) werden alle Neuzugänge, Updates und Löschungen in zusätzlichen Tagesupdates zur Verfügung gestellt. Nach Erstbefüllung Ihrer Datenbank ist es nur noch notwendig, die Tagesupdates einzuspielen. Da Tagesupdates unter Umständen sehr umfangreich sein können, bietet das VLB die Tagesexporte auch in gesplitteten Teilpaketen an. Wie Sie zwischen gesplitteten und vollständigen Feeds unterscheiden, entnehmen Sie bitte der Übersicht in der folgenden Tabelle.
Bitte beachten Sie:
- Titel, die archiviert bzw. reaktiviert wurden, sind in den Tagesupdates für archivierte und aktive Titel enthalten.
- Tagesupdates enthalten sämtliche eingegangenen Änderungen ab Erstellung des Tagesupdates vom Vortag und bis zur Erstellung des aktuellen Tagesupdates.
Die nachfolgende Tabelle zeigt, wo Sie die jeweiligen Daten-Feeds auf dem VLB-FTP-Server finden können. Wie Sie auf diesen zugreifen, erfahren Sie hier:
Nach der vollständigen Erstellung einer ZIP-Datei wird im zugehörigen FTP-Verzeichnis eine Kontrolldatei mit dem Namensmuster yyyymmdd.ok erzeugt. Diese Datei signalisiert, dass der Datentransfer abgeschlossen ist. Solange diese Kontrolldatei fehlt, ist von einem Download der ZIP-Datei abzusehen.
Aktive Titel
Archivierte Titel
Danke für die Rückmeldung