Skip to main content

Plan & Subscription Management

Plan management in COS determines which features and limits are available to organizations. Plans are defined at the TenantGroup (holding) level; all tenants under a TenantGroup share the same plan limits.


Core Concepts

Plan Hierarchy

PlanTemplate (Template)
└─ PlanFeature (Plan Features — enabled/limit/tier per feature)
└─ PlanFeatureOverride (Group-Level Exception)
└─ FeatureDefinition (Platform-Wide Feature Definition)

Terminology

TermDescription
PlanTemplatePlan template (Free, Business, Enterprise, etc.)
FeatureDefinitionPlatform-wide feature definition (e.g., max_users, swot_analysis)
PlanFeatureA plan's values for a specific feature (enabled/disabled, limit, tier)
PlanFeatureOverrideException overriding plan values for a specific TenantGroup
TenantGroupHolding/group structure containing one or more tenants

Default Plans

COS comes with 3 default plans:

Free

Basic plan for small teams.

  • Users: 3
  • Tenants: 1
  • OKR: 5 objectives, 15 key results, 10 initiatives
  • KPIs: 10
  • Strategy modules: Disabled (SWOT, BSC, Themes, etc.)
  • RBAC: BASIC (Admin + Member)
  • Dashboard: BASIC
  • KPI Library: BASIC

Business

Advanced plan for mid-size companies.

  • Users: 50
  • Tenants: 3
  • OKR: Unlimited
  • KPIs: Unlimited
  • Strategy modules: Enabled (except EA and VRIO)
  • PESTLE Analysis: Enabled
  • Unit-Level Strategy: Disabled (TL cannot create/edit/delete)
  • RBAC: FULL (4 roles: ADMIN/SM/TL/MEMBER)
  • Dashboard: STANDARD
  • KPI Library: FULL
  • Additional: API access, audit log, gap management, performance reports

Enterprise

Full-featured plan for large organizations and holding companies.

  • Users: Unlimited
  • Tenants: Unlimited
  • OKR: Unlimited
  • KPIs: Unlimited
  • Strategy modules: All enabled (EA, VRIO, Maturity Assessment, PESTLE included)
  • Unit-Level Strategy: Enabled (TL can create analyses for their own unit)
  • RBAC: FULL
  • Dashboard: FULL
  • Additional: SSO, white-label, cross-tenant view, priority support, full integration

Feature Categories

Platform features are organized into 7 categories:

Users & Organization (USERS_ORG)

FeatureDescriptionValue Type
max_usersMaximum number of usersNumeric
max_tenantsMaximum number of tenantsNumeric
max_org_depthOrganization hierarchy depthNumeric
org_versioningOrganization versioningBoolean

Strategy (STRATEGY)

Divided into subcategories: general, swot, pestle, porter, bcg, bsc, asis, resource, dma, excellence, findings.

