presseportale/config/credits.php
Kevin Adametz 344aac0740 Wallet-Topup ueber Stripe (Credit-Pakete mit Bonus-Staffel)
End-to-end-Aufladung der Credit-Wallet, spiegelt den Einzel-PM-Fluss:

- Paket-Staffel mit Bonus in config/credits.php (10->10, 25->27, 50->55,
  100->115 Credits; price_cents netto, Stripe Tax ergaenzt USt.)
- credit_topups (Pending->Paid) + CreditTopupService: startTopup legt den
  Pending-Kauf an, fulfill() schreibt die Wallet idempotent gut (credited_at)
- StripeCheckoutService::forCreditTopup via checkoutCharge + credit_topup_id
  Metadata; ProcessStripeWebhook schreibt bei checkout.session.completed gut
- Checkout-Route /admin/me/checkout/credits/{pack} mit Rechnungsadress-Gate

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:56:23 +00:00

91 lines
2.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use App\Enums\Tier;
return [
/*
|--------------------------------------------------------------------------
| Credit-Ökonomie (Decision-Update Phase-2-Funktionen, Rev. 4)
|--------------------------------------------------------------------------
|
| 1 Credit = 1 €. Alle Preise sind die zur Kaufzeit aus dem aktiven Tier
| abgeleiteten Credit-Beträge (nicht statisch je Kauf gespeichert). Die
| zentrale Ableitung erfolgt in App\Services\Billing\CreditPricingService.
|
*/
/*
| Extra-PM (Kontingent-Nachkauf) — tier-gestaffelt. Treuevorteil:
| höheres Abo = günstigere Extra-PM (Einzel 19 … Agency 8).
*/
'extra_pm' => [
Tier::Einzel->value => 19,
Tier::Starter->value => 15,
Tier::Business->value => 12,
Tier::Pro->value => 10,
Tier::Agency->value => 8,
],
/*
| Boost (Platzierung Startseite + Branchenseite) — nach Dauer in Tagen.
| Pro-Tag-Preis sinkt mit der Dauer; Einstieg bleibt unter dem PM-Preis.
*/
'boost' => [
7 => 12,
14 => 20,
30 => 35,
],
/*
| Veröffentlichungsnachweis-PDF — pauschal pro PM (Impulskauf).
*/
'proof_pdf' => 3,
/*
| Credit-Pakete (Wallet-Topup über Stripe). 1 Credit = 1 € beim Ausgeben;
| größere Pakete enthalten Bonus-Credits (Volumenrabatt steckt im Paket).
| `price_cents` ist der Netto-Zahlbetrag, `credits` die Wallet-Gutschrift.
*/
'packs' => [
['key' => 'p10', 'price_cents' => 1000, 'credits' => 10],
['key' => 'p25', 'price_cents' => 2500, 'credits' => 27],
['key' => 'p50', 'price_cents' => 5000, 'credits' => 55],
['key' => 'p100', 'price_cents' => 10000, 'credits' => 115],
],
/*
| Depublizieren (Magic-Link-Pfad G) — bewusst am teuersten, mit Bedenkzeit.
*/
'depublish' => 25,
/*
| Kostenpflichtige Magic-Link-Pfade C/D (Phase 2, Anker „zu bestätigen").
*/
'paths' => [
'correction' => 8, // C inhaltliche Korrektur
'update' => 4, // D Update/Ergänzung
],
/*
|--------------------------------------------------------------------------
| Prüfzähler / Prüfkontingent (Decision-Update §4.2/§4.3)
|--------------------------------------------------------------------------
|
| Eigener Zähler, getrennt von der Wallet. Tier-gestaffelte Freiprüfungen
| pro Account/Monat (aggregiert, nicht pro PM). Burst-Schutz per Tageslimit.
| Overflow: leerer Zähler → je weitere Prüfung 1 Credit aus der Wallet.
*/
'review' => [
'free_per_month' => [
Tier::Einzel->value => 4,
Tier::Starter->value => 12,
Tier::Business->value => 30,
Tier::Pro->value => 60,
Tier::Agency->value => 120,
],
'daily_limit' => 10,
'overflow_cost' => 1,
],
];