Md Asim Khan
ServiceNow Employee

 

 

 
 
ServiceNow SPM

Project Financial Diagnostics
Functional Reference

A comprehensive functional reference for the diagnostic & auto-fix framework that detects and repairs financial data discrepancies across Planned Cost, Actual Cost, Budget, ETC/EAC, and Benefits — with full sub-project and multi-currency support.

5 Diagnostics Multi-Currency Sub-Project Aware Auto-Fix
~95%
Investigation Time Saved
~98%
Fix Implementation Saved
5
Diagnostic Categories
1. The Problem

ServiceNow SPM financial values are cached aggregates, not live queries. When a user opens a project's Financials tab, they see values stored on pm_project, not computed on the fly. These cached values are recalculated by Business Rules when underlying records change.

Common symptoms reported in support cases:

  • Planned Cost mismatch — Project planned cost doesn't match the sum of cost plan breakdowns
  • Actual Cost mismatch — Project actual cost doesn't match the sum of expense lines
  • Budget mismatch — Project Workspace vs Strategic Planning Workspace show different budget values
  • Orphan expense lines — Expense line records with no linked cost plan
  • ETC/EAC drift — Forecast cost doesn't match aggregated cost plan forecasts
  • Multi-currency desync — Default currency matches but investment/project currency values are stale

Previously, each support case required writing specific fix scripts tailored to individual corruptions at different entity levels. This framework replaces that with a single generic diagnostic and fixing tool that works at any entity level — automating both detection and repair across all financial metrics.

 

2. What It Diagnoses & Fixes

The framework includes 5 diagnostics, each targeting a specific financial metric. Every diagnostic detects mismatches and includes an auto-fix that repairs the data.

# Diagnostic What It Detects What It Fixes
1 Planned Cost Mismatch between cost plan breakdowns and project planned cost fields Rebuilds breakdowns from cost plans, rolls up to project, syncs to investment
2 Actual Cost Mismatch between expense lines, cost plan actuals, and project actual cost fields Associates orphan expense lines, rebuilds actuals from expense lines, rolls up to project
3 Budget Mismatch between investment budget table and project budget fields Rebuilds task breakdowns from investment budget (one-way), rolls up to project
4 ETC/EAC Mismatch between cost plan forecast fields and project forecast/ETC fields Recalculates ETC/EAC from the open forecast period across all currencies
5 Benefit Mismatch between benefit plan breakdowns and project benefit fields Rebuilds breakdowns from benefit plans, rolls up to project, syncs to investment
 
3. Financial Data Model

Understanding which table is the source of truth for each financial metric is critical:

Financial Metric Source of Truth Cached On Currency Fields
Planned Cost cost_plancost_plan_breakdown pm_project.cost, .capex_cost, .opex_cost Default, Investment, Project
Actual Cost fm_expense_line (state=processed) pm_project.work_cost Default, Investment, Project
Budget sn_invst_pln_invst_budget (v2)
project_funding (legacy)
pm_project.budget_cost, .capex_budget, .opex_budget Default, Investment
ETC / EAC cost_plan.etc_cost_*, .forecast_cost_* pm_project.estimate_to_completion, .forecast_cost Default, Investment, Project
Benefit benefit_planbenefit_plan_breakdown pm_project.benefits, .actual_benefits Default, Investment, Project
Breakdown Types

Both cost_plan_breakdown and benefit_plan_breakdown have two breakdown types:

breakdown_type = requirement

One row per cost/benefit plan per fiscal period. These are the granular financial buckets that store per-plan amounts.

breakdown_type = task

Aggregated rollup rows at the project level per fiscal period. These power the Planning Grid UI and represent the project-level totals.

4. System Properties

Two properties fundamentally change where financial data is stored and how the diagnostics behave:

Property Values Controls Impact on Diagnostics
com.snc.project.rollup.cost true / false Whether sub-project costs roll up to the parent project When TRUE: validation includes all descendant projects/tasks in aggregation
glide.cost_mgmt.process_task_top_task true / false Whether expense lines are duplicated at the top-level task When TRUE: expense line queries scope to the current project only. When FALSE: queries include all descendants.
 
5. The Five Diagnostics
 
Diagnostic 1 - Identify Project Planned Cost Discrepancies
 
When To Use
  • Project's planned cost looks incorrect or out of sync
  • Cost, Capex cost or Opex cost aren't matching across
  • Planned cost data is inconsistent between Project Workspace and Strategic Planning Workspace
  • Cost calculation sync issues between requirement vs task breakdowns vs cost plans vs project
  • Multi-currency fields sync issues in planned cost fields