FeatureSubcategoryDescriptionValue Type
max_strategic_cyclesgeneralMaximum strategic cyclesNumeric
max_okr_cyclesgeneralMaximum OKR cyclesNumeric
strategic_themesgeneralStrategic ThemesBoolean
max_strategic_themesgeneralMax strategic theme countNumeric
strategy_roadmapgeneralStrategy RoadmapBoolean
unit_level_strategygeneralUnit-Level StrategyBoolean
ea_modulegeneralEnterprise Architecture (EA)Boolean
maturity_assessmentgeneralMaturity AssessmentBoolean
swot_analysisswotSWOT AnalysisBoolean
max_swot_per_unitswotMax SWOT per unitNumeric
pestle_analysispestlePESTLE AnalysisBoolean
max_pestle_per_unitpestleMax PESTLE per unitNumeric
porter_analysisporterPorter Five Forces AnalysisBoolean
max_porter_per_unitporterMax Porter per unitNumeric
bcg_matrixbcgBCG Growth-Share MatrixBoolean
max_bcg_per_unitbcgMax BCG per unitNumeric
bsc_modulebscBalanced ScorecardBoolean
max_bsc_per_unitbscMax BSC per unitNumeric
current_state_analysisasisCurrent State AnalysisBoolean
max_asis_per_unitasisMax As-Is per unitNumeric
resource_inventory_vrioresourceResource Inventory & VRIOBoolean
max_resource_per_unitresourceMax resource analysis per unitNumeric
digital_maturity_assessment_coredmaDMA Core (60 questions)Boolean
digital_maturity_assessment_extendeddmaDMA Extended (150 questions)Boolean
digital_maturity_assessment_multi_raterdmaDMA Multi-RaterBoolean
max_digital_maturity_per_unitdmaMax DMA per unitNumeric
max_digital_maturity_raters_per_assessmentdmaMax raters per assessmentNumeric
max_digital_maturity_raters_per_questiondmaMax raters per questionNumeric
excellence_assessment_coreexcellenceExcellence Assessment (Core)Boolean
excellence_assessment_advancedexcellenceExcellence Assessment (Advanced)Boolean
excellence_assessment_multi_raterexcellenceExcellence Multi-RaterBoolean
max_excellence_assessment_per_unitexcellenceMax excellence per unitNumeric
max_excellence_raters_per_assessmentexcellenceMax raters per assessmentNumeric
max_excellence_raters_per_questionexcellenceMax raters per questionNumeric
findings_modulefindingsFindings ModuleBoolean

OKR

FeatureDescriptionValue Type
max_objectivesMaximum objectivesNumeric
max_key_resultsMaximum key resultsNumeric
max_initiativesMaximum initiativesNumeric
okr_hierarchyOKR hierarchyBoolean
okr_approval_workflowApproval workflowBoolean
okr_confidentialityConfidentiality controlBoolean
okr_multi_alignmentMulti-alignmentBoolean
okr_snapshotsSnapshotsBoolean

KPI & Reporting (KPI_REPORT)

FeatureDescriptionValue Type
max_kpisMaximum KPI countNumeric
kpi_library_tierKPI Library tierTier (BASIC/FULL)
dashboards_tierDashboard accessBoolean
reports_tierReporting accessBoolean
gap_managementGap managementBoolean
performance_reportsPerformance reportsBoolean

Product Management (PRODUCT)

Divided into subcategories: general, product_swot, product_scorecard, product_kpi.

FeatureSubcategoryDescriptionValue Type
max_productsgeneralMaximum product countNumeric
product_ownershipgeneralProduct ownership assignmentBoolean
product_swotproduct_swotProduct SWOT AnalysisBoolean
product_scorecardproduct_scorecardProduct ScorecardBoolean
max_product_scorecard_kpisproduct_scorecardMax product scorecard KPIsNumeric
product_kpi_libraryproduct_kpiProduct KPI LibraryBoolean

Administration & Security (ADMIN_SECURITY)

FeatureDescriptionValue Type
rbac_tierRBAC managementBoolean
cross_tenant_viewCross-tenant viewBoolean
white_labelWhite-label brandingBoolean
ssoSingle Sign-On (SSO)Boolean
api_accessAPI accessBoolean
integrations_tierIntegration accessBoolean
kpi_api_integrationKPI API IntegrationBoolean
max_api_integrationsMax API integration countNumeric
min_cron_interval_minutesMin cron interval (minutes)Numeric
notification_tierNotification tierTier (BASIC/FULL)
audit_logAudit logBoolean
priority_supportPriority supportBoolean

Artificial Intelligence (AI)

FeatureDescriptionValue Type
ai_assistantAI AssistantBoolean
ai_daily_messagesDaily AI message limitNumeric
ai_max_conversationsMax active conversationsNumeric
ai_history_retention_daysChat retention period (days)Numeric
ai_web_researchWeb researchBoolean
ai_daily_web_searchesDaily web search limitNumeric
ai_data_generationSample data generationBoolean
ai_rate_limit_per_minuteAI requests per minute limitNumeric

Plan Management (SuperAdmin)

Plan management is available exclusively to SUPER_ADMIN users.

