presseportale/config/credits.php
Kevin Adametz 0474d22347 Boost-Slot-Grenzen (5/3) + Kategorie-Boost zum halben Satz
Entscheidung 13.07.: verkauft wird nur, was sichtbar ist — max. 5
gleichzeitige Boosts je Startseite, 3 je Branchenseite (= die sichtbaren
Plaetze; Hero-Slider damit vertagt). Neue Stufe Kategorie-Boost (nur
Branchenseite, 6/10/18 Credits = 50 % aufgerundet); der Startseiten-Boost
(12/20/35) erscheint weiter auf Start- UND Branchenseite.

- boosts.placement (home/category, Bestand = home) + BoostPlacement-Enum;
  Preise/Slots in config/credits.php (boost_category, boost_slots)
- BoostService::slotAvailability() je Ausgabe (Portal x Sprache, Kategorie
  zusaetzlich je Rubrik); ausgebucht -> soldOut-Exception mit fruehestem
  freien Termin; Verlaengerungen halten ihren Slot, Stufen verlaengern
  unabhaengig; Kategorie-Boost invalidiert nur Kategorie-Caches
- Startseite zeigt nur Home-Boosts; Branchenseite: Kategorie-Boosts mit
  Vorrang (ihre 3 Slots sind die Garantie), Home-Boosts fuellen den Rest
- Add-on-Panel der PM-Seite: zwei Boost-Angebote, bei vollem Inventar
  "Derzeit ausgebucht — frei ab" statt Kauf-Buttons (serverseitig gegated);
  Buchungsseiten-Preisliste um die Kategorie-Staffel ergaenzt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 12:28:03 +00:00

113 lines
3.5 KiB
PHP
Raw Permalink 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,
],
/*
| Startseiten-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,
],
/*
| Kategorie-Boost (nur Branchenseite) — 50 % vom Startseiten-Boost,
| aufgerundet (Entscheidung 13.07.2026).
*/
'boost_category' => [
7 => 6,
14 => 10,
30 => 18,
],
/*
| Slot-Inventar je Ausgabe (Portal × Sprache): mehr gleichzeitige Boosts
| als sichtbare Plätze werden nicht verkauft — das Kauf-Modal zeigt
| stattdessen „Derzeit ausgebucht" mit dem frühesten freien Termin.
| `home` gilt je Startseite, `category` je Branchenseite (Rubrik).
*/
'boost_slots' => [
'home' => 5,
'category' => 3,
],
/*
| 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' => 35,
/*
| 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,
],
];