Subscriptions & plans
The commercial layer — only meaningful in SaaS deployment mode; an Enterprise install hides all of it.
The feature catalog
A Feature is a named, toggleable capability with a stable key used in code checks — PAYROLL, EMPLOYEE_OCR, and so on — grouped by category (Finance, HR). A globally inactive feature is hidden everywhere. The frontend gates screens behind a FeatureGuard that reads the caller's effective feature set.
Plans
| Field | |
|---|---|
| Name / description | Basic, Custom, Enterprise, … |
priceMonthly / priceYearly | Display only — billing is handled externally |
maxEmployees | Headcount cap; null = unlimited |
storageLimit | e.g. 10 GB |
planType | How features are assigned |
planType decides feature assignment:
| Type | Behavior |
|---|---|
FIXED | The plan's feature set is fixed (e.g. Basic) |
CUSTOM | Features are chosen per company at registration |
ALL | Every active feature is always on (Enterprise) |
Per-company overrides
A CompanyFeature row can force a single feature on or off for one tenant regardless of its plan — a targeted grant or a targeted disable, unique per (tenant_code, feature).
Getting a company onto the platform
| Step | |
|---|---|
| Demo request | A prospect submits company details; a Global Admin reviews it |
| Plan request | A company asks to start on, or move to, a plan; a Global Admin approves and provisions |
| Registration | Creates the tenant, the Super Admin, the feature set, and (if enabled) the LDAP OU |
| Subscription | Tracks the active plan, period and status per company |
Renewal reminders
A background job watches subscription end dates and posts notifications as a renewal approaches, so a lapse is a decision rather than a surprise. A lapsed subscription drops the company to a Subscription Expired screen until it's renewed.