Creating a Plan

  1. Navigate to the Plans page
  2. Click the New Plan button
  3. Fill in plan details:
    • Code: Unique identifier (e.g., premium)
    • Name: Display name
    • Description: Plan description
    • Max Tenants: Maximum tenants allowed under this plan (0 = unlimited)
    • Sort Order: Display order in lists
  4. Set values for each feature (enabled/disabled, limit, tier)
  5. Click Save

Editing a Plan

  • Feature values of an existing plan can be modified
  • Plan code can be changed (must remain unique)
  • Active/inactive status can be toggled

Plan Assignment

  1. Identify the TenantGroup you want to assign the plan to
  2. Use the POST /plans/:planId/assign endpoint to assign the plan
  3. Changes take effect immediately for all tenants in the group

Group Override (Exception)

Use overrides when you need different values than the plan for a specific TenantGroup:

  1. Navigate to the override page of the target group
  2. Select the feature you want to override
  3. Enter the new value
  4. Optionally add a reason
  5. Click Save

Note: Overrides only affect the specified feature. Features without overrides continue to use plan values.


Value Resolution Order

A feature's effective value is determined in this order (when an active subscription exists):

  1. PlanFeatureOverride — If a group-level override exists, this value is used
  2. PlanFeature — If no override, the plan's value is used
  3. FeatureDefinition — If not defined in the plan, the platform default is used

Important: Overrides are only active when the group has an active subscription. When the subscription expires or is cancelled, overrides are deactivated and Free plan values apply.


Subscription Management

The subscription system provides time-based access to plans. A TenantGroup must have an active subscription to access a paid plan.

Subscription Model

TenantGroup
└─ Subscription (1 active, N historical)
├─ PlanTemplate → subscribed plan
├─ BillingPeriod → MONTHLY / YEARLY
├─ startDate, endDate → subscription period
├─ gracePeriodDays → extra time after expiry (default: 7 days)
├─ autoRenew → auto-renewal flag
└─ status → ACTIVE / CANCELLED / EXPIRED

Subscription Statuses

StatusDescription
ACTIVESubscription is active, plan features and overrides are effective
CANCELLEDCancelled by admin, group falls back to Free plan
EXPIREDPeriod + grace period ended, automatically downgraded to Free

Grace Period

When a subscription's end date passes, a 7-day grace period begins. During this time:

  • Plan features remain active
  • Overrides remain effective
  • A warning banner is displayed in the UI

After the grace period:

  • Subscription status changes to EXPIRED
  • Group plan is downgraded to Free
  • Overrides are deactivated

Business Rules

  1. Only 1 active subscription per group at a time
  2. Cannot create subscription for Free plan — Free is the default fallback
  3. Plan change: Cancel current subscription → create a new one
  4. Cancellation: Group immediately falls back to Free plan
  5. Deletion: Only CANCELLED or EXPIRED subscriptions can be soft-deleted
  6. autoRenew: Currently stored as a flag only; automated renewal is not yet active

UI Expiry Banner

A warning banner is shown to all users when the subscription is about to expire:

Days RemainingBanner TypeMessage
≤ 30 daysInfo (blue)"Your subscription expires in X days"
≤ 7 daysWarning (orange)"Your subscription expires in X days"
≤ 1 dayCritical (red)"Your subscription expires tomorrow!"
Grace periodError (red)"Your subscription has expired. Grace period: X days"

Subscription API Endpoints

EndpointMethodDescriptionAccess
/subscriptionsGETList all subscriptionsSUPER_ADMIN
/subscriptions/:idGETSubscription detailSUPER_ADMIN
/subscriptionsPOSTCreate new subscriptionSUPER_ADMIN
/subscriptions/:idPATCHUpdate (endDate/autoRenew/notes)SUPER_ADMIN
/subscriptions/:id/cancelPOSTCancel subscriptionSUPER_ADMIN
/subscriptions/:idDELETESoft delete subscriptionSUPER_ADMIN
/subscriptions/my-statusGETOwn group subscription statusAll Roles

Numeric Limit Rules

  • 0 = Unlimited (no limit on users, tenants, objectives, etc.)
  • Positive number = Allowed up to specified amount
  • enabled: false means the limit value is ignored (feature is disabled)

Permission Matrix

