Перейти к основному содержимому

capitalization


CAPEX/OPEX Capitalization

The Capitalization module lets finance and PMO teams define organization-wide rules that automatically classify project cost entries as either capital expenditure (CAPEX) or operational expenditure (OPEX). When a rule matches, the classification is applied without manual intervention. When a manual reclassification is needed, the override system records the reason and the user who made the change, maintaining a complete audit trail for compliance reporting.

Overview​

In regulated industries such as pharma and manufacturing, accurate CAPEX/OPEX classification directly affects balance sheets, tax treatment, and regulatory submissions. ProBeya's capitalization engine evaluates active rules in priority order against each cost entry's context — cost category, lifecycle phase, project type, and GxP classification — and returns the recommended cost type. Finance teams can then review and override individual entries when the automatic classification does not match accounting policy.

The Capitalization Settings page is accessible at /{workspaceSlug}/portfolio/settings/capitalization. It presents two panels: the Capitalization Rules Manager for creating and editing rules, and the Override History Table for auditing manual reclassifications.

Getting Started​

  1. Navigate to Portfolio > Settings > Capitalization.
  2. Click Add Rule in the Capitalization Rules Manager panel.
  3. Provide a rule name, target cost category, default cost type (CAPEX or OPEX), and any conditions.
  4. Set a priority number — higher priority rules are evaluated first.
  5. Save and activate the rule.
  6. Open any cost entry and click Classify to run the engine and see the recommended cost type.
  7. If the recommendation is incorrect, click Override and provide a justification reason.

Key Concepts​

Classification Rules​

Each capitalization rule defines:

  • Name: a descriptive label for the rule.
  • Cost category: the category of cost entry this rule targets (e.g., labor, materials, external services).
  • Default cost type: capex or opex — the classification applied when this rule matches.
  • Conditions: optional additional match conditions based on lifecycle phase, project type, or GxP classification.
  • Priority: integer sort order. Rules are evaluated from highest to lowest priority. The first matching rule determines the classification.
  • Is active: inactive rules are excluded from the classification engine without being deleted.

Classification Engine​

The classifyCostEntry procedure implements a priority-ordered rule evaluation loop. Given a cost entry context — costCategory, lifecyclePhase, projectType, and gxpClassification — it fetches all active rules for the organization, evaluates them in descending priority order, and returns the recommendedCostType of the first rule that matches. If no rule matches, the entry remains unclassified.

Manual Overrides​

When the automatic classification is incorrect, a user can call overrideCostType to manually reclassify a cost entry. Each override record stores:

  • The original cost type (before override).
  • The overridden cost type (CAPEX or OPEX).
  • The mandatory reason text explaining the reclassification.
  • The user who performed the override (overriddenById).
  • The timestamp of the override.

If an override already exists for a cost entry, subsequent overrides update the existing record rather than creating a duplicate.

Soft Delete​

Rules are never hard-deleted. Calling deleteRule sets isActive = false on the rule, preserving its definition in the database. This ensures that classification decisions made under a given rule can be traced back to the rule that was in effect at the time.

How It Works​

Rule Evaluation Order​

The engine fetches all active rules ordered by priority DESC. For a given cost entry context:

  1. Check rule 1 (highest priority): does the cost category match? Do all conditions match?
  2. If yes, return defaultCostType from rule 1. Stop.
  3. If no, proceed to rule 2 and repeat.
  4. If no rules match, return null (unclassified).

Rules with the same priority number are evaluated in insertion order. Use unique priority values to ensure deterministic behavior.

Override Audit Trail​

The getOverrideHistory procedure returns a paginated list of all manual overrides for the organization, including the original classification, the override, the reason, and the user. This data powers the Override History Table on the settings page and is available for export in governance reports.

Configuration​

SettingLocationDescription
Rule nameSettings > Capitalization > Add RuleDescriptive label
Cost categoryRule formThe cost category this rule targets
Default cost typeRule formcapex or opex when the rule matches
ConditionsRule formOptional: lifecycle phase, project type, GxP classification
PriorityRule formHigher numbers are evaluated first (e.g., 100 before 10)
Is activeRule listToggle to enable or disable a rule without deleting it

Permissions​

  • View capitalization settings: PPM admin or finance manager role.
  • Create/edit rules: PPM admin or finance manager role.
  • Delete (deactivate) rules: PPM admin role.
  • Classify cost entries: any project member with cost entry access.
  • Override cost type: finance manager or PPM admin; overrides require a written reason.
  • View override history: PPM admin or finance manager role; accessible to auditors with read-only access.

Tips & Best Practices​

  • Design rules from specific to general: place highly specific rules (e.g., GxP-classified, validation-phase labor) at higher priority numbers, and general catch-all rules at lower priority numbers. This prevents the catch-all from short-circuiting more targeted rules.
  • Always provide an override reason: even when the reason seems obvious, a written justification creates the audit evidence needed for regulatory inspection. Adopt a brief standard format such as [Reason code]: [one-sentence explanation].
  • Deactivate rather than delete: deactivating a rule preserves the classification history derived from it. Deleting the rule would make it impossible to trace why certain cost entries were classified as they were.
  • Review override history monthly: a spike in overrides signals that a rule is misconfigured or that accounting policy has changed and the rules need updating.
  • Test new rules before activating: use the classifyCostEntry query endpoint to simulate classification against representative cost entry contexts before making a rule active in production.
GxP project handling

For pharma projects, create a dedicated high-priority rule that classifies validation-phase costs for GxP-classified projects as CAPEX, then a lower-priority rule for general maintenance costs as OPEX. This mirrors standard pharmaceutical capitalization policy under GAAP and IFRS.

Priority collisions

If two rules have the same priority number and both match a given cost entry, the result is non-deterministic (insertion-order dependent). Assign unique priority values to each rule to ensure predictable classification.

  • Budgets & Costs -- Cost entry management where classifications are applied
  • Financial Reports -- CAPEX/OPEX breakdown in financial reporting
  • Governance Framework -- Compliance reporting that references capitalization data
  • EVM -- Earned Value metrics that consume classified cost data