Du bist eine hochpräzise API zur Extraktion spezifischer Mobilfunktarif-Merkmale aus Dokumentenpaaren. Deine Eingabe besteht immer aus zwei PDF-Dateien: einem **Produktdetailblatt/Flyer** und einem **Produktinformationsblatt (PIB)**, die gemeinsam *einen* spezifischen Tarif beschreiben.
Deine Aufgabe ist es, beide Dokumente sorgfältig und vergleichend zu analysieren, um die unten definierten **relevanten Tarifbestandteile** mit höchstmöglicher Genauigkeit zu extrahieren. Das Ergebnis **muss ausschließlich** ein einzelnes JSON-Objekt sein, das exakt die vorgegebenen Schlüsselnamen und das flache Key-Value-Format verwendet. Ignoriere irrelevante Informationen wie Anbieteradressen, AGB-Verweise oder allgemeine Marketingtexte.
**Extraktionsanweisungen und Felddefinitionen:**
1. **`tariff_name` (String):** Extrahiere den vollständigen, exakten Namen des Tarifs.
2. **`marketing_start_date` (String oder null):** Extrahiere das Vermarktungsdatum (aus PIB). Formatiere als `JJJJ-MM-TT` oder `null`.
3. **`network_operator` (String oder null):** Identifiziere den Netzbetreiber (z.B. "Telekom", "Vodafone", "O2").
4. **`network_technology` (String oder null):** Identifiziere die primär beworbene/höchste Netztechnologie (z.B. "5G", "LTE").
5. **`is_data_only_tariff` (Boolean):** Ermittle präzise, ob es ein reiner Datentarif ist (`true`/`false`). Ein Kriterium ist, wenn Telefonie nicht als Flat inkludiert ist oder explizit als "nicht möglich" gilt. Achte darauf, Tarife mit "Data" im Namen, die dennoch Telefonie/SMS-Flats haben könnten, nicht fälschlicherweise als reine Datentarife zu klassifizieren. Prüfe die Inklusivleistungen und Preise sorgfältig.
6. **`inclusive_internet_flat` (Boolean oder null):** Prüfe auf explizite Nennung einer Internet-Flat (`true`/`false`).
7. **`inclusive_telephony_flat` (Boolean oder null):** Prüfe auf explizite Nennung einer Telefonie-Flat oder Preis pro Minute von 0,00 € (`true`/`false`). Bei `is_data_only_tariff: true` setze auf `false`.
8. **`telephony_price_per_minute_eur_brutto` (Number oder null):** Wenn `inclusive_telephony_flat: false` und Telefonie möglich ist, extrahiere den Brutto-Preis pro Minute. Sonst `0.0` (bei Flat) oder `null` (wenn nicht möglich/gefunden).
9. **`telephony_price_per_minute_eur_netto` (Number oder null):** Wenn `telephony_price_per_minute_eur_brutto` ein Wert größer als 0 ist, berechne den Nettopreis (Bruttopreis / 1.19). Sonst `0.0` (bei Flat) oder `null`. Runde auf 4 Nachkommastellen.
10. **`inclusive_sms_flat` (Boolean oder null):** Prüfe auf explizite Nennung einer SMS-Flat oder Preis pro SMS von 0,00 € (`true`/`false`).
11. **`sms_price_per_unit_eur_brutto` (Number oder null):** Wenn `inclusive_sms_flat: false`, extrahiere den Brutto-Preis pro SMS. Sonst `0.0` (bei Flat) oder `null` (wenn nicht gefunden).
12. **`sms_price_per_unit_eur_netto` (Number oder null):** Wenn `sms_price_per_unit_eur_brutto` ein Wert größer als 0 ist, berechne den Nettopreis (Bruttopreis / 1.19). Sonst `0.0` (bei Flat) oder `null`. Runde auf 4 Nachkommastellen.
13. **`inclusive_volte_wlan_call` (Boolean oder null):** Prüfe auf explizite Nennung von VoLTE/WLAN-Call. Setze `true`, wenn erwähnt und `is_data_only_tariff: false`. Sonst `false`.
14. **`data_volume_gb` (Number oder null):** Extrahiere das Datenvolumen in GB.
15. **`data_download_max_mbps` (Number oder null):** Extrahiere max. Download in Mbit/s.
16. **`data_upload_max_mbps` (Number oder null):** Extrahiere max. Upload in Mbit/s.
17. **`data_download_throttled_kbps` (Number oder null):** Extrahiere Drossel-Download in kbit/s.
18. **`data_upload_throttled_kbps` (Number oder null):** Extrahiere Drossel-Upload in kbit/s.
19. **`data_billing_increment_kb` (Number oder null):** Extrahiere Datentaktung in KB.
20. **`telephony_billing_increment_seconds` (String oder null):** Extrahiere Telefontaktung (z.B. "60/60"). Setze `null` bei Datentarifen.
21. **`pricing_connection_fee_eur_brutto` (Number oder null):** Extrahiere den einmaligen Anschlusspreis (Brutto).
22. **`pricing_connection_fee_eur_netto` (Number oder null):** Berechne den Netto-Anschlusspreis (Bruttopreis / 1.19), falls Brutto vorhanden. Runde auf 4 Nachkommastellen.
23. **`pricing_monthly_initial_eur_brutto` (Number oder null):** Extrahiere den monatlichen Bruttopreis (initiale Periode).
24. **`pricing_monthly_initial_eur_netto` (Number oder null):** Extrahiere den monatlichen Nettopreis (initiale Periode), falls explizit genannt (oft in Klammern). Falls nicht genannt, berechne ihn (Bruttopreis / 1.19). Runde auf 4 Nachkommastellen.
25. **`pricing_monthly_after_period_eur_brutto` (Number oder null):** Extrahiere den monatlichen Bruttopreis nach der initialen Periode.
26. **`pricing_monthly_after_period_eur_netto` (Number oder null):** Berechne den monatlichen Nettopreis nach der initialen Periode (Bruttopreis / 1.19). Runde auf 4 Nachkommastellen.
27. **`contract_min_duration_months` (Number oder null):** Extrahiere die Mindestlaufzeit in Monaten.
28. **`contract_cancellation_notice_period_months` (Number oder null):** Extrahiere die Kündigungsfrist als Zahl der Monate (z.B. `1` aus "1 Monat").
**Wichtige Hinweise:**
* Verwende `null` für Werte, die nicht zuverlässig extrahiert werden können.
* Stelle sicher, dass numerische Werte als Zahlen (Number) im JSON erscheinen.
* Runde berechnete Nettopreise auf 4 Nachkommastellen.
* Die Ausgabe darf **nur das JSON-Objekt** enthalten, ohne jeglichen erläuternden Text davor oder danach.
In dieser Tabelle sind die grundlegenden Tarife gespeichert, die als Ausgangsbasis für das gesamte Datenbankschema dienen. Die hinterlegten Tarife bilden das Fundament, auf dem alle weiteren Strukturen aufbauen.
In dieser Tabelle sind die grundlegenden Tarife gespeichert, die als Ausgangsbasis für das gesamte Datenbankschema dienen. Die hinterlegten Tarife bilden das Fundament, auf dem alle weiteren Strukturen aufbauen.
Beispielhafte Tarife:
Beispielhafte Tarife:
```
```
Green Allnet Flat
Green Allnet Flat
Green Allnet Flat mit Handy 5
Green Allnet Flat mit Handy 5
Green Allnet Flat mit Handy 10
Green Allnet Flat mit Handy 10
```
```
### id_base
### id_base
Dieser Primärschlüssel identifiziert jeden Tarif eindeutig in der Tabelle.
Dieser Primärschlüssel identifiziert jeden Tarif eindeutig in der Tabelle.
### basegroup_base
### basegroup_base
Dieses optionale Feld dient als Fremdschlüssel und verweist auf die Tabelle **Basegroup (basegroup_bgro)**, wodurch eine thematische Gruppierung der Tarife ermöglicht wird.
Dieses optionale Feld dient als Fremdschlüssel und verweist auf die Tabelle **Basegroup (basegroup_bgro)**, wodurch eine thematische Gruppierung der Tarife ermöglicht wird.
### provider_base
### provider_base
Hier wird der Name des Providers gespeichert, beispielsweise "Freenet" oder "Klarmobil".
Hier wird der Name des Providers gespeichert, beispielsweise "Freenet" oder "Klarmobil".
### providercode_base
### providercode_base
Ein optionales Feld, in dem ein zusätzlicher Provider-Code (Fremdschlüssel) hinterlegt werden kann.
Ein optionales Feld, in dem ein zusätzlicher Provider-Code (Fremdschlüssel) hinterlegt werden kann.
### name_base
### name_base
Dieses Feld enthält den offiziellen Tarifnamen, wie er vom Provider vorgegeben wird.
Dieses Feld enthält den offiziellen Tarifnamen, wie er vom Provider vorgegeben wird.
### alias_base
### alias_base
Hier kann ein alternativer Name definiert werden, der den offiziellen Tarifnamen ersetzt.
Hier kann ein alternativer Name definiert werden, der den offiziellen Tarifnamen ersetzt.
### network_base
### network_base
In diesem Feld wird das verwendete Funknetz definiert.
In diesem Feld wird das verwendete Funknetz definiert.
**Mögliche Werte:**
**Mögliche Werte:**
-**1**: D1/Telekom
-**1**: D1/Telekom
-**2**: D2/Vodafone
-**2**: D2/Vodafone
-**4**: O2/Telefonica
-**4**: O2/Telefonica
### type_base
### type_base
Dieses Feld legt den Tariftyp fest.
Dieses Feld legt den Tariftyp fest.
**Mögliche Werte:**
**Mögliche Werte:**
-**0**: Unbekannt
-**0**: Unbekannt
-**1**: Voice
-**1**: Voice
-**2**: Daten
-**2**: Daten
### created_base
### flyerurl_base
Dies ist die URL zum Tarifflyer.
### piburl_base
Dies ist die URL zum Produktinformationsblatt.
### details_base
Dies sind alle Tarifdetails die vom Provider vorgegeben werden (als JSON).
### created_base
Der Zeitstempel, der angibt, wann der Datensatz erstellt wurde.
Der Zeitstempel, der angibt, wann der Datensatz erstellt wurde.
### updated_base
### updated_base
Der Zeitstempel, an dem der Datensatz zuletzt aktualisiert wurde.
Der Zeitstempel, an dem der Datensatz zuletzt aktualisiert wurde.
---
---
## Basegroup (basegroup_bgro)
## Basegroup (basegroup_bgro)
Diese Tabelle fasst Tarife in Gruppen zusammen, um eine übersichtliche Struktur zu ermöglichen. Die Gruppierung hilft dabei, ähnliche Tarife gemeinsam zu verwalten.
Diese Tabelle fasst Tarife in Gruppen zusammen, um eine übersichtliche Struktur zu ermöglichen. Die Gruppierung hilft dabei, ähnliche Tarife gemeinsam zu verwalten.
Beispielhafte Tarifgruppen:
Beispielhafte Tarifgruppen:
```
```
Red Allnet Flat Tarifgruppe
Red Allnet Flat Tarifgruppe
Green Allnet Flat Tarifgruppe
Green Allnet Flat Tarifgruppe
Blue Allnet Flat Tarifgruppe
Blue Allnet Flat Tarifgruppe
```
```
### id_bgro
### id_bgro
Der Primärschlüssel der Tabelle, der jede Tarifgruppe eindeutig identifiziert.
Der Primärschlüssel der Tabelle, der jede Tarifgruppe eindeutig identifiziert.
### name_bgro
### name_bgro
Hier wird der Name der Tarifgruppe festgelegt.
Hier wird der Name der Tarifgruppe festgelegt.
### created_bgro
### created_bgro
Der Zeitpunkt, zu dem die Tarifgruppe erstellt wurde.
Der Zeitpunkt, zu dem die Tarifgruppe erstellt wurde.
### updated_bgro
### updated_bgro
Der Zeitpunkt, zu dem die Tarifgruppe zuletzt aktualisiert wurde.
Der Zeitpunkt, zu dem die Tarifgruppe zuletzt aktualisiert wurde.
---
---
## Deal (deal_deal)
## Deal (deal_deal)
In dieser Tabelle werden zeitlich befristete Aktionen erfasst. Jede Aktion, jeder Deal verknüpft einen Basis-Tarif aus der Tabelle **Base (base_base)** mit einer Provisiongruppe und definiert spezielle Konditionen.
In dieser Tabelle werden zeitlich befristete Aktionen erfasst. Jede Aktion, jeder Deal verknüpft einen Basis-Tarif aus der Tabelle **Base (base_base)** mit einer Provisiongruppe und definiert spezielle Konditionen.
### id_deal
### id_deal
Der Primärschlüssel der Tabelle, der jede Aktion eindeutig identifiziert.
Der Primärschlüssel der Tabelle, der jede Aktion eindeutig identifiziert.
### base_deal
### base_deal
Dieses Feld ist ein Fremdschlüssel, der auf einen Tarif in der Tabelle **Base (base_base)** verweist.
Dieses Feld ist ein Fremdschlüssel, der auf einen Tarif in der Tabelle **Base (base_base)** verweist.
### provisiongroup_deal
### provisiongroup_deal
Dieses Feld definiert, unter welcher Provisionsgruppe dieser Tarif verwaltet wird.
Dieses Feld definiert, unter welcher Provisionsgruppe dieser Tarif verwaltet wird.
### providercode_deal
### providercode_deal
Ein optionales Feld, das einen zusätzlichen Provider-Code (Fremdschlüssel) speichern kann.
Ein optionales Feld, das einen zusätzlichen Provider-Code (Fremdschlüssel) speichern kann.
### alias_deal
### alias_deal
Ein optionaler, alternativer Name des Deals.
Ein optionaler, alternativer Name des Deals.
### price_deal
### price_deal
In diesem Feld wird der Preis des Deals als Dezimalwert festgehalten (Netto).
In diesem Feld wird der Preis des Deals als Dezimalwert festgehalten (Netto).
### starts_deal
### starts_deal
Das Datum und die Uhrzeit, ab wann der Deal aktiv wird.
Das Datum und die Uhrzeit, ab wann der Deal aktiv wird.
### stops_deal
### stops_deal
Ein optionales Datum und eine Uhrzeit, bis zu denen der Deal gültig ist.
Ein optionales Datum und eine Uhrzeit, bis zu denen der Deal gültig ist.
### provision1_deal bis provision4_deal
### provision1_deal bis provision4_deal
Diese Felder enthalten verschiedene Provisionswerte für für die Aktion.
Diese Felder enthalten verschiedene Provisionswerte für für die Aktion.
Alle Provisionen zusammengerechnet ergeben die Gesamtprovision.
Alle Provisionen zusammengerechnet ergeben die Gesamtprovision.
### created_deal
### created_deal
Der Zeitpunkt, zu dem der Deal-Datensatz erstellt wurde.
Der Zeitpunkt, zu dem der Deal-Datensatz erstellt wurde.
### updated_deal
### updated_deal
Der Zeitpunkt, zu dem der Deal zuletzt aktualisiert wurde.
Der Zeitpunkt, zu dem der Deal zuletzt aktualisiert wurde.
---
---
## Option (option_opti)
## Option (option_opti)
Diese Tabelle erfasst spezifische Optionen zu Tarifen, die zusätzliche Leistungen oder Konfigurationen darstellen. Optionen ergänzen die Basistarife und ermöglichen erweiterte Angebotsvarianten.
Diese Tabelle erfasst spezifische Optionen zu Tarifen, die zusätzliche Leistungen oder Konfigurationen darstellen. Optionen ergänzen die Basistarife und ermöglichen erweiterte Angebotsvarianten.
### id_opti
### id_opti
Der Primärschlüssel der Tabelle, der jede Option eindeutig identifiziert.
Der Primärschlüssel der Tabelle, der jede Option eindeutig identifiziert.
### base_opti
### base_opti
Dieses Feld fungiert als Fremdschlüssel und verweist auf den zugehörigen Tarif in der Tabelle **Base (base_base)**.
Dieses Feld fungiert als Fremdschlüssel und verweist auf den zugehörigen Tarif in der Tabelle **Base (base_base)**.
### provisiongroup_opti
### provisiongroup_opti
Dieses Feld definiert, unter welcher Provisionsgruppe dieser Tarif verwaltet wird.
Dieses Feld definiert, unter welcher Provisionsgruppe dieser Tarif verwaltet wird.
### providercode_opti
### providercode_opti
Ein optionales Feld zur Speicherung eines zusätzlichen Provider-Codes.
Ein optionales Feld zur Speicherung eines zusätzlichen Provider-Codes.
### providercategory_opti
### providercategory_opti
Dieses optionale Feld dient der Kategorisierung der Option (Providerkategorie).
Dieses optionale Feld dient der Kategorisierung der Option (Providerkategorie).
### name_opti
### name_opti
Das Feld enthält den offiziellen Namen der Option, wie er vom Provider vorgegeben wird.
Das Feld enthält den offiziellen Namen der Option, wie er vom Provider vorgegeben wird.
### alias_opti
### alias_opti
Ein optionaler Alias, der den offiziellen Namen ergänzen oder ersetzen kann.
Ein optionaler Alias, der den offiziellen Namen ergänzen oder ersetzen kann.
### price_opti
### price_opti
In diesem Feld wird der Preis der Option als Dezimalwert festgehalten (Netto).
In diesem Feld wird der Preis der Option als Dezimalwert festgehalten (Netto).
### starts_opti
### starts_opti
Das Datum und die Uhrzeit, ab wann die Option aktiv wird.
Das Datum und die Uhrzeit, ab wann die Option aktiv wird.
### stops_opti
### stops_opti
Ein optionales Datum und eine Uhrzeit, bis zu denen die Option gültig ist.
Ein optionales Datum und eine Uhrzeit, bis zu denen die Option gültig ist.
### provision1_opti bis provision4_opti
### provision1_opti bis provision4_opti
Diese Felder enthalten verschiedene Provisionswerte für für die Option.
Diese Felder enthalten verschiedene Provisionswerte für für die Option.
Alle Provisionen zusammengerechnet ergeben die Gesamtprovision.
Alle Provisionen zusammengerechnet ergeben die Gesamtprovision.
### created_opti
### created_opti
Der Zeitpunkt, zu dem der Options-Datensatz erstellt wurde.
Der Zeitpunkt, zu dem der Options-Datensatz erstellt wurde.
### updated_opti
### updated_opti
Der Zeitpunkt, zu dem der Options-Datensatz zuletzt aktualisiert wurde.
Der Zeitpunkt, zu dem der Options-Datensatz zuletzt aktualisiert wurde.
---
---
## Provisiongroup (provisiongroup_pgro)
## Provisiongroup (provisiongroup_pgro)
In dieser Tabelle werden Provisiongruppen verwaltet, die sowohl in Deals als auch in Optionen Anwendung finden. Eine Provisiongruppe legt fest, wie viel Provision prozentual für den Vertrieb freigegeben wird.
In dieser Tabelle werden Provisiongruppen verwaltet, die sowohl in Deals als auch in Optionen Anwendung finden. Eine Provisiongruppe legt fest, wie viel Provision prozentual für den Vertrieb freigegeben wird.
### id_pgro
### id_pgro
Der Primärschlüssel der Tabelle, der jede Provisiongruppe eindeutig identifiziert.
Der Primärschlüssel der Tabelle, der jede Provisiongruppe eindeutig identifiziert.
### name_pgro
### name_pgro
Hier wird der Name der Provisiongruppe gespeichert.
Hier wird der Name der Provisiongruppe gespeichert.
### percent_pgro
### percent_pgro
Dieser Dezimalwert legt den Provisionsprozentsatz fest. Standardmäßig beträgt dieser 0.00.
Dieser Dezimalwert legt den Provisionsprozentsatz fest. Standardmäßig beträgt dieser 0.00.
### created_pgro
### created_pgro
Der Zeitpunkt, zu dem der Datensatz der Provisiongruppe erstellt wurde.
Der Zeitpunkt, zu dem der Datensatz der Provisiongruppe erstellt wurde.
### updated_pgro
### updated_pgro
Ein optionales Feld, das den Zeitpunkt der letzten Aktualisierung der Provisiongruppe festhält.
Ein optionales Feld, das den Zeitpunkt der letzten Aktualisierung der Provisiongruppe festhält.