OperationSUPER_ADMINGROUP_ADMINADMINOthers
List plans
Create plan
Edit plan
Delete plan
Assign plan
Feature definition CRUD
Define overrides
View effective plan✅*

* GROUP_ADMIN: Can only view the effective plan of their own group.


API Endpoints

EndpointMethodDescriptionAccess
/plansGETList all plansSUPER_ADMIN
/plansPOSTCreate a new planSUPER_ADMIN
/plans/:planIdGETPlan detailsSUPER_ADMIN
/plans/:planIdPATCHUpdate a planSUPER_ADMIN
/plans/:planIdDELETEDelete a planSUPER_ADMIN
/plans/:planId/assignPOSTAssign plan to TenantGroupSUPER_ADMIN
/plans/featuresGETList feature definitionsSUPER_ADMIN
/plans/featuresPOSTCreate feature definitionSUPER_ADMIN
/plans/features/:featureKeyPATCHUpdate feature definitionSUPER_ADMIN
/plans/effective/:groupIdGETEffective plan (with overrides)SUPER_ADMIN, GROUP_ADMIN*
/plans/my-groupsGETMy groups' plansSUPER_ADMIN, GROUP_ADMIN*
/plans/overrides/:groupIdGETGroup overridesSUPER_ADMIN
/plans/overrides/:groupIdPUTSet/update overridesSUPER_ADMIN

* GROUP_ADMIN: Can only view their own group's plan.


Plan Enforcement (Limit Control)

Plan limits are automatically enforced at the backend. When a limit is exceeded, the operation is rejected with a 422 (Unprocessable Entity) error.

Enforcement Points

Entity CreationFeature KeyScope
Add tenantmaxTenants (PlanTemplate)Group-wide
Add usermax_usersGroup-wide (all tenants combined)
Add objectivemax_objectivesPer tenant
Add key resultmax_key_resultsPer tenant
Add initiativemax_initiativesPer tenant

Behavior Rules

  • 0 = Unlimited: When the limit value is 0, no check is performed
  • Existing data preserved: When a limit is exceeded, existing data is not deleted; only new additions are blocked
  • Error message: "[Entity] limit reached (current/limit). Plan upgrade required."
  • Logging: Every rejected operation is logged with logger.warn

PlanFeature Guard (Boolean Feature Gate)

Boolean features (e.g., swot_analysis, bsc_module) can be controlled at the route level using the @PlanFeature decorator:

@UseGuards(PlanFeatureGuard)
@PlanFeature('swot_analysis')
@Get('swot')
getSwot() { ... }

Access to disabled features is rejected with a 422 error.


GROUP_ADMIN Plan Visibility

GROUP_ADMIN users can view their group's plan from the Platform → Plan Details page in the sidebar. This page is read-only:

  • Plan name and features are displayed
  • Each feature's value and source (Plan/Override/Default) is shown
  • Limits and active features are grouped by category
  • GROUP_ADMIN cannot modify plans or define overrides

FAQ

Q: Can I change a individual tenant's plan? A: No. Plans are defined at the TenantGroup level, not the tenant level. To change a tenant's plan, change its group's plan.

Q: Can I override the entire plan with overrides? A: Overrides are defined per feature. If you want to change all values, create a new plan and assign it to the group.

Q: What happens to groups when a plan is deleted? A: A plan cannot be deleted if TenantGroups are assigned to it. Move all groups to another plan first.

Q: What happens when a Free plan user exceeds limits? A: New creation operations are blocked. Existing data is preserved, but new records cannot be created until usage is within limits.

Q: What happens when a subscription expires? A: A 7-day grace period begins. During this time the plan remains active. After the grace period, the group is automatically downgraded to the Free plan.

Q: Is existing data deleted when a subscription is cancelled? A: No. The group falls back to the Free plan with Free limits. Existing data is preserved, but new operations exceeding Free limits are blocked.

Q: How do I change a group's plan? A: Cancel the current subscription, then create a new subscription for the desired plan.

Q: Do overrides work without a subscription? A: No. Overrides are only effective when there is an active subscription. Without a subscription, override values are ignored.