- Post History
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
yesterday - edited yesterday
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.
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.
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 |
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 |
Both cost_plan_breakdown and benefit_plan_breakdown have two breakdown types:
One row per cost/benefit plan per fiscal period. These are the granular financial buckets that store per-plan amounts.
Aggregated rollup rows at the project level per fiscal period. These power the Planning Grid UI and represent the project-level totals.
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. |
- 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
- 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
| 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 |
- 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
- 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
| 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 |
- 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
- Task type breakdowns vs Project
- Task type breakdowns vs Investment Budget table
- Task type breakdowns vs Investment
| 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 |
— |
- 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
- Cost plan forecast vs Project forecast (top project only)
- Cost plan ETC vs Project ETC (top project only)
| 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 |
- 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
- 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)
| 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 |
| Capability | Planned Cost | Actual Cost | Budget | ETC/EAC | Benefit |
|---|---|---|---|---|---|
| Diagnostic Detection | Yes | Yes | Yes | Yes | Yes |
| Auto-Fix Script | Yes | Yes | Yes | Yes | Yes |
Every diagnostic automatically checks up to three currency dimensions:
System/functional currency. Always validated.
Validated when the project's investment currency differs from functional currency.
Validated when the project has a dedicated project currency set.