Md Asim Khan
ServiceNow Employee

This article documents the key system properties that govern SPM/Project Workspace financial behavior. Each property controls a distinct aspect of how costs, budgets, actuals, and currencies are calculated and stored.

Core System Properties

1. Budget Allocation Model

sn_invst_pln.enable_budget_allocation_v2

Value Behavior
true Investment-budget model (v2) — budget records stored in sn_invst_pln_invst_budget, supporting period breakdowns, expense/cost type dimensions, and multicurrency. Enables portfolio-level budget rollup and advanced allocation features.
false Legacy project-funding model (v1) — budget stored in project_funding. Simpler allocation with no period granularity or investment-level breakdown.
Note: This is a one-way migration flag. Once true, existing project_funding records are not automatically migrated. Use migration utilities before switching. Check is_budget_migrated on investment records to confirm migration state.

2. Budget Allocation Attribute

sn_invst_pln.budget_allocation_attribute

Value Behavior
expense_type Budget, cost plans, and breakdown records are dimensioned by expense_type (opex/capex). Aggregation and reporting group financial data along the opex/capex axis.
cost_type Budget and cost plans use cost_type (labor, hardware, software, etc.) as the primary financial dimension. Breakdowns aggregate along cost type categories.
Functional impact: This setting determines which field is populated and displayed in cost plan breakdowns and investment financials grids. Changing this value mid-lifecycle without data migration will cause breakdowns to become misaligned.

3. Cost Rollup Behavior

com.snc.project.rollup.cost

Value Behavior
true When financials change on a project task, a business rule triggers recalculation on the parent cost plan. The top-level project reflects the sum of all child task costs and benefits.
false Each task maintains an independent cost plan. Updates to child tasks do not propagate to the parent. Top project financials only reflect records directly entered against it.
Functional impact: With rollup enabled, cost plan edits trigger a cascading recalculation chain through the project hierarchy. In large projects with deep task trees this can have performance implications. With rollup disabled, project-level financial reporting requires manual consolidation or reporting queries that aggregate across tasks.

4. Actuals Expense Line Processing

glide.cost_mgmt.process_task_top_task

Value Behavior
true When an expense line (actual cost) is created on a task, the system also creates a corresponding expense line on the top-level project. Both task and project carry their own actuals records.
false Expense lines are created only on the task they are directly associated with. Top-level project actuals reflect only lines entered directly against it, not rolled up from tasks.
Functional impact: When true, querying actuals at the project level gives an aggregated view without needing to traverse child tasks. When false, top-project actuals are incomplete unless the reporting layer explicitly joins task expense lines. Timesheet-driven actuals, manual expense entries, and integration-fed actuals are all affected.

5. Demand Currency Setup

com.snc.ppm_multicurrency.demand_currency_setup

Value Behavior
follow_functional_currency Demand records inherit the functional currency of their associated business unit or cost center. Ensures financial reporting aligns with the organizational unit's accounting currency. When the demand converts to a project, the project adopts the same currency.
drive_project_currency The currency explicitly set on the demand record drives the currency of the resulting project at conversion time. Provides consistency between demand financials and post-conversion project financials, regardless of the cost center's functional currency.
flexi_option Each demand record can have its own currency selected independently. Supports mixed-currency portfolios and cross-regional demand pipelines where a single cost center may manage demands in multiple currencies.
Functional impact: This setting affects currency stamping at demand creation and at demand-to-project conversion. Misalignment between demand and project currency can cause multicurrency drift — use InvestmentMultiCurrencyMigrationUtil for remediation of existing records.

Additional Properties

Property Description
com.snc.project.multicurrency.rollup_if_different Controls whether cost rollup from child tasks to parent project is allowed when the two records carry different currencies. When false, rollup is skipped entirely if currencies differ, preventing implicit conversion errors. When true, the platform converts using the active FX rate before rolling up.
com.snc.resource_management.use_budget_reference_rates Determines which FX rate source is used when converting resource costs across currencies. When true, uses itfm_fx_rate (budget reference rates, typically locked at fiscal year start). When false, uses platform fx_rate (live/updated rates). Budget reference rates give stable, audit-consistent calculations; live rates introduce variance over time.
sn_pw.enable_resource_planning Enables the resource assignment creation flow within Project Workspace (newer UX). When false, resource assignments must be created through legacy project forms. Affects whether users can allocate resources directly from the PWS timeline view.
sn_plng_att_core.default.expense_type Sets the default expense_type (opex or capex) automatically stamped onto new projects and tasks at creation time when no value is explicitly provided. Ensures financial records are never created without an expense type dimension, which is required for breakdown aggregation.
sn_invst_pln.enable_benefit_plan_in_new_financials Controls visibility of the benefit plan section within the new Investment Planning financials UI. When false, benefit plans are hidden from the new UI and are only accessible via legacy forms. Does not affect the underlying data — benefit plan records are not deleted.
sn_invst_pln.baseline_prefix String prepended to the auto-generated name when creating investment plan baselines (e.g., prefix BL produces BL 1, BL 2). Used to enforce consistent naming conventions across the portfolio. Has no effect if baselines are named manually.
sn_plng_att_core.labor_costtype_sysid_mapping Comma-separated list of cost_type sys_ids that the planning attribute pipeline classifies as labor. Records with a matching cost_type are counted toward labor cost totals in planning attribute aggregations and reporting. Any cost_type not in this list is treated as non-labor.
sn_invst_pln.use_latin_numerals_for_financials_grid Forces the Investment Planning financials grid to render standard Latin digits (0–9) regardless of the user's locale. Relevant for locales such as Saudi Arabic (SAR) where the browser may otherwise render Arabic-Indic numerals, which can cause client-side parsing failures in the grid's numeric input fields.
com.snc.time_card.default_rate Fallback hourly rate (default $50) applied when no matching labor rate card is found for a resource during actual cost calculation. Ensures timesheet-driven expense lines are always created with a non-zero rate even when rate card coverage is incomplete.
com.snc.allowed_tasks_for_cost_plan_on_expense_line Comma-separated list of task table names (e.g., pm_project, rm_epic). When an expense line is created for a record in one of these tables, the system automatically creates or updates a corresponding system-generated cost plan entry. Tables not in this list do not trigger cost plan creation from expense lines.
com.snc.resource_management.first_day_of_week Sets the week boundary for Resource Management time bucketing. 1 = Monday, 7 = Sunday. Affects how planned and actual hours are distributed when viewed in weekly grid views and how time periods are calculated in resource utilization reports.
Version history
Last update:
an hour ago
Updated by:
Contributors