SPM Financials: Project Financial Diagnostics
New article articles in ServiceNow Community
·
Jul 02, 2026
·
article
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 |
- 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_plan → cost_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_plan → benefit_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.
- 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. |
- 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
- Requirement type breakdowns vs Cost Plan — checks that the aggregated planned cost of requirement-type breakdowns equals the cost plan total
- Requirement type breakdowns vs Project — checks that the aggregated planned cost of requirement-type breakdowns equals the project's planned cost
- Requirement type breakdowns vs Investment — checks that the aggregated planned cost of requirement type breakdowns equals the investment's planned cost
- Task type breakdowns vs Cost Plan — checks that the aggregated planned cost of task-type breakdowns equals the cost plan total
- Task type breakdowns vs Top Project — checks that the aggregated planned cost of task-type breakdowns equals the top-level project's planned cost
- 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
- Requirement type breakdowns vs Cost Plan — checks that the aggregated actual cost of requirement-type breakdowns equals the cost plan's actual cost total
- Requirement type breakdowns vs Project — checks that the aggregated actual cost of requirement-type breakdowns equals the project's actual cost
- Requirement type breakdowns vs Expense Line — checks that the aggregated actual cost of requirement-type breakdowns equals the total processed expense line amounts
- Project vs Expense Line — checks that the project's actual cost equals the total processed expense line amounts
- 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
- Task type breakdowns vs Top Project — checks that the aggregated actual cost of task-type breakdowns equals the top-level project's actual cost
- Task breakdowns vs Expense Line (top project only) — checks that the aggregated actual cost of task-type breakdowns equals the processed expense line amounts
- 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_v2property 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
- Task type breakdowns vs Project
- Task type breakdowns vs Investment Budget table
- 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
- Cost plan forecast vs Project forecast (top project only)
- 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
- Requirement type breakdowns vs Benefit Plan
- Requirement type breakdowns vs Project
- Task breakdowns vs Investment
- Task type breakdowns vs Benefit Plan
- Task type breakdowns vs Top Project
- 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 |
- 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 |
- 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
https://www.servicenow.com/community/spm-articles/spm-financials-project-financial-diagnostics/ta-p/3567430