Plan- und Lizenzmatrix¶
Stand: 2026-03-22
Dieses Dokument friert die Begriffe und Schlüssel für persönliche Pläne, Vereinslizenzen und Provider-Integrationen ein.
Grundsatz¶
- Öffentliche Produktbegriffe sind nicht automatisch identisch mit internen Entitlement- oder Provider-Keys.
- Persönliche Zugriffe und Vereinslizenzen sind zwei getrennte Ebenen.
- Club-Funktionen werden nicht aus dem persönlichen Plan allein abgeleitet, sondern aus dem Club-Lizenzzustand.
Kanonische Matrix¶
| Ebene | Kanonischer Schlüssel | Öffentlicher Begriff | Erlaubte Legacy-Aliase | Quelle der Wahrheit | Verwendet für |
|---|---|---|---|---|---|
| Persönlicher Plan | free |
Free |
basic -> free |
UserSetting.data.subscriptionPlan, JWT plan |
persönlicher Basiszugriff |
| Persönlicher Plan | pro |
Pro |
keine | UserSetting.data.subscriptionPlan, JWT plan |
persönliche Premium-Funktionen |
| Persönlicher Zugriffsstatus | club |
Club Plus |
plus -> club, club_plus -> club nur an Boundarys |
normalisierte Access-Sicht in Web/Mobile/Backend | bezahlter Zugriff aus Vereinskontext |
| Vereinslizenz / Provider | club_plus |
Club Plus |
keine | ClubLicense.plan, Stripe-/Keygen-Metadaten |
Vereinslizenz und Provider-Vertrag |
Verantwortung pro Ebene¶
subscriptionPlan- ist der einzige kanonische persönliche Planwert im User-Settings-Dokument.
- darf intern auf
free | pro | clubnormalisiert werden. club_plus- ist ausschließlich der Provider- und Vereinslizenzschlüssel.
- darf nicht als persönlicher Plan gespeichert werden.
- Club-Funktions-Gating
- läuft über
/api/club/license/access. - maßgeblich sind
accessState,isValidundcanUseClubFeatures. - Persönliches Paid-Gating
- läuft über gemeinsame Plan-Helper.
proundclubgelten beide als bezahlter Zugriff.
Access-State-Vertrag für Club Plus¶
Zugelassene Club-Zugriffsstatus:
trialactivecancel_scheduled
Nicht zugelassen:
inactivependingexpiredpast_duecancelled
Shared-Code-Grenzen¶
backend- normalisiert Claims, User-Settings und bezahlte Feature-Gates.
- hält
club_plusfür Stripe, Keygen undClubLicense. frontend/packages/core- ist die gemeinsame Frontend-Quelle für Plan-Normalisierung und Access-Flags.
frontend/apps/web- darf lokale Storage-Details kennen, aber nicht eigene Plan-Aliaslogik erfinden.
frontend/mobile- darf keine rohen Claim-Strings wie
plusoderclub_plusdirekt interpretieren. - nutzt denselben normalisierten Access-Vertrag wie Web.
Migrationsregeln¶
basicwird weiterhin zufreenormalisiert.pluswird weiterhin zuclubnormalisiert.club_pluswird nur beim Übergang aus Provider-/Lizenzdaten in die Access-Sicht zuclubnormalisiert.- Neue Daten sollen nur noch die kanonischen Felder schreiben:
- persönlicher Plan:
subscriptionPlan - Vereinslizenz:
ClubLicense.plan = club_plus
Testerwartung¶
- Plan-Normalisierung auf Web und Mobile akzeptiert die dokumentierten Legacy-Aliase und liefert denselben kanonischen Access-Key.
- Club-Lizenz-Gating verwendet dieselben erlaubten Access-States wie das Backend.
- Reporting-, Export- und andere Paid-Gates vergleichen keine rohen Strings wie nur
pro, sondern nutzen gemeinsame Helper.