What It Checks
  1. Requirement type breakdowns vs Cost Plan — checks that the aggregated planned cost of requirement-type breakdowns equals the cost plan total
  2. Requirement type breakdowns vs Project — checks that the aggregated planned cost of requirement-type breakdowns equals the project's planned cost
  3. Requirement type breakdowns vs Investment — checks that the aggregated planned cost of requirement type breakdowns equals the investment's planned cost
  4. Task type breakdowns vs Cost Plan — checks that the aggregated planned cost of task-type breakdowns equals the cost plan total
  5. Task type breakdowns vs Top Project — checks that the aggregated planned cost of task-type breakdowns equals the top-level project's planned cost
  6. Project vs Align Core Project (only if integrations are enabled) — checks that the project's planned cost is in sync with the corresponding Align Core project
Syncs the Following Fields
Table Default Currency Fields Investment Currency Fields Project Currency Fields
pm_project cost
capex_cost
opex_cost
cost_invst_currency
capex_cost_invst_currency
opex_cost_invst_currency
cost_project_currency
capex_cost_project_currency
opex_cost_project_currency
cost_plan cost_default_currency cost_invst_currency cost_project_currency
cost_plan_breakdown cost_default_currency cost_invst_currency cost_project_currency
sn_invst_pln_invst_investment cost
capex_cost
opex_cost
cost_invst_currency
capex_cost_invst_currency
opex_cost_invst_currency
 
 
Diagnostic 2 - Identify Project Actual Cost Discrepancies
 
When To Use
  • Project actual cost totals don't match the sum of processed expense lines
  • Time card expenses aren't reflecting on project actual cost fields
  • Inconsistent actual cost between Project Workspace and financial reports
  • System errors occurred during expense line aggregation
  • Multi-currency projects showing incorrect actual cost conversion amounts
  • Orphan expense lines causing actual cost discrepancies at the project level
What It Checks
  1. Requirement type breakdowns vs Cost Plan — checks that the aggregated actual cost of requirement-type breakdowns equals the cost plan's actual cost total
  2. Requirement type breakdowns vs Project — checks that the aggregated actual cost of requirement-type breakdowns equals the project's actual cost
  3. Requirement type breakdowns vs Expense Line — checks that the aggregated actual cost of requirement-type breakdowns equals the total processed expense line amounts
  4. Project vs Expense Line — checks that the project's actual cost equals the total processed expense line amounts
  5. Task type breakdowns vs Cost Plan (top project only) — checks that the aggregated actual cost of task-type breakdowns equals the cost plan's actual cost total
  6. Task type breakdowns vs Top Project — checks that the aggregated actual cost of task-type breakdowns equals the top-level project's actual cost
  7. Task breakdowns vs Expense Line (top project only) — checks that the aggregated actual cost of task-type breakdowns equals the processed expense line amounts
  8. Project vs Align Core Project (only if spw integrations is enabled) — checks that the project's actual cost is in sync with the corresponding Align Core project
Note: Orphan or standalone expense lines are the expenses which are not associated with cost plans. The diagnostic reports Orphan expense lines exist for these projects or any identified projects having actual cost discrepancies are reported.
Syncs the Following Fields
Table Default Currency Fields Investment Currency Fields Project Currency Fields
pm_project work_cost actual_cost_invst_currency actual_cost_project_currency
cost_plan actual_cost_default_currency actual_cost_invst_currency actual_cost_project_currency
cost_plan_breakdown actual actual_cost_invst_currency actual_cost_project_currency
fm_expense_line amount amount_invst_currency amount_project_currency
sn_invst_pln_invst_investment work_cost
capex_work_cost
opex_work_cost
work_cost_invst_currency
capex_work_cost_invst_currency
opex_work_cost_invst_currency
 
 
Diagnostic 3 - Identify Project Budget Discrepancies
 
When To Use
  • Works for new budgeting when enable_budget_allocation_v2 property is enabled
  • Project budget totals don't match cost plan breakdown aggregates
  • Budget changes in Project Workspace not reflecting in Strategic Planning Workspace
  • Investment Planning budget (sn_invst_pln_invst_budget) out of sync with project budget
  • Multi-currency budget conversion discrepancies
  • Budget rollup errors between breakdowns and project entity
What It Checks
  1. Task type breakdowns vs Project
  2. Task type breakdowns vs Investment Budget table
  3. Task type breakdowns vs Investment
