Withdrawal from contract - Pro features
Die Pro-Version erweitert das kostenlose Widerrufsmodul um eine bedienergesteuerte Rückerstattungsabwicklung, Erklärungs-PDFs, ein Audit-Log, Berichte und Integrationen mit Abonnements / Produktbündeln. Sie setzt voraus, dass die kostenlose Version von Polski for WooCommerce aktiv ist und dass Sie mit dem grundlegenden Widerrufsmodul vertraut sind.
Automatische Rückerstattung (mit Bestätigung durch den Bediener)
Section titled “Automatische Rückerstattung (mit Bestätigung durch den Bediener)”Niemals automatisch - eine Rückerstattung erfordert eine ausdrückliche Bedieneraktion auf dem Bestellbildschirm. In Edit order › Polski - withdrawal refund (Metabox rechts) sieht der Bediener:
- Den berechneten Rückerstattungsbetrag auf Basis der ausgewählten Erklärungspositionen
- Eine Schaltfläche Process refund now (mit einem JS-
confirm()für eine doppelte Bestätigung) - Nach der Verarbeitung: die WooCommerce-Rückerstattungsnummer, den Betrag und das Datum
Logik:
- Ruft die Zeilen aus
polski_withdrawal_itemsfür die betreffende Erklärung ab - Ordnet sie dem Format von
wc_create_refund()zu (qty,refund_total,refund_tax) - Fügt die Versandkosten nur hinzu, wenn der Widerruf alle Bestellzeilen abdeckt
- Ruft die Gateway-Rückerstattung (
refund_payment => true) und das Wiedereinbuchen des Bestands (restock_items => true) auf - Speichert
refund_idundrefund_amountinpolski_withdrawals - Löst
polski_pro/withdrawal/refund_processedundWithdrawalService::complete()aus
Der Filter polski_pro/withdrawal/refund_payload erlaubt es Ihnen, das Payload vor wc_create_refund() zu ändern (zum Beispiel, um in bestimmten Fällen den Versand hinzuzufügen oder Steuern zu ändern).
A4-Erklärungs-PDF - dauerhafter Datenträger
Section titled “A4-Erklärungs-PDF - dauerhafter Datenträger”Polski\Pro\Service\WithdrawalPdfGenerator verwendet TCPDF, um ein A4-PDF zu erzeugen mit:
- Einer Erklärungsnummer
POL-WD-NNNNNNund dem Einreichungsdatum - Dem Adressaten (Shop-Daten aus
polski_generaloderwoocommerce_store_*) - Dem Verbraucher (Rechnungsvorname/-nachname, Adresse, E-Mail)
- Dem Erklärungstext mit einem Verweis auf Art. 27 des Verbraucherrechtegesetzes
- Einer Positionstabelle (Name + Variantenattribute, Menge, Wert)
- Dem Bestellwert
- Dem Bestelldatum
- Dem Grund (falls der Kunde einen angegeben hat)
- Einem Platz für eine Unterschrift (nur Papierversion)
- Einem Hinweis zum dauerhaften Datenträger
Gespeichert unter wp-content/uploads/polski-withdrawals/YYYY/MM/POL-WD-NNNNNN.pdf (geschützt mit .htaccess deny from all).
Automatisch generiert bei jedem requested-/guest_requested-/manual_registered-Ereignis, an die Verbraucher-E-Mail angehängt über den Filter woocommerce_email_attachments. Der Pfad wird in der Bestell-Meta _polski_withdrawal_pdf gespeichert, nachfolgende ensurePdf()-Aufrufe sind idempotent (Neugenerierung nur, wenn die Datei nicht mehr vorhanden ist).
Überprüfung der Download-Anzahl (Lockerung nach Art. 16(m))
Section titled “Überprüfung der Download-Anzahl (Lockerung nach Art. 16(m))”Bei zu 100 % digitalen Bestellungen behält der Verbraucher das Widerrufsrecht, selbst wenn Sie die Zustimmung nach Art. 16(m) eingeholt haben, sofern er keine Datei heruntergeladen hat. Der Dienst DigitalDownloadVerifier:
- Hängt sich in den Filter
polski/withdrawal/eligiblemit Priorität 30 ein (nach DigitalConsentService=20) - Iteriert die Bestellpositionen, für jede herunterladbare/virtuelle Position summiert er die Downloads aus
wc_get_customer_download_logpro Berechtigung - Wenn keine Position
count > 0hat, stellt er die Widerrufsberechtigung wieder her (gibttruestattfalsezurück) - Wenn mindestens eine heruntergeladen wurde, lässt er
falsebestehen
Aktiviert über polski_withdrawal['digital_download_verification'] = '1' in den Einstellungen (standardmäßig aus, Opt-in gemäß der Shop-Richtlinie).
WooCommerce Subscriptions
Section titled “WooCommerce Subscriptions”Standardmäßig werden Abonnements nicht vom Widerruf ausgeschlossen (es sei denn, das Storefront setzt den Filter polski_pro/subscriptions/treat_as_exempt => true für das Legacy-Verhalten). Logik:
- Wenn eine Erklärung abgeschlossen wird (
polski/withdrawal/completed), iteriert der Dienst die mit der Bestellung verknüpften Abonnements überwcs_get_subscriptions_for_orderund setzt den Status aufcancelled(mit einer Notiz) - Das Rückerstattungs-Payload ist proportional zum ungenutzten Teil des aktuellen Abrechnungszeitraums gemäß Art. 9(2)(b)(iii) der Richtlinie
- Formel:
ratio = 1 - (elapsed / total_period_length), pro Zeile aufrefund_totalundrefund_taxangewendet - Es wird das minimale
ratioüber alle mit der Bestellung verknüpften Abonnements genommen
Product Bundles
Section titled “Product Bundles”Drei Rückerstattungsstrategien (bundle_refund_mode in den Einstellungen oder der Filter polski_pro/withdrawal/bundle_refund_mode):
| Modus | Verhalten |
|---|---|
whole_bundle (Standard) | Die Rückerstattung deckt das gesamte Bundle + alle Komponenten ab (erweitert das Payload um Parent und Siblings) |
proportional | Rückerstattung nur für die ausgewählte Komponente (ein Anteil des Bundle-Preises proportional zur Anzahl der Positionen) |
remove_discount | Rückerstattung für die Komponente zum Einzelpreis (ohne den Bundle-Rabatt) |
Bundle-Erkennung über die Bestellpositions-Meta _bundled_by oder den Produkttyp bundle.
Annex I(B) in 8 Sprachen
Section titled “Annex I(B) in 8 Sprachen”AnnexMultiLanguageService erweitert den Filter polski/annex/form_html um Übersetzungen für die Locales: pl, de, de_AT, fr, nl, it, es + generisches eu (englischer Fallback). Jede Übersetzung enthält den korrekten Wortlaut aus der offiziellen Fassung der Richtlinie + einen nationalen Rechtsbezug (BGB §355 DE, KSchG §11 AT, Code de la consommation art. L221-18 FR, Burgerlijk Wetboek 6:230o NL, Codice del Consumo art. 52 IT, TRLGDCU art. 102 ES, Consumer Rights Act art. 27 PL).
Sprachauswahl:
- Die Einstellung
polski_withdrawal['annex_locale'](globale Überschreibung) - Automatische Erkennung aus
get_locale(), wenn die Einstellung leer ist - Shortcode-Attribut:
[polski_withdrawal_form_template_pro lang="de"] - Der Filter
polski/annex/locale
Reporting-Dashboard
Section titled “Reporting-Dashboard”Polski Pro › Withdrawal reports - Scorecards + Aufschlüsselung mit einem Datumsbereichsfilter:
- Filed - Gesamtzahl der eingereichten Erklärungen
- Completed - abgeschlossen
- In progress - requested + confirmed
- Rejected - abgelehnt
- Average processing time -
requested_at → completed_at(Sekunden, formatiert überhuman_time_diff) - Refunded - Anzahl × Betrag
- Top reasons - Top 10 der einzelnen Gründe (gruppiert nach Grund)
- Channel breakdown - online / guest / phone / email / letter / in_store
Für 5 Minuten pro Filter-Tupel zwischengespeichert (Transient).
REST-Endpunkte (Parität für ältere WP):
GET /polski-pro/v1/withdrawals/reports/scorecards?from=...&to=...GET /polski-pro/v1/withdrawals/reports/reasons?limit=10GET /polski-pro/v1/withdrawals/reports/channels
Alle abgesichert durch manage_woocommerce.
Audit-Log mit CSV-Export
Section titled “Audit-Log mit CSV-Export”polski_pro_withdrawal_audit (Migration 2.5.0) protokolliert jedes Ereignis im Lebenszyklus der Erklärung:
| Feld | Inhalt |
|---|---|
withdrawal_id | Erklärungs-ID |
order_id | Bestell-ID |
action | requested / confirmed / completed / rejected / guest_requested / manual_registered / refunded |
actor_user_id | WP-Benutzer-ID (oder NULL für einen Gast) |
actor_role | Die erste WP-Rolle des Benutzers |
actor_login | user_login |
ip_address | Aus HTTP_CF_CONNECTING_IP → X_FORWARDED_FOR → REMOTE_ADDR |
user_agent | Auf 1000 Zeichen gekürzt |
payload_json | Ereignis-Snapshot (channel, reason, refund_amount, email usw.) |
created_at | datetime UTC |
Admin Polski Pro › Withdrawal audit - eine Tabelle mit Filtern (action, Datumsbereich, withdrawal_id, order_id) + eine Schaltfläche Export to CSV (gestreamt über admin-post.php mit einem Nonce).
REST:
GET /polski-pro/v1/withdrawals/audit- paginierte ListeGET /polski-pro/v1/withdrawals/audit/export- gestreamtes CSV
Pro Abilities API (WP 6.9+)
Section titled “Pro Abilities API (WP 6.9+)”4 zusätzliche Abilities in der Kategorie polski-pro/withdrawal:
| ID | Funktion |
|---|---|
polski-pro/withdrawal-process-refund | Erstellt und führt die Rückerstattung für eine Erklärung aus |
polski-pro/withdrawal-generate-pdf | Generiert (oder gibt ein zwischengespeichertes) Erklärungs-PDF zurück |
polski-pro/withdrawal-audit-list | Listet Audit-Log-Einträge mit Filtern auf |
polski-pro/withdrawal-report-scorecards | KPI-Dashboard |
Alle abgesichert durch manage_woocommerce, beschrieben mit JSON Schema (Input/Output).
PRO-Hooks
Section titled “PRO-Hooks”do_action('polski_pro/withdrawal/refund_processed', int $withdrawalId, WC_Order_Refund $refund);do_action('polski/pro/withdrawal/pdf_generated', int $withdrawalId, string $filepath);
apply_filters('polski_pro/withdrawal/refund_payload', array $payload, WC_Order, int $withdrawalId);apply_filters('polski_pro/withdrawal/download_verification_enabled', bool $enabled);apply_filters('polski_pro/withdrawal/bundle_refund_mode', string $mode);apply_filters('polski_pro/subscriptions/treat_as_exempt', bool $exempt, WC_Order $order);