Syncs the Following Fields
Table Default Currency Fields Investment Currency Fields Project Currency Fields
pm_project budget_cost budget_cost_invst_currency budget_cost_project_currency
sn_invst_pln_invst_budget amount amount_invst_currency
cost_plan_breakdown budget budget_cost_invst_currency budget_cost_project_currency
sn_invst_pln_invst_investment budget_cost
capex_budget
opex_budget
budget_cost_invst_currency
capex_budget_invst_currency
opex_budget_invst_currency
 
Diagnostic 4 - Identify Project EAC/ETC Discrepancies
 
When To Use
  • Estimate at completion (EAC) values don't match cost plan aggregates
  • Estimate to Completion (ETC) showing incorrect remaining cost
  • CAPEX / OPEX forecast breakdown totals are inconsistent
  • After fiscal period changes or forecast recalculations
  • Multi-currency forecast values showing conversion errors
  • Open forecast period changes not reflecting on project entity
What It Checks
  1. Cost plan forecast vs Project forecast (top project only)
  2. Cost plan ETC vs Project ETC (top project only)
Syncs the Following Fields
Table Default Currency Fields Investment Currency Fields Project Currency Fields
pm_project forecast_cost
capex_forecast_cost
opex_forecast_cost
estimate_to_completion
capex_estimate_to_completion
opex_estimate_to_completion
forecast_cost_invst_currency
capex_forecast_cost_invst_currency
opex_forecast_cost_invst_currency
estimate_to_completion_invst_currency
capex_estimate_to_completion_invst_currency
opex_estimate_to_completion_invst_currency
forecast_cost_project_currency
capex_forecast_cost_project_currency
opex_forecast_cost_project_currency
estimate_to_completion_project_currency
capex_estimate_to_completion_project_currency
opex_estimate_to_completion_project_currency
cost_plan forecast_cost_default_currency
etc_cost_default_currency
forecast_cost_invst_currency
etc_cost_invst_currency
forecast_cost_project_currency
etc_cost_project_currency
cost_plan_breakdown forecast_cost
estimate_to_completion
  forecast_cost_project_currency
estimate_to_completion_project_currency
 
Diagnostic 5 - Identify Project Benefit Discrepancies
 
When To Use
  • Project benefit totals don't match benefit plan breakdown aggregates
  • Estimated or actual benefits not reflecting correctly on project entity
  • Inconsistent benefit data between task-type and requirement-type breakdowns
  • Multi-currency benefit conversion discrepancies
  • Benefit rollup errors between benefit plan breakdown and benefit plan tables
What It Checks
  1. Requirement type breakdowns vs Benefit Plan
  2. Requirement type breakdowns vs Project
  3. Task breakdowns vs Investment
  4. Task type breakdowns vs Benefit Plan
  5. Task type breakdowns vs Top Project
  6. Project vs Align Core Project (only if integrations are enabled)
Syncs the Following Fields
Table Default Currency Fields Investment Currency Fields Project Currency Fields
pm_project benefits
actual_benefits
planned_benefit_invst_currency
actual_benefit_invst_currency
planned_benefit_project_currency
actual_benefit_project_currency
benefit_plan base_estimated_benefit
actual_benefit
benefit_invst_currency
actual_benefit_invst_currency
benefit_project_currency
actual_benefit_project_currency
benefit_plan_breakdown base_estimated_benefit
actual_benefit
benefit_invst_currency
actual_benefit_invst_currency
benefit_project_currency
actual_benefit_project_currency
6. Feature Coverage Matrix
Capability Planned Cost Actual Cost Budget ETC/EAC Benefit
Diagnostic Detection Yes Yes Yes Yes Yes
Auto-Fix Script Yes Yes Yes Yes Yes
7. How to Use
Running Diagnostics via ADT
1
Navigate — Go to Project Diagnostics in the platform navigator, then select Project Financial Diagnostics
2
Run Diagnostic — Click Run Diagnostic. The scan iterates all matching projects and reports mismatches.
3
Run Fix — Click Run Fix Script to auto-repair all identified discrepancies.
4
Verify — Re-run the diagnostic to confirm all issues are resolved.
Tip: For large instances, use the project filter to scope the diagnostic to specific projects rather than scanning the entire instance.
Multi-Currency Support

Every diagnostic automatically checks up to three currency dimensions:

Default Currency

System/functional currency. Always validated.

Investment Currency

Validated when the project's investment currency differs from functional currency.

Project Currency

Validated when the project has a dedicated project currency set.

Availability: This feature will be available out-of-the-box starting with the Brazil release. Until then, an update set for this functionality is attached to this article for immediate use.

 

Author: Mohammad Asim Khan · Last Updated: July 2026
Version history
Last update:
yesterday
Updated by:
